- Необходими материали
- Звуковият сензор работи
- Измерване на аудио честота на осцилоскоп
- Схема на Arduino за детектор на свирки
- Измерване на честота с Arduino
- Програмиране на вашия Arduino за откриване на свирка
- Arduino детектор за свирка работи
Като дете бях очарован от музикална кола с играчки, която се задейства, когато пляскате с ръце, а след това като пораснах се чудех дали можем да използваме същото, за да превключваме светлините и вентилаторите в нашия дом. Би било готино просто да си включа вентилаторите и светлините, като просто пляскам с ръце, вместо да ходя с мързеливия си аз до таблото за превключване. Но често пъти това може да се повреди, тъй като тази схема ще реагира на всеки силен шум в околната среда, като силно радио или косачка за трева на моя съсед. Въпреки че изграждането на превключвател за пляскане също е забавен проект.
Тогава, когато се натъкнах на този метод за откриване на свирки, при който веригата ще открие свирка. Свиренето за разлика от другите звуци ще има еднаква честота за определено време и следователно може да се различава от речта или музиката. Така че в този урок ще научим как да откриваме звук на свирка, като свързваме звуковия сензор с Arduino и когато се открие свирка, ще превключваме лампа за променлив ток през реле. По пътя ще научим също как звуковите сигнали се приемат от микрофона и как да измерваме честотата с помощта на Arduino. Звучи интересно, така че нека да започнем с базиран на Arduino проект за домашна автоматизация.
Необходими материали
- Arduino UNO
- Модул на звуковия сензор
- Релеен модул
- AC лампа
- Свързване на проводници
- Макет
Звуковият сензор работи
Преди да се потопим в хардуерната връзка и кода за този проект за автоматизация на дома, нека да разгледаме звуковия сензор. Звуковият сензор, използван в този модул, е показан по-долу. Принципът на работа на повечето звукови сензори, предлагани на пазара, е подобен на този, въпреки че външният вид може да се промени малко.
Както знаем, примитивният компонент в звуковия сензор е микрофонът. Микрофонът е тип преобразувател, който преобразува звуковите вълни (акустична енергия) в електрическа енергия. По принцип диафрагмата вътре в микрофона вибрира към звуковите вълни в атмосферата, което произвежда електрически сигнал на изходния му щифт. Но тези сигнали ще бъдат с много ниска величина (mV) и следователно не могат да бъдат обработвани директно от микроконтролер като Arduino. Също така по подразбиране звуковите сигнали са аналогови по своята същност, поради което изходът от микрофона ще бъде синусоида с променлива честота, но микроконтролерите са цифрови устройства и следователно работят по-добре с квадратна вълна.
За да усили тези синусоидални вълни с нисък сигнал и да ги преобразува в квадратни вълни, модулът използва вградения модул за сравнение LM393, както е показано по-горе. Аудио изходът с ниско напрежение от микрофона се подава към единия щифт на компаратора чрез усилвател транзистор, докато референтното напрежение се настройва на другия щифт с помощта на верига на делител на напрежение, включваща потенциометър. Когато изходното аудио напрежение от микрофона надвиши предварително зададеното напрежение, компараторът се повишава с 5V (работно напрежение), в противен случай компараторът остава нисък при 0V. По този начин синусоидалната вълна с нисък сигнал може да бъде преобразуваща в квадратна вълна с високо напрежение (5V). Снимката на осцилоскопа по-долу показва същото, където жълтата вълна е синусоидалната вълна с нисък сигнал, а синята включена е изходната квадратна вълна. Theчувствителността може да се контролира чрез промяна на потенциометъра на модула.
Измерване на аудио честота на осцилоскоп
Този модул за звуков сензор ще преобразува звуковите вълни в атмосферата в квадратни вълни, чиято честота ще бъде равна на честотата на звуковите вълни. Така че чрез измерване на честотата на квадратната вълна можем да намерим честотата на звуковите сигнали в атмосферата. За да съм сигурен, че нещата работят както се предполага, свързах звуковия сензор към обхвата си, за да сондирам изходния му сигнал, както е показано във видеото по-долу.
Включих режима на измерване на обхвата си, за да измервам честотата и използвах приложение за Android (Frequency Sound Generator) от Play Store, за да генерирам звукови сигнали с известна честота. Както можете да видите в горния GID, обхватът успя да измери звукови сигнали с доста прилична точност, стойността на честотата, показана в обхвата, е много близка до тази, показана на моя телефон. Сега, след като знаем, че модулът работи, нека продължим с взаимодействието на звуковия сензор с Arduino.
Схема на Arduino за детектор на свирки
Пълната схема на веригата за превключвателя на детектора за свирки Arduino, използваща звуков сензор, е показана по-долу. Веригата е изтеглена с помощта на софтуер Fritzing.
Звуковият сензор и модулът Relay се захранват от 5V щифт на Arduino. Изходният щифт на звуковия сензор е свързан с цифровия щифт 8 на Arduino, това се дължи на свойството на таймера на този щифт и ще обсъдим повече за това в раздела за програмиране. Релейният модул се задейства от щифт 13, който също е свързан към вградения светодиод на UNO платката.
От страна на захранването с променлив ток неутралният проводник е директно свързан към общия (C) щифт на релейния модул, докато фазата е свързана към нормално отворен (NO) щифт на релето чрез AC натоварване (крушка). По този начин, когато се задейства релето, щифтът NO ще бъде свързан с щифт C и по този начин крушката ще свети. В противен случай вятърът ще остане изключен. След като връзките са направени, хардуерът ми изглеждаше по следния начин.
Предупреждение: Работата с верига с променлив ток може да стане опасна, бъдете внимателни, докато боравите с жици под напрежение и избягвате късо съединение. Прекъсвач или надзор за възрастни се препоръчва за хора, които нямат опит в електрониката. Предупреден си!!
Измерване на честота с Arduino
Подобно на нашия обхват, отчитащ честотата на входящите квадратни вълни, ние трябва да програмираме Arduino, за да изчислим честотата. Вече научихме как да направим това в нашия урок за брояч на честоти, използвайки импулса във функцията. Но в този урок ще използваме библиотеката Freqmeasure за измерване на честотата, за да получим точни резултати. Тази библиотека използва прекъсването на вътрешния таймер на щифт 8, за да измери колко дълго импулсът остава включен. След като времето е измерено, можем да изчислим честотата, използвайки формулите F = 1 / T. Тъй като обаче използваме библиотеката директно, не е необходимо да влизаме в подробностите в регистъра и в математиката на това как се измерва честотата. Библиотеката може да бъде изтеглена от връзката по-долу:
- Библиотека за измерване на честотата от pjrc
Горната връзка ще изтегли zip файл, след което можете да добавите този zip файл към вашата Arduino IDE, като следвате пътя Скица -> Включване на библиотека -> Добавяне на.ZIP библиотека.
Забележка: Използването на библиотеката ще деактивирафункционалността analogWrite на щифтове 9 и 10 на UNO, тъй като таймерът ще бъде зает от тази библиотека. Също така тези щифтове ще се променят, ако се използват други дъски.
Програмиране на вашия Arduino за откриване на свирка
В пълна програма с демонстрация на видео може да се намери в дъното на тази страница. В това заглавие ще обясня програмата, като я разбия на малки фрагменти.
Както винаги, ние започваме програмата, като включваме необходимите библиотеки и декларираме необходимите променливи. Уверете се, че сте добавили библиотеката FreqMeasure.h вече, както е обяснено в горното заглавие. Състоянието на променливата представлява състоянието на светодиода и честотите и непрекъснатостта на променливите се използват съответно за извеждане на измерената честота и нейната непрекъснатост.
#include
Вътре във функцията за настройка на празнотата започваме серийния монитор със скорост 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 ()) { // средно няколко четения заедно сума = сума + FreqMeasure.read (); брой = брой + 1; ако (брой> 100) { честота = FreqMeasure.countToFrequency (сума / брой); Serial.println (честота); сума = 0; брой = 0; } }
Можете да използвате функцията Serial.println () тук, за да проверите стойността на честотата за вашата свирка. В моя случай получената стойност беше от 1800Hz до 2000Hz. Честотата на свирки на повечето хора ще попадне в този конкретен диапазон. Но дори други звуци като музика или глас може да попаднат под тази честота, така че за да ги различим, ще следим за приемственост. Ако честотата е непрекъсната 3 пъти, ние потвърждаваме, че това е звук на свирка. Така че, ако честотата е между 1800 и 2000, тогава увеличаваме променливата, наречена непрекъснатост.
ако (честота> 1800 && честота <2000) {непрекъснатост ++; Serial.print ("Непрекъснатост ->"); Serial.println (непрекъснатост); честота = 0;}
Ако стойността на непрекъснатостта достигне или надвиши три, тогава променяме състоянието на светодиода, като превключваме променливата, наречена състояние. Ако състоянието вече е вярно, ние го променяме на false и обратно.
if (непрекъснатост> = 3 && state == false) {state = true; непрекъснатост = 0; Serial.println ("Светлината е включена"); забавяне (1000);} ако (непрекъснатост> = 3 && състояние == вярно) {състояние = невярно; непрекъснатост = 0; Serial.println ("Светлината е изключена"); забавяне (1000);}
Arduino детектор за свирка работи
След като кодът и хардуерът са готови, можем да започнем да го тестваме. Уверете се, че връзките са правилни и включете модула. Отворете серийния монитор и започнете да свирите, можете да забележите, че стойността на непрекъснатостта се увеличава и накрая включва или изключва лампата. Примерен моментна снимка на моя сериен монитор е показана по-долу.
Когато серийният монитор каже, че светлината е включена на щифта 13, ще бъде повишена и релето ще бъде задействано, за да включи лампата. По същия начин лампата ще бъде изключена, когато серийният монитор каже, че светлината е изключена . След като сте тествали работата, можете да захранвате настройката с помощта на 12V адаптер и да започнете да контролирате вашия домашен уред AC чрез свирка.
В пълно функциониране на този проект може да бъде намерена на видеото връзка по-долу. Надявам се, че сте разбрали урока и сте се радвали да научите нещо ново. Ако имате някакъв проблем да накарате нещата да работят, оставете ги в раздела за коментари или използвайте нашия форум за други технически въпроси.