Пищалка

Что понадобится

    — микроконтроллер Arduino Uno
    — четыре светодиода любых цветов
    — четыре сопротивления на 220 Ом
    — пьезопищалка
    — потенциометр
    — макетная плата
    — соединительные провода «папа-папа»

Микроконтроллер Arduino Uno рассчитан на работу с повторяющимися процессами. Основной код программы записывается в цикл loop: когда контроллер выполняет последнюю команду, он возвращается к первой строке цикла и начинает повторять программу заново. Это отлично подойдёт для создания метронома — прибора, который отсчитыват равные интервалы времени.

Метроном я соберу на макетной плате — мне не придётся паять детали, а если где-нибудь ошибусь, смогу исправится за несколько секунд.

Примеры мелодий для зуммера

Для того, чтобы разнообразить работу с новым проектом, добавить в него «развлекательный» элемент, пользователи придумали задавать определённый набор частот звука, делая его созвучным некоторым знаменитым композициям из песен и кинофильмов. Разнообразные скетчи для таких мелодий можно найти в интернете. Приведем пример мелодии для пьезопищалки для одного из самых узнаваемых треков «nokia tune»из ставших легендарными мобильников Nokia. Файл pitches.h можно сделать самим, скопировав его содержимое так, как указано в этой статье на официальном сайте.

При написании собственных мелодий пригодится знание частот нот и длительностей интервалов, используемых в стандартной нотной записи.

Устройство пьезоизлучателя (пьезодинамика)

Благодаря низкой стоимости и малого потребления энергии, по сравнению с динамиками, пьезокерамические излучатели звука (пьезодинамики) — акустические устройства для воспроизведения звука, использующие пьезоэлектрический эффект. Пьезоизлучатели получили широкое распространение: их используют в различных устройствах — будильниках, телефонах, игрушках и в другой технике.

Фото. Устройство пьезоизлучателя (пьезопищалки) и динамика

По сравнению с традиционными электромагнитными преобразователями звука, пьезоизлучатели имеют простую конструкцию. Пьезокерамический излучатель состоит из металлической пластины, на которую нанесена пьезоэлектрическая керамика, имеющая токопроводящее напыление. Пластина и напыление являются контактами пьезоизлучателя (буззера), при этом устройство имеет полярность — плюс и минус.

Принцип действия излучателей основан на эффекте, открытом братьями Кюри в 1880 г. В пьезокристаллах под действием механических сил на сдвиг, изгиб или кручение образуются электрические заряды. Кроме «прямого» эффекта существует и обратный эффект — если подать электричество на кристалл, то он начнет деформироваться. При частых колебаниях кристалла создается звуковая волна с заданной частотой.

Примеры для зуммера активного:

Вывод короткого звукового сигнала.

Как видно из скетча, управлять Trema-зуммером со встроенным генератором так же легко, как и обычным светодиодом.

Продолжаем серию уроков “Arduino для начинающих”. Сегодня собираем модель с пьезоэлементом (динамиком), которые используются в робототехники для управления звуками, издаваемыми роботом. В статье вы найдете видео-инструкцию, листинг программы, схему подключения и необходимые компоненты.

Пьезоэлемент — электромеханический преобразователь, одним из разновидностей которого является пьезоизлучатель звука, который также называют пьезодинамиком, просто звонком или английским buzzer. Пьезодинамик переводит электричеcкое напряжение в колебание мембраны. Эти колебания и создают звук (звуковую волну).

В нашей модели частоту звука можно регулировать, задавая соответствующие параметры в программе. Такая модель может быть встроена в робота, который будет издавать звуки.

Видео-инструкция сборки модели:

https://youtube.com/watch?v=Y3v5JzJH80Y

Для сборки модели с пьезоэлементом нам потребуется:

  • плата 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.

Наш YouTube канал, где публикуются видео-уроки.

Пищалка на Ардуино, которую часто еще называют зуммером, пьезодинамиком или даже баззером – частый гость в DIY проектах. Этот простой электронный компонент достаточно легко подключается к платам Arduino, поэтому вы можете быстро заставить вашу схему издавать нужные звуки – сигнализировать, пищать или вполне сносно проигрывать мелодию. В данной статье расскажем про отличие активных и пассивных зуммеров, разберем схему подключения пьезоэлемента к плате Ардуино и покажем пример скетча для управления пищалкой. А еще вы найдете пример мелодии, которыми cможете снабдить свой проект.

Суть проекта

Мне хотелось сделать дальномер. Во-первых, из-за того, что у меня был ультразвуковой датчик и надо было научиться с ним взаимодействовать. Во-вторых, я хотел выводить всю информацию на OLED-дисплей. В статьях, которые я находил, либо рассказывалось про работу с дисплеем и датчиком по отдельности, либо они являлись частью совершенно другого проекта. Я собрал все необходимое тут и надеюсь, что это сможет как-то помочь другим.

Что понадобится?

  • Любая плата Arduino (у меня Uno);

  • Ультразвуковой дальномер HC-SR04;

  • OLED-дисплей на 0,96 дюймов;

  • Соединительные провода;

  • Макетная плата.

Примеры мелодий для зуммера

Для того, чтобы разнообразить работу с новым проектом, добавить в него «развлекательный» элемент, пользователи придумали задавать определённый набор частот звука, делая его созвучным некоторым знаменитым композициям из песен и кинофильмов. Разнообразные скетчи для таких мелодий можно найти в интернете. Приведем пример мелодии для пьезопищалки для одного из самых узнаваемых треков «nokia tune»из ставших легендарными мобильников Nokia. Файл pitches.h можно сделать самим, скопировав его содержимое так, как указано в этой статье на официальном сайте.

Скетч

При написании собственных мелодий пригодится знание частот нот и длительностей интервалов, используемых в стандартной нотной записи.

Частота нот для пищалки Ардуино

Подробнее о модулях:

Trema-модуль зуммер пассивный основан на электромагнитном излучателе, который состоит из кольцевого магнита, сердечника с электромагнитной катушкой и гибкой металлической мембраны. Электромагнитная катушка преобразует электрические колебания в магнитные, а мембрана преобразует магнитные колебания в механические. Полученные механические колебания распространяются по воздуху в виде звуковых волн. Пластиковый корпус, с отверстием, усиливает акустический эффект.

Trema-модуль зуммер пассивный не имеет встроенного генератора, а преобразует электрический сигнал со входа (S) в механические колебания воздуха. Таким образом частота излучаемого звука соответствует частоте сигнала подаваемого на вход модуля. Чем выше частота, тем «тоньше» звук. Чем ближе частота к резонансной, тем звук сильнее.

Самый простой способ получения звука заключается в применении функции tone(). Данная функция генерирует меандр (сигнал прямоугольной формы с равной длительностью импульсов и пауз), с заданной частотой и длительностью.

Trema-модуль зуммер активный состоит из 5В генератора прямоугольных импульсов (меандра) с частотой 2,3 кГц, и электромагнитного излучателя в одном корпусе. Сигнал с генератора подается на электромагнитный излучатель и преобразуется в звуковые волны той же частоты.

Trema-модуль зуммер активный уже имеет встроенный генератор и для генерации звука ему не требуется использование функции beep() и ей аналогичных (как для простого Trema-зуммера). Достаточно установить состояние логической «1» на выводе «S» и Вы услышите сигнал с частотой 2,3 кГц и уровнем звукового давления не ниже 85дБ/10см.

Подключения зуммера к Arduino

Подключение модуля пьезоэлемента к Ардуино выглядит достаточно простым. Потребляемый ток маленький, поэтому можно просто напрямую соединить с нужным пином.

Подключение пищалки к Ардуино (порт 12)

Электрическая схема подключения пьезоэлемента без сопровождающих модулей выглядит следующим образом.

Схема подключения зуммера

На некоторых вариантах корпусов зуммера можно найти отверстие для фиксации платы при помощи винта.

Зуммер arduino имеет два выхода

Следует обратить внимание на их полярность. Темный провод должен быть подключен к «земле», красный – к цифровому пину с PWM

Один вывод настраивается в программе как «вход». Arduino отслеживает колебания напряжения на выводе, на который подаётся напряжение с кнопки, резистора и датчиков.

Пищалка Арудино с названиями контактов

Напряжение на «вход» подается различное по значениям, система четко фиксирует только два состояния – вышеупомянутые 1 и 0 (логические ноль и единица). К логической единице будет относиться напряжение 2,3-5 В. Режим «выход» – это когда Arduino подает на вывод логический ноль/единицу. Если брать режим логического нуля, тут величина напряжения настолько мала, что ее не хватает для зажигания светодиода.

Схема подключения пищалки к Ардуино

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

Arduino Code — Simple Sound

const int TRIG_PIN = 6;
const int ECHO_PIN = 7;
const int BUZZER_PIN = 3;
const int DISTANCE_THRESHOLD = 50;

float duration_us, distance_cm;

void setup() {
Serial.begin (9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {

digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);

duration_us = pulseIn(ECHO_PIN, HIGH);

distance_cm = 0.017 * duration_us;

if(distance_cm < DISTANCE_THRESHOLD)
digitalWrite(BUZZER_PIN, HIGH);
else
digitalWrite(BUZZER_PIN, LOW);

Serial.print(«distance: «);
Serial.print(distance_cm);
Serial.println(» cm»);

delay(500);
}

Quick Steps

  • Connect Arduino to PC via USB cable

  • Open Arduino IDE, select the right board and port

  • Copy the above code and open with Arduino IDE

  • Click Upload button on Arduino IDE to upload code to Arduino

  • Move your hand in front of sensor

  • Listen to piezo buzzer’s sound

Примеры мелодий для зуммера

Для того, чтобы разнообразить работу с новым проектом, добавить в него «развлекательный» элемент, пользователи придумали задавать определённый набор частот звука, делая его созвучным некоторым знаменитым композициям из песен и кинофильмов. Разнообразные скетчи для таких мелодий можно найти в интернете. Приведем пример мелодии для пьезопищалки для одного из самых узнаваемых треков «nokia tune»из ставших легендарными мобильников Nokia. Файл pitches.h можно сделать самим, скопировав его содержимое так, как указано в этой статье на официальном сайте.

При написании собственных мелодий пригодится знание частот нот и длительностей интервалов, используемых в стандартной нотной записи.

Частота нот для пищалки Ардуино

Описание платы Seeeduino Lotus

Seeeduino Lotus – это еще один вариант платы Arduino Uno на базе  микроконтроллеров ATMEGA328. Она представляет собой комбинацию из чипа Atmel ATMEGA328P-MU, CH340 и обвязки в виде Grove разъемов для всех стандартных выводов. В версии v1.1 чип CH340 был заменен на CP2102N, что упростило использование платы для пользователей Windows и iOS.

Плата Seeeduino Lotus

Seeeduino Lotus имеет 14 цифровых вводов и выводов. 6 пинов могут использоваться как ШИМ. Также есть 7 аналоговых пинов, разъем micro USB, разъем ICSP, 12 подключений Grove, кнопка сброса.

Есть разные версии платы. К ним относятся:

  • 0. Первый релиз произведен в 2014 году. Работает только с ОС Windows.
  • 1. Релиз – в 2016 году. Работает как с Windows, так и с операционной системой Mac.

Плата применяется в проектах IoT, системе «Умный дом», в робототехнике, игрушках, а также в учебных целях.

Плата Seeeduino Lotus с обратной стороны

Характеристики:

  • Полная совместимость с Arduino UNO.
  • Наличие 12 разъемов Grove.
  • 14 цифровых входов/выходов.
  • Рабочее напряжение 5 В.
  • Рабочий ток – 40А.
  • 32 КБ флеш-памяти.
  • EEPROM 1 Кб.
  • Тактовая частота 16 МГц.

Seeeduino Lotus

На плате Seeeduino Lotus есть следующие разъемы и порты:

  • LED D13. Светодиод, расположенный на 13 выводе платы, может использоваться в качестве индикатора в программах.
  • Порт USB и micro USB. Применяется для подсоединения к компьютеру, смартфону, подачи питания.
  • Кнопка сброса reset. Размещена на боковой части для сброса платы в отличие от Ардуино, на которых Reset устанавливается в верхней части.
  • Разъемы питания, аналоговые контакты. Применяются для подключения различных компонентов к плате без дополнительного макетирования.
  • Соединители Grove SeeedStudio с датчиками и другими устройствами, которые могут использоваться как аналоговое, цифровое, I2C или UART подключение.
  • Используется для ATmega328P, размещено в стандартном положении пина ICSP / SPI. Также есть пины MISO, SCK, MOSI, которые размещены как на Arduino Uno на цифровых контактах 12, 13, 11.
  • USB 2 Uart. Применяются для взаимодействия с другими устройствами UART – например, для вспомогательной платы USB2UART.

Используется разъем MicroUSB, что повышает компактность и совместимость со стандартными источниками питания.

Отличия активного и пассивного зуммера

Главное отличие активного зуммера от пассивного заключается в том, что активный зуммер генерирует звук самостоятельно. Для этого пользователь должен просто включить или выключить его, другими словами, подав напряжение на контакты или обесточив. Пассивный зуммер же требует источника сигнала, который задаст параметры звукового сигнала. В качестве такого источника может выступать плата Ардуино. Активный зуммер будет выдавать более громкий звуковой сигнал в сравнении с его конкурентом. Частота излучаемого звука активного зуммера составляет значения 2,5 кГц +/- 300Гц. Напряжение питания для пищалки варьируется от 3,5 до 5 В.

Активный пьезоизлучатель предпочтительней еще из-за того, что в скетче не потребуется создавать дополнительный фрагмент кода с задержкой, влияющий на рабочий процесс. Также для определения того, что за элемент находится перед пользователем, можно измерить сопротивление между двумя проводами. Более высокие значения будут указывать на активный зуммер ардуино.

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

Дребезг кнопки ардуино

В процессе работы с кнопками мы можем столкнуться с очень неприятным явлением, называемым дребезгом кнопки. Как следует из самого названия, явление это обуславливается дребезгом контактов внутри кнопочного переключателя. Металлические пластины соприкасаются друг с другом не мгновенно (хоть и очень быстро для наших глаз), поэтому на короткое время в зоне контакта возникают скачки и провалы напряжения. Если мы не предусмотрим появление таких “мусорных” сигналов, то будем реагировать на них каждый раз и можем привести наш проект к хаусу.

Для устранения дребезга используют программные и аппаратные решения. В двух словах лишь упомянем основные методы подавления дребезга:

  • Добавляем в скетче паузу 10-50 миллисекунд между полкучением значений с пина ардуино.
  • Если мы используем прерывания, то программный метд использоваться не может и мы формируем аппаратную защиту. Простейшая из них  – RC фильтр с конденсатором и сопротивлением.
  • Для более точного подавления дребезга используется аппаратный фильтр с использованием триггера шмидта. Этот вариант позволит получить на входе в ардуино сигнал практически идеальной формы.

Более подробную информацию о способах борьбы с дребезгом вы можете найти в этой статье об устранении дребезга кнопок.

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

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

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

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

Пример скетча для пьезодимнамика

Для “оживления” подключенного к плате ардуино зуммера потребуется программное обеспечение Arduino IDE, которое можно скачать на нашем сайте.

Одним из простейших способов заставить заговорить пищалку является использование функции «analogwrite». Но лучше воспользоваться встроенными функциями. За запуск звукового оповещения отвечает функция «tone()», в скобках пользователю следует указывать параметры частоты звука и номера входа, а также времени. Для отключения звука используется функция «noTone()».

Пример скетча с функцией tone() и noTone()

//Пин, к которому подключен пьезодинамик.
int piezoPin = 3;
 
void setup() {
 
}

void loop() {
 
  /*Функция принимает три аргумента
    1) Номер пина
    2) Частоту в герцах, определяющую высоту звука
    3) Длительность в миллисекундах. 
  */
  tone(piezoPin, 1000, 500); // Звук прекратится через 500 мс, о программа останавливаться не будет!

  /* Вариант без установленной длительности   */
  tone(piezoPin, 2000); // Запустили звучание
  delay(500);
  noTone(); // Остановили звучание


}

Схема подключения для примера выглядит следующим образом:

Подключение пищалки к 3 пину Ардуино

Когда вы используете функцию tone(), то возникают следующие ограничения.

Невозможно одновременно использовать ШИМ на пинах 3 и 11 (они используют одинаковый внутренний таймер), а также нельзя запустить одновременно две мелодии двумя командами tone() – в каждый момент времени будет исполняться только одна.Еще одно ограничение: нельзя извлечь звук частотой ниже 31 Гц. 

Вариант скетча для активного зуммера чрезвычайно прост. С помощью digitalWrite() мы выставляем значение 1 в порт, к которому подключена пищалка.

Вариант скетча для зуммера без tone()

Пример скетча для варианта без функции tone() представлен на изображении внизу. Этот код задает частоту включения звука один раз в две секунды.

Пример скетча

Для корректной работы устройства необходимо задать номер PIN, определить его как «выход». Функция analogWrite использует в качестве аргументов номер вывода и уровень, который изменяет свое значение от 0 до 255. Это все по причине того, что шим-выводы Arduino имеют ЦАП (цифроаналоговый преобразователь) 8-бит. Изменяя этот параметр, пользователь меняет громкость зуммера на небольшую величину. Для полного выключения следует пропитать в порте значение «0». Следует сказать, что используя функцию «analogwrite», пользователь не сможет изменять тональность звука. Для пьезоизлучателя будет определена частота 980 Гц. Это значение совпадает с частотой работы выводов с шим на платах Ардуино и аналогов.

Подключения зуммера к Arduino

Подключение модуля пьезоэлемента к Ардуино выглядит достаточно простым. Потребляемый ток маленький, поэтому можно просто напрямую соединить с нужным пином.

Подключение пищалки к Ардуино (порт 12)

Электрическая схема подключения пьезоэлемента без сопровождающих модулей выглядит следующим образом.

Схема подключения зуммера

На некоторых вариантах корпусов зуммера можно найти отверстие для фиксации платы при помощи винта.

Зуммер arduino имеет два выхода

Следует обратить внимание на их полярность. Темный провод должен быть подключен к «земле», красный – к цифровому пину с PWM

Один вывод настраивается в программе как «вход». Arduino отслеживает колебания напряжения на выводе, на который подаётся напряжение с кнопки, резистора и датчиков.

Пищалка Арудино с названиями контактов

Напряжение на «вход» подается различное по значениям, система четко фиксирует только два состояния – вышеупомянутые 1 и 0 (логические ноль и единица). К логической единице будет относиться напряжение 2,3-5 В. Режим «выход» – это когда Arduino подает на вывод логический ноль/единицу. Если брать режим логического нуля, тут величина напряжения настолько мала, что ее не хватает для зажигания светодиода.

Схема подключения пищалки к Ардуино

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

Пример скетча для пьезодимнамика

Для “оживления” подключенного к плате ардуино зуммера потребуется программное обеспечение Arduino IDE, которое можно скачать на нашем сайте.

Одним из простейших способов заставить заговорить пищалку является использование функции «analogwrite». Но лучше воспользоваться встроенными функциями. За запуск звукового оповещения отвечает функция «tone()», в скобках пользователю следует указывать параметры частоты звука и номера входа, а также времени. Для отключения звука используется функция «noTone()».

Пример скетча с функцией tone() и noTone()

Схема подключения для примера выглядит следующим образом:

Подключение пищалки к 3 пину Ардуино

Когда вы используете функцию tone(), то возникают следующие ограничения.

Вариант скетча для активного зуммера чрезвычайно прост. С помощью digitalWrite() мы выставляем значение 1 в порт, к которому подключена пищалка.

Вариант скетча для зуммера без tone()

Пример скетча для варианта без функции tone() представлен на изображении внизу. Этот код задает частоту включения звука один раз в две секунды.

Пример скетча

Для корректной работы устройства необходимо задать номер PIN, определить его как «выход». Функция analogWrite использует в качестве аргументов номер вывода и уровень, который изменяет свое значение от 0 до 255. Это все по причине того, что шим-выводы Arduino имеют ЦАП (цифроаналоговый преобразователь) 8-бит. Изменяя этот параметр, пользователь меняет громкость зуммера на небольшую величину. Для полного выключения следует пропитать в порте значение «0». Следует сказать, что используя функцию «analogwrite», пользователь не сможет изменять тональность звука. Для пьезоизлучателя будет определена частота 980 Гц. Это значение совпадает с частотой работы выводов с шим на платах Ардуино и аналогов.

Реализация на Windows

Я начал с того, что написал бОльшую часть кода сначала для Windows, чтобы было легче производить отладку. “Борьбу” с Arduino оставил на момент адаптации кода к аппаратным возможностям платы. Мою реализацию для Windows можно собрать самостоятельно (каталог win-implementation у меня на GitHub; понадобится компилятор от Visual Studio 2017) или запустить готовые сборки: мелодия 1, мелодия 2.

Пара комментариев о том, как все реализовано.

Чтобы не возникло потом проблем с переносом, я старался писать код, ориентируясь на восьмибитную природу микроконтроллеров ATMega. Поэтому он изобилует типами ‘uint8_t’ и ‘uint16_t’.

Для преобразования исходного музыкального файла в код, пригодный для компиляции, я написал небольшой скрипт на python (каталог extractor у меня на GitHub), который копирует данные мелодии в массив байт и извлекает некоторые адреса:

  • адрес начала данных мелодии (без учета плеера),

  • адрес таблицы позиций,

  • адрес таблицы банков инструментов для позиций.

В оригинальном спектруме звукогенератор AY-3-8912 производил сигналы прямоугольной формы, которые раньше мне казались грубоватыми. Изначально цели добиться аутентичного звучания передо мной не стояло, поэтому в первой версии я пробовал генерировать синусоидальные сигналы, вместо меандра. Оказалось, что вместе с прямоугольной формой сигнала ушли и все гармоники, из-за чего звук стал очень глухой. Так что от синусоидальной формы сигнала пришлось отказаться. Также в реализацию была добавлена таблица маппинга громкости. Напомню, что амплитуда выходного сигнала звукогенератора имеет 15 градаций. Энтузиасты, разрабатывающие эмуляторы AY-3-8912, установили, что зависимость между значением в регистре громкости и напряжением на выходе вовсе не линейная. Так появились таблицы для соответствующего преобразования. В “больших” эмуляторах такие таблицы 16-битные, в нашем же эмуляторе для быстроты расчетов используется 4 бита. Поэтому если заглянуть в исходники, можно увидеть, что уровни громкости от 0 до 3 вообще не воспроизводятся, а уровни от 4 до 9 имеют незначительную громкость на выходе. Действительно, субъективно я это почувствовал еще во время моих экспериментов по написанию музыки. Думаю, что инженеры, разрабатывающие звукогенератор, сделали это намеренно, в соответствии с законом Вебера-Фехнера (интенсивность ощущения пропорциональна логарифму интенсивности раздражителя).

В музыкальном модуле от Dizzy IV используются несложные шумовые эффекты. Их удалось реализовать при помощи простого генератора случайных чисел, работающего по алгоритму xorshift.

Использование функции arduino delay

Синтаксис

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);   // подаем высокий сигнал на 13 пин
  delay(10000);            // пауза 10000мс или 10 секунд
  digitalWrite13, LOW);    // подаем низкий сигнал на 13 пин
  delay(10000);            // пауза 10000мс или 10 секунд
}

В методе setup прописываем, что пин 13 будет использоваться, как выход. В основной части программы сначала на пин подается высокий сигнал, затем делаем задержку в 10 секунд. На это время программа как бы приостанавливается. Дальше подается низкий сигнал и опять задержка и все начинается сначала. В итоге мы получаем, что на пин поочередно подается, то 5 В, то 0.

Нужно отчетливо понимать, что на время паузы с помощью delay работа программы приостанавливается, приложение не будет получать никаких данных с датчиков. Это является самым большим недостатком использования функции delay в Arduino. Обойти это ограничения можно с помощью прерываний, но об этом мы поговорим в отельной статье.

Заключение

В этой статье мы рассмотрели вопросы использования пищалки в проектах Arduino: разобрались с пассивным и активным зуммерами, осветили некоторые теоретические вопросы по строению пьезоэлемента. Узнали, как подключить пьезопищалку к ардуино и как запрограммировать скетч для работы с активными, пассивными модулями. Как видно, ничего особенно сложного в работе с зуммерами нет и вы сможете легко включить аудио возможности в свой проект. Причем помимо обычных гудков вы можете создавать целые музыкальные произведения.

Теперь давайте рассмотрим схему датчика.

Кроме операционного усилителя нам понадобится еще несколько легкодоступных компонентов.

Самый обычный микрофон. Если полярность микрофона не обозначена, то достаточно взглянуть на его контакты. Минусовой всегда уходит на корпус, а в схеме, соответственно, соединяется с «землей».

В моем случае в качестве «золотой середины» применен резистор на 620 кОм.

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

Сборка завершена. Схему установил в корпусе, который изготовил из небольшого обрезка пластиковой трубки.Переходим к тестированию устройства. Я подключу его к плате Arduino UNO. Переходим в среду разработки Ардуино и открываем пример AnalogReadSerial в разделе Basics.

Перед загрузкой в плату изменяем задержку на 50 миллисекунд и вгружаем. После этого делаем пробный хлопок и следим за показаниями. В момент хлопка они подскакивают, постарайтесь примерно запомнить это значение и вернитесь к скетчу.В скетч добавляем пару строк.

Вместо «Х» вставляете то самое значение, загружаете и снова хлопаете. Так продолжайте до тех пор, пока не подберете оптимальное значение срабатывания. При завышенном значении условие будет выполняться лишь при хлопке на очень близком расстоянии. При заниженном значении условие будет выполняться при малейшем шуме или звуке шагов.

https://youtube.com/watch?v=Boh97QJpR2A

Модули KY-038 и KY-037 представляют собой датчики звука. Отличие версии 037 от 038 лишь в размере микрофона. Эти модули находят свое применение в различных системах управления. Например, такие модули часто устанавливают в подъездах для включения освещения при звуке шагов, что позволяет значительно сэкономить электроэнергию. Также с помощью этих модулей можно управлять роботом посредством хлопков или других звуков.

Модуль состоит из микрофона и потенциометра, позволяющего регулировать чувствительность датчика. Также в модуле имеется компаратор – устройство, посылающее цифровой сигнал при достижении аналоговым сигналом на входе определенных значений.

Характеристики:

  • Питание: 3,3-5 В постоянного тока
  • Потребляемый ток: 10 мА
  • Выходной сигнал: цифровой и аналоговый

Модуль имеет 4 вывода:

“A0” – аналоговый выход, передающий выходное напряжения на микрофоне

“D0” – цифровой выход, посылающий логическую единицу при достижении порогового уровня громкости

Подключение к Arduino

Для подключения датчика нам необходимы:

  • Любая Arduino-совместимая плата
  • Компьютер с установленной средой Arduino IDE.
  • USB кабель для подключения Arduino к персональному компьютеру

В примере мы будем рассматривать подключение при помощи проводов типа папа-папа и макетной платы для соединения без пайки.

1) Для начала просто подключим датчик к плате, для анализа выходных сигналов.

Принципиальная схема подключения компонентов:

После того как этот скетч загрузится в плату, откройте монитор порта и наблюдайте за получаемыми значениями в тишине и при возникновении шума.

Попробуйте изменить чувствительность датчика, вращая винт потенциометра и повторите наблюдение.

2) Теперь добавим в нашу схему светодиод и попробуем управлять им с помощью хлопков.

Для подключения светодиода необходим резистор номиналом около 220 Ом.

Принципиальная схема подключения компонентов: