Как подключить пьезоизлучатель (пьезопищалку) к Arduino
Генерировать звуки с помощью Ардуино можно разными способами. Самый простой из них – подключить к плате пьезоизлучатель (или, как его ещё называют, «пьезопищалку»). Но как всегда, есть тут свои нюансы. В общем, давайте подключим к Arduino пьезопищалку и будем разбираться.
Нам понадобится:
- Arduino (или совместимая плата);
- компьютер с Arduino IDE;
- пьезоизлучатель (пьезопищалка), приобрести можно здесь или здесь;
- соединительные провода;
- макетная плата.
Инструкция по подключению пьезоизлучателя к Arduino
1 Схема подключения пьезоизлучателяк Arduino
Пьезоизлучатель, или пьезоэлектрический излучатель, или «пьезопищалка» – это электроакустическое устройство воспроизведения звука, использующие обратный пьезоэлектрический эффект. Принцип действия его основан на том, что под действием электрического поля возникает механическое движение мембраны, которое и вызывает слышимые нами звуковые волны. Обычно такие излучатели звука устанавливают в бытовую электронную аппаратуру в качестве звуковых сигнализаторов, в корпуса настольных персональных компьютеров, в телефоны, в игрушки, в громкоговорители и много куда ещё.
Пьезоизлучатель имеет 2 вывода, причём полярность имеет значение. Поэтому чёрный вывод подключаем к земле (GND), а красный – к любому цифровому пину с функцией ШИМ (PWM). В данном примере положительный вывод излучателя подключён к выводу "D3".
2 Извлекаем звук из пьезоизлучателяс помощью функции analogWrite()
Пьезопищалку можно задействовать разными способами. Самый простой из них – это использовать функцию analogWrite(). Пример скетча – во врезке. Данный скетч попеременно включает и выключает звук с частотой 1 раз в 2 секунды.
/* Объявляем переменную с номером вывода, к которому подключён пьезоэлемент: */ int soundPin = 3; void setup() { // ставим пин "3" в режим работы "Выход": pinMode(soundPin, OUTPUT); } void loop() { analogWrite(soundPin, 50); // включаем пьезоизлучатель delay(1000); // на 1000 мс (1 сек), analogWrite(soundPin, 0); // выключаем звук delay(1000); // на 1 сек. }
Задаём номер пина, определяем его как выход. Функция analogWrite() принимает в качестве аргументов номер вывода и уровень, который может быть от 0 до 255, т.к. ШИМ-выводы Ардуино имеют 8-битный ЦАП. Это значение будет изменять громкость пьезопищалки в небольших пределах. Чтобы выключить пьезопищалку, нужно послать в порт значение "0".
Используя функцию analogWrite(), нельзя изменять тональность звука, к сожалению. Пьезоизлучатель всегда будет звучать на частоте примерно 980 Гц, что соответствует частоте работы выводов с широтно-импульсной модуляцией сигнала (ШИМ) на платах Arduino UNO и подобных.
3 Извлекаем звук из пьезоизлучателяс помощью функции tone()
Но частоту звучания можно менять по-другому. Для этого извлечём звук из пьезоизлучателя посредством встроенной функции tone(). Пример простейшего скетча приведён на врезке.
int soundPin = 3; /* объявляем переменную с номером пина, на который мы подключили пьезоэлемент */ void setup() { pinMode(soundPin, OUTPUT); //объявляем пин 3 как выход. Serial.begin(9600); // будем выводить в порт текущую частоту } void loop() { for (int i=20; i<10000; i+=50) { // пройдёмся циклом по диапазону частот tone(soundPin, i); delay(100); Serial.println(i); } noTone(soundPin); // сделаем паузу delay(1000); // в 1 сек }
Функция tone() принимает в качестве аргументов номер вывода Arduino и звуковую частоту. Нижний предел частоты – 31 Гц, верхний предел ограничен параметрами пьезоизлучателя и человеческого слуха. Чтобы выключить звук, посылаем в порт команду noTone().
А вот так будет выглядеть временная диаграмма сигнала, который генерирует функция tone(). Видно, что каждые 100 мс частота увеличивается, что мы и слышим:
Как видите, с помощью пьезоизлучателя из Ардуино можно извлекать звуки. Можно даже написать несложную музыкальную композицию, задав ноты соответствующими частотами, а также определив длительность звучания каждой ноты посредством функции delay().
Обратите внимание, что если к Ардуино подключены несколько пьезоизлучателей, то единовременно будет работать только один. Чтобы включить излучатель на другом выводе, нужно прервать звук на текущем, вызвав функцию noTone().
Важный момент: функция tone() накладывается на ШИМ сигнал на "3" и "11" выводах Arduino. Т.е., вызванная, например, для пина "5", функция tone() может мешать работе выводов "3" и "11". Имейте это в виду, когда будете проектировать свои устройства.
Поблагодарить автора:
Поделиться
Related items
2 comments
-
Василий Пименов Понедельник, 28 May 2018 17:00 Ссылка на комментарий
Ладно,
А теперь я подключаю пьезоэлемент, и врубаю на него на 1 минуту звук с частотой 1.7 МГц
потом минуту отдыхаем.
int soundPin = 3; /* объявляем переменную с номером пина,
на который мы подключили пьезоэлемент */
void setup() {
pinMode(soundPin, OUTPUT); //объявляем пин 3 как выход.
}
void loop() {
tone(soundPin, 1700000); // включаем звук частотой 1,7 МГц
delay(60000); // на 1мин
noTone(soundPin); // выключаем звук
delay(60000); // ждём 1 мин.
}
Странно, но ничего не происходит.
Угу, оказыается пьезоэлементу нужно питание 24В, как с этим? -
andy Четверг, 28 Июнь 2018 20:21 Ссылка на комментарий
Может, дело в том, что звук такой частоты человеческое ухо не воспринимает? Мы же слышим от 20 Гц до 20 кГц.