До сих пор все наши проекты были визуальными. Давайте сделаем музыкальную паузу. В этом проекте вы примените пьезоизлучатель (зуммер) для воспроизведения простых мелодий!
Потребуется только Плата Arduino и пьезоизлучатель
Проигрыватель Arduino
Наш проигрыватель Arduino включает пьезоизлучатель для генерации сигналов определенной частоты, напоминающих ноты. Вы также воспользуетесь средой разработки Arduino, чтобы указать порядок исполнения, скорость и длительность звучания нот для воспроизведения определенной мелодии.
Пьезоизлучатели дешевы в производстве и часто используются в детских интерактивных игрушках. Пьезоэлемент без пластикового корпуса выглядит как позолоченный металлический диск с подключенными положительным (обычно красным) и отрицательным (черным) проводами. Он способен издавать только пищащие звуки при подаче на него напряжения. Можно имитировать знакомые ноты, заставив Пьезоэлемент вибрировать сотни раз в секунду на определенной частоте, но сначала нам нужно знать частоту тональных звуков, которые нужно воспроизвести. В табл. 7.0 перечислены ноты и соответствующие частоты. Период — это продолжительность времени в микросекундах, в течение которого генерируются колебания определенной частоты. Мы вдвое уменьшили это число, чтобы получить значения переменной timeHigh, которые используются в коде для имитации ноты.

Код передает на пьезоизлучатель прямоугольную волну соответствующей частоты, пьезоизлучатель же, генерирует соответствующий тон (см. проект 2 для получения дополнительной информации о форме сигнала). Значения переменной timeHigh (тоны) рассчитываются по следующей формуле:
timeHigh = период/2 = 1/(2 * toneFrequency)
Цепь этого проекта очень проста и включает только две перемычки, подключенные к плате Arduino.
Сборка
1. Подключите черный провод пьезоизлучателя непосредственно к контакту GND платы Arduino, а красный провод — к контакту 9 платы Arduino.

2. Убедитесь, что ваша цепь соответствует схеме на рис. 7.1, а затем загрузите в память Arduino код скетча, приведенный в разделе «Скетч» далее в этом проекте.

Скетч
Начнем с простой мелодии. В строке 1 мы сообщаем среде разработки Arduino, что мелодия будет состоять из 15 нот. Затем мы сохраняем ноты мелодии в символьном массиве в виде текстовой строки в том порядке, в котором они должны проигрываться. После этого сохраняем значение длительности звучания каждой ноты в целочисленном массиве. Если вы хотите изменить мелодию, можете поменять ноты в массиве в строке 2 и количество тактов, в течение которых звучит каждая нота, в строке 3. И наконец, в строке 4 мы определяем темп, в котором будет проигрываться мелодия. Итак, что у нас получилось?
int speakerPin = 9; // Контакт, к которому подключен пьезоизлучатель int length = 15; // Число нот char notes[] = "ccggaagffeeddc "; // Пробел - пауза int beats [ ] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; int tempo = 300; void playTone(int tone, int duration) { for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(speakerPin, HIGH); delayMicroseconds(tone) ; digitalWrite(speakerPin, LOW) ; delayMicroseconds(tone) ; } } // Присвоение переменной timeHigh значения определенной ноты void playNote(char note, int duration) { char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; for (int i = 0; i < 8; i++) { // Воспроизведение тона, соответствующего ноте if (names[i] == note) { playTone(tones[i], duration); } } } void setup() { pinMode(speakerPin, OUTPUT); // Перевести speakerPin в режим вывода } // Воспроизведение тона void loop () { for (int i = 0; i < length; i++) { if (notes [ i] == ' ') { delay(beats[i] * tempo); // Rest } else { playNote(notes[i], beats[i] * tempo); } delay(tempo /2); // Пауза между нотами } }
Так же можно просто вставить в среду разработки приведеные ниже скетчи и послушать интересные композиции:
Теги: