Датчик звука Arduino

Содержание

  • Обзор
  • Технические характеристики модуля
  • Пример использования
  • Часто задаваемые вопросы FAQ

Обзор датчика звука для Arduino

Датчик звука Arduino используется для слежения за уровнем шума или обнаружения громких сигналов: хлопков, стуков или свиста.

image

Датчик представляет собой небольшую плату с установленным на ней микрофоном, микрофонным усилителем, регулятором чувствительности в виде переменного резистора. Микрофон преобразует звуковые колебания в колебания электрического тока. Сигнал с микрофона необходимо усилить с помощью компаратора L293. Датчик имеет выход с логическим уровнем. Сработал датчик – на выходе появился логический 0.  Регулятором чувствительности можно выбирать, от какого звука будет срабатывать датчик — от слабого, громкого или очень громкого звука. Датчик имеет 3 вывода. Назначение выводов следующее:

  • Vcc – питание датчика;
  • GND – земля;
  • OUT — цифровой выход;

Датчик имеет также светодиод, сигнализирующих о наличие низкого уровня на  выходе OUT. Наличие цифрового вывода OUT и светодиода уровня позволяет использовать модуль автономно, без подключения к контроллеру.

Технические характеристики модуля

  • Напряжение питания: 4-6 В;
  • Выход: цифровой;
  • Максимальное расстояние обнаружения –5 м;
  • Размер модуля: 32×17×15 мм;
  • Общий вес: 12.5 г.

Пример использования

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

  • плата Arduino Uno;
  • датчик уровня звука;
  • блок реле;
  • настольная лампа;
  • соединительные провода.

Соберем схему, показанную на рисунке

image

Запустим Arduino IDE. Создадим новый скетч и внесем в него следующие строчки:

  // Датчик уровня звука  // http://3d-diy.ru    // контакт подключения выхода OUT датчика  int soundPin=2;  // контакт подключения выхода реле  int relayPin=8;  // состояние лампы  // true - включено, false - выключено  boolean statuslamp;    void setup()  {  // настройка вывода реле в режим OUTPUT  pinMode(relayPin,OUTPUT);  // начальное состояние - лампа выключена  statuslamp=false;  digitalWrite(relayPin,LOW);    }    void loop()  {  // проверяем значение на выводе OUT датчика звука  if(digitalRead(soundPin)==0) // регистрация хлопка  {  // поменять статус лампы  statuslamp=!statuslamp;  // переключить лампу  digitalWrite(relayPin,statuslamp);  // задержка, "дребезга" хлопков  delay(10);  }    }  

Часто задаваемые вопросы FAQ

1. При любом уровне звука не горит светодиод уровня вывода OUT

  • Проверьте соединение датчика с входом микроконтроллера.
  • Отрегулируйте величину выходного сигнала с помощью потенциометра.

Будет достаточно проще пользоваться устройством, если мы реализуем звуковое сопровождение, подключим зуммер к нашей плате. У нас немного поменялось расположение элементов, поэтому обновим несколько директив #define, а конкретно зуммер подключим к ШИМ выходу arduino. (Полный код, как обычно будет в конце статьи)

 #define buzzer 11          // Контакт динамика 

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

Почему мы выбрали ШИМ выход? Если на динамик подать 5в, он один раз пикнет и всё, вернее это даже слышно не будет практически. Звук – это аналоговый сигнал, а ШИМ выход без лишней головной боли, сможет имитировать поток импульсов

Для активации ШИМ сигнала, мы можем использовать команду analogWrite( выход , значение); , где всего два аргумента – первый это номер выхода, а второй значение от 0 до 255, которое влияет на степень скважности в ШИМ – сигнале. Я поэкспериментировал, и нашёл оптимальное значение скважности 20, для нормального тона динамика. Соответственно, скважность 0 – полностью выключить звук.

 analogWrite(buzzer, 20);   // Включаем звук на ШИМ выходе analogWrite(buzzer, 0);    // Выключаем звук на ШИМ выходе 

Нужно помнить, что мы не должны использовать delay, в момент создания звуковых эффектов, значит опять будем привязываться к переменной времени контроллера millis().

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

Введём флаг ошибки, который будем применять, при нажатии кнопки сброса, неправильном вводе пароля и простое 3 секунды, когда пользователь вдруг перестал вводить пароль

 bool keyError;            // Флаг ошибки пароля 

Также введём переменную, которую будем сравнивать с временем контроллера millis().

 uint32_t beep;            // Переменная времени задержки зуммера после нажатия кнопки или действия 

В цикле loop() у нас будут постоянно проверяться все наши функции.

   key_beep_off();         // Выключение звука зуммера   key_beep_ok();          // Звук зуммера при отрытии замка   key_beep_error();       // Звук ошибки зуммера 

В цикле обработки клавиши key_scan (), если было зафиксировано нажатие, то запустим звуковой сигнал, и сбросим переменную времени.

 beep = millis();           // Приравниваем переменную времени зуммера к времени контроллера analogWrite(buzzer, 20); 

Если это просто нажатая клавиша, без действия, то нам нужен очень кратковременный звук. Как нам узнать, что нажатие не привело к действию? Мы проверим статус закрытого замка, и переменную времени в течении 150мс. Если статус замка закрыт, то через 150мс, звук отключаем. Так мы получим непродолжительный звук, при нажатии любой кнопки.

 void key_beep_off()                                        // Выключаем пищалку, если замок остался закрытым, через 150мс {   if (millis() - beep > 150 && lockType == 1 && digitalRead(lock) == LOW || millis() - beep > 200 && lockType == 0 && digitalRead(lock) == HIGH)   {     analogWrite(buzzer, 0);                                // Выключаем звук на ШИМ выходе   } }  

Теперь звук ошибки. Предлагаю для понимания сделать два коротких сигнала, обычно этот звук понятен пользователю. Здесь всё очень просто. Нам нужно использовать флаг ошибки keyError. Пока его значение равно 1, мы будем выполнять условия с временным промежутком в 150мс, а в конце просто сбросим его. Просто делаем 3 if, в каждом из котором делаем привязку ко времени. 1)Включаем динамик – > 2) отключаем – > 3) включаем. Потом снимаем флаг keyError == 0.

 void key_beep_error()                                      // Функция ошибки клавиатуры - двойной писк {   if (keyError == 1)   {     if (millis() - beep > 0 && millis() - beep < 150)       // Интервал времени от 0 до 150мс - звук есть     {       analogWrite(buzzer, 20);                              // Включаем звук на ШИМ выходе     }     if (millis() - beep > 150 && millis() - beep < 300)     // Интервал времени от 150 до 3000мс - звука нет     {       analogWrite(buzzer, 0);                               // Выключаем звук на ШИМ выходе     }     if (millis() - beep > 300 && millis() - beep < 450)     // Интервал времени от 300 до 450мс - звук есть     {       analogWrite(buzzer, 20);                              // Включаем звук на ШИМ выходе     }     if (millis() - beep > 450)                              // По прошествии 450мс     {       analogWrite(buzzer, 0);                               // Выключаем звук на ШИМ выходе       keyError = 0;                                         // Сбрасываем флаг ошибки открытия     }   } } 

Затем нам нужно в некоторых участках кода, поднимать флаг keyError == 1 и сбрасывать переменную beep. Этот код нам нужно вставить в обработку клавиши # , также он должен исполняться при неправильном вводе пароля, и сбросе его, при простое 3 секунды.

 beep = millis();  // Приравниваем переменную времени зуммера к времени контроллера keyError = 1;     // Активируем флаг ошибки зуммера 

Теперь разберём звук динамика в момент открытия замка. Чтобы пользователь понимал, что замок ещё открыт (это особенно актуально в случае применения магнитного замка) будем воспроизводить кратковременные бипы. Цикл бипов должен продолжаться, пока открыт замок, для этого у нас была переменная openTime. Т.е. мы можем считывать состояние замка, и бипать, пока beep < openTime. Далее мы организуем цикл включения и выключения динамика, по схожему принципу, как в коде ошибки, но он у нас будет повторять, пока открыт замок. Чтобы цикл повторно запустился, в конце нам нужно обновить переменную beep.

 void key_beep_ok() {   if (millis() - beep < openTime && lockType == 1 && digitalRead(lock) == HIGH || millis() - beep < openTime && lockType == 0 && digitalRead(lock) == LOW)   {     if (millis() - beep > 0 && millis() - beep < 120)           // Задаём время от 0 до 120мс - зуммер активен     {       analogWrite(buzzer, 30);                                  // Включаем звук на ШИМ выходе     }     if (millis() - beep > 120 && millis() - beep < 300)         // Задаём время от 120 до 300 мс - зуммер не активен     {       analogWrite(buzzer, 0);                                   // Выключаем звук на ШИМ выходе     }     if (millis() - beep > 300)                                  // Свыше 300мс обнуляем переменную времени зуммера, чтобы цикл запустился снова, пока действует время открытия замка     {       beep = millis();                                          // Приравниваем переменную времени зуммера к времени контроллера     }   } } 

У нас уже прошло достаточно циклов статей по построению нашей системы доступа, поэтому соберём всё в железе, и протестируем, как работает наш код

Смотрите также:  Сдвиговые регистры в Arduino (74hc595)

Записал небольшое видео, где проверим основные функции нашего устройства.

Код этой статьи на github.

Специально для mozgochiny.ru 

Сегодня мы снова затронем вопрос самодельных охранных систем. Ранее на сайте уже публиковалась статья Сигнализация на базе Ардуино своими руками. В этой же статье мы узнаем о том, как можно изготовить дешёвую беспроводную охранную сигнализацию своими руками.

Поделка использует пироэлектрический инфракрасный (PIR) датчик движения. Передача информации осуществляется при помощи приёмопередающего (RF) модуля.

В качестве альтернативы можно воспользоваться инфракрасным (IR) модулем, но он имеет ограниченную дальность действия и может работать только на линии прямой видимости с приёмником. Используя дешевый RF модуль можно добиться дальности действия около 100 м.

Данную статью решил разбить на 3 основные части:

  • Передатчик: распознавание движения и передача данных на приёмник;
  • Приёмник: приём данных с передатчика и активация различных защитных устройств (сигнал тревоги, отправка смс и т.п.);
  • Программное обеспечение: прошивка, что управляет «железом».
  • 2 платы ARDUINO UNO/ARDUINO MINI/ARDUINO NANO для приёмника и передатчика;
  • RF приёмопередающий модуль (433 MHZ);
  • PIR датчик движения;
  • 9В батарейки ( 2 штуки) и коннекторы к ним;
  • Зуммер;
  • Светодиод;
  • Резистор с сопротивлением 220 Ом;
  • Макетная плата;
  • Джамперы/провода/перемычки;
  • Монтажная плата;
  • Межплатные штыревые соединители;
  • Переключатели;
  • Корпуса для приёмника и передатчика;
  • Цветная бумага;
  • Монтажный скотч;

Необходимые инструменты:

  • Наборной скальпель;
  • Термоклеевой пистолет;
  • Паяльник;
  • Кусачки /инструмент для снятия изоляции;
  • Ножницы по металлу.

Передатчик состоит из:

  • Датчика движения;
  • Платы Arduino, что обрабатывает полученные данные с датчика движения;
  • Модуль передатчика, что передаёт данные в приёмник.

Датчик обнаруживает инфракрасное излучение, что идёт от человека или животного и посылают сигнал на плату ARDUINO.

В качестве управляющей платы передатчика использовал Arduino Nano (в силу её стоимости).

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

Соединим выводы датчика с выводами платы Arduino:

  • vcc > 5v;
  • GND > GND;
  • Out > D2.

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

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

test code

После того, как проверили работоспособность датчика движения, переходим к монтажу RF передатчика на плату.

Передатчик имеет 3 вывода (VCC, GND, и Data).

Соединим:

  • VCC вывод с 5В выводом на плате;
  • GND с GND на плате;
  • Data вывод с 12 выводом на плате.

Приёмник состоит из:

  • Модуля RF приёмника, что принимает данные с передатчика;
  • Платы Arduino, что обрабатывает данные полученные с приёмопередающего модуля и передает команды на выходные устройства (тревога, смс, email);
  • Зуммера (динамик).

Соединим:

  • Вывод VCC с 5В выводом платы;
  • GND с GND платы;
  • Data вывод с 12 выводом на плате.

Основой всей нашей прошивки выступает файл-библиотеки. Скачаем, разархивируем и поместим её в папку с библиотеками Arduino.

Программное обеспечение для передатчика:

Перед тем, как загружать код прошивки в передающую плату, нужно выставить следующие параметры IDE

  • Board -> Arduino Nano (или та плата, которую вы используете);
  • Serial Port -> COM XX (проверьте com порт, к которому подключено ваша плата).

После выставления параметров, скачиваем файл прошивки wireless_tx и загружаем его на плату.

Программное обеспечение для приёмника:

Повторим те же действия и для принимающей платы.

  • Board -> Arduino UNO (или та плата, которую вы используете);
  • Serial Port -> COM XX (проверьте com порт, к которому подключено ваша плата).

Как выставили/проверили параметры, скачиваем файл прошивки wireless_rx и загружаем его на плату.

Примечание : Программа генерации звука взята отсюда.

  • Wireless_rx_code

  • Wireless_tx_code

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

Извлекаем USB кабеля из плат и подключаем внешние источники питания (батарейки). (Плюсовая клемма подключается к выводу VIN).

Затем проведём рукой перед датчиком движения.

Если зуммер на принимающей плате начнёт издавать шум, значить всё работает и можно запаивать детали на монтажных платах.

Срежем выступающее выводы с arduino nano, датчика движения, RF передатчика и питания. Для этой цели хорошо подойдут ножницы по металлу.

Расположим плату arduino nano на монтажке и соединим джамперами с датчиком движения и RF передатчиком.

Подготовка корпуса.

Сделаем круглое отверстие в пластиковом корпусе для установки датчика движения.

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

Сделаем прямоугольное отверстия для установки выключателя питания и также вклеим его.

Свернём лист цветной бумаги и положим её под лицевую крышку корпуса. Таким образом мы скрываем внутреннее содержимое коробка.

Кроме этого бумага придаст изделию более презентабельный вид.

Размещаем электронную начинку.

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

Щёлкнем выключателем, чтобы проверить наличие питания.

Соединим вместе макетную плату и плату arduino uno с помощью резиновой лентой.

Установим модуль RF приёмника на макетную плату.

Соединим все детали джамперами, согласно приведенной схемы.

Подготавливаем корпус.

Разметим круглое и прямоугольное отверстия на передней стороне корпуса. Вырежем их.

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

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

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

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

Если вы внимательно посмотрите на модули RF передачи и приёма то заметите, что в них отсутствуют внешние антенны. Но благодаря маленькому отверстию  с маркировкой «ANT» мы сможем припаять в модули внешние антенны.

Как рассчитать длину антенны:

Для расчета длины нужно сначала определить длину волны. Для этого скорость света разделим на частоту. После чего получившее значение делим еще на 4.

В моём случае частота 433MГц. Скорость света 3×10^8 м/с.

Длина волны = Скорость света (c) / Частота (f)= ( 3×10^8) / (433×10^6)= 0.69284 м.

Длина антенны = Длина волны /4=0.69284/4 = 0.1732 м =17.32 см или 6.82 дюйма.

После округления получается 17.3 см или 6.8 дюйма. Отрежем два куска провода нужной длины и припаяем их в отверстия с отметкой ANT в каждый модуль. Припаянные провода значительно увеличат диапазон работы системы.

Во время загрузки кода, плата питалась от USB кабеля, но если вы захотите использовать её в реальном мире, вам потребуется внешний блок питания. Было бы глупо тянуть кабель питания от беспроводного датчика движения. Поэтому мы будем использовать 9В батарейку в качестве внешнего блока. Большая ёмкость поможет использовать её определенный период времени (2-3 дня). Если датчик движения будет установлен на улице, в систему можно добавить солнечную панель и заряжать батарею в дневное время суток.

На этом в принципе всё. Спасибо за внимание и творческих всем успехов.

  • Wireless_rx_code

  • Wireless_tx_code

  • test code

( Специально для МозгоЧинов #ARDUINO-WIRELESS-HOME-SECURITY-SYSTEM/» target=»_blank» rel=»noopener noreferrer»>)

Добавлено 29 февраля 2020 в 22:15

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

Взаимодействие Arduino с датчиком звука и управление устройствами с помощью хлопков

Вы знаете, как работают электретные микрофоны?

Внутри микрофона находится тонкая диафрагма, которая на самом деле представляет собой одну из пластин конденсатора. Вторая пластина – это задняя стенка, которая расположена близко к диафрагме и параллельна ей.

Рисунок 1 – Работа электретного микрофона

Когда вы говорите в микрофон, звуковые волны, создаваемые вашим голосом, ударяют диафрагму, заставляя ее вибрировать.

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

При изменениях емкости изменяется и напряжение на пластинах, что позволяет измерить амплитуду звука.

Звуковой датчик представляет собой небольшую плату, которая объединяет микрофон (50 Гц – 10 кГц) и схему обработки для преобразования звуковых волн в электрические сигналы.

Этот электрический сигнал подается на встроенный высокоточный компаратор LM393 для его оцифровки и выводится на выход (вывод OUT).

Рисунок 2 – Регулировка чувствительности датчика звука и компаратора

Для регулировки чувствительности выходного сигнала модуль содержит встроенный потенциометр.

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

Эта настройка очень полезна, когда вы хотите запустить какое-то действие при достижении определенного порога. Например, когда амплитуда звука пересекает пороговое значение (при обнаружении стука), вы можете активировать реле для управления освещением. Вот вам идея!

Совет: поворачивайте движок потенциометра против часовой стрелки, чтобы увеличить чувствительность, и по часовой стрелке, чтобы ее уменьшить.

Рисунок 3 – Светодиодные индикаторы питания и состояния

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

У данного датчика звука только три вывода:

Рисунок 4 – Распиновка модуля звукового датчика

Вывод VCC подает питание на датчик. Рекомендуется питать датчик напряжением от 3,3 до 5 В.

GND для подключения земли.

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

Давайте подключим звуковой датчик к Arduino. Подключение довольно простое. Для начала подключите вывод VCC на модуле к выводу 5V на Arduino, а вывод GND на модуле – к выводу GND Arduino. Теперь подключите вывод OUT к цифровому выводу 7 на Arduino. Вот и всё!

На следующем рисунке показана схема соединений.

Рисунок 5 – Подключение датчика звука к Arduino

Калибровка датчика звука

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

Для калибровки цифрового выхода (OUT) модуль содержит встроенный потенциометр.

Поворачивая движок потенциометра, вы можете установить пороговое значение. Таким образом, когда уровень звука превышает пороговое значение, светодиод статуса загорается, а на цифровой выход (OUT) выдается низкий логический уровень.

Теперь, чтобы откалибровать датчик, хлопайте рядом с микрофоном и подстраивайте потенциометр, пока вы не увидите, что светодиод состояния на модуле мигает в ответ на ваши хлопки.

Теперь ваш датчик откалиброван и готов к использованию.

Теперь, когда всё подключено, вам понадобится скетч, чтобы проверить эту схему в работе.

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

#define sensorPin 7    // Переменная для хранения времени, когда произошло последнее событие  unsigned long lastEvent = 0;    void setup()   {    // Настраиваекм вывод, к которому подключен датчик, как вход    pinMode(sensorPin, INPUT);     Serial.begin(9600);  }    void loop()   {    // Прочитать показания датчика    int sensorData = digitalRead(sensorPin);      // Если на вывод подан низкий логический уровень, то звук обнаружен    if (sensorData == LOW)     {      // Если прошло 25 мс с момента последнего состояния низкого логического уровня,      // это значит, что обнаружен хлопок, а не какие-либо ложные звуки      if (millis() - lastEvent > 25)       {        Serial.println("Clap detected!");      }        // Запомнить, когда произошло последнее событие      lastEvent = millis();    }  }

Если всё в порядке, то при обнаружении хлопка вы должны увидеть вывод в мониторе последовательного порта, похожий на приведенный ниже.

Рисунок 6 – Вывод работы скетча обнаружения хлопков

Объяснение

Скетч начинается с объявления вывода Arduino, к которому подключен вывод OUT датчика.

#define sensorPin 7

Затем мы определяем переменную с именем lastEvent, которая хранит время с момента обнаружения хлопка. Это поможет нам устранить ложные срабатывания.

unsigned long lastEvent = 0;

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

pinMode(sensorPin, INPUT);   Serial.begin(9600);

В функции loop() мы сначала читаем состояние цифрового вывода датчика.

int sensorData = digitalRead(sensorPin);

Когда датчик обнаруживает какой-либо звук, достаточно громкий, чтобы пересечь пороговое значение, логический уровень выходного сигнала становится низким. Но мы должны убедиться, что звук вызван хлопками, а не случайным фоновым шумом. Итак, мы ждем 25 миллисекунд. Если логический уровень на выводе остается низким в течение более 25 миллисекунд, мы заявляем, что обнаружен хлопок.

if (sensorData == LOW)   {    if (millis() - lastEvent > 25)     {      Serial.println("Clap detected!");    }    lastEvent = millis();  }

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

В данном проекте для управления питанием устройств используется одноканальный модуль реле, который будет коммутировать переменное напряжение сети 220 В.

Схема соединений

Схема соединений в этом проекте очень проста.

Предупреждение: Данная схема взаимодействует с ВЫСОКИМ переменным напряжением сети 220 В. Неправильное подключение или использование может привести к серьезным травмам или смерти. Поэтому данный проект предназначен для людей, имеющих опыт работы и знающих о мерах техники безопасности при работе с высоким переменным напряжением.

Сначала необходимо подать питание на датчик и модуль реле. Подключите их выводы VCC к выводу 5V на Arduino, и выводы GND к выводу GND на Arduino.

Затем подключите выходной вывод (OUT) звукового датчика к цифровому выводу 7 на Arduino, а управляющий вывод (IN) на модуле реле к цифровому выводу 8 Arduino.

Вам также необходимо поместить модуль реле в линию питания устройства, которым вы хотите управлять. Вам придется разрезать один провод в кабеле питания и подключить один конец отрезанного провода (идущий от вилки) к выводу COM (общий) модуля реле, а другой к выводу NO (нормально разомкнутый).

Схема соединений показана на следующем рисунке.

Рисунок 7 – Схема подключения датчика звука и модуля реле к плате Arduino

Код Arduino

Ниже приведен скетч для управления устройствами с помощью хлопков.

#define sensorPin 7  #define relayPin 8    // Переменная для хранения времени, когда произошло последнее событие  unsigned long lastEvent = 0;  // Переменная для хранения состояния реле  boolean relayState = false;        void setup()   {    pinMode(relayPin, OUTPUT);  // Настроить вывод, подключенный к реле, как выход    pinMode(sensorPin, INPUT);  // Настроить вывод, подключенный к датчику, как вход  }    void loop()   {    // Прочитать показания датчика    int sensorData = digitalRead(sensorPin);      // Если на вывод подан низкий логический уровень, то звук обнаружен    if (sensorData == LOW)     {        // Если прошло 25 мс с момента последнего состояния низкого логического уровня,      // это значит, что обнаружен хлопок, а не какие-либо ложные звуки      if (millis() - lastEvent > 25)       {        // изменить переменную состояния реле и установить состояние на выходе        relayState = !relayState;        digitalWrite(relayPin, relayState ? HIGH : LOW);      }        // Запомнить, когда произошло последнее событие      lastEvent = millis();    }  }

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

Объяснение

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

В начале мы объявляем вывод Arduino, к которому подключен вывод управления реле (IN). Мы также определили новую переменную relayState для хранения состояния реле.

#define relayPin 8    boolean relayState = false;   

В функции setup() мы настраиваем вывод relayPin как выходной.

pinMode(relayPin, OUTPUT);

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

relayState = !relayState;  digitalWrite(relayPin, relayState ? HIGH : LOW);

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

  1. Дважды проверьте, что источник питания обеспечивает чистое напряжение питания. Поскольку звуковой датчик – это аналоговая схема, он более чувствителен к шуму, создаваемому блоком питания.
  2. Электретный микрофон в звуковом датчике также чувствителен к механическим вибрациям и шуму ветра. Установка с помощью эластичных/упругих материалов может помочь поглотить вибрацию.
  3. Диапазон чувствительности этого звукового датчика очень мал, возможно, всего 10 дюймов (примерно 25 см), поэтому, чтобы получить хорошую реакцию, вам нужно создавать шум намного ближе.

Теги

ArduinoДатчикДатчик звукаМодуль релеРеле

image В этой статье я рассмотрю примеры работы со звуков на контроллере Arduino

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

Подключение пьезоизлучателя к Arduino

На самом деле подключение очень простое:

  • 1 вывод пьезоизлучателя подключаем к 9 дискретному пину Arduino
  • 2 вывод пьезоизлучателя подключаем к GND Arduino

image

Генерация звуков на Arduino

Для генерации звуков на Arduino существует функция tone()

Функция tone()

Генерирует сигнал прямоугольной формы с заданной частотой. Длительность может быть задана параметром. Без указания длительности сигнал генерируется пока не будет вызвана функция noTone(). К порту Arduino может быть подключен к пьезо или другой высокоомный динамик для воспроизведения сигнала. Одновременно может воспроизводиться только один сигнал.

Синтаксис функции tone()

  • tone(pin, частота)
  • tone(pin, частота, длительность)

Пример использования функции tone()

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий