Inhaltsverzeichnis:

Pool Pi Guy - KI-gesteuertes Alarmsystem und Poolüberwachung mit Raspberry Pi - Gunook
Pool Pi Guy - KI-gesteuertes Alarmsystem und Poolüberwachung mit Raspberry Pi - Gunook

Video: Pool Pi Guy - KI-gesteuertes Alarmsystem und Poolüberwachung mit Raspberry Pi - Gunook

Video: Pool Pi Guy - KI-gesteuertes Alarmsystem und Poolüberwachung mit Raspberry Pi - Gunook
Video: 82-Year-Old Man Covers DROWNING POOLS "Bodies" on Americas Got Talent! 2024, Juli
Anonim
Pool Pi Guy - KI-gesteuertes Alarmsystem und Poolüberwachung mit Raspberry Pi
Pool Pi Guy - KI-gesteuertes Alarmsystem und Poolüberwachung mit Raspberry Pi

Einen Pool zu Hause zu haben macht Spaß, ist aber mit großer Verantwortung verbunden. Meine größte Sorge ist, zu überwachen, ob sich jemand unbeaufsichtigt in der Nähe des Pools befindet (insbesondere jüngere Kinder). Mein größtes Ärgernis ist, sicherzustellen, dass die Wasserleitung des Pools nie unter den Pumpeneingang geht, was die Pumpe trocken laufen lassen und sie zerstören würde, was bei Reparaturen $$$ kostet.

Ich habe vor kurzem herausgefunden, wie man einen Raspberry Pi mit OpenCV und TensorFlow zusammen mit einem Wasserstandssensor und einem Magnetventil verwendet, um beide Probleme zu lösen - und viel Spaß dabei!

Es stellt sich auch als großartiges Alarmsystem heraus - bewegungsaktiviert, KI-gesteuert, stufenlos anpassbar.

Tauchen wir ein.

Schritt 1: Großer Plan

In diesem anweisbaren zeigen wir, wie man:

  1. Einrichten eines Raspberry Pi mit OpenCV und TensorFlow
  2. Schließen Sie eine Webcam über ein langes USB-Kabel an
  3. Schreiben Sie einen OpenCV-Algorithmus, um Bewegungen zu erkennen
  4. Verwenden Sie TensorFlow zur Objekterkennung
  5. Richten Sie einen Webserver auf dem Raspberry Pi ein, um die interessanten Bilder anzuzeigen
  6. Integrieren Sie IFTTT, um mobile Warnungen auszulösen, falls eine Person erkannt wird
  7. Schließen Sie einen Relais-HAT an den Raspberry Pi an und verbinden Sie ihn mit einem Magnetventil, das dem Pool Wasser hinzufügen würde
  8. Schließen Sie einen Wasserstandssensor an den Raspberry Pi an und verbinden Sie ihn mit dem GPIO des Pi
  9. Schreiben Sie einen Code, um alles zusammenzukleben

Schritt 2: Einkaufsliste

Einkaufsliste
Einkaufsliste

Alle Komponenten sind bei Amazon erhältlich. Fühlen Sie sich frei zu experimentieren und Komponenten auszutauschen - das ist der halbe Spaß!

  1. Himbeer-Pi
  2. Raspberry Pi Netzteil (hier nicht sparen)
  3. Speicherkarte (größer ist besser)
  4. Gehäuse (dieses ist groß genug, um sowohl den Pi als auch den HAT unterzubringen)
  5. USB-Webcam (jede Webcam reicht aus, aber Sie möchten eine, die gute Bilder liefert und die Beleuchtung gut ausbalanciert)
  6. USB-Verlängerungskabel (bei Bedarf - messen Sie den Abstand zwischen dem Pi und der Stelle, an der Sie die Kamera platzieren würden)
  7. Relaisplatine HAT (diese hat 3 Relais und wir brauchen nur eins, aber für die anderen wirst du schon bald eine Verwendung finden!)
  8. Magnet
  9. Magnetarmatur 1 und Armatur 2 (das hängt wirklich davon ab, an was Sie die Magnetspule anbringen, aber diese haben bei mir funktioniert)
  10. Magnetstromversorgung (jede 24V AC würde reichen)
  11. Kabel (auch hier würde fast jedes 2-adrige Kabel ausreichen - der Strom ist minimal)
  12. Wasserstands-Schwimmerschalter (dies ist nur ein Beispiel, prüfen Sie, was einfach an Ihren Pool angeschlossen werden kann)
  13. Einige Überbrückungsdrähte und Drahtverbinder

Schritt 3: Richten Sie Ihren Raspberry Pi ein

Richten Sie Ihren Raspberry Pi ein
Richten Sie Ihren Raspberry Pi ein

Raspberry Pi ist ein großartiger kleiner Computer. Es kostet nur 35 US-Dollar, läuft konstant und verfügt über viele kompatible Soft- und Hardware. Die Einrichtung ist ganz einfach:

  1. Formatieren Sie Ihre SD-Karte. Dies erfordert besondere Sorgfalt - Raspberry Pi kann nur von einer FAT-formatierten SD-Karte booten. Befolgen Sie diese Anweisungen.
  2. Verbinden Sie den Raspberry Pi mit einer USB-Tastatur und -Maus sowie einem HDMI-Display und befolgen Sie die Anweisungen im Raspberry Pi NOOBS-Tutorial. Stellen Sie sicher, dass Sie WLAN einrichten und den SSH-Zugriff aktivieren. Vergessen Sie nicht, ein Passwort für das Standard-Pi-Konto einzurichten.
  3. Richten Sie in Ihrem Heimnetzwerk eine statische IP für den Raspberry Pi ein - dies würde die SSH-Verbindung erheblich vereinfachen.
  4. Stellen Sie sicher, dass auf Ihrem Desktop/Laptop ein SSH-Client installiert ist. Für einen PC würde ich Putty empfehlen, das Sie von hier aus installieren können.
  5. Trennen Sie den USB und HDMI vom Raspberry Pi, starten Sie ihn neu und ssh hinein - wenn alles funktioniert hat, sollten Sie so etwas sehen:

Linux raspberrypi 4.14.98-v7+ #1200 SMP Di 12. Feb 20:27:48 GMT 2019 armv7l

Die im Debian GNU/Linux-System enthaltenen Programme sind freie Software; die genauen Vertriebsbedingungen für jedes Programm sind in den einzelnen Dateien in /usr/share/doc/*/copyright beschrieben. Debian GNU/Linux bietet ABSOLUT KEINE GEWÄHRLEISTUNG, soweit dies nach geltendem Recht zulässig ist. Letzter Login: Mo 13. Mai 10:41:40 2019 von 104.36.248.13 pi@raspberrypi:~ $

Schritt 4: OpenCV einrichten

OpenCV einrichten
OpenCV einrichten

OpenCV ist eine erstaunliche Sammlung von Bildbearbeitungsfunktionen für Computer Vision. Es ermöglicht uns, Bilder von der Webcam zu lesen, sie zu manipulieren, um Bewegungsbereiche zu finden, sie zu speichern und vieles mehr. Die Einrichtung auf dem Raspberry Pi ist nicht schwierig, erfordert aber etwas Sorgfalt.

Beginnen Sie mit der Installation von virtaulenvwrapper: Wir verwenden Python für unsere gesamte Programmierung, und virtualenv würde uns helfen, Abhängigkeiten für OpenCV und TensorFlow vs. Flask oder GPIO zu trennen:

pi@raspberrypi:~ $ sudo pip install virtualenvwrapper

Jetzt können Sie "mkvirtualenv" ausführen, um eine neue Umgebung zu erstellen, "workon", um daran zu arbeiten, und mehr.

Erstellen wir also eine Umgebung für unsere Bildbearbeitung mit Python 3 als Standardinterpreter (es ist 2019, es gibt keinen Grund, beim älteren Python 2 zu bleiben):

pi@raspberrypi:~ $ mkvirtualenv cv -p python3

… (Lebenslauf) pi@raspberrypi:~

Wir sind jetzt bereit, OpenCV zu installieren. Wir werden hauptsächlich dem ausgezeichneten Tutorial in Learn OpenCV folgen. Befolgen Sie insbesondere die Schritte 1 und 2:

sudo apt -y updatesudo apt -y upgrade ## Abhängigkeiten installieren 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 installiere libtiff5-dev sudo apt-get -y installiere libtiff-dev sudo apt-get -y installiere libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get - y installiere libxine2-dev libv4l-dev cd /usr/include/linux sudo ln -s -f../libv4l1-videodev.h videodev.h sudo apt-get -y installiere libgstreamer0.10-dev libgstreamer-plugins-base0. 10-dev sudo apt-get -y installiere libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y installiere libatlas-base-dev sudo apt-get -y installiere libmp3lame-dev libtheora-dev sudo apt-get -y installiere libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y installiere libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y installiere libavresample-dev sudo apt-get -y installiere x264 v4l-utils sudo apt-get -y install libprotobuf -dev protobuf-compiler sudo apt-get -y installiere libgoogle-glog-dev libgflags-dev sudo apt-get -y installiere libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get installiere libqtgui4 sudo apt-get installiere libqt4- Prüfung

Jetzt können wir OpenCV einfach mit Python-Bindungen im CV virtualenv installieren (du bist immer noch drin, oder?) mit

pip install opencv-contrib-python

Und das ist es! Wir haben OpenCV auf unserem Raspberry Pi installiert, bereit, um Fotos und Videos aufzunehmen, sie zu bearbeiten und cool zu sein.

Überprüfen Sie dies, indem Sie einen Python-Interpreter öffnen und opencv importieren und überprüfen Sie, ob keine Fehler vorliegen:

(cv) pi@raspberrypi:~ $ python

Python 3.5.3 (Standard, 27. September 2018, 17:25:39) [GCC 6.3.0 20170516] unter Linux Geben Sie "help", "copyright", "credits" oder "license" ein, um weitere Informationen zu erhalten. >>> cv2 importieren >>>

Schritt 5: TensorFlow einrichten

TensorFlow einrichten
TensorFlow einrichten

TensorFlow ist ein von Google entwickeltes und gewartetes Framework für maschinelles Lernen / KI. Es bietet umfassende Unterstützung für Deep-Learning-Modelle für eine Vielzahl von Aufgaben, einschließlich der Objekterkennung in Bildern, und ist jetzt ziemlich einfach auf dem Raspberry Pi zu installieren. Die Leistung seiner leichten Modelle auf dem winzigen Pi beträgt etwa 1 Bild pro Sekunde, was für eine Anwendung wie unsere vollkommen ausreichend ist.

Wir werden grundsätzlich dem exzellenten Tutorial von Edje Electronics folgen, mit Modifikationen, die durch neuere TensorFlow-Distributionen ermöglicht werden:

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

Jetzt müssen wir das Protobuf von Google kompilieren. Befolgen Sie einfach die Anweisungen in Schritt 4 des gleichen hervorragenden Tutorials

Klonen und richten Sie schließlich die Modelldefinitionen von TensorFlow ein - folgen Sie Schritt 5 im Edje Electronics-Tutorial

Folgen Sie auch ihrem Beispiel in Schritt 6, es ist eine großartige Einführung in die Objekterkennung auf dem Raspberry Pi.

Schritt 6: Bewegungserkennung mit OpenCV

Beginnen wir damit, dass OpenCV mit unserer Webcam verbunden werden kann: ssh in den Raspberry Pi, wechseln Sie zum CV virtualenv (workon cv), öffnen Sie einen Python-Interpreter (tippen Sie einfach python ein) und geben Sie die folgenden Python-Befehle ein:

CV2 importieren

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('Bildgröße lesen: {}x{}'.format(frame.shape[1], frame.shape[0])

Mit etwas Glück werden Sie sehen, dass OpenCV ein HD-Frame aus der Kamera lesen konnte.

Sie können cv2.imwrite(path, frame) verwenden, um diesen Frame auf die Festplatte zu schreiben und ihn per sftp zurückzusenden, um einen tatsächlichen Blick darauf zu werfen.

Die Strategie zur Bewegungserkennung ist ziemlich einfach:

  1. Arbeiten Sie mit Frames mit niedrigerer Auflösung - es ist hier nicht erforderlich, mit Full HD zu arbeiten
  2. Verwischen Sie die Bilder außerdem, um so wenig Bildrauschen wie möglich zu gewährleisten.
  3. Behalte einen laufenden Durchschnitt der letzten N Frames. Für diese Anwendung, bei der die Bildrate bei etwa 1 FPS liegt (nur weil TensorFlow pro Bild einige Zeit benötigt), habe ich festgestellt, dass N=60 gute Ergebnisse liefert. Und da eine sorgfältige Implementierung nicht mehr CPU mit mehr Frames benötigt, ist das in Ordnung (es braucht mehr Speicher - aber das ist vernachlässigbar, wenn wir mit Frames mit niedrigerer Auflösung arbeiten).
  4. Subtrahiere das aktuelle Bild vom laufenden Durchschnitt (passe nur beim Tippen auf - du musst positive und negative Werte berücksichtigen [-255.. 255], also muss der Frame in int konvertiert werden)
  5. Sie können die Subtraktion anhand einer Graustufenkonvertierung des Frames (und des Durchschnitts) durchführen oder dies separat für jeden der RGB-Kanäle tun und dann die Ergebnisse kombinieren (diese Strategie habe ich gewählt, da sie empfindlich auf Farbänderungen reagiert).
  6. Verwenden Sie einen Schwellenwert für das Delta und entfernen Sie Rauschen durch Erosion und Dilatation
  7. Suchen Sie schließlich nach Konturen von Bereichen mit einem Delta - in diesen Bereichen ist Bewegung aufgetreten und das aktuelle Bild unterscheidet sich vom Durchschnitt der vorherigen Bilder. Wir können bei Bedarf auch Begrenzungsrahmen für diese Konturen finden.

Den Code dazu habe ich in der DeltaFinder-Python-Klasse gekapselt, die Sie hier in meinem Github finden

Schritt 7: Erkennen von Objekten mit TensorFlow

Wenn Sie das Installationsverfahren von TensorFlow befolgt haben, haben Sie bereits getestet, ob TensorFlow installiert ist und funktioniert.

Um Personen in einer allgemeinen Outdoor-Szene zu erkennen, schneiden Modelle, die auf dem COCO-Datensatz vortrainiert sind, recht gut ab – genau das Modell, das wir am Ende der TensorFlow-Installation heruntergeladen haben. Wir müssen es nur für Schlussfolgerungen verwenden!

Auch hier habe ich das Laden und die Inferenz des Modells in der Python-Klasse TFClassify gekapselt, um die Dinge zu vereinfachen, die Sie hier finden.

Schritt 8: Einrichten eines Webservers auf dem Raspberry Pi

Einrichten eines Webservers auf dem Raspberry Pi
Einrichten eines Webservers auf dem Raspberry Pi

Der einfachste Weg, um auf die Ergebnisse der Objekterkennung zuzugreifen, ist ein Webbrowser, also richten wir einen Webserver auf dem Raspberry Pi ein. Wir können es dann so einrichten, dass Bilder aus einem bestimmten Verzeichnis bereitgestellt werden.

Es gibt mehrere Optionen für ein Webserver-Framework. Ich habe mich für Flask entschieden. Es ist extrem konfigurierbar und einfach mit Python zu erweitern. Da der "Maßstab", den wir brauchen, trivial ist, war es mehr als genug.

Ich schlage vor, es in einer neuen virtuellen Umgebung zu installieren, also:

pi@raspberrypi:~ $ mkvirtualenv webserv

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

Beachten Sie, dass es bei einer normalen Netzwerkeinrichtung nur erreichbar ist, wenn sich Ihr Browser im selben WLAN wie Ihr Raspberry Pi befindet. Sie könnten auf Ihrem Internetrouter eine Portzuordnung / NAT-Konfiguration erstellen, um externen Zugriff zu ermöglichen - aber ich rate davon ab. Der Code, den ich geschrieben habe, versucht nicht, die Sicherheit zu bieten, die Sie benötigen, wenn Sie den allgemeinen Internetzugriff auf Ihren Raspberry Pi erlauben.

Testen Sie Ihre Installation, indem Sie die Flask-Kurzanleitung befolgen

Schritt 9: Mobile Benachrichtigungen von Raspberry Pi mit IFTTT

Mobile Benachrichtigungen von Raspberry Pi mit IFTTT
Mobile Benachrichtigungen von Raspberry Pi mit IFTTT

Ich möchte wirklich mobile Benachrichtigungen erhalten, wenn Ereignisse auftreten. In diesem Fall, wenn eine Person erkannt wird und der Wasserstand sinkt. Der einfachste Weg, dies zu tun, ohne eine benutzerdefinierte mobile App schreiben zu müssen, ist die Verwendung von IFTTT. IFTTT steht für "If This Then That" und ermöglicht vielen Arten von Ereignissen, viele Arten von Aktionen auszulösen. In unserem Fall interessieren wir uns für den IFTTT Maker Webhook Trigger. Dies ermöglicht es uns, eine IFTTT-Aktion auszulösen, indem wir eine HTTP-POST-Anfrage an den IFTTT-Server mit einem speziellen Schlüssel senden, der unserem Konto zugewiesen ist, zusammen mit Daten, die angeben, was passiert ist. Die Aktion, die wir ergreifen, kann so einfach sein wie das Erstellen einer Benachrichtigung auf unserem Mobilgerät mithilfe der mobilen IFTTT-App oder etwas komplexeres.

So geht's:

  1. Erstellen Sie ein IFTTT-Konto auf ifttt.com
  2. Rufen Sie, während Sie angemeldet sind, die Seite mit den Webhook-Diensteinstellungen auf und geben Sie die URL in Ihrem Browser ein (etwa https://maker.ifttt.com/use/. Diese Webseite zeigt Ihnen Ihren Schlüssel und die URL zum Auslösen von Aktionen an.
  3. Erstellen Sie ein IFTTT-Applet, das eine mobile Benachrichtigung generiert, wenn der Webhook mit den Details des Ereignisses ausgelöst wird:

    1. Klicken Sie auf "Meine Applets" und dann auf "Neues Applet".
    2. Klicken Sie auf "+dies" und wählen Sie "Webhooks". Klicken Sie auf "Webanfrage erhalten", um zu den Details zu gelangen
    3. Geben Sie Ihrer Veranstaltung einen Namen, z. B. "PoolEvent" und klicken Sie auf "Trigger erstellen"
    4. Klicken Sie auf "+das" und wählen Sie "Benachrichtigungen". Wählen Sie dann "Rich-Benachrichtigung von der IFTTT-App senden"
    5. Wählen Sie für "Titel" etwas wie "PoolPi"
    6. Für "Nachricht" schreiben Sie "Pool Pi erkannt: " und klicken Sie auf "Zutat hinzufügen".."Wert1".
    7. Gehen Sie zurück zu der URL, die Sie in Schritt 2 kopiert haben. Es wird die URL angezeigt, die zum Aufrufen Ihres neu erstellten Applets verwendet werden soll. Kopieren Sie diese URL und ersetzen Sie den Platzhalter {event} durch den Ereignisnamen (in unserem Beispiel PoolEvent).
  4. Laden Sie die IFTTT-App für Ihr Mobilgerät herunter, installieren Sie sie und melden Sie sich an
  5. Führen Sie dieses Python-Skript auf Ihrem Raspberry Pi aus, um zu sehen, wie es funktioniert (beachten Sie, dass es einige Sekunden oder Minuten dauern kann, bis es auf Ihrem mobilen Gerät ausgelöst wird):

Importanfragen

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

Schritt 10: Fügen Sie dem Raspberry Pi einen Relais-HAT hinzu und verbinden Sie ihn mit einem Magnetventil

Fügen Sie dem Raspberry Pi einen Relais-HAT hinzu und verbinden Sie ihn mit einem Magnetventil
Fügen Sie dem Raspberry Pi einen Relais-HAT hinzu und verbinden Sie ihn mit einem Magnetventil
Fügen Sie dem Raspberry Pi einen Relais-HAT hinzu und verbinden Sie ihn mit einem Magnetventil
Fügen Sie dem Raspberry Pi einen Relais-HAT hinzu und verbinden Sie ihn mit einem Magnetventil
Fügen Sie dem Raspberry Pi einen Relais-HAT hinzu und verbinden Sie ihn mit einem Magnetventil
Fügen Sie dem Raspberry Pi einen Relais-HAT hinzu und verbinden Sie ihn mit einem Magnetventil

Bevor Sie mit diesem Schritt fortfahren, SCHALTEN Sie Ihren Raspberry Pi aus: ssh darauf und geben Sie "sudo shutdown now" ein, dann trennen Sie ihn vom Strom

Unser Ziel ist es, die Stromversorgung eines Magnetventils ein- und auszuschalten - ein Ventil, das die Wasserversorgung basierend auf 24 V Wechselstrom, die es von einer Stromversorgung erhält, öffnen oder schließen kann. Relais sind die elektrischen Komponenten, die einen Stromkreis basierend auf einem digitalen Signal, das unser Raspberry Pi bereitstellen kann, öffnen oder schließen können. Was wir hier tun, ist ein Relais an diese digitalen Signalpins des Raspberry Pi anzuschließen und den Stromkreis zwischen der 24V AC-Stromversorgung und dem Magnetventil zu schließen.

Die Pins auf dem Raspberry Pi, die als digitaler Eingang oder Ausgang fungieren können, heißen GPIO - General Purpose Input/Output und sind die Reihe von 40 Pins an der Seite des Pi. Bei ausgeschaltetem Pi und stecken Sie den Relais-HAT fest hinein. Der von mir gewählte HAT hat 3 Relais, und wir werden nur eines davon verwenden. Stell dir vor, was du alles mit den anderen beiden machen kannst:)

Schalten Sie nun den Raspberry Pi wieder ein. Die rote "Power" -LED am Relais-HAT sollte aufleuchten und anzeigen, dass es vom Pi über den GPIO mit Strom versorgt wird. Lassen Sie uns testen, ob wir es steuern können: ssh erneut in den Pi, geben Sie python ein und geben Sie Folgendes ein:

gpiozero importieren

dev = gpiozero. DigitalOutputDevice(26, initial_value = True) dev.off()

Sie sollten ein hörbares "Klicken" hören, das anzeigt, dass das Relais aktiviert ist, und eine LED leuchtet, die anzeigt, dass sich das erste Relais in der verbundenen Position befindet. Sie können jetzt tippen

dev.on()

Das würde das Relais in die "Aus"-Position (seltsam, ich weiß …) und exit() von Python schalten.

Verbinden Sie nun mit Überbrückungskabeln und dem längeren Kabel das Relais zwischen der 24V-Versorgung und dem Magnetventil. Siehe Diagramm. Schließen Sie schließlich das Magnetventil mit den Adaptern an einen Wasserhahn an und machen Sie sich bereit, alles zu testen, indem Sie die obigen Befehle wiederholen - sie sollten das Wasser ein- und ausschalten.

Schließen Sie einen Schlauch an das Magnetventil an und stecken Sie das andere Ende tief in den Pool. Sie haben jetzt ein computergesteuertes Pool-Nachfüllsystem und es ist an der Zeit, einen Sensor anzuschließen, der ihm sagt, wann er laufen soll.

Schritt 11: Schließen Sie einen Wasserstandssensor an

Schließen Sie einen Wasserstandssensor an
Schließen Sie einen Wasserstandssensor an
Schließen Sie einen Wasserstandssensor an
Schließen Sie einen Wasserstandssensor an
Schließen Sie einen Wasserstandssensor an
Schließen Sie einen Wasserstandssensor an
Schließen Sie einen Wasserstandssensor an
Schließen Sie einen Wasserstandssensor an

Ein Wasserstandssensor ist einfach ein Schwimmer, der einen Stromkreis verbindet, wenn der Schwimmer unten ist, und ihn unterbricht, wenn er oben schwimmt. Wenn Sie es in der richtigen Höhe in den Pool einsetzen, ist der Schwimmer oben, wenn der Wasserstand ausreichend ist, und fällt herunter, wenn nicht genug Wasser vorhanden ist.

Damit der Raspberry Pi den Status des Wasserstandssensors kennt, benötigen wir den Pi, um einen offenen oder geschlossenen Stromkreis zu erkennen. Das ist zum Glück ganz einfach: Die gleichen GPIO-Anschlüsse, die wir als Digitalausgang verwenden, um die Relais zu steuern, können als Eingänge fungieren (daher das I in GPIO). Insbesondere wenn wir einen Draht des Sensors an +3,3 V am GPIO-Anschluss und den anderen Sensordraht an einen Pin anschließen, den wir als Pull-Down-Eingang konfigurieren (was bedeutet, dass er normalerweise auf GND-Spannungspegel liegt), misst dieser Pin eine digitale "hohe" oder "ein"-Spannung nur dann, wenn der Wasserstandssensor den Stromkreis schließt - wenn der Wasserstand niedrig ist. Als Eingang habe ich den GPIO-Pin 16 verwendet, den ich im obigen Bild markiert habe.

Der Python-Code, um den Pin als Eingang zu konfigurieren und seinen aktuellen Zustand zu testen, lautet:

gpiozero importieren

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

Eine potenzielle Herausforderung besteht darin, dass der Sensor, wenn er nur seinen Zustand ändert, schnell zwischen Ein- und Aus-Zuständen oszillieren würde. Die Lösung dafür ist als "Entprellen" bekannt und sucht nach einer konsistenten Zustandsänderung, bevor Maßnahmen ergriffen werden. Die GPIOZERO-Bibliothek hat dafür Code, aber aus irgendeinem Grund hat dieser Code für mich nicht gut funktioniert. Ich habe eine einfache Schleife geschrieben, um IFTTT-Warnungen auszulösen, wenn eine konsistente Zustandsänderung erkannt wird, die Sie hier in meinem Repository finden.

Schritt 12: Schreiben Sie Code, um alles zusammenzufügen

Schreiben Sie Code, um alles zusammenzufügen
Schreiben Sie Code, um alles zusammenzufügen

Das ist es. Unsere Einrichtung ist abgeschlossen. Sie können Ihren eigenen Code schreiben, um die Dinge zu einem vollständigen System zusammenzufügen, oder den von mir bereitgestellten Code verwenden. Erstellen Sie dazu einfach die Verzeichnisstruktur und klonen Sie das Repository wie folgt:

mkdir poolpi

cd poolpi git-klon

Bearbeiten Sie als Nächstes die Dateien ifttt_url.txt in den Verzeichnissen motion_alert und water_level, um die URL für Ihren eigenen IFTTT-Web-Hook mit Ihrem geheimen Schlüssel zu erhalten. Sie können zwei verschiedene Web-Hooks für verschiedene Aktionen verwenden.

Schließlich möchten wir, dass dieser Code automatisch ausgeführt wird. Der einfachste Weg, dies zu erreichen, ist der Linux-Crontab-Dienst. Wir können einige crontab-Zeilen für zwei Hauptaufgaben hinzufügen:

  1. Führen Sie unsere drei Programme aus: den Objektdetektor, den Wasserstandssensor und den Webserver bei jedem Neustart
  2. Bereinigen Sie das Ausgabeverzeichnis, löschen Sie alte Bilder und alte Videodateien (ich habe mich dafür entschieden, Dateien zu löschen, die älter als 1 Tag und Bilder älter als 7 Tage sind - zögern Sie nicht, zu experimentieren)

Geben Sie dazu crontab -e ein, wodurch Ihr Nano-Texteditor geöffnet wird. Fügen Sie am Ende der Datei die folgenden Zeilen hinzu:

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

Starten Sie schließlich Ihren Raspberry Pi neu. Es ist jetzt bereit, Ihren Pool voll und sicher zu halten.

Basteln Sie mit dem Setup, dem Code und vergessen Sie nicht, mein Github-Repository zu markieren und das instructable zu kommentieren, wenn Sie es nützlich finden. Ich bin immer auf der Suche, um mehr zu erfahren.

Viel Spaß beim Machen!

IoT-Herausforderung
IoT-Herausforderung
IoT-Herausforderung
IoT-Herausforderung

Zweiter Platz bei der IoT-Challenge

Empfohlen: