● Проект 10: Управляем пьезоизлучателем: меняем тон, длительность, играем музыку

Опубликовано: 23.04.2018
В этом эксперименте мы произведем генерацию звуков на Arduino c помощью пьзоизлучателя.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
пьезоизлучатель;
резистор 100 Ом;
провода папа-папа.

Самым простым вариантом генерации звука является использование пьезоизлучателя. Пьезокерамические излучатели (пьезоизлучатели) – электроакустические устройства воспроизведения звука, использующие обратный пьезоэлектрический эффект – возникновение механических деформаций под действием электрического поля. Пьезоизлучатели бывают двух типов – со встроенным генератором и без. Пьезоизлучатели со встроенным генератором излучают фиксированный тональный сигнал сразу после подачи на них номинального напряжения. Они не могут воспроизводить произвольного сигнала. Их обычно используют для простого звукового оповещения. Если требуется проиграть мелодию, то используют пьезоизлучатели без встроенного генератора и генерируют сигнал отдельно. В эксперименте мы используем пьезоизлучатель без встроенного генератора. Схема подключения пьезоизлучателя показана на рис. 10.1.

Arduino проект www.arduino-kit.ru
Рис. 10.1. Схема подключения пьезоизлучателя к Arduino

Приступим к написанию скетча. Для воспроизведения мелодии необходимо подавать последовательно звуки определенной частоты и длительности. Для генерации звуков определенной частоты и длительности будем использовать Arduino-функцию tone(): one(pin,frequency,duration); Функция tone() генерирует на выводе прямоугольный сигнал заданной частоты (с коэффициентом заполнения 50%). Функция также позволяет задавать длительность сигнала. Если длительность сигнала не указана, он будет генерироваться до тех пор, пока не будет вызвана функция noTone(). Значения частот для нот первой и второй октав представлены в табл. 10.1.


Составим мелодию понотно, занесем в массив melody[], список длительностей нот занесем в массив duration[].

Рис. 10.2. Фрагмент Имперского марша

Данные с обозначением нот занесем в массив notes[], а данные с частотами для соответствующих нот – в массив frequency[]. Содержимое скетча представлено в листинге 10.1.

// МЕЛОДИЯ – массив нот и массив длительностей
char melody[]={'G','G','G','E','H',
'G','E','H','G','*',
'd','d','d','e','H',
'T','E','H','F',
'g','G','G','g','t','e',
's','s','s','*','U','r','c','B',
'H','A','H','*','E','T','E','F',
'H','G','H','d',
'g','G','G','g','t','f',
's','s','s','*','U','r','c','B',
'H','A','H','*','E','T','E','H',
'G','E','H','G',
'%','%'};
int bb[]={8,8,8,6,2,
8,6,2,8,8,
8,8,8,6,2,
8,6,2,16,
8,6,2,8,6,2,
2,2,4,4,2,8,6,2,
2,2,4,4,2,8,6,2,
8,6,2,16,
8,6,2,8,6,2,
2,2,4,4,2,8,6,2,
2,2,4,4,2,8,6,2,
8,6,2,16,
64,64};
// подключить динамик к pin 8
int speakerPin = 8;
// темп воспроизведения, ноты, длительности
int tempo,notes,beats;
// процедура проигрыша ноты
void playNote(char note, int duration)
{
// массив для наименований нот в пределах двух октав
char names[]={'c','r','d','s','e','f','t','g','u','a','b',
'h','C','R','D','S','E','F','T','G','U','A','B', 'H','F'};
// массив частот нот
int tones[]={261,277,293,311,329,349,370,392,415,440,466,
494, 523,554,587,622,659,698,740,784,830,880,932,988};
// проиграть тон, соответствующий ноте
for (int i = 0; i < sizeof(tones); i++)
{
if (names[i] == note)
{
tone(speakerPin,tones[i],duration);
}
}
}
void setup()
{
pinMode(speakerPin, OUTPUT);
tempo=50; // скорость воспроизведения мелодии
}
void loop()
{
for(int i=0;i<sizeof(melody);i++)
{
notes=melody[i];
beats=bb[i];
if (notes == '*')
tone(speakerPin,0, beats*tempo); // пауза
else
playNote(notes, beats*tempo);
// пауза между нотами
delay(beats*tempo+tempo);
}
}

Порядок подключения:

1. Подключаем пьезоэлемент к плате Arduinoпо по схеме на рис. 10.1.
2. Загружаем в плату Arduino скетч из листинга 10.1.
3. После загрузки скетча слушаем мелодию на монтажной плате (рис. 10.3).

Листинги программ скачать

Главное меню

Каталог

Полезные ссылки

Цена
от
до