С помощью модуля зуммера можно генерировать звуковые сигналы и даже простые мелодии. Принцип действия зуммера основан на пьезоэлектрическом эффекте, согласно которому при подаче электричества на зуммер он начинает деформироваться. При этом производятся удары о металлическую пластинку, которая и издает звук определенной частоты.
Существуют активные и пассивные зуммеры. Главное различие их состоит в том, что активный можно только включить и выключить, подав напряжение на его контакты. Для пассивного зуммера (рис. M1.1) кроме питания требуется источник, который задаст параметры звукового сигнала. В качестве такого источника может выступать плата Ардуино. Для генерации мелодий следует подключать цифровой пин зуммера к пину Arduino, который поддерживает ШИМ (~D5, ~D6, ~D9, ~D10, ~D11).
Внешний вид, назначение контактов

Рис. M1.1. Пассивный зуммер
Основные характеристики
| Наименование | Значение |
| Напряжение, В | 5 |
| Максимальный ток, мА | 32 |
| Минимальный уровень звука на расстоянии 10 см, дБ | 85 |
| Диапазон частот, Гц | 2300 ± 300 |
Схема подключения

Рис. M1.2. Подключение зуммера
Программный код
Листинг M1.1. Подключение зуммера
#define SoundPin 5 // пин пьезоизлучателя
int DelaySound = 1000; //Пауза. 1000 миллисекунд=1 секунда
void setup(){
}
void loop(){
tone(SoundPin, 1915); //Воспроизводим сигнал с частотой тона
//1/(2*1915)=261 Гц (нота До)
delay(DelaySound); //Длительность воспроизведения сигнала 1 с
tone(SoundPin, 1700);
delay(DelaySound);
tone(SoundPin, 1519);
delay(DelaySound);
tone(SoundPin, 1432);
delay(DelaySound);
tone(SoundPin, 1275);
delay(DelaySound);
tone(SoundPin, 1136);
delay(DelaySound);
tone(SoundPin, 1014);
delay(DelaySound);
noTone(7); // Выключаем звук
}
Пояснение
Функция tone() генерирует на порту входа/выхода сигнал — прямоугольную «волну» заданной частоты и с 50%-ным рабочим циклом. Длительность может быть задана параметром delay, в противном случае сигнал генерируется, пока не будет вызвана функция noTone().
Вы можете использовать активный пьезоэлектрический зуммер (пьезоэлемент) для воспроизведения различных мелодий. При этом на него следует подавать сигнал определенной частоты и длительности.
Примечание
Подробную информацию о соответствии частоты сигнала воспроизводимым музыкальным нотам, а также примеры программ, можно найти на сайте разработчика Arduino: http://www.arduino.cc/en/Tutorial/Melody.
Добавив в схему подключения пьезоэлемента несколько кнопок, можно сделать небольшой электронно-клавишный инструмент, используя несколько пьезоэлементов — собрать целый оркестр, а с помощью фоторезистора — создать «световой терменвокс».
Световой терменвокс
Соберем простейший имитатор музыкального инструмента терменвокса (рис. M1.3). Только играя на нашем терменвоксе, исполнитель будет подносить руки не к антенне (как при игре на классическом терменвоксе), а к фоторезистору.
Примечание
Cопротивление фоторезисторов уменьшается под воздействием света и увеличивается в темноте. Фоторезисторы просты в использовании, но слишком медленно реагируют на изменение уровня освещенности и имеют весьма низкую точность. Как правило, сопротивление фоторезисторов может варьироваться от 50 Ом при дневном освещении до более чем 10 МОм в темноте.
Схема подключения

Рис. M1.3. Световой терменвокс
Программный код
Листинг M1.2. Световой терменвокс
#define buzzerPin 5 //номер пина зуммера
#define photoPin A3 //номер пина фоторезистора
int aVal; //Значение на фоторезисторе
int sMax=1023; //максимальное значение фоторезистора
int buzzerFreq; //частота звука
const long BUZZ_FREQ_MAX = 2500; //задаем макс. частоту излучения
void setup(){
// Объявляем пин, к которому подключен зуммер как выход
pinMode(buzzerPin,OUTPUT);
Serial.begin(9600);
}
void loop(){
aVal=analogRead(photoPin); //считываем значение с фоторезистора
Serial.print("aVal:");
Serial.println(aVal);
// задаем частоту излучения // пьезоизлучателя
buzzerFreq = (aVal * BUZZ_FREQ_MAX)/sMax;
buzz(buzzerPin, buzzerFreq, 10);
}
//подпрограмма генерации звука buzz
void buzz(int targetPin, long frequency, long length) {
long delayValue = 1000000/frequency/2;
long numCycles = frequency * length/ 1000;
for (long i=0; i < numCycles; i++){
digitalWrite(targetPin,HIGH);
delayMicroseconds(delayValue);
digitalWrite(targetPin,LOW);
delayMicroseconds(delayValue);
}
}
Все — простейший терменвокс готов! Теперь попробуйте, изменяя освещенность фоторезистора, создать звуковую композицию.



