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

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

Вы когда-нибудь хотели управлять электроникой простым хлопком или щелчком? С модулем звукового датчика ваш Arduino может начать «слушать» окружающий мир!

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

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

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

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

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

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

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

Обзор оборудования

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

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

Микрофон улавливает звуковые волны из окружающей среды, обычно в диапазоне частот от 50 Гц до 10 кГц. Затем он преобразует эти звуковые волны в аналоговые сигналы напряжения.

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

Микросхема компаратора LM393 играет важную роль. Она сравнивает аналоговые сигналы от микрофона с пороговым уровнем, установленным потенциометром. Если входящий звук громче порога, выход датчика переключается в LOW. Если звук тише порога, выход остаётся в HIGH.

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

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

Кроме того, модуль имеет два небольших светодиода:

  • Светодиод питания загорается при подаче питания на модуль.

  • Светодиод состояния загорается, когда обнаруженный звук превышает установленный порог.

Распиновка звукового датчика

Модуль звукового датчика имеет всего три контакта:

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

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

GND — контакт земли.

VCC — используется для подачи питания на модуль. Подключается к источнику напряжения от 3,3В до 5В.

Подключение звукового датчика к Arduino

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

Сначала подключите контакт VCC звукового датчика к контакту 5V на Arduino для подачи питания. Затем подключите контакт GND датчика к одному из контактов земли (GND) Arduino. И наконец, подключите контакт OUT датчика к цифровому контакту #8 на Arduino.

В следующей таблице перечислены подключения:

Sound SensorArduino
VCC5V
GNDGND
OUT8

Подключение показано на изображении ниже.

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

Настройка порога

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

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

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

Вот и всё! Ваш звуковой датчик теперь готов к использованию в проектах.

Пример 1 — Базовое обнаружение звука

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

#define sensorPin 8

// Variable to store the time when last event happened
unsigned long lastEvent = 0;

void setup() {
  pinMode(sensorPin, INPUT);  // Set sensor pin as an INPUT
  Serial.begin(9600);
}

void loop() {
  // Read Sound sensor
  int sensorData = digitalRead(sensorPin);

  // If pin goes LOW, sound is detected
  if (sensorData == LOW) {

    // If 25ms have passed since last LOW state, it means that
    // the clap is detected and not due to any spurious sounds
    if (millis() - lastEvent > 25) {
      Serial.println("Clap detected!");
    }

    // Remember when last event happened
    lastEvent = millis();
  }
}

После загрузки кода в Arduino и открытия монитора последовательного порта вы должны увидеть сообщение «Clap detected!» каждый раз, когда датчик улавливает громкий звук, такой как хлопок или щелчок пальцами.

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

Пояснение к коду:

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

#define sensorPin 8

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

unsigned long lastEvent = 0;

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

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

В секции loop() Arduino постоянно проверяет сигнал от звукового датчика. Когда сигнал становится LOW, это означает, что датчик обнаружил звук, превышающий порог, установленный потенциометром.

Однако мы не реагируем сразу при обнаружении LOW. Вместо этого мы проверяем, прошло ли не менее 25 миллисекунд с момента последнего обнаруженного звука. Если столько времени прошло и сигнал по-прежнему LOW, мы считаем это настоящим хлопком или щелчком. Эта проверка времени помогает игнорировать случайные или фоновые шумы, которые могут ошибочно активировать датчик. Не хотелось бы, чтобы датчик реагировал на каждый мелкий звук — только на чёткие хлопки или щелчки.

Когда эти условия выполнены, Arduino выводит «Clap detected!» в монитор последовательного порта.

int sensorData = digitalRead(sensorPin);

if (sensorData == LOW) {

  // If 25ms have passed since last LOW state, it means that
  // the clap is detected and not due to any spurious sounds
  if (millis() - lastEvent > 25) {
    Serial.println("Clap detected!");
  }

  // Remember when last event happened
  lastEvent = millis();
}

Пример 2 — Управление устройствами по хлопку

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

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

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

Подключение

Подключение довольно простое, но есть один очень важный момент:

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

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

Аккуратно разрежьте фазный провод сетевого шнура лампы. Конец провода, идущий от розетки, подключите к клемме COM (Common) реле. Другой конец разрезанного провода (идущий к лампе) подключите к клемме NO (Normally Open). Когда реле включится, оно замкнёт цепь и позволит электричеству поступать к лампе.

В следующих таблицах перечислены подключения:

Sound SensorArduino
VCC5V
GNDGND
OUT7
Relay ModuleArduino
VCC5V
GNDGND
IN8

Изображение ниже поможет правильно собрать схему.

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

Код Arduino

Вот код для управления устройствами по хлопку.

#define sensorPin 7
#define relayPin 8

// Variable to store the time when last event happened
unsigned long lastEvent = 0;
boolean relayState = false;  // Variable to store the state of relay

void setup() {
  pinMode(relayPin, OUTPUT);  // Set relay pin as an OUTPUT pin
  pinMode(sensorPin, INPUT);  // Set sensor pin as an INPUT
}

void loop() {
  // Read Sound sensor
  int sensorData = digitalRead(sensorPin);

  // If pin goes LOW, sound is detected
  if (sensorData == LOW) {

    // If 25ms have passed since last LOW state, it means that
    // the clap is detected and not due to any spurious sounds
    if (millis() - lastEvent > 25) {
      //toggle relay and set the output
      relayState = !relayState;
      digitalWrite(relayPin, relayState ? HIGH : LOW);
    }

    // Remember when last event happened
    lastEvent = millis();
  }
}

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

Пояснение к коду:

Теперь разберём, как работает код.

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

Во-первых, мы объявляем, какой контакт Arduino подключён к управляющему контакту реле. Затем вводим новую переменную relayState. Эта переменная отслеживает, включено реле в данный момент или выключено, чтобы мы могли переключать его при каждом обнаружении хлопка.

#define relayPin 7

boolean relayState = false;

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

pinMode(relayPin, OUTPUT);

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

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