Spisu treści:

Przekaźnik alarmowy zamrażarki: 5 kroków
Przekaźnik alarmowy zamrażarki: 5 kroków

Wideo: Przekaźnik alarmowy zamrażarki: 5 kroków

Wideo: Przekaźnik alarmowy zamrażarki: 5 kroków
Wideo: #policja ❤️ #kia #randka 2024, Lipiec
Anonim
Przekaźnik alarmu zamrażarki
Przekaźnik alarmu zamrażarki

Nasza zamrażarka znajduje się w pomieszczeniu gospodarczym, które jest odizolowane od naszej przestrzeni życiowej. Czasami drzwi zamrażarki nie zamykają się prawidłowo i włącza się alarm. Problem polega na tym, że nie słyszymy tego, gdy jesteśmy w naszej przestrzeni życiowej. Jak otrzymujemy wiadomość, że drzwi zamrażarki są otwarte? To powszechny problem, w naszych domach mamy urządzenia, które z nami rozmawiają, ale co się stanie, jeśli z jakiegoś powodu ich nie usłyszymy. Zacząłem to trochę dla zabawy, ale może się przydać w poważniejszej aplikacji.

Ten problem składa się z dwóch części, potrzebujemy metody wykrywania alarmu i metody przekazywania tego faktu do naszej przestrzeni życiowej. Projekt, na który się zdecydowałem, polegał na użyciu Raspberry Pi do nasłuchiwania alarmu zamrażarki, a następnie wysyłaniu dźwiękowej wiadomości alarmowej do mojego domowego radia, które obsługuje uPNP. Universal Plug and Play (UpnP) to standard wykrywania i interakcji z usługami oferowanymi przez różne urządzenia w sieci, w tym serwery multimedialne i odtwarzacze, chociaż nie sądzę, aby podczas opracowywania standardu przewidywano zamrażarki. Komunikat ostrzegawczy był głośny i irytujący i powtarza się w nieskończoność, aż do wyłączenia radia.

Zdecydowałem się na wykrycie alarmu za pomocą Raspberry Pi Zero W i Seeed ReSpeaker 2-Mics Pi HAT Raspberry PI Zero to tania wersja Raspberry Pi, a opcja W ma wbudowane WiFi, podczas gdy Seeed Pi HAT jest sprzedawany za mniej niż 10 USD, ma wbudowane diody LED i przycisk użytkownika. Pi HAT to karty rozszerzeń, które podłącza się bezpośrednio do Raspberry Pi, dzięki czemu procedura montażu jest bardzo prosta. Każda wersja Pi byłaby więcej niż zdolna do tego zadania, a wybrany mikrofon można zastąpić, chociaż wykorzystałem wbudowane diody LED w tej kompilacji.

Łatwo sprawdzić, czy radio lub telewizor będą dla Ciebie działać. Bardziej prawdopodobne jest, że zostanie on opisany jako „włączony DLNA” lub podobny. To wykorzystuje uPNP do komunikacji. Na komputerze z systemem Windows wybierz plik mp3 i „Przesyłaj na urządzenie”. Jeśli pojawi się Twoje urządzenie i możesz odtworzyć plik, możesz zacząć.

Podzieliłem oprogramowanie na 2 skrypty Pythona, checkFreezer.py, aby sprawdzić, czy został wywołany alert zamrażarki i raiseAlarm.py, aby podnieść alarm. Skrypty te mogą być opracowywane i testowane oddzielnie i mogą być łatwo dostosowywane lub zastępowane różnymi metodami podnoszenia alarmów przez mikrofony.

Kieszonkowe dzieci

  • Oprogramowanie -
  • Malinowy PI Zero W
  • Seeed ReSpeaker 2-mikrofonowy Pi HAT
  • Radio z obsługą uPNP

Krok 1: Projektowanie detektora

Gdy drzwi zamrażarki są otwarte, a temperatura wzrasta, zamrażarka emituje sygnał dźwiękowy „beep beep beep”. Jak większość elektronicznych sygnałów dźwiękowych, jest to jedna częstotliwość. Pomysł polega na próbkowaniu sygnału wejściowego audio, wykonaniu szybkiej transformacji Fouriera (FFT), która przekształca sygnał oparty na czasie na sygnał oparty na częstotliwości, innymi słowy rozkłada sygnał, aby wyświetlić różne częstotliwości w sygnale. Zobacz instruktażowy analizator widma Raspberry Pi z taśmą LED RGB Możemy szukać wartości szczytowej przy częstotliwości brzęczyka i wyzwalać alarm, gdy brzęczyk jest aktywny przez jakiś czas.

Ten detektor ma 2 wymagania

  • Powinien wykryć brzęczyk, nawet w obecności szumu otoczenia (wyeliminować fałszywe negatywy)
  • Nie powinien być wyzwalany przez hałas otoczenia (wyeliminuj fałszywe alarmy)

Uznałem, że dobrym testem będzie uruchomienie Hoovera w pomieszczeniu gospodarczym. Nie powinien wyzwalać alarmu, a alarm powinien być wyzwalany, gdy włączy się brzęczyk zamrażarki i odkurzacz pracuje.

Krok 2: Konfiguracja detektora

Konfiguracja detektora
Konfiguracja detektora
Konfiguracja detektora
Konfiguracja detektora
Konfiguracja detektora
Konfiguracja detektora

Za pomocą telefonu pobrałem próbki audio jako pliki WAV samego brzęczyka zamrażarki, z hałaśliwym tłem i włączonym Hooverem. Zaadaptowałem kod do wykonania FFT z post Reading Audio Stream for FFT (w razie wątpliwości, plagarize) i użyłem skryptu fourierTest.py do wykreślenia surowych próbek brzęczyka poddanych transformacji Fouriera w cichym, hałaśliwym i bardzo hałaśliwym tle. Skok poziomu przy częstotliwości 645 jest wyraźny na pierwszym wykresie i nadal jest znaczący z bardzo hałaśliwym tłem.

Krok 3: Konstruowanie detektora

Montaż detektora

Bardzo prosta. Pi W ma wbudowane Wi-Fi, a HAT jest podłączony bezpośrednio do pinów GPIO na Pi. Konfiguracja oprogramowania wymaga wykonania kroków

  • Zainstaluj dystrybucję raspbian na Raspberry Pi. Istnieje wiele poradników na ten temat, które mogą wyjaśnić to znacznie lepiej niż ja.
  • Skonfiguruj Wifi (jak wyżej)
  • Wymaga zainstalowanego pakietu ALSA

$ sudo apt-get zainstaluj libasound-dev

$ pip zainstaluj pyalsaaudio

  • Podłącz HAT do Raspberry PI
  • Postępuj zgodnie z instrukcjami na stronie seedowej, aby zainstalować sterowniki dla HAT.
  • Uruchom diagnostykę nasion, aby sprawdzić, czy HAT działa i jest prawidłowo skonfigurowany.

Program detektora odczytuje blok danych jako próbkę z mikrofonu, wykonuje FFT i decyduje, czy wykrył brzęczyk w próbce. Starałem się, aby blok był jak najdłuższy, zmniejszając częstotliwość próbkowania audio do 16kHz i używając największego bufora, jaki byłby akceptowany przez czytnik. Obawiałem się, że obliczenia FFT mogą spowodować porzucanie klatek, ale tak się nie stało.

Posiadanie wstępnie nagranych próbek na moim telefonie znacznie ułatwiło zbudowanie detektora, ponieważ mogłem wykonać całą budowę na stole przed testowaniem na miejscu w zamrażarce.

Szkolenie detektora

Detektor został przeszkolony poprzez skanowanie każdej próbki, gdy nagranie WAV brzęczyka było odtwarzane przez detektor. Program wyprowadza pozycję w widmie FFT o najwyższym poziomie mocy (częstotliwości szczytowej) wraz z poziomem tej częstotliwości szczytowej. Łatwo było znaleźć częstotliwość brzęczyka i poziom mocy, jaką emitował.

Istnieją 2 sposoby na wykrycie sygnału dźwiękowego:-

  1. Czy częstotliwość brzęczyka była częstotliwością szczytową w próbce?
  2. czy poziom mocy przy częstotliwości brzęczyka przekroczył próg?

Każda z metod działała w cichej próbce, ale druga była lepsza z zaszumioną próbką, więc jej użyłem.

Czasem próbka pokrywała sygnał dźwiękowy, czasem między dźwiękami, a po każdych 3 dźwiękach była długa przerwa przed kolejnymi dźwiękami. Aby wiarygodnie wykryć, że wystąpił zestaw sygnałów dźwiękowych, każda próbka miała głos za, jeśli sygnał został wykryty, i przeciw, jeśli nie. Głosy te były ważone, aby ustawić liczbę, która będzie się zwiększać wraz z próbką sygnału dźwiękowego i powoli zanikać pomiędzy czasami. Gdy zliczenie osiągnie próg, alarm może zostać wyzwolony. Jeśli losowy szum zostanie wykryty jako próbka sygnału dźwiękowego, zliczenie wróci do zera.

Potrzebujemy wtedy wag dla głosowania za i przeciw wraz z progiem. Zrobiłem to metodą prób i błędów na kilku próbkach. Nie musiałem określać rzeczywistej częstotliwości brzęczyka, po prostu szukałem wyróżniającej się częstotliwości w widmie FFT.

Krok 4: Wysyłanie wiadomości do radia

Podnoszenie alarmu odbywało się osobnym scenariuszem. Jego zadaniem jest włączenie radia w razie potrzeby, włamanie się do tego, co gra radio i powtarzanie komunikatu alarmowego, dopóki radio nie zostanie ponownie wyłączone. Musiałem dokonać inżynierii wstecznej używanego protokołu uPnP, ponieważ miałem duże problemy z uzyskaniem wiarygodnych informacji lub przykładów. Kilka referencji, które uznałem za przydatne, to

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ To ma ładny przegląd tego, jak to wszystko do siebie pasuje
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Użyłem Wireshark działającego na komputerze z systemem Windows, aby odłączyć sekwencję wiadomości podczas odtwarzania przykładowego pliku z mojego komputera w moim radiu, i po odrobinie manipulacji otrzymałem sekwencję poleceń, która zadziałała. To jest

  • Uruchom wyskakujący serwer internetowy, aby wyświetlić komunikat ostrzegawczy, gdy radio o to poprosi
  • Ustaw poziom głośności na GŁOŚNO (komunikat ostrzegawczy powinien przyciągnąć uwagę wszystkich)
  • Przekaż uri komunikatu ostrzegawczego do radia
  • Odpytywanie radia, aż aktualny stan to „ZATRZYMANY”
  • Pobierz radio, aby „PLAY” uri
  • Powtarzaj ostatnie 2 kroki, aż bieżący stan to „BRAK MEDIA PRESENT”, co oznacza, że alarm został potwierdzony przez wyłączenie radia
  • Na koniec zamknij serwer WWW i wyjdź.

To jest skrypt raiseAlarm.py

Krok 5: Zrób to sam

Zrób to sam
Zrób to sam

Model „detektora” i „podnoszenia alarmu” jest przeznaczony nie tylko do zamrażarek, ale może być przydatny wszędzie tam, gdzie alarm automatyczny musi być przekazywany przez inne medium. Jeśli byłoby to interesujące, możesz spróbować.

Konfigurowanie PI Zero W, w tym mikrofonu

  • Zamontuj sprzęt jak w kroku 3
  • Pobierz skrypty freezer-alarm z tego Instructable lub z repozytorium git, które zawiera kilka dodatkowych utworów

$ git clone

Musisz również zainstalować oprogramowanie, aby korzystać z wbudowanych diod LED APA102. Dołączyłem kopię apa102.py w katalogu roboczym git

Trenuj swój detektor

Do skryptu checkFreezer.py dodałem opcję szkolenia. To uruchamia go samodzielnie i drukuje diagnostykę w wierszu poleceń, ale najpierw musisz nagrać kilka próbek alarmu w cichym środowisku jako pliki WAV i zrobić to samo w hałaśliwym środowisku. Aby ukończyć szkolenie, musisz najpierw znaleźć częstotliwość FFT o najwyższym poziomie („częstotliwość szczytowa”), a następnie poziom progowy dla tej częstotliwości, aby ustawić wyzwalacz. Aby to zrobić, uruchom skrypt checkFreezer w trybie treningowym, z opcją „-t” i odtwórz nagranie alarmu.

$ python checkFreezer.py -t

Spowoduje to uruchomienie skryptu w trybie szkoleniowym. Wypisuje "gotowy", gdy seed HAT został zainicjowany, a dioda LED zmieni kolor na zielony, a następnie linię dla każdego nietrywialnego dźwięku, który słyszy, np.

$ python checkFreezer.py -t

Gotowa częstotliwość szczytowa 55 wyzwolony poziom wyzwalania 1? Fałszywa częstotliwość szczytowa 645 wyzwolony poziom wyzwalania 484? Fałszywa częstotliwość szczytowa 645 poziom wyzwalania 380 wyzwalany? Fałszywe

Częstotliwość szczytowa wynosi w tym przypadku 645 i staje się częstotliwością wyzwalania. Teraz, aby uzyskać poziom wyzwalania, ponownie uruchom checkFreezer, ustawiając wyzwalacz

$ python checkFreezer.py -t --trigger=645

Gotowa częstotliwość szczytowa 645 wyzwolony poziom wyzwalania 1273? Fałszywa szczytowa częstotliwość 645 wyzwolenie poziomu 653? Fałszywa szczytowa częstotliwość 645 wyzwolenie poziomu wyzwalania 641? Fałszywa szczytowa częstotliwość 645 wyzwolenie poziomu 616? Fałszywe

Na koniec potrzebujemy progu wyzwalania, który uruchamia się po wykryciu sygnału dźwiękowego, ale ignoruje hałas, np.

$ python checkFreezer.py -t --trigger=645 --threshold=500

Gotowa częstotliwość szczytowa 645 poziom wyzwalania 581 wyzwolony? Prawdziwa częstotliwość szczytowa 645 poziom wyzwalania 798 wyzwolony? Prawdziwa częstotliwość szczytowa 645 wyzwolenie poziomu 521? Prawdziwe

Przetestuj to z kilkoma zaszumionymi próbkami i powinieneś być w stanie ustalić wartość progową, która rozróżnia dźwięk brzęczyka i hałas otoczenia. Powinieneś również zobaczyć, jak dioda LED zmieni kolor na czerwony, gdy nagranie dźwiękowe będzie odtwarzane przez kilka sekund. Jeśli jest zbyt szybki/wolny, edytuj ustawienia w skrypcie

Łączenie z radiem

Aby skonfigurować skrypty dla własnej konfiguracji, musisz znaleźć adres IP i numer portu używanego przez urządzenie dla usług UPnP. Konfiguracja radiowa powinna je zapewniać. Domyślny numer portu to 8080 i byłoby niespodzianką, gdyby był inny.

Dostarczyłem domyślny komunikat alarmowy, freezer.mp3. Zapraszam do zastąpienia własną wiadomością.

Edytuj skrypt z odpowiednimi adresami IP i uruchom skrypt.

$ python podnieśAlarm.py

Jeśli wszystko jest w porządku, głośny i irytujący komunikat alarmowy rozlegnie się w twoim radiu, dopóki radio nie zostanie wyłączone, anulując alarm.

Podczas działania skryptu uruchamiany jest miniserwer WWW, który obsługuje mp3 z alarmem w radiu, prawdopodobnie ze względów bezpieczeństwa, ale jest on aktywny tylko podczas odtwarzania komunikatu alarmowego.

Na żywo

Usuń flagę treningu „-t” i uruchom checkFreezer z własnymi wartościami, np.

$ python checkFreezer.py --trigger=645 --threshold=200

Aby uruchomić go po ponownym uruchomieniu, dodaj do /etc/rc.local, cd /home/pi/alarm-zamrażarki

(python checkFreezer.py --trigger=645 --threshold=200 > /tmp/freezer 2> /tmp/freezererror &) i wyjdź 0

Zaświeci się zielona dioda LED i jesteś gotowy do działania. Odtwórz nagranie sygnału dźwiękowego alarmu, a po kilku sekundach dioda LED zmieni kolor na czerwony, a w radiu zostanie odtworzony komunikat alarmowy.

Wreszcie

Umieść PI w miejscu blisko zamrażarki, z dala od źródła zasilania. Włącz zasilanie i powinna zaświecić się zielona dioda LED. Przetestuj wywołanie alarmu poprzez pozostawienie otwartych drzwi. Światło powinno zmienić kolor na czerwony, a w radiu pojawi się komunikat alarmowy.

Powodzenie !! Zrobiłeś to. Podaruj sobie długi napój z lodem z zamrażarki, ale nie zapomnij zamknąć drzwi zamrażarki!

Zalecana: