цифровая электроника
вычислительная техника
встраиваемые системы

 

Детектор свиста на Arduino с использованием датчика звука

Автор: Mike(admin) от 18-06-2019, 07:05

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


Детектор свиста на Arduino с использованием датчика звука

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


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


Датчик звука

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


Детектор свиста на Arduino с использованием датчика звука

Для усиления этих синусоидальных сигналов с низким уровнем напряжения и преобразования их в прямоугольные сигналы модуль использует встроенный компаратор LM393, как показано выше. Выход низкого напряжения аудио от микрофона подается на один из контактов разъема компаратора через усилитель транзистор, а опорное напряжение устанавливается на другом выводе, используя схему делителя напряжения с участием потенциометра. Когда выходное напряжение звука с микрофона превышает заданное напряжение, напряжение компаратора поднимается до 5 В (рабочее напряжение), в противном случае напряжение компаратора остается низким при 0 В. Таким образом, синусоидальная волна низкого сигнала может быть преобразована в прямоугольный сигнал высокого напряжения (5 В). Осциллограмма ниже показывает то же самое, где желтая волна представляет синусоидальную волну слабого сигнала, а синяя – выходной прямоугольный сигнал. Чувствительность можно контролировать, изменяя сопротивление потенциометра на модуле.


Детектор свиста на Arduino с использованием датчика звука

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


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


Детектор свиста на Arduino с использованием датчика звука

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


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


Детектор свиста на Arduino с использованием датчика звука

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


Подобно тому, как мы считываем частоту входящих прямоугольных сигналов, мы должны запрограммировать Arduino для вычисления частоты. В этом уроке мы будем использовать библиотеку Freqmeasure (https://github.com/PaulStoffregen/FreqMeasure/archive/master.zip) для измерения частоты, чтобы получить точные результаты. Эта библиотека использует прерывание внутреннего таймера на выводе 8, чтобы измерить, как долго импульс остается включенным. Как только время измерено, мы можем вычислить частоту, используя формулу F = 1 / T. Однако, поскольку мы используем библиотеку напрямую, нам не нужно вдаваться в подробности регистров и математических данных о том, как измеряется частота. Следует заметить, что использование библиотеки отключит функцию analogWrite на контактах 9 и 10 на Arduino UNO, поскольку таймер будет занят этой библиотекой.


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



#include <FreqMeasure.h> //https://github.com/PaulStoffregen/FreqMeasure
void setup() {
  Serial.begin(9600);
  FreqMeasure.begin(); // Измерение на контакте 8 по умолчанию
  pinMode(LED_BUILTIN, OUTPUT);
}
double sum=0;
int count=0;
bool state = false; 
float frequency;
int continuity =0;
void loop() {
  if (FreqMeasure.available()) {
    // усреднение считываний
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 100) {
      frequency = FreqMeasure.countToFrequency(sum / count);
      Serial.println(frequency); 
      sum = 0;
      count = 0;
    }
  }
    if (frequency>1800 && frequency<2000)
    { continuity++; Serial.print("Continuity -> "); Serial.println(continuity); frequency=0;}
    if (continuity >=3 && state==false)
      {state = true; continuity=0; Serial.println("Light Turned ON"); delay(1000);}
    if (continuity >=3 && state==true)
      {state = false; continuity=0; Serial.println("Light Turned OFF"); delay(1000);}
    digitalWrite(LED_BUILTIN, state);
}

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


Детектор свиста на Arduino с использованием датчика звука

Когда в последовательном мониторе появится сообщение «Light turned on» (Свет включен), на контакте 13 появится высокий уровень напряжения, и реле сработает, чтобы включить лампу. Аналогичным образом лампа будет выключена, когда в последовательном мониторе появится сообщение «Light turned off» (Свет выключен). После того, как вы проверили работу, вы можете включить установку с помощью адаптера 12 В и начать управлять своим бытовым устройством переменного тока с помощью свиста.




© digitrode.ru


Теги: Arduino, датчик звука



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


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

Комментарии:

Оставить комментарий