- Wymagane materiały
- Czujnik dźwięku działa
- Pomiar częstotliwości dźwięku na oscyloskopie
- Schemat obwodu wykrywacza gwizdków Arduino
- Pomiar częstotliwości za pomocą Arduino
- Programowanie Arduino do wykrywania gwizdków
- Działający wykrywacz gwizdków Arduino
Jako dziecko fascynował mnie zabawkowy samochód muzyczny, który uruchamia się, gdy klaszczesz w dłonie, a potem, gdy dorastałem, zastanawiałem się, czy możemy użyć tego samego do przełączania świateł i wentylatorów w naszym domu. Fajnie byłoby po prostu włączyć wentylatory i światła, po prostu klaskać w dłonie, zamiast iść leniwym ja do tablicy rozdzielczej. Często jednak działałby nieprawidłowo, ponieważ obwód ten reaguje na każdy głośny hałas otoczenia, taki jak głośne radio lub kosiarka mojego sąsiada. Chociaż budowanie przełącznika klaśnięcia jest również zabawnym projektem.
To wtedy natknąłem się na tę metodę wykrywania gwizdków, w której obwód będzie wykrywał gwizd. Gwizd, w przeciwieństwie do innych dźwięków, będzie miał jednakową częstotliwość przez określony czas, dzięki czemu można go odróżnić od mowy lub muzyki. W tym samouczku nauczymy się, jak wykrywać dźwięk gwizdka, łącząc czujnik dźwięku z Arduino, a gdy zostanie wykryty gwizdek, włączymy lampę prądu przemiennego za pomocą przekaźnika. Po drodze dowiemy się również, jak sygnały dźwiękowe odbierane są przez mikrofon oraz jak mierzyć częstotliwość za pomocą Arduino. Brzmi interesująco, więc zacznijmy od projektu automatyki domowej opartego na Arduino.
Wymagane materiały
- Arduino UNO
- Moduł czujnika dźwięku
- Moduł przekaźników
- Lampa AC
- Podłączanie przewodów
- Płytka prototypowa
Czujnik dźwięku działa
Zanim zagłębimy się w połączenie sprzętowe i kod tego projektu automatyki domowej, przyjrzyjmy się czujnikowi dźwięku. Poniżej przedstawiono czujnik dźwięku zastosowany w tym module. Zasada działania większości czujników dźwięku dostępnych na rynku jest podobna, chociaż wygląd może się nieco zmienić.
Jak wiemy, prymitywnym elementem czujnika dźwięku jest mikrofon. Mikrofon to rodzaj przetwornika, który przetwarza fale dźwiękowe (energię akustyczną) na energię elektryczną. Zasadniczo membrana wewnątrz mikrofonu wibruje na fale dźwiękowe w atmosferze, które wytwarzają sygnał elektryczny na swoim pinie wyjściowym. Ale te sygnały będą miały bardzo małą wielkość (mV) i dlatego nie mogą być przetwarzane bezpośrednio przez mikrokontroler, taki jak Arduino. Również domyślnie sygnały dźwiękowe mają charakter analogowy, stąd wyjście z mikrofonu będzie falą sinusoidalną o zmiennej częstotliwości, ale mikrokontrolery są urządzeniami cyfrowymi i dlatego lepiej działają z falą prostokątną.
Aby wzmocnić te sinusoidy o niskim sygnale i przekształcić je w fale prostokątne, moduł wykorzystuje wbudowany moduł komparatora LM393, jak pokazano powyżej. Wyjście audio o niskim napięciu z mikrofonu jest doprowadzane do jednego pinu komparatora przez tranzystor wzmacniacza, podczas gdy napięcie odniesienia jest ustawiane na drugim pinie za pomocą obwodu dzielnika napięcia z wykorzystaniem potencjometru. Kiedy napięcie wyjściowe audio z mikrofonu przekracza zadane napięcie, komparator osiąga stan wysoki z 5 V (napięcie robocze), w przeciwnym razie komparator pozostaje niski przy 0 V. W ten sposób sinusoida o niskim sygnale może być konwertowana na falę prostokątną wysokiego napięcia (5 V). Poniższa migawka oscyloskopu pokazuje to samo, gdzie żółta fala jest sinusoidą o niskim sygnale, a niebieska włączona to wyjściowa fala prostokątna. Plikczułość można kontrolować, zmieniając potencjometr na module.
Pomiar częstotliwości dźwięku na oscyloskopie
Ten moduł czujnika dźwięku przekształci fale dźwiękowe w atmosferze w fale prostokątne, których częstotliwość będzie równa częstotliwości fal dźwiękowych. Zatem mierząc częstotliwość fali prostokątnej, możemy znaleźć częstotliwość sygnałów dźwiękowych w atmosferze. Aby upewnić się, że wszystko działa tak, jak powinno, podłączyłem czujnik dźwięku do mojego oscyloskopu, aby zbadać jego sygnał wyjściowy, jak pokazano na poniższym filmie.
Włączyłem tryb pomiaru w moim teleskopie, aby zmierzyć częstotliwość i użyłem aplikacji na Androida (Generator dźwięku częstotliwości) ze Sklepu Play, aby wygenerować sygnały dźwiękowe o znanej częstotliwości. Jak widać na powyższym GID-u luneta była w stanie zmierzyć sygnały dźwiękowe z całkiem przyzwoitą dokładnością, wartość częstotliwości wyświetlana w lunecie jest bardzo zbliżona do wyświetlanej na moim telefonie. Teraz, gdy wiemy, że moduł działa, przejdźmy do połączenia czujnika dźwięku z Arduino.
Schemat obwodu wykrywacza gwizdków Arduino
Pełny schemat obwodu dla obwodu przełącznika wykrywacza gwizdków Arduino wykorzystującego czujnik dźwięku pokazano poniżej. Obwód został narysowany za pomocą oprogramowania Fritzing.
Czujnik dźwięku i moduł Relay zasilane są z pinu 5V Arduino. Pin wyjściowy czujnika dźwięku jest podłączony do cyfrowego pinu 8 Arduino, wynika to z właściwości timera tego pinu i omówimy więcej na ten temat w sekcji programowania. Moduł przekaźnika jest wyzwalany przez pin 13, który jest również podłączony do wbudowanej diody LED na płycie UNO.
Po stronie zasilania prądem przemiennym przewód neutralny jest bezpośrednio podłączony do styku wspólnego (C) modułu przekaźnika, podczas gdy faza jest podłączona do styku normalnie otwartego (NO) przekaźnika poprzez obciążenie prądu przemiennego (żarówka). W ten sposób, gdy przekaźnik zostanie wyzwolony, pin NO zostanie połączony z pinem C, a żarówka zaświeci się. W przeciwnym razie blub pozostanie wyłączony. Po wykonaniu połączeń mój sprzęt wyglądał mniej więcej tak.
Ostrzeżenie: Praca z obwodem prądu przemiennego może być niebezpieczna, należy zachować ostrożność podczas obchodzenia się z przewodami pod napięciem i unikać zwarć. Zalecany jest wyłącznik automatyczny lub nadzór osoby dorosłej dla osób, które nie mają doświadczenia w elektronice. Zostałeś ostrzeżony!!
Pomiar częstotliwości za pomocą Arduino
Podobnie jak nasz zakres odczytujący częstotliwość przychodzących fal prostokątnych, musimy zaprogramować Arduino, aby obliczyć częstotliwość. Nauczyliśmy się już, jak to zrobić w naszym samouczku Licznik częstotliwości przy użyciu funkcji impulsu w funkcji. Ale w tym samouczku będziemy używać biblioteki Freqmeasure do pomiaru częstotliwości, aby uzyskać dokładne wyniki. Ta biblioteka wykorzystuje wewnętrzne przerwanie timera na pinie 8, aby zmierzyć, jak długo impuls pozostaje włączony. Po zmierzeniu czasu możemy obliczyć częstotliwość za pomocą wzorów F = 1 / T. Jednakże, ponieważ korzystamy z biblioteki bezpośrednio, nie musimy wchodzić w szczegóły rejestru i matematykę dotyczącą sposobu pomiaru częstotliwości. Bibliotekę można pobrać z linku poniżej:
- Biblioteka pomiarów częstotliwości od pjrc
Powyższy link pobierze plik zip, możesz następnie dodać ten plik zip do swojego Arduino IDE, podążając ścieżką Szkic -> Dołącz bibliotekę -> Dodaj bibliotekę.ZIP.
Uwaga: Korzystanie z biblioteki spowoduje wyłączeniefunkcji analogWrite na pinach 9 i 10 na UNO, ponieważ zegar będzie zajęty przez tę bibliotekę. Również te piny zmienią się, jeśli zostaną użyte inne płyty.
Programowanie Arduino do wykrywania gwizdków
Kompletny program z demonstracji Wideo można znaleźć na dole tej strony. W tym nagłówku wyjaśnię program, dzieląc go na małe fragmenty.
Jak zawsze zaczynamy program od dołączenia wymaganych bibliotek i zadeklarowania wymaganych zmiennych. Upewnij się, że dodałeś już bibliotekę FreqMeasure.h, jak wyjaśniono w powyższym nagłówku. Stan zmiennej reprezentuje stan diody LED, a częstotliwość i ciągłość zmiennych są używane do wyprowadzenia odpowiednio zmierzonej częstotliwości i jej ciągłości.
#zawierać
Wewnątrz funkcji void setup zaczynamy monitor szeregowy z szybkością 9600 bodów w celu debugowania. Następnie użyj funkcji FreqMeasure.begin (), aby zainicjować pin 8 do pomiaru częstotliwości. Deklarujemy również, że wyprowadzany jest pin 13 (LED_BUILTIN).
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Domyślnie mierzy na pinie 8 pinMode (LED_BUILTIN, OUTPUT); }
Wewnątrz nieskończonej pętli nasłuchujemy na pinie 8 za pomocą funkcji FreqMeasure.available (). Jeśli przychodzi sygnał, mierzymy częstotliwość za pomocą funkcji FreqMeasure.read (). Aby uniknąć błędu spowodowanego szumem, mierzymy 100 próbek i pobieramy z tego średnią. Kod umożliwiający to samo pokazano poniżej.
if (FreqMeasure.available ()) { // średnia kilku odczytów razem sum = sum + FreqMeasure.read (); count = count + 1; if (liczba> 100) { częstotliwość = FreqMeasure.countToFrequency (suma / liczba); Serial.println (częstotliwość); suma = 0; count = 0; } }
Możesz tutaj użyć funkcji Serial.println () , aby sprawdzić wartość częstotliwości swojego gwizdka. W moim przypadku otrzymana wartość wynosiła od 1800 Hz do 2000 Hz. Częstotliwość gwizdów większości ludzi będzie mieściła się w tym konkretnym zakresie. Ale nawet inne dźwięki, takie jak muzyka lub głos, mogą mieścić się w tej częstotliwości, więc aby je rozróżnić, będziemy monitorować ciągłość. Jeśli częstotliwość jest ciągła 3 razy, potwierdzamy, że jest to dźwięk gwizdka. Tak więc, jeśli częstotliwość wynosi od 1800 do 2000, zwiększamy zmienną zwaną ciągłością.
if (częstotliwość> 1800 && częstotliwość <2000) {ciągłość ++; Serial.print ("Ciągłość ->"); Serial.println (ciągłość); częstotliwość = 0;}
Jeśli wartość ciągłości osiągnie lub przekroczy trzy, to zmieniamy stan diody LED, przełączając zmienną o nazwie stan. Jeśli stan jest już prawdziwy, zmieniamy go na fałszywy i na odwrót.
if (ciągłość> = 3 && state == false) {state = true; ciągłość = 0; Serial.println ("Światło włączone"); opóźnienie (1000);} if (ciągłość> = 3 && state == true) {state = false; ciągłość = 0; Serial.println ("Światło wyłączone"); opóźnienie (1000);}
Działający wykrywacz gwizdków Arduino
Gdy kod i sprzęt będą gotowe, możemy przystąpić do testowania. Upewnij się, że połączenia są prawidłowe i włącz moduł. Otwórz monitor szeregowy i zacznij gwizdać, możesz zauważyć wzrost wartości ciągłości i wreszcie włączenie lub wyłączenie lampy. Poniżej pokazano przykładowe zdjęcie mojego monitora szeregowego.
Kiedy monitor szeregowy mówi, że światło włączone, pin 13 zostanie ustawiony w stan wysoki i przekaźnik zostanie uruchomiony, aby włączyć lampę. Podobnie lampa zostanie wyłączona, gdy na monitorze szeregowym pojawi się komunikat Light off off . Po sprawdzeniu działania możesz zasilić zestaw za pomocą adaptera 12 V i zacząć sterować urządzeniem domowym AC za pomocą gwizdka.
Kompletny robocza tego projektu można znaleźć na filmie połączonego poniżej. Mam nadzieję, że zrozumiałeś samouczek i nauczyłeś się czegoś nowego. Jeśli masz jakiś problem z uruchomieniem rzeczy, zostaw je w sekcji komentarzy lub skorzystaj z naszego forum, aby uzyskać inne pytania techniczne.