С помощью модуля зуммера можно генерировать звуковые сигналы и даже простые мелодии. Принцип действия зуммера основан на пьезоэлектрическом эффекте, согласно которому при подаче электричества на зуммер он начинает деформироваться. При этом производятся удары о металлическую пластинку, которая и издает звук определенной частоты.
Существуют активные и пассивные зуммеры. Главное различие их состоит в том, что активный можно только включить и выключить, подав напряжение на его контакты. Для пассивного зуммера (рис. M1.1) кроме питания требуется источник, который задаст параметры звукового сигнала. В качестве такого источника может выступать плата Ардуино. Для генерации мелодий следует подключать цифровой пин зуммера к пину Arduino, который поддерживает ШИМ (~D5, ~D6, ~D9, ~D10, ~D11).
Внешний вид, назначение контактов
Рис. M1.1. Пассивный зуммер
Основные характеристики
Наименование | Значение |
Напряжение, В | 5 |
Максимальный ток, мА | 32 |
Минимальный уровень звука на расстоянии 10 см, дБ | 85 |
Диапазон частот, Гц | 2300 ± 300 |
Схема подключения
Рис. M1.2. Подключение зуммера
Программный код
Листинг M1.1. Подключение зуммера
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #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. Световой терменвокс
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #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); } } |
Все — простейший терменвокс готов! Теперь попробуйте, изменяя освещенность фоторезистора, создать звуковую композицию.