Arduino для начинающих. Урок 6. Подключение пьезоэлемента
Продолжаем серию уроков “Arduino для начинающих”. Сегодня собираем модель с пьезоэлементом (динамиком), которые используются в робототехники для управления звуками, издаваемыми роботом. В статье вы найдете видео-инструкцию, листинг программы, схему подключения и необходимые компоненты.
Пьезоэлемент — электромеханический преобразователь, одним из разновидностей которого является пьезоизлучатель звука, который также называют пьезодинамиком, просто звонком или английским buzzer. Пьезодинамик переводит электричеcкое напряжение в колебание мембраны. Эти колебания и создают звук (звуковую волну).
В нашей модели частоту звука можно регулировать, задавая соответствующие параметры в программе. Такая модель может быть встроена в робота, который будет издавать звуки.
Видео-инструкция сборки модели:
Для сборки модели с пьезоэлементом нам потребуется:
- плата Arduino
- провода “папа-папа”
- пьезоэлемент
- программа Arduino IDE, которую можно скачать с сайта Arduino.

Что потребуется для подключения динамика на Arduino?
Схема подключения модели Arduino с пьезоэлементом:

Схема подключения пьезоэлемента (динамика) на Arduino
Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):
int p = 3; //объявляем переменную с номером пина, на который мы
//подключили пьезоэлемент
void setup() //процедура setup
{
pinMode(p, OUTPUT); //объявляем пин как выход
}
void loop() //процедура loop
{
tone (p, 500); //включаем на 500 Гц
delay(100); //ждем 100 Мс
tone(p, 1000); //включаем на 1000 Гц
delay(100); //ждем 100 Мс
}
Так выглядит собранная модель Arduino с пьезоэлементом:

Собранная модель подключения динамика на Arduino
После сборки модели попробуйте поменять в программе частоты звука и посмотрите, как изменится работа модели.
Смотрите также:
Учебный курс «Arduino для начинающих»: главная страница.
Посты по урокам:
- Первый урок: Светодиод
- Второй урок: Кнопка
- Третий урок: Потенциометр
- Четвертый урок: Сервопривод
- Пятый урок: Трехцветный светодиод
- Шестой урок: Пьезоэлемент
- Седьмой урок: Фоторезистор
- Восьмой урок: Датчика движения (PIR) и E-mail
- Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22
Все посты сайта «Занимательная робототехника» по тегу Arduino.
Наш YouTube канал, где публикуются видео-уроки.
Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.
Автор: Александр Гагарин.
Oswalt
14.02.2015
У вас опечатка: «Для сборки модели с сервоприводом нам потребуется:». Статья о подключении пьезоэлемента.
Занимательная робототехника
14.02.2015
Спасибо! Поправили.
Валерий
21.04.2015
Как вместо частоты звука (tone (p, 500);) поставить паузу?
Спасибо
Занимательная робототехника
21.04.2015
Можно использовать команду noTone(p), чтобы звучание прекратилось. Также можно использовать команду tone(p,500,1000) чтобы включить пьезоэлемент на 500 Гц на 1000 миллисекунд (1 секунда)
gammaker
03.08.2015
Пьезоэлемент можно вообще напрямую к плате подключить, зачем breadboard?
Одну ножку вставил в выход 11, другую в GND рядом. Ну и соответственно в программе 3 заменил на 11. Работает.
Занимательная робототехника
03.08.2015
Любые компоненты, которые можно подключить к ардуино, можно подключать напрямую к плате. Бредбоард нужен для быстрой сборки и разборки моделей без пайки. Конечно, в отдельных случаях может получится и так, что бредбоард только усложняет.
nikita
23.08.2015
здравствуйте я пишу noTone(p) и у меня не получаеться подскажите
Никита
30.07.2016
у меня Arduino Due и когда я загружаю программу мне пишет ‘tone’ was not declared in this scope
Никита
01.08.2016
добавьте программу для Arduino Due потому что сегодня обнаружилось что функция tone не работает на Arduino Due
Глеб
14.11.2016
Здравствуйте, у меня такой вопрос. как сделать чтобы звук возрастал?
Женя
27.11.2016
Сделал на основе этого скетча код который запускает пьез элемент когда почва сухая.
int p = 3;
int sensorPin=A0;
int sensorValue=0;
void setup()//процедура setup
{
Serial.begin(1200);
pinMode(p, OUTPUT);//объявляем пин как выход
}
void loop()//процедура loop
{
sensorValue=analogRead(sensorPin);
if (sensorValue>500)
{
delay(1000);
Serial.println(«Poshwa Suxaya»);
tone (p,500);//включаем на 500 Гц
delay(100); //ждем 100 Мс
tone(p,1000);//включаем на 1000 Гц
delay(100);//ждем 100 Мс
}
else
{
Serial.println(«Poshwa WLAZNAYA»);
delay(1000);
noTone(p);
}
delay(100);
}
Александр
10.01.2017
Почему используется третий цифровой выход? Из-за аппаратного PWM? Почему об этом ни слова в уроке? Это очень важно! А какой таймер при этом задействуется? Ведь, допустим, я все таймеры уже использую по другому назначению (сброс по совпадению) и параметры их изменены. Или функция Tone не использует таймеры? А выход/вход обратнов функцию из обработчика прерывания имеются?
Максим
23.01.2017
На фото не пьезоэлемент, а электродинамическая головка.

Вот пьезоэлемент:
amator
01.04.2017
А как сделать чтоб пьезоэлемент пропиликал пару раз в момент включения ардуино и больше не пиликал, имею ввиду как задать программу без loop в таком случае? То есть мне надо чтоб пиликанье просто означало факт включения
Ольга
01.04.2017
Программа для ардуино всегда имеет вид цикла, однако можно включать пьезоэлемент только при выполнении какого-либо условия. К примеру, если в цикл добавить счетчик — создать новую переменную i и прибавлять к ней в цикле 1, а команду пищать поместить в условие if — например, пищим когда i меньше 5 , а больше если — то соответственно не пищим.
Ava
08.04.2017
Можно поместить код в setup .Он выполняться один раз.
Артем
10.12.2018
Нужно подключить к pin 13, при включении Arduino- «Пьезоэлемент» пропищит несколько раз, соответственно просигнализирует о начале работы.
Иван
07.04.2017
В коде некрасиво указан номер пина с пьезоэлементом. Красивее и компактней было бы использовать #define p 3 вместо int p = 3.
Евгений
02.08.2017
Забыли include библиотеки для tone
Нужен токоограничивающий резистор от пина до питания, Иначе линия превысит ток 40мА и сгорит
AREF зря используете, вместо него нужно 5V, иначе не будет работать аналогово-цифровой преобразователь
Vasia
14.04.2018
Здраствуйте написал код для ик приемника. При отправки сигнала пьезо будет жужать один раз.Но код не компелируется. В чем причина сей беды.
#include «IRremote.h»
IRrecv irrecv(12); // указываем вывод, к которому подключен приемник
decode_results results;
int p=13;
int c=10;
void setup() {
pinMode(p, OUTPUT);
pinMode(c, OUTPUT);
irrecv.enableIRIn(); // запускаем прием
}
void loop() {
if ( irrecv.decode( &results )) { // если данные пришли
switch ( results.value ) {
case 0x1FE50AF:
tone(c, 500);
digitalWrite(c, HIGH);
break;
case 0x1FEE01F:
digitalWrite( p, LOW );
noTone(c);
break;
}
irrecv.resume(); // принимаем следующую команду
}
}
Макс
20.05.2019
Можно сделать так что бы пьезоэлемент работал с помощью кнопки?
Имя (обязательно)
25.10.2019
Необходима консультация.