Spisu treści:

Pool Pi Guy - System alarmowy oparty na sztucznej inteligencji i monitorowanie basenu za pomocą Raspberry Pi: 12 kroków (ze zdjęciami)
Pool Pi Guy - System alarmowy oparty na sztucznej inteligencji i monitorowanie basenu za pomocą Raspberry Pi: 12 kroków (ze zdjęciami)

Wideo: Pool Pi Guy - System alarmowy oparty na sztucznej inteligencji i monitorowanie basenu za pomocą Raspberry Pi: 12 kroków (ze zdjęciami)

Wideo: Pool Pi Guy - System alarmowy oparty na sztucznej inteligencji i monitorowanie basenu za pomocą Raspberry Pi: 12 kroków (ze zdjęciami)
Wideo: ELF/EMBARC Bronchiectasis conference 2023 with subtitles 2024, Lipiec
Anonim
Pool Pi Guy - system alarmowy oparty na sztucznej inteligencji i monitorowanie basenu za pomocą Raspberry Pi
Pool Pi Guy - system alarmowy oparty na sztucznej inteligencji i monitorowanie basenu za pomocą Raspberry Pi

Posiadanie basenu w domu to świetna zabawa, ale wiąże się z wielką odpowiedzialnością. Moim największym zmartwieniem jest monitorowanie, czy ktoś znajduje się w pobliżu basenu bez opieki (szczególnie młodsze dzieci). Moją największą irytacją jest upewnianie się, że linia wody w basenie nigdy nie schodzi poniżej wlotu pompy, co spowoduje wyschnięcie pompy i zniszczenie jej, co kosztuje $$ w naprawach.

Niedawno odkryłem, jak używać Raspberry Pi z OpenCV i TensorFlow, wraz z czujnikiem poziomu wody i zaworem elektromagnetycznym, aby rozwiązać oba problemy - i baw się dobrze!

Okazuje się również, że jest to świetny system alarmowy - aktywowany ruchem, sterowany przez sztuczną inteligencję, nieskończenie konfigurowalny.

Zanurzmy się.

Krok 1: Wielki Plan

W tej instrukcji pokażemy, jak:

  1. Skonfiguruj Raspberry Pi z OpenCV i TensorFlow
  2. Podłącz kamerę internetową za pomocą długiego kabla USB
  3. Napisz algorytm OpenCV do wykrywania ruchu
  4. Użyj TensorFlow do wykrywania obiektów
  5. Skonfiguruj serwer WWW na Raspberry Pi, aby wyświetlać interesujące obrazy
  6. Zintegruj się z IFTTT, aby uruchamiać alerty mobilne w przypadku wykrycia osoby
  7. Podłącz przekaźnik HAT do Raspberry Pi i podłącz go do zaworu elektromagnetycznego, który doda wodę do basenu
  8. Podłącz czujnik poziomu wody do Raspberry Pi i połącz się z nim za pomocą GPIO Pi
  9. Napisz kod, aby to wszystko skleić

Krok 2: Lista zakupów

Lista zakupów
Lista zakupów

Wszystkie komponenty są łatwo dostępne w Amazon. Zapraszam do eksperymentowania i wymiany komponentów - to połowa zabawy!

  1. Malina Pi
  2. Zasilacz Raspberry Pi (nie oszczędzaj tutaj)
  3. Karta pamięci (większa jest lepsza)
  4. Obudowa (ta jest wystarczająco duża, aby pomieścić zarówno Pi, jak i HAT)
  5. Kamera internetowa USB (odpowiednia jest każda kamera internetowa, ale potrzebujesz takiej, która zapewnia dobre obrazy i dobrze równoważy oświetlenie)
  6. Przedłużacz USB (w razie potrzeby - zmierz odległość między Pi a miejscem, w którym umieścisz kamerę)
  7. Płytka przekaźnikowa HAT (ta ma 3 przekaźniki i potrzebujemy tylko jednego, ale niedługo znajdziesz zastosowanie dla pozostałych!)
  8. Elektrozawór
  9. Dopasowanie elektrozaworu 1 i Dopasowanie 2 (to naprawdę zależy od tego, do czego pasujesz, ale u mnie zadziałały)
  10. Zasilanie elektromagnesu (wystarczy dowolne 24 V AC)
  11. Kabel (ponownie, wystarczyłby prawie każdy kabel 2-żyłowy - prąd jest minimalny)
  12. Przełącznik pływakowy poziomu wody (to tylko przykład, sprawdź co bez problemu można podłączyć do Twojego basenu)
  13. Niektóre przewody połączeniowe i złącza przewodów

Krok 3: Skonfiguruj swoje Raspberry Pi

Skonfiguruj swoje Raspberry Pi
Skonfiguruj swoje Raspberry Pi

Raspberry Pi to świetny mały komputer. Kosztuje tylko 35 USD, działa konsekwentnie i ma wiele kompatybilnego oprogramowania i sprzętu. Konfiguracja jest dość prosta:

  1. Sformatuj kartę SD. Wymaga to szczególnej uwagi - Raspberry Pi może uruchamiać się tylko z karty SD sformatowanej w systemie FAT. Postępuj zgodnie z tymi instrukcjami.
  2. Podłącz Raspberry Pi do klawiatury i myszy USB oraz wyświetlacza HDMI i postępuj zgodnie z instrukcjami w samouczku Raspberry Pi NOOBS. Upewnij się, że skonfigurowałeś Wi-Fi i włącz dostęp SSH. Nie zapomnij ustawić hasła dla domyślnego konta pi.
  3. W sieci domowej skonfiguruj statyczny adres IP dla Raspberry Pi - znacznie ułatwiłoby to SSH.
  4. Upewnij się, że masz zainstalowanego klienta ssh na swoim komputerze stacjonarnym/laptopie. Na PC polecam Putty, który można zainstalować stąd.
  5. Odłącz USB i HDMI od Raspberry Pi, uruchom go ponownie i ssh do niego - jeśli wszystko działa, powinieneś zobaczyć coś takiego:

Linux raspberrypi 4.14.98-v7+ #1200 SMP wt lut 12 20:27:48 GMT 2019 armv7l

Programy zawarte w systemie Debian GNU/Linux są wolnym oprogramowaniem; dokładne warunki dystrybucji dla każdego programu są opisane w poszczególnych plikach w /usr/share/doc/*/copyright. Debian GNU/Linux nie jest objęty ABSOLUTNIE ŻADNĄ GWARANCJĄ, w zakresie dozwolonym przez obowiązujące prawo. Ostatnie logowanie: pon 13 maja 10:41:40 2019 z 104.36.248.13 pi@raspberrypi:~ $

Krok 4: Skonfiguruj OpenCV

Konfiguracja OpenCV
Konfiguracja OpenCV

OpenCV to niesamowita kolekcja funkcji manipulacji obrazami dla wizji komputerowej. Pozwoli nam to odczytywać obrazy z kamery internetowej, manipulować nimi w celu znalezienia obszarów ruchu, zapisywania ich i nie tylko. Konfiguracja na Raspberry Pi nie jest trudna, ale wymaga pewnej ostrożności.

Zacznij od zainstalowania virtaulenvwrapper: użyjemy Pythona do wykonania całego naszego programowania, a virtualenv pomoże nam zachować oddzielne zależności dla OpenCV i TensorFlow vs. Flask lub GPIO:

pi@raspberrypi:~ $ sudo pip zainstaluj virtualenvwrapper

Teraz możesz uruchomić „mkvirtualenv”, aby utworzyć nowe środowisko, „workon”, aby nad nim pracować i nie tylko.

Stwórzmy więc środowisko dla naszej manipulacji obrazami, z pythonem 3 jako domyślnym interpreterem (jest rok 2019, nie ma powodu, aby trzymać się starszego pythona 2):

pi@raspberrypi:~ $ mkvirtualenv cv -p python3

… (cv) pi@raspberrypi:~

Jesteśmy teraz gotowi do zainstalowania OpenCV. W większości będziemy postępować zgodnie z doskonałym samouczkiem w Learn OpenCV. Konkretnie wykonaj ich kroki 1 i 2:

sudo apt -y updatesudo apt -y upgrade ## Zainstaluj zależności sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm sudo apt-get -y install git gfortran sudo apt-get -y install libjpeg8-dev libjasper- dev libpng12-dev sudo apt-get -y zainstaluj libtiff5-dev sudo apt-get -y zainstaluj libtiff-dev sudo apt-get -y zainstaluj libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get - y zainstaluj libxine2-dev libv4l-dev cd /usr/include/linux sudo ln -s -f../libv4l1-videodev.h videodev.h sudo apt-get -y zainstaluj libgstreamer0.10-dev libgstreamer-plugins-base0. 10-dev sudo apt-get -y zainstaluj libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y zainstaluj libatlas-base-dev sudo apt-get -y zainstaluj libmp3lame-dev libtheora-dev sudo apt-get -y zainstaluj libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y zainstaluj libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y zainstaluj libavresample-dev sudo apt-get -y zainstaluj x264 v4l-utils sudo apt-get -y zainstaluj libprotobuf -dev protobuf-compiler sudo apt-get -y zainstaluj libgoogle-glog-dev libgflags-dev sudo apt-get -y zainstaluj libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get zainstaluj libqtgui4 sudo apt-get zainstaluj libqt4- test

Teraz możemy po prostu zainstalować OpenCV z powiązaniami Pythona wewnątrz cv virtualenv (nadal w nim jesteś, prawda?) Używając

pip zainstaluj opencv-contrib-python

I to wszystko! Mamy zainstalowane OpenCV na naszym Raspberry Pi, gotowe do robienia zdjęć i filmów, manipulowania nimi i bycia fajnym.

Sprawdź to, otwierając interpreter Pythona i importując opencv i sprawdź, czy nie ma błędów:

(cv) pi@raspberrypi:~ $ python

Python 3.5.3 (domyślnie, 27 września 2018 r., 17:25:39) [GCC 6.3.0 20170516] w systemie Linux Wpisz „help”, „copyright”, „credits” lub „license”, aby uzyskać więcej informacji. >>> importuj cv2 >>>

Krok 5: Konfiguracja TensorFlow

Konfiguracja TensorFlow
Konfiguracja TensorFlow

TensorFlow to framework do uczenia maszynowego / AI opracowany i utrzymywany przez Google. Ma szerokie wsparcie dla modeli głębokiego uczenia się do różnych zadań, w tym wykrywania obiektów w obrazach, i jest teraz dość prosty w instalacji na Raspberry Pi. Wydajność jego lekkich modeli na maleńkim Pi wynosi około 1 klatki na sekundę, co jest całkowicie wystarczające dla aplikacji takiej jak nasza.

Zasadniczo będziemy podążać za doskonałym samouczkiem Edje Electronics, z modyfikacjami możliwymi dzięki nowszym dystrybucjom TensorFlow:

pi@raspberrypi:~ $ workon cv

(cv) pi@raspberrypi:~ $ pip install tensorflow (cv) pi@raspberrypi:~ $ sudo apt-get install libxml2-dev libxslt-dev (cv) pi@raspberrypi:~ $ pip install pillow lxml jupyter matplotlib cython (cv) pi@raspberrypi:~ $ sudo apt-get install python-tk

Teraz musimy skompilować protobuf Google. Wystarczy postępować zgodnie z instrukcjami w kroku 4 tego samego doskonałego samouczka

Na koniec sklonuj i skonfiguruj definicje modeli TensorFlow - wykonaj krok 5 w samouczku Edje Electronics

Zachęcamy do podążania za ich przykładem w kroku 6, jest to świetne wprowadzenie do wykrywania obiektów na Raspberry Pi.

Krok 6: Wykrywanie ruchu za pomocą OpenCV

Zacznijmy od sprawdzenia, czy OpenCV może współpracować z naszą kamerą internetową: ssh do Raspberry Pi, przejdź do cv virtualenv (workon cv), otwórz interpreter Pythona (wystarczy wpisać python) i wprowadź następujące polecenia Pythona:

importuj cv2

cap = cv2. VideoCapture(0) cap.set(cv2. CAP_PROP_FRAME_WIDTH, 1920) cap.set(cv2. CAP_PROP_FRAME_HEIGHT, 1080) ret, frame = cap.read() print('Rozmiar ramki odczytu: {}x{}'.format(ramka.kształt[1], ramka.kształt[0])

Przy odrobinie szczęścia zobaczysz, że OpenCV był w stanie odczytać z kamery klatkę HD.

Możesz użyć cv2.imwrite(ścieżka, ramka), aby zapisać tę ramkę na dysku i sftp ją z powrotem, aby uzyskać rzeczywisty wygląd.

Strategia wykrywania ruchu jest dość prosta:

  1. Pracuj na klatkach o niższej rozdzielczości - nie ma tu potrzeby operowania na full HD
  2. Ponadto rozmyj obrazy, aby zapewnić jak najmniej szumów.
  3. Zachowaj bieżącą średnią z ostatnich N klatek. W przypadku tej aplikacji, w której liczba klatek na sekundę wynosi około 1 FPS (tylko dlatego, że TensorFlow zajmuje trochę czasu na klatkę), stwierdziłem, że N=60 daje dobre wyniki. A ponieważ ostrożna implementacja nie zabiera więcej procesora z większą liczbą klatek, to jest OK (zabiera więcej pamięci - ale jest to znikome, gdy pracujemy z klatkami o niższej rozdzielczości)
  4. Odejmij bieżący obraz od średniej bieżącej (tylko uważaj z pisaniem - musisz uwzględnić wartości dodatnie i ujemne [-255.. 255], więc klatkę trzeba przekonwertować na int)
  5. Możesz wykonać odejmowanie na skali szarości klatki (i średniej) lub zrobić to osobno dla każdego z kanałów RGB, a następnie połączyć wyniki (taką strategię wybrałem, czyniąc ją wrażliwą na zmiany kolorów)
  6. Użyj progu na delcie i usuń hałas przez erozję i dylatację
  7. Na koniec poszukaj konturów obszarów z deltą - są to obszary, w których nastąpił ruch, a bieżący obraz różni się od średniej z poprzednich zdjęć. W razie potrzeby możemy dalej znaleźć ramki ograniczające dla tych konturów.

Zamakowałem kod, aby to zrobić w klasie DeltaFinder python, którą możesz znaleźć na moim githubie tutaj

Krok 7: Wykryj obiekty za pomocą TensorFlow

Jeśli postępowałeś zgodnie z procedurą instalacji TensorFlow, sprawdziłeś już, że masz zainstalowany i działa TensorFlow.

W celu wykrywania ludzi w ogólnej scenie plenerowej modele, które są wstępnie przeszkolone w zestawie danych COCO, działają całkiem dobrze - dokładnie taki model, który pobraliśmy na koniec instalacji TensorFlow. Musimy go tylko użyć do wnioskowania!

Ponownie umieściłem ładowanie i wnioskowanie modelu w klasie Pythona TFClassify, aby było łatwiej, co można znaleźć tutaj.

Krok 8: Skonfiguruj serwer WWW na Raspberry Pi

Skonfiguruj serwer WWW na Raspberry Pi
Skonfiguruj serwer WWW na Raspberry Pi

Najłatwiejszym sposobem uzyskania dostępu do wyników wykrywania obiektów jest przeglądarka internetowa, więc skonfigurujmy serwer WWW na Raspberry Pi. Możemy go wtedy skonfigurować tak, aby wyświetlał zdjęcia z danego katalogu.

Istnieje wiele opcji struktury serwera WWW. Wybrałem Flask. Jest niezwykle konfigurowalny i łatwy do rozszerzenia za pomocą Pythona. Ponieważ „skala”, której potrzebujemy, jest banalna, to w zupełności wystarczyło.

Proponuję zainstalować go w nowym virtualenv, więc:

pi@raspberrypi:~ $ mkvirtualenv webserv

(webserv)pi@raspberrypi: ~ $ pip install Flask

Zwróć uwagę, że przy normalnej konfiguracji sieci będzie on dostępny tylko wtedy, gdy Twoja przeglądarka znajduje się w tej samej bezprzewodowej sieci LAN, co Twoje Raspberry Pi. Możesz utworzyć mapowanie portów / konfigurację NAT na routerze internetowym, aby umożliwić dostęp z zewnątrz - ale odradzam. Napisany przeze mnie kod nie ma na celu zapewnienia bezpieczeństwa, którego potrzebujesz, gdy zezwalasz na ogólny dostęp do Internetu na Twoim Raspberry Pi.

Przetestuj swoją instalację, postępując zgodnie z przewodnikiem szybkiego startu Flask

Krok 9: Powiadomienia mobilne z Raspberry Pi za pomocą IFTTT

Powiadomienia mobilne z Raspberry Pi za pomocą IFTTT
Powiadomienia mobilne z Raspberry Pi za pomocą IFTTT

Naprawdę chcę otrzymywać powiadomienia mobilne o zdarzeniach. W tym przypadku, gdy osoba zostanie wykryta i gdy poziom wody spadnie. Najprostszym sposobem, jaki znalazłem, aby to zrobić, bez konieczności pisania niestandardowej aplikacji mobilnej, jest użycie IFTTT. IFTTT oznacza „If This Then That” i umożliwia wielu rodzajom zdarzeń wyzwalanie wielu rodzajów działań. W naszym przypadku interesuje nas wyzwalacz Webhook IFTTT Maker. Pozwala nam to na wywołanie akcji IFTTT poprzez wysłanie żądania HTTP POST do serwera IFTTT za pomocą specjalnego klucza przypisanego do naszego konta, wraz z danymi, które określają, co się stało. Działanie, które podejmujemy, może być tak proste, jak utworzenie powiadomienia na naszym urządzeniu mobilnym za pomocą aplikacji mobilnej IFTTT, lub coś bardziej złożonego.

Oto jak to zrobić:

  1. Utwórz konto IFTTT na ifttt.com
  2. Po zalogowaniu przejdź do strony ustawień usługi Webhook i wprowadź adres URL w przeglądarce (coś w rodzaju https://maker.ifttt.com/use/. Ta strona internetowa pokaże Ci Twój klucz i adres URL, który ma być używany do uruchamiania działań.
  3. Utwórz aplet IFTTT, który będzie generował powiadomienie mobilne, gdy webhook zostanie wyzwolony ze szczegółami zdarzenia:

    1. Kliknij „Moje aplety”, a następnie „Nowy aplet”.
    2. Kliknij „+to” i wybierz „webhooki”. Kliknij „Odbierz żądanie internetowe”, aby przejść do szczegółów
    3. Nadaj swojemu wydarzeniu nazwę, np. „PoolEvent” i kliknij „Utwórz wyzwalacz”
    4. Kliknij „+to” i wybierz „powiadomienia”. Następnie wybierz „Wyślij bogate powiadomienie z aplikacji IFTTT”
    5. Jako „tytuł” wybierz coś takiego jak „PoolPi”
    6. Dla "wiadomości" wpisz "Wykryto Pool Pi: " i kliknij "dodaj składnik".."Wartość1".
    7. Wróć do adresu URL skopiowanego w kroku 2. Wyświetli adres URL, który będzie używany do wywołania nowo utworzonego apletu. Skopiuj ten adres URL, zastępując symbol zastępczy {event} nazwą zdarzenia (w naszym przykładzie PoolEvent)
  4. Pobierz, zainstaluj i zaloguj się do aplikacji IFTTT na swoje urządzenie mobilne
  5. Uruchom ten skrypt Pythona na swoim Raspberry Pi, aby zobaczyć, jak działa (pamiętaj, że uruchomienie na urządzeniu mobilnym może potrwać kilka sekund lub minut):

żądania importu

request.post('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json={"value1":"Witaj powiadomienia"})

Krok 10: Dodaj przekaźnik HAT do Raspberry Pi i podłącz go do zaworu elektromagnetycznego

Dodaj przekaźnik HAT do Raspberry Pi i podłącz go do zaworu elektromagnetycznego
Dodaj przekaźnik HAT do Raspberry Pi i podłącz go do zaworu elektromagnetycznego
Dodaj przekaźnik HAT do Raspberry Pi i podłącz go do zaworu elektromagnetycznego
Dodaj przekaźnik HAT do Raspberry Pi i podłącz go do zaworu elektromagnetycznego
Dodaj przekaźnik HAT do Raspberry Pi i podłącz go do zaworu elektromagnetycznego
Dodaj przekaźnik HAT do Raspberry Pi i podłącz go do zaworu elektromagnetycznego

Przed kontynuowaniem tego kroku WYŁĄCZ Raspberry Pi: ssh do niego i wpisz „sudo shutdown now”, a następnie odłącz go od zasilania

Naszym celem jest włączanie i wyłączanie zasilania elektrozaworu - zaworu, który może otwierać lub zamykać dopływ wody w oparciu o napięcie 24V AC, które otrzymuje z zasilacza. Przekaźniki to elementy elektryczne, które mogą otwierać lub zamykać obwód w oparciu o sygnał cyfrowy, który może dostarczyć nasze Raspberry Pi. To, co tutaj robimy, to podłączenie przekaźnika do tych cyfrowych pinów sygnałowych Raspberry Pi i zamknięcie obwodu między zasilaczem 24 V AC a zaworem elektromagnetycznym.

Piny w Raspberry Pi, które mogą działać jako cyfrowe wejście lub wyjście, nazywają się GPIO - General Purpose Input/Output i są rzędem 40 pinów z boku Pi. Przy wyłączonym Pi i mocno włóż do niego przekaźnik HAT. HAT, który wybrałem, ma 3 przekaźniki i użyjemy tylko jednego z nich. Wyobraź sobie, co możesz zrobić z pozostałymi dwoma:)

Teraz włącz ponownie Raspberry Pi. Czerwona dioda "zasilania" na przekaźniku HAT powinna się zaświecić, wskazując, że otrzymuje zasilanie z Pi przez GPIO. Sprawdźmy, czy możemy to kontrolować: ponownie ssh do Pi, wpisz python i wpisz:

importuj gpiozero

dev = gpiozero. DigitalOutputDevice(26, wartość_początkowa = True) dev.off()

Powinieneś usłyszeć słyszalne „kliknięcie”, wskazujące, że przekaźnik jest włączony, i zobaczyć, jak zapala się dioda LED wskazująca, że pierwszy przekaźnik jest w pozycji podłączonej. Możesz teraz pisać

dev.on()

Co spowodowałoby przełączenie przekaźnika w pozycję „wyłączone” (dziwne, wiem…) i wyjście () z Pythona.

Teraz za pomocą kabli połączeniowych i dłuższego kabla podłącz przekaźnik między zasilaczem 24V a elektrozaworem. Zobacz schemat. Na koniec podłącz elektrozawór do kranu za pomocą adapterów i przygotuj się do przetestowania wszystkiego, powtarzając powyższe polecenia - powinny włączać i wyłączać wodę.

Podłącz wąż do elektrozaworu i umieść drugi koniec głęboko w basenie. Masz teraz sterowany komputerowo system uzupełniania basenu i nadszedł czas, aby podłączyć czujnik, który poinformuje go, kiedy należy uruchomić.

Krok 11: Podłącz czujnik poziomu wody

Podłącz czujnik poziomu wody
Podłącz czujnik poziomu wody
Podłącz czujnik poziomu wody
Podłącz czujnik poziomu wody
Podłącz czujnik poziomu wody
Podłącz czujnik poziomu wody
Podłącz czujnik poziomu wody
Podłącz czujnik poziomu wody

Czujnik poziomu wody to po prostu pływak, który łączy obwód elektryczny, gdy pływak jest opuszczony i przerywa go, gdy pływa w górę. Jeśli włożysz go do basenu na odpowiedniej wysokości, pływak będzie się podnosił, gdy poziom wody jest odpowiedni, ale opada, gdy nie ma wystarczającej ilości wody.

Aby Raspberry Pi znało stan czujnika poziomu wody, potrzebujemy Pi do wykrywania obwodu otwartego lub zamkniętego. Na szczęście jest to bardzo proste: te same złącza GPIO, których używamy jako wyjścia cyfrowe do sterowania przekaźnikami, mogą pełnić rolę wejść (stąd I w GPIO). W szczególności, jeśli podłączymy jeden przewód czujnika do +3,3 V na złączu GPIO, a drugi przewód czujnika do pinu, który konfigurujemy jako wejście pull-down (co oznacza, że będzie normalnie na poziomie napięcia GND), ten pin będzie mierzył cyfrowe "wysokie" lub "włączone" napięcie tylko wtedy, gdy czujnik poziomu wody zamyka obwód - gdy poziom wody jest niski. Jako wejście wykorzystałem pin 16 GPIO, który zaznaczyłem na powyższym obrazku.

Kod Pythona do skonfigurowania pinu jako wejścia i przetestowania jego aktualnego stanu to:

importuj gpiozero

level_input = gpiozero. Button(16) water_low = level_input.is_pressed

Jednym z potencjalnych wyzwań jest to, że gdy czujnik po prostu zmienia stan, oscyluje szybko między stanami włączenia i wyłączenia. Rozwiązanie tego problemu jest znane jako „odbicie” i szuka spójnej zmiany stanu przed podjęciem działania. Biblioteka GPIOZERO ma kod do tego, ale z jakiegoś powodu ten kod nie działał dla mnie dobrze. Napisałem prostą pętlę, która wyzwala alerty IFTTT po wykryciu spójnej zmiany stanu, którą można znaleźć w moim repozytorium tutaj.

Krok 12: Napisz kod, aby powiązać wszystko razem

Napisz kod, aby powiązać to wszystko razem
Napisz kod, aby powiązać to wszystko razem

Otóż to. Nasza konfiguracja została zakończona. Możesz napisać własny kod, aby powiązać rzeczy w pełny system, lub użyć kodu, który dostarczam. Aby to zrobić, po prostu stwórz strukturę katalogów i sklonuj repozytorium, tak jak poniżej:

mkdir poolpi

cd poolpi klon git

Następnie edytuj pliki o nazwie ifttt_url.txt w katalogach motion_alert i water_level, aby uzyskać adres URL dla swojego własnego haka sieciowego IFTTT z tajnym kluczem. Możesz użyć dwóch różnych haczyków sieciowych do różnych akcji.

Na koniec chcemy, aby ten kod działał automatycznie. Najprostszym sposobem na osiągnięcie tego jest usługa crontab systemu Linux. Możemy dodać kilka linii crontab dla dwóch głównych zadań:

  1. Uruchamiaj nasze trzy programy: wykrywacz obiektów, czujnik poziomu wody i serwer sieciowy przy każdym ponownym uruchomieniu
  2. Oczyść katalog wyjściowy, usuwając stare zdjęcia i stare pliki wideo (zdecydowałem się usunąć pliki starsze niż 1 dzień i zdjęcia starsze niż 7 dni - możesz eksperymentować)

Aby to zrobić, wpisz crontab -e, co otworzy edytor tekstu nano. Dodaj następujące wiersze na dole pliku:

0 1 * * * find /home/pi/poolpi/output -type f -name "*.avi" -mtime +1 -delete

0 2 * * * find /home/pi/poolpi/output -type f -name "*.jpg" -mtime +7 -delete @reboot python3 /home/pi/poolpi/motion_alert/webserv/webserv.py @reboot python3 /home/pi/poolpi/motion_alert/motion_obj_alert.py @reboot python3 /home/pi/poolpi/water_level/test_water_level.py

Na koniec zrestartuj Raspberry Pi. Teraz jest gotowy, aby Twój basen był pełny i bezpieczny.

Majsterkuj przy konfiguracji, kodzie i nie zapomnij uruchomić mojego repozytorium github i skomentować instrukcje, jeśli uznasz to za przydatne. Zawsze chcę dowiedzieć się więcej.

Miłego robienia!

Wyzwanie IoT
Wyzwanie IoT
Wyzwanie IoT
Wyzwanie IoT

Drugie miejsce w wyzwaniu IoT

Zalecana: