До сих пор все наши проекты были визуальными. Давайте сделаем музыкальную паузу. В этом проекте вы примените пьезоизлучатель (зуммер) для воспроизведения простых мелодий!
Потребуется только Плата Arduino и пьезоизлучатель
Проигрыватель Arduino
Наш проигрыватель Arduino включает пьезоизлучатель для генерации сигналов определенной частоты, напоминающих ноты. Вы также воспользуетесь средой разработки Arduino, чтобы указать порядок исполнения, скорость и длительность звучания нот для воспроизведения определенной мелодии.
Пьезоизлучатели дешевы в производстве и часто используются в детских интерактивных игрушках. Пьезоэлемент без пластикового корпуса выглядит как позолоченный металлический диск с подключенными положительным (обычно красным) и отрицательным (черным) проводами. Он способен издавать только пищащие звуки при подаче на него напряжения. Можно имитировать знакомые ноты, заставив Пьезоэлемент вибрировать сотни раз в секунду на определенной частоте, но сначала нам нужно знать частоту тональных звуков, которые нужно воспроизвести. В табл. 7.0 перечислены ноты и соответствующие частоты. Период — это продолжительность времени в микросекундах, в течение которого генерируются колебания определенной частоты. Мы вдвое уменьшили это число, чтобы получить значения переменной timeHigh, которые используются в коде для имитации ноты.
Таблица 7.0: Ноты и их частотыКод передает на пьезоизлучатель прямоугольную волну соответствующей частоты, пьезоизлучатель же, генерирует соответствующий тон (см. проект 2 для получения дополнительной информации о форме сигнала). Значения переменной timeHigh (тоны) рассчитываются по следующей формуле:
timeHigh = период/2 = 1/(2 * toneFrequency)
Цепь этого проекта очень проста и включает только две перемычки, подключенные к плате Arduino.
Сборка
1. Подключите черный провод пьезоизлучателя непосредственно к контакту GND платы Arduino, а красный провод — к контакту 9 платы Arduino.
Подключение2. Убедитесь, что ваша цепь соответствует схеме на рис. 7.1, а затем загрузите в память Arduino код скетча, приведенный в разделе «Скетч» далее в этом проекте.
Рисунок 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); // Пауза между нотами
}
}
Так же можно просто вставить в среду разработки приведеные ниже скетчи и послушать интересные композиции:
Теги: