Акустические датчики для освещения – чудо техники, которое экономит ваши деньги. Датчики касания и звуковые Скетч для считывания показаний электретного микрофона

Сегодня разберемся, как работать с модулем датчика звука, он же датчик хлопков KY-037 . Такие датчики часто используются в охранных системах для обнаружения превышения установленного порога шума (обнаружение щелчков замков, шагов, звука двигателя и т.д.). Модуль датчика звука KY-037 так же часто используют для автоматического управления освещением, реагирующим например, на хлопки в ладоши.

На плате мы видим сам датчик в виде микрофона и микросхему компаратора, которая определяет момент превышения порога громкости. А чувствительность этого самого момента (порога громкости), выставляется с помощью переменного резистора (потенциометра) установленного рядом с компаратором. Если порог звука будет превышен, на выходе D0 появится сигнал высокого уровня.

Давайте для начала подключим датчик звука KY-037 к плате Arduino. Возьмём, например отладочную плату Arduino Nano.

Пин G модуля датчика звука KY-037 подключаем к выводу GND платы Ардуино. Пин + датчика звука соединяем с выводом 5V платы Ардуино. Вывод D0 датчика, подключаем к цифровому выводу D5 платы Ардуино.

Настройка датчика звука KY-037.

Подключаем плату Arduino Nano к компьютеру. На модуле датчика хлопков KY-037 , должен сразу загореться индикатор питания L1 . Необходимо сначала взять отвертку и подкрутить подстроечный резистор, настроив тем самым чувствительность датчика. А в настройке чувствительности нам поможет индикатор срабатывания датчика L2 . Если индикатор L2 при включении модуля тоже загорается, крутим подстроечный резистор против часовой стрелки до тех пор, пока не дойдем до момента затухания индикатора. Если же индикатор L2 находится в выключенном состоянии при включении модуля, значит наоборот, крутим подстроечный резистор по часовой стрелке, пока не дойдем до момента, когда индикатор начнет загораться. В итоге в этом месте, где чуть повернув подстроечный резистор в одну или другую сторону, индикатор стремиться потухнуть или загореться, нам нужно повернуть совсем немного против часовой стрелки, чтобы индикатор L2 потух, но при хлопках в ладоши пытался загораться.

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

const int sensorD0 = 5; // Пин Arduino к которому подключен пин D0 датчика void setup () // Настройки { Serial.begin (9600); // Инициализация SerialPort } void loop () // Основной цикл программы { int sensorValue = digitalRead(sensorD0); // получаем сигнал от датчика if (sensorValue == true) // Если пришел сигнал высокого уровня Serial.println(sensorValue); // Выводим цифровое значение на терминал }

Заливаем данный скетч и переходим в меню "Инструменты" - "Монитор порта" . Окно мониторинга порта будет пустым, но как только мы будем хлопать в ладоши, в окне появятся единицы, говорящие о наличии сигнала высокого уровня на выводе D0 модуля датчика звука.

Всё хорошо. Мы настроили датчик и убедились, что наша Ардуинка прекрасно принимает сигнал от него.

Включаем свет по хлопку и выключаем автоматически по таймеру.

Разобрались, как подстроить датчик звука KY-037 и как он реагирует, если превышен установленный порог громкости. Теперь добавим в нашу схему обычный светодиод и напишем простой код, который будет при обнаружении шума зажигать светодиод и тушить его по истечении какого-то времени.

Светодиод подключаем к пину D2 платы Ардуино. Не забываем поставить любой резистор на землю (GND ) светодиода. И загружаем следующий скетч.

const int sensorD0 = 5; // Пин Arduino к которому подключен выход D0 датчика const int diod = 2; // Пин Arduino к которому подключен светодиод void setup () { pinMode(diod, OUTPUT); // устанавливаем цифровой пин 2 в режим выхода } void loop () { int sensorValue = digitalRead(sensorD0); // получаем сигнал с датчика if (sensorValue == 1) //если получен сигнал от датчика в виде единицы { digitalWrite(diod, HIGH); // включаем светодиод delay(4000); // делаем паузу, чтобы светодиод горел 4 секунды } if (sensorValue == 0) // если приходит сигнал от датчика в виде нуля digitalWrite(diod, LOW); // выключаем светодиод }

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

Датчик звука KY-037 включает свет по хлопку и выключает свет по хлопку.

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

const int sensorD0 = 5; // Пин Arduino к которому подключен выход D0 датчика const int diod = 2; // Пин Arduino к которому подключен светодиод int diodState = LOW; // Статус светодиода "выключен" void setup () { pinMode(diod, OUTPUT); // устанавливаем цифровой пин 2 в режим выхода } void loop () { int sensorValue = digitalRead(sensorD0); // получаем сигнал с датчика if (sensorValue == 1 && diodState == LOW) //если порог громкости достигнут и светодиод был ВЫКЛЮЧЕН { digitalWrite(diod, HIGH); // включаем светодиод diodState = HIGH; // устанавливаем статус светодиода "включен" delay(100); // небольшая задержка для фильтрации помех } else // иначе { if (sensorValue == 1 && diodState == HIGH) // если порог громкости достигнут и светодиод был ВКЛЮЧЕН { digitalWrite(diod, LOW); // выключаем светодиод diodState = LOW; // устанавливаем статус светодиода "выключен" delay(100); // небольшая задержка для фильтрации помех } } }

Хлопаем теперь один раз в ладоши, свет зажигается. Хлопаем повторно в ладоши, светодиод тухнет.

Включаем свет по двойному хлопку.

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

const int sensorD0 = 5; // Пин Arduino к которому подключен выход D0 датчика const int diod = 2; // Пин Arduino к которому подключен светодиод int diodState = LOW; // Статус светодиода "выключен" long soundTime=0; // время первого хлопка void setup () { pinMode(diod, OUTPUT); // устанавливаем цифровой пин 2 в режим выхода } void loop () { int sensorValue = digitalRead(sensorD0); // получаем сигнал с датчика if (sensorValue == 1 && diodState == LOW) //если порог громкости достигнут и светодиод был ВЫКЛЮЧЕН { long diodTime=millis(); // записываем текущее время //если текущее время хлопка больше времени последнего хлопка на 100 миллисекунд //и хлопок произошел не позже чем через 1000 миллисекунд после предыдущего //считаем такой хлопок вторым УСПЕШНЫМ if((millis()>soundTime) && ((diodTime-soundTime)>100) && ((diodTime-soundTime)<1000)) { digitalWrite(diod, HIGH); // включаем светодиод diodState = HIGH; // устанавливаем статус светодиода "включен" delay(100); // небольшая задержка для фильтрации помех } soundTime=millis(); //записываем время последнего хлопка } else // иначе { if (sensorValue == 1 && diodState == HIGH) // если порог громкости достигнут и светодиод был ВКЛЮЧЕН { digitalWrite(diod, LOW); // выключаем светодиод diodState = LOW; // устанавливаем статус светодиода "выключен" delay(100); // небольшая задержка для фильтрации помех } } }

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

В принципе основные возникающие вопросы с датчиком звука KY-037 мы разобрали. Остается только напомнить, что на плате есть так же аналоговый вывод A0 , который подсоединяется к любому аналоговому выводу платы Ардуино, например, к выводу A1 . Принимается аналоговый сигнал строкой sensorValue = analogRead(A1); . Напряжение на аналоговом выходе датчика изменяется в зависимости от изменений окружающих шумов. Такой сигнал дает нам возможность применять программную обработку этих самых шумов, анализируя характер колебаний. Это может позволить реагировать не просто на шум в данный момента времени, а создавать даже свою базу различных шумов, опираясь на какие-то ключевые моменты в характерных изменениях показаний сигнала на выходе A0 . В итоге сверки с такой базой шумов, можно реализовать различную реакцию на разные шумы. Но это для тех кто хочет больше погрузиться в программирование и тема скорей всего другой статьи.

Самодельные датчики

На рис. 1 представлено устройство усилителя слабых сигналов. Устройство реализовано на двух однотипных кремниевых транзисторах п-р-п проводимости, обладающих высоким коэффициентом усиления (80- 100 по току). При звуковом воздействии на микрофон ВМ1 переменный сигнал поступает в базу транзистора VT1 и усиливается им. С коллектора транзистора VT2 снимается выходной сигнал, управляющий периферийными или исполнительными устройствами отрицательным фронтом.

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

Оксидный конденсатор С1 сглаживает пульсации напряжения источника питания. Резистор обратной связи R4 предохраняет усилитель слабых сигналов от самовозбуждения.

Выходной ток транзистора VT2 позволяет управлять маломощным электромагнитным реле с рабочим напряжением 5 В и током срабатывания 15...20 мА. Расширенная схема акустического датчика показана на рис. 3.9. В отличие от предыдущей схемы она отличается дополнительными возможностями регулировки усиления и инверсии выходного сигнала.

Расширенная схема акустического датчика

Регулировка усиления слабых сигналов с микрофона ВМ1 осуществляется переменным резистором R6 (см. рис. 2). Чем меньше сопротивление данного резистора, тем больше усиление транзисторного каскада на транзисторе VT1. При длительной практике эксплуатации рекомендуемого узла удалось установить, что при сопротивлении резистора R6 равным нулю возможно самовозбуждение каскада. Чтобы его избежать, последовательно с R6 включают еще один ограничительный резистор сопротивлением 100- 200 Ом.

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

На схеме показаны два выхода, с которых снимается управляющий сигнал для последующих схем и оконечных электронных узлов. С точки "ВЫХОД 1" снимают управляющий сигнал с отрицательным фронтом (который появляется при звуковом воздействии на микрофон ВМ1). С точки "ВЫХОД 2" соответственно инверсный сигнал (с положительным фронтом).

Благодаря применению в качестве оконечного токового усилителя полевого транзистора КП501А (VT2) устройство снижает потребление тока (относительно предыдущей схемы), а также Имеет возможность управления более мощной нагрузкой, например, исполнительным реле с током включения до 200 мА. Этот транзистор можно заменить на КП501 с любым буквенным индексом, а также на более мощный полевой транзистор соответствующей конфигурации.

Эти простые конструкции в налаживании не нуждаются. Все они испытаны при питании от одного и того же стабилизированного источника с напряжением 6 В. Потребляемый ток конструкции (без учета тока потребления реле) не превышает 15 мА.

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

Итак, приступим. Для начала стоит определиться с компонентами и схемой. Принцип работы схемы прост: слабый сигнал с микрофона усиливается и отправляется на аналоговый пин Ардуино. В качестве усилителя я буду использовать операционный усилитель (компаратор). Он обеспечивает гораздо больший коэффициент усиления по сравнению с обычным транзистором. В моем случае этим компаратором будет служить микросхема LM358, ее можно найти буквально где угодно. И стоит она довольно дешево.


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

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


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

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


Далее нам потребуется резистор на 1 кОм.


Три резистора на 10 кОм.


И еще один резистор номиналом 100 кОм – 1 МОм.


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

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


Следующим компонентом является конденсатор на 0.1 мкФ. Он имеет маркировку «104».


И еще один конденсатор, на 4.7 мкФ.


Теперь переходим к сборке. Я собирал схему навесным монтажом.


























Сборка завершена. Схему установил в корпусе, который изготовил из небольшого обрезка пластиковой трубки.
Переходим к тестированию устройства. Я подключу его к плате Arduino UNO. Переходим в среду разработки Ардуино и открываем пример AnalogReadSerial в разделе Basics.
void setup() { Serial.begin(9600);//подключаем Serial соединение на частоте 9600 бод } void loop() { int sensorValue = analogRead(A0); /*считываем значение с нулевого аналогово пина и сохраняем в переменную sensorValue*/ Serial.println(sensorValue); //выводим значение в порт delay(1); //ждем одну миллисекунду для стабилизации }
Перед загрузкой в плату изменяем задержку на 50 миллисекунд и вгружаем. После этого делаем пробный хлопок и следим за показаниями. В момент хлопка они подскакивают, постарайтесь примерно запомнить это значение и вернитесь к скетчу.
В скетч добавляем пару строк.
if (sensorValue > X){ Serial.print ("CLAP"); delay (1000); }
Вместо «Х» вставляете то самое значение, загружаете и снова хлопаете. Так продолжайте до тех пор, пока не подберете оптимальное значение срабатывания. При завышенном значении условие будет выполняться лишь при хлопке на очень близком расстоянии. При заниженном значении условие будет выполняться при малейшем шуме или звуке шагов.

Схема акустического датчика в радиолюбительских конструкциях

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


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


При воздействии на поверхность, с которой контактирует преобразователь В1 в нем генерируются электрические колебания, которые усиливаются предварительным усилителем и преобразуются в логические импульсы компаратором на ОУ А1. Чувствительность устройства регулируют подстроечным сопротивлением R3. Если генерируемое напряжение, появляющееся в преобразователе превышает порог чувствительности ОУ. На его выходе образуются логические импульсы носящие хаотический характер.

Логическое устройство построено на микросборке К561ЛА9. Схемотехническая реализация представляет собой типовой одновибратор по схеме RS-триггера, с блокировкой входа. При подаче напряжения, от источника питания триггер переключается в единичное состояние и остается невосприимчивым к входным импульсам в течении времени пока идет зарядка конденсатора С2 через резистор R6. После завершения зарядки этой емкости триггер разблокируется.

С поступлением первого импульса от акустического датчика триггер переключается в нулевое состояние. Транзисторный ключ VT1-VT2 отпирается и подсоединяет нагрузку реле или сирену из системы охранной сигнализации. (Нагрузку подсоединяют параллельно диоду VD2). При этом начинается зарядка емкости С3 через резистор R13. Пока эта зарядка идет триггер удерживается в нулевом состоянии. Затем, он сбрасывается в единичное и нагрузка отключается.

Для исключения зацикливания схемы из-за собственных акустических колебаний, созданных сиреной существует цепочка C4-R11, которая будет блокировать вход логического устройства, и откроет его только через небольшой временной интервал после отключения нагрузки. Заблокировать логическую схему можно нажатием тумблера S1. Конструкция вернется в рабочий режим через 10 секунд после отпускания тумблера S1. Напряжение питания U п должно лежать в интервале 5-15 Вольт.

Акустический датчик на основе микрофона

Предварительное усиление сигнала происходит в левой части схемы. VT1 типа КТ361 или его более современный аналог, на базу которого через емкость С2 следует сигнал с микрофона M1, который вместе с сопротивлением R4 образует однокаскадный микрофонный усилитель. Транзистор VT2 типа КТ315 является типовым эмиттерным повторителем и осуществляет функцию динамической нагрузки первого каскада. Ток им потребляемый, не должен превышать 0,4-0,5 мА.

Дальнейшее усиление сигнала осуществляется микросхемой DA1 типа КР1407УД2 с малым током потребления. Он включен по схеме дифференциального усилителя. Поэтому синфазные помехи наводимые в соединительных проводах отлично подавляются. Коэффициент ослабления синфазных входных напряжений составляет 100 дБ. Сигнал снимаемый с нагрузочных сопротивлений R6 и R7 следует через конденсаторы С3 и С4 на инвертирующий и неинвертирующий входы ОУ DA1. Коэффициент усиления сигнала можно регулировать путем изменения номиналов сопротивлений R8 и R9. Сопротивления R10, R11 и емкость С5 создают искусственную среднюю точку, в которой напряжение равно половине напряжения блока питания. Сопротивлением R13 задаем необходимый ток потребления микросхемы.

Акустический датчик на транзисторах

На рисунке ниже показана схема простого высоко чувствительного звукового датчика, который управляет нагрузкой при помощи реле. В разработке применен электретный микрофон, при использовании ECM необходим резистор R1 сопротивление от 2,2 кОм до 10 кОм. Первые два биполярных транзистора представляют собой предварительный микрофонный усилитель, R4 С7 в данной схеме устраняют нестабильность усилителя.


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

Вариант 2

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

CMA-4544PF-W или аналогичны;

  • 3 светодиода (зелёный, жёлтый и красный, вот из такого набора , например);
  • 3 резистора по 220 Ом (вот отличный набор резисторов самых распространённых номиналов);
  • соединительные провода (рекомендую вот такой набор);
  • макетная плата (breadboard);
  • персональный компьютер со средой разработки Arduino IDE.
  • 1 Электретный капсюльный микрофон CMA-4544PF-W

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

    2 Схема подключения микрофона к Arduino

    Модуль содержит в себе электретный микрофон, которому необходимо питание от 3 до 10 вольт. Полярность при подключении важна. Подключим модуль по простой схеме:

    • вывод "V" модуля - к питанию +5 вольт,
    • вывод "G" - к GND,
    • вывод "S" - к аналоговому порту "A0" Arduino.

    3 Скетч для считывания показаний электретного микрофона

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

    Const int micPin = A0; // задаём пин, куда подключён микрофон void setup() { Serial.begin(9600); // инициализация послед. порта } void loop() { int mv = analogRead(micPin) * 5.0 / 1024.0 * 1000.0; // значения в милливольтах Serial.println(mv); // выводим в порт }

    Для чего может понадобиться подключать микрофон к Arduino? Например, для измерения уровня шума; для управления роботом: поехать по хлопку или остановиться. Некоторые даже умудряются «обучить» Arduino определять разные звуки и таким образом создают более интеллектуальное управление: робот будет понимать команды «Стоп» и «Иди» (как, например, в статье «Распознавание голоса с помощью Arduino»).

    4 «Эквалайзер» на Arduino

    Давайте соберём своеобразный простейший эквалайзер по приложенной схеме.


    5 Скетч «эквалайзера»

    Немного модифицируем скетч. Добавим светодиоды и пороги их срабатывания.

    Const int micPin = A0; const int gPin = 12; const int yPin = 11; const int rPin = 10; void setup() { Serial.begin(9600); pinMode(gPin, OUTPUT); pinMode(yPin, OUTPUT); pinMode(rPin, OUTPUT); } void loop() { int mv = analogRead(micPin) * 5.0 / 1024.0 * 1000.0; // значения в милливольтах Serial.println(mv); // выводим в порт /* Пороги срабатывания светодиодов настраиваются вами экспериментальным методом: */ if (mv }

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

    Значения порогов, после которых загораются соответствующие светодиоды, зависят от чувствительности микрофона. На некоторых модулях чувствительность задаётся подстроечным резистором, на моём модуле его нет. Пороги получились 2100, 2125 и 2150 мВ. Вам для своего микрофона придётся определить их самим.

    Читайте также: