Arduino UNO урок 7 — Пьезоизлучатель

В данном уроке рассмотрим работу с пьезоизлучателем для генерирования звуков. Мы будем использовать пьезодатчик (Piezo Transducer), который позволяет генерировать звуковые волны в диапазоне частот 20 Гц — 20 000 Гц. Не путайте с пьезобиперами и т.п., которые генерируют звук лишь определенной частоты при подаче на них постоянного напряжения.

Мы будем использовать ШИМ-генератор Arduino для генерирования звука на пьезоизлучателе.

Для данного урока, мы не будем использовать стандартную функцию tone() по нескольким причинам:
— может использоваться лишь на одной ноге Arduino в одно время;
— использование tone() мешает использовать ШИМ на ногах 3 и 11

Используйте данную функцию, когда вам необходима какая-либо частота и не нужен ШИМ на 3 и 11 ножках Arduino.

ШИМ Arduino запускается на частоте 500 Гц, это вполне хороший звуковой тон для нашего примера.

Для работы схемы подсоедините пьезодатчик к ноге 9 и 0V Arduino.

В скетче, показанном ниже, мы сделали альтернативную функцию beep(), которая посылает ШИМ-сигнал на пьезо, далее идет небольшая задержка, далее сигнал с пьезо снимается и опять задержка. В результате чего издается непродолжительный звук. Переменная delayms используется в функции для задания времени звучания в миллисекундах. Продолжительность ШИМ (20 в нашем примере) не очень важна.

Скетч ниже, при запуске программы издает 3 непродолжительных, а далее один продолжительный звуковой сигнал.

/*
Пьезо

Данный пример показывает управление Пьезо на 9 ножке Arduino,
используя функцию analogWrite()

При запуске издается 3 коротких звуковых сигнала, далее пауза в 1 сек,
а далее продолжительный звуковой сигнал

*/

void setup() {
pinMode(9, OUTPUT); // устанавливаем 9 ногу как выход
beep(50);
beep(50);
beep(50);
delay(1000);
}

void loop() {
beep(200);
}

void beep(unsigned char delayms){
analogWrite(9, 20); // значение должно находится между 0 и 255
// поэкспериментируйте для получения хорошего тона
delay(delayms); // пауза delayms мс
analogWrite(9, 0); // 0 — выключаем пьезо
delay(delayms); // пауза delayms мс
}

Оригинал статьи

Добавить комментарий

Ваш адрес email не будет опубликован.