Рейтинг@Mail.ru
Пьезоизлучатель
Пьезоизлучатель

Как подключить пьезоизлучатель (пьезопищалку) к Arduino

2 comments Arduino
Print Friendly, PDF & Email

Генерировать звуки с помощью Ардуино можно разными способами. Самый простой из них – подключить к плате пьезоизлучатель (или, как его ещё называют, «пьезопищалку»). Но как всегда, есть тут свои нюансы. В общем, давайте подключим к Arduino пьезопищалку и будем разбираться.

Нам понадобится:

Инструкция по подключению пьезоизлучателя к Arduino

1 Схема подключения пьезоизлучателяк Arduino

Пьезоизлучатель, или пьезоэлектрический излучатель, или «пьезопищалка» – это электроакустическое устройство воспроизведения звука, использующие обратный пьезоэлектрический эффект. Принцип действия его основан на том, что под действием электрического поля возникает механическое движение мембраны, которое и вызывает слышимые нами звуковые волны. Обычно такие излучатели звука устанавливают в бытовую электронную аппаратуру в качестве звуковых сигнализаторов, в корпуса настольных персональных компьютеров, в телефоны, в игрушки, в громкоговорители и много куда ещё.

Пьезоизлучатель имеет 2 вывода, причём полярность имеет значение. Поэтому чёрный вывод подключаем к земле (GND), а красный – к любому цифровому пину с функцией ШИМ (PWM). В данном примере положительный вывод излучателя подключён к выводу "D3".

Схема подключения пьезоизлучателя к Arduino
Схема подключения пьезоизлучателя к Arduino и схема, собранная на макетной плате

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 мс частота увеличивается, что мы и слышим:

Временная диаграмма сигнала функции tone()
Временная диаграмма сигнала функции tone()

Как видите, с помощью пьезоизлучателя из Ардуино можно извлекать звуки. Можно даже написать несложную музыкальную композицию, задав ноты соответствующими частотами, а также определив длительность звучания каждой ноты посредством функции delay().

Обратите внимание, что если к Ардуино подключены несколько пьезоизлучателей, то единовременно будет работать только один. Чтобы включить излучатель на другом выводе, нужно прервать звук на текущем, вызвав функцию noTone().

Важный момент: функция tone() накладывается на ШИМ сигнал на "3" и "11" выводах Arduino. Т.е., вызванная, например, для пина "5", функция tone() может мешать работе выводов "3" и "11". Имейте это в виду, когда будете проектировать свои устройства.

Демонстрация работы пьезоизлучателя и Arduino
Last modified onСреда, 16 Январь 2019 20:37 Read 59606 times
Ключевые слова: :

Поблагодарить автора:

Поделиться

Print Friendly, PDF & Email

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
    andy Четверг, 28 Июнь 2018 20:21 Ссылка на комментарий

    Может, дело в том, что звук такой частоты человеческое ухо не воспринимает? Мы же слышим от 20 Гц до 20 кГц.

  1. Arduino это...
  2. Arduino это...
  3. Arduino это...
Отличный способ начать знакомство с электроникой, микроконтроллерами и программированием!
Замечательное средство для создания собственных электронных устройств, которые пригодятся в быту или для развлечения!
Уникальный конструктор, для которого разработаны десятки совместимых датчиков и модулей!
next
prev