- Необходимые материалы
- Звуковой датчик работает
- Измерение звуковой частоты на осциллографе
- Принципиальная схема детектора свистка Arduino
- Измерение частоты с помощью Arduino
- Программирование вашего Arduino для обнаружения свиста
- Детектор свистка Arduino работает
В детстве я был очарован игрушечной музыкальной машинкой, которая срабатывает, когда вы хлопаете в ладоши, а затем, когда я вырос, я подумал, можем ли мы использовать то же самое для включения света и вентиляторов в нашем доме. Было бы здорово просто включить мои вентиляторы и свет, просто хлопая в ладоши, вместо того, чтобы идти своим ленивым я к коммутатору. Но часто это дает сбой, так как эта схема реагирует на любой громкий шум в окружающей среде, например, на громкое радио или газонокосилку моего соседа. Хотя создание переключателя хлопка - тоже интересный проект.
Именно тогда я натолкнулся на метод обнаружения свиста, в котором схема определяет свист. Свист, в отличие от других звуков, будет иметь одинаковую частоту в течение определенной продолжительности и, следовательно, его можно отличить от речи или музыки. Итак, в этом уроке мы узнаем, как обнаружить звук свиста, связав датчик звука с Arduino, и при обнаружении свистка мы переключим лампу переменного тока через реле. Попутно мы также узнаем, как звуковые сигналы принимаются микрофоном и как измерять частоту с помощью Arduino. Звучит интересно, так что давайте начнем с проекта домашней автоматизации на базе Arduino.
Необходимые материалы
- Arduino UNO
- Модуль звукового датчика
- Модуль реле
- Лампа переменного тока
- Подключение проводов
- Макетная плата
Звуковой датчик работает
Прежде чем мы углубимся в подключение оборудования и код для этого проекта домашней автоматизации, давайте взглянем на звуковой датчик. Звуковой датчик, используемый в этом модуле, показан ниже. Принцип работы большинства звуковых датчиков, доступных на рынке, аналогичен этому, хотя внешний вид может немного измениться.
Как мы знаем, примитивным компонентом звукового датчика является микрофон. Микрофон - это тип преобразователя, который преобразует звуковые волны (акустическую энергию) в электрическую энергию. Обычно диафрагма внутри микрофона вибрирует под звуковые волны в атмосфере, которые создают электрический сигнал на своем выходном контакте. Но эти сигналы будут иметь очень низкую величину (мВ) и, следовательно, не могут быть обработаны напрямую микроконтроллером, таким как Arduino. Также по умолчанию звуковые сигналы являются аналоговыми по своей природе, поэтому выходной сигнал с микрофона будет синусоидальным с переменной частотой, но микроконтроллеры являются цифровыми устройствами и, следовательно, лучше работают с прямоугольной волной.
Чтобы усилить эти синусоидальные волны с низким сигналом и преобразовать их в прямоугольные, модуль использует встроенный модуль компаратора LM393, как показано выше. Выход низкого напряжения аудио от микрофона подается на один из контактов разъема компаратора через усилитель транзистор, а опорное напряжение устанавливается на другом штыре, используя схему делителя напряжения с участием потенциометра. Когда выходное аудио напряжение с микрофона превышает заданное напряжение, компаратор переходит в высокий уровень с 5 В (рабочее напряжение), в противном случае компаратор остается низким на 0 В. Таким образом, синусоидальная волна низкого сигнала может быть преобразована в прямоугольную волну высокого напряжения (5В). Снимок осциллографа ниже показывает то же самое, где желтая волна - синусоидальная волна низкого сигнала, а синяя - прямоугольная волна на выходе. ВЧувствительность можно контролировать, изменяя потенциометр на модуле.
Измерение звуковой частоты на осциллографе
Этот модуль звукового датчика преобразует звуковые волны в атмосфере в прямоугольные волны, частота которых будет равна частоте звуковых волн. Итак, измеряя частоту прямоугольной волны, мы можем найти частоту звуковых сигналов в атмосфере. Чтобы убедиться, что все работает должным образом, я подключил звуковой датчик к моему прицелу, чтобы проверить его выходной сигнал, как показано на видео ниже.
Я включил режим измерения на своем прицеле, чтобы измерить частоту, и использовал приложение для Android (Frequency Sound Generator) из Play Store для генерации звуковых сигналов известной частоты. Как видно из приведенного выше GID, осциллограф смог измерить звуковые сигналы с довольно приличной точностью, значение частоты, отображаемое в прицеле, очень близко к тому, которое отображается на моем телефоне. Теперь, когда мы знаем, что модуль работает, давайте приступим к взаимодействию звукового датчика с Arduino.
Принципиальная схема детектора свистка Arduino
Полная принципиальная схема переключателя детектора свистка Arduino, использующего датчик звука, показана ниже. Схема была нарисована с использованием программного обеспечения Fritzing.
Звуковой датчик и релейный модуль получают питание от вывода 5V Arduino. Выходной контакт звукового датчика подключен к цифровому контакту 8 Arduino, это из-за свойства таймера этого контакта, и мы обсудим это подробнее в разделе программирования. Модуль реле запускается контактом 13, который также подключен к встроенному светодиоду на плате UNO.
На стороне питания переменного тока нейтральный провод напрямую подключается к общему контакту (C) модуля реле, а фаза подключается к нормально разомкнутому (NO) контакту реле через нагрузку переменного тока (лампочка). Таким образом, когда реле срабатывает, контакт NO будет соединен с контактом C, и, таким образом, лампочка будет гореть. В противном случае плафон останется выключенным. После подключения мое оборудование выглядело примерно так.
Предупреждение: Работа с цепью переменного тока может быть опасной, будьте осторожны при работе с проводами под напряжением и избегайте коротких замыканий. Людям, не имеющим опыта работы с электроникой, рекомендуется автоматический выключатель или наблюдение взрослых. Вы были предупреждены!!
Измерение частоты с помощью Arduino
Подобно нашему осциллографу, считывающему частоту входящих прямоугольных волн, мы должны запрограммировать Arduino для вычисления частоты. Мы уже узнали, как это сделать, в нашем руководстве по счетчику частоты, используя функцию pulse in. Но в этом руководстве мы будем использовать библиотеку Freqmeasure для измерения частоты и получения точных результатов. Эта библиотека использует прерывание внутреннего таймера на выводе 8, чтобы измерить, как долго импульс остается включенным. Как только время будет измерено, мы можем вычислить частоту по формуле F = 1 / T. Однако, поскольку мы используем библиотеку напрямую, нам не нужно вдаваться в детали регистров и математику того, как измеряется частота. Библиотеку можно скачать по ссылке ниже:
- Библиотека частотных измерений от pjrc
По указанной выше ссылке будет загружен zip-файл, затем вы можете добавить этот zip-файл в свою IDE Arduino, следуя пути Sketch -> Include Library -> Add.ZIP Library.
Примечание. Использование библиотеки отключитфункцию analogWrite на выводах 9 и 10 на UNO, поскольку таймер будет занят этой библиотекой. Также эти штифты изменятся при использовании других плат.
Программирование вашего Arduino для обнаружения свиста
Полная программа с демонстрацией видео можно найти в нижней части этой страницы. В этом заголовке я объясню программу, разбив ее на небольшие фрагменты.
Как всегда, мы начинаем программу с включения необходимых библиотек и объявления необходимых переменных. Убедитесь, что вы уже добавили библиотеку FreqMeasure.h, как описано в заголовке выше. Состояние переменной представляет собой состояние светодиода, а переменные частота и непрерывность используются для вывода измеренной частоты и ее непрерывности соответственно.
#включают
Внутри функции настройки void мы запускаем мониторинг последовательного порта на скорости 9600 бод для отладки. Затем используйте функцию FreqMeasure.begin () для инициализации контакта 8 для измерения частоты. Мы также объявляем вывод 13 (LED_BUILTIN) выходным.
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Измерения на выводе 8 по умолчанию pinMode (LED_BUILTIN, OUTPUT); }
Внутри бесконечного цикла мы продолжаем прослушивать вывод 8 с помощью функции FreqMeasure.available (). Если есть входящий сигнал, мы измеряем частоту с помощью FreqMeasure.read (). Чтобы избежать ошибки из-за шума, мы измеряли 100 выборок и взяли среднее значение. Код, позволяющий сделать то же самое, показан ниже.
if (FreqMeasure.available ()) { // усреднение нескольких показаний вместе sum = sum + FreqMeasure.read (); count = count + 1; если (количество> 100) { частота = FreqMeasure.countToFrequency (сумма / счет); Serial.println (частота); сумма = 0; count = 0; } }
Здесь вы можете использовать функцию Serial.println (), чтобы проверить значение частоты вашего свистка. В моем случае полученное значение было от 1800 Гц до 2000 Гц. Частота свиста у большинства людей попадает в этот диапазон. Но даже другие звуки, такие как музыка или голос, могут подпадать под эту частоту, поэтому мы будем следить за их непрерывностью, чтобы различать их. Если частота непрерывна 3 раза, мы подтверждаем, что это звук свистка. Итак, если частота находится в диапазоне от 1800 до 2000, мы увеличиваем переменную, называемую непрерывностью.
if (частота> 1800 && частота <2000) {непрерывность ++; Serial.print ("Непрерывность ->"); Serial.println (непрерывность); частота = 0;}
Если значение непрерывности достигает или превышает три, мы изменяем состояние светодиода, переключая переменную, называемую состоянием. Если состояние уже истинно, мы меняем его на ложное и наоборот.
если (непрерывность> = 3 && состояние == ложь) {состояние = истина; непрерывность = 0; Serial.println («Свет включен»); delay (1000);} если (непрерывность> = 3 && состояние == истина) {состояние = ложь; непрерывность = 0; Serial.println («Свет выключен»); задержка (1000);}
Детектор свистка Arduino работает
Как только код и оборудование будут готовы, мы можем начать его тестирование. Убедитесь, что соединения выполнены правильно, и включите модуль. Откройте монитор последовательного порта и начните свистеть, вы можете заметить, что значение непрерывности увеличивается и, наконец, включается или выключается лампа. Ниже показан образец снимка моего последовательного монитора.
Когда последовательный монитор сообщает, что свет включен, на контакте 13 будет высокий уровень, и реле сработает, чтобы включить лампу. Точно так же лампа будет выключена, когда на серийном мониторе появится сообщение « Свет выключен» . После того, как вы проверили работу, вы можете включить установку с помощью адаптера 12 В и начать управлять своим домашним устройством переменного тока с помощью свистка.
Полный рабочий этот проект можно найти на видео, связанное ниже. Надеюсь, вы поняли руководство и получили удовольствие от изучения чего-то нового. Если у вас возникли проблемы с тем, чтобы что-то заработало, оставьте их в разделе комментариев или воспользуйтесь нашим форумом для других технических вопросов.