Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Hardware-Montage
- Schritt 2: Ausgangszustand
- Schritt 3: Python-Skript
- Schritt 4: Trick-or-Treat-Dashboard
Video: Kürbis Pi Trick-or-Treat-Tracker - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Von elizabethnaFolgen Sie mehr vom Autor:
Auf der Suche nach einem schnellen Halloween-Projekt, das in vielerlei Hinsicht nützlich ist? Möchten Sie das Pi Zero WH sinnvoll einsetzen? Möchten Sie anhand von Daten ermitteln, wie viel Süßigkeiten Sie für das nächste Jahr benötigen?
Machen Sie sich bereit, den Pumpkin Pi Trick-or-Treat-Tracker zu bauen! Dieser Pi-in-a-Pumpkin dient gleichzeitig als Dekoration und als Personen-Tracker und ändert seine Farbe und Streams, wenn eine Bewegung erkannt wird. Dieses Projekt sollte bei Null anfangen und nicht länger als einen Nachmittag dauern - pünktlich zu Halloween!
Lieferungen
- Pi Zero WH mit SD-Karte
- PIR-Bewegungssensor
- RGB-LED
- 220 Ohm Widerstände
- (3)Verbindungslinien (F/W, M/W, M/M)
- Tragbarer Akku
- Gefälschter Kürbis
Schritt 1: Hardware-Montage
Sobald Sie Ihren Pi zum Laufen gebracht haben, müssen wir den Bewegungssensor und die LEDs anschließen. Stellen Sie sicher, dass Ihr Pi zu diesem Zeitpunkt nicht an die Stromversorgung angeschlossen ist.
Unser Bewegungssensor erfordert, dass wir ihn an eine 3,3-V-Stromversorgung, Masse und einen Daten-Pin anschließen. Ich habe den 3,3-V-Sensor-Pin an Pin 1 des Pi angeschlossen, den Ground-Sensor-Pin an Pin 6 des Pi und den Datensensor-Pin an Pin 16 des Pi. Das erste Bild zeigt die vollständige Verbindung für den Pi und den Bewegungssensor.
LEDs sind etwas kniffliger als der Bewegungssensor, da sie einen Widerstand benötigen, um korrekt zu funktionieren, ohne sie oder den Pi zu beschädigen. Ich habe drei 220-Ohm-Widerstände verwendet, aber 220- und 330-Ohm-Widerstände werden normalerweise mit LEDs verwendet.
Um alles zu verkabeln, können Sie entweder:
- Löten Sie die LED-Beine an die Widerstände und führen Sie dann die Drähte in das Pi
- Verwenden Sie ein Steckbrett und Verbindungslinien, um alles zu verbinden
- Verwenden Sie Kabelbinder und Isolierband, um alles zu verbinden (wie ich es getan habe).
Wir werden unsere LED an die Pins 11, 13 und 15 anschließen. Dies ist jedoch etwas kniffliger als der Bewegungssensor, da die Beine der LED einer bestimmten Farbe entsprechen! Das lange Bein ist GND; und zumindest bei meiner LED gingen die Beine Rot, GND, Blau, Grün. Ich habe Blau an Pi-Pin 11, Grün an Pi-Pin 13 und Rot an Pi-Pin 15 angeschlossen. Das zweite Bild zeigt die Endstromkreisverbindungen.
Schritt 2: Ausgangszustand
Sicher können wir mit der LED sehen, wann eine Bewegung erkannt wird, aber wie können wir verfolgen, wie viele Trick-or-Treater vorbeigekommen sind, um unsere Süßigkeiten zu stehlen?
Wir werden jedes Mal, wenn eine Bewegung beginnt und aufhört, erkannt zu werden, an ein Dashboard streamen. Da dieses Dashboard von überall mit einer Internetverbindung zugänglich ist, können wir aus der Ferne überwachen, ob sich jemand der Haustür / Süßigkeitenschale nähert oder nicht.
Schritt 1: Registrieren Sie sich für das Initial State AccountGehen Sie zu https://iot.app.initialstate.com und erstellen Sie ein neues Konto.
Schritt 2: Installieren Sie den ISStreamer
Installieren Sie das Initial State Python-Modul auf Ihrem Raspberry Pi. Führen Sie an einer Eingabeaufforderung (vergessen Sie nicht, zuerst eine SSH-Verbindung zu Ihrem Pi herzustellen) den folgenden Befehl aus:
$ cd /home/pi/
$ \curl -sSL https://get.initialstate.com/python -o - | sudo bash
Schritt 3: Machen Sie etwas Automagic
Nach Schritt 2 sehen Sie etwas Ähnliches wie die folgende Ausgabe auf dem Bildschirm:
pi@raspberrypi ~ $ \curl -sSL https://get.initialstate.com/python -o - | sudo bash
Passwort: Beginnen mit ISStreamer Python Einfache Installation! Die Installation kann ein paar Minuten dauern, trinken Sie einen Kaffee:) Aber vergessen Sie nicht, wiederzukommen, ich werde später Fragen haben! Gefunden easy_install: setuptools 1.1.6 Gefunden pip: pip 1.5.6 aus /Library/Python/2.7/site-packages/pip-1.5.6- py2.7.egg (python 2.7) pip Hauptversion: 1 pip Nebenversion: 5 ISStreamer gefunden, aktualisiert… Anforderung bereits aktuell: ISStreamer in /Library/Python/2.7/site-packages Aufräumen… Möchten Sie automatisch ein Beispielskript erhalten? [y/N] Wo möchten Sie das Beispiel speichern? [default:./is_example.py] Bitte wählen Sie aus, welche Initial State App Sie verwenden: 1. app.initialstate.com 2. [NEU!] iot.app.initialstate.com Geben Sie Auswahl 1 oder 2 ein: Geben Sie iot.app ein.initialstate.com-Benutzername: Geben Sie das iot.app.initialstate.com-Passwort ein:
Wenn Sie aufgefordert werden, automatisch ein Beispielskript abzurufen, geben Sie y ein. Dadurch wird ein Testskript erstellt, das wir ausführen können, um sicherzustellen, dass wir Daten in den Initial State streamen können. Die nächste Eingabeaufforderung fragt, wo Sie die Beispieldatei speichern möchten. Sie können entweder einen benutzerdefinierten lokalen Pfad eingeben oder die Eingabetaste drücken, um den Standardspeicherort zu akzeptieren. Schließlich werden Sie gefragt, welche Initial State App Sie verwenden. Wenn Sie kürzlich ein Konto erstellt haben, wählen Sie Option 2 und geben Sie Ihren Benutzernamen und Ihr Passwort ein. Danach ist die Installation abgeschlossen.
Schritt 4: Zugriffsschlüssel
Schauen wir uns das erstellte Beispielskript an. $ nano is_example.py In Zeile 15 sehen Sie eine Zeile, die mit streamer = Streamer(bucket_ … access_key="…" Parameter in derselben Zeile. Diese lange Reihe von Buchstaben und Zahlen ist Ihr Zugangsschlüssel für das Initial State-Konto. Wenn Sie in Ihrem Webbrowser zu Ihrem Initial State-Konto gehen, klicken Sie oben rechts auf Ihren Benutzernamen und gehen Sie dann unter „Meine Einstellungen“finden Sie denselben Zugangsschlüssel unten auf der Seite unter „Streaming-Zugangsschlüssel“.
Jedes Mal, wenn Sie einen Datenstrom erstellen, leitet dieser Zugriffsschlüssel diesen Datenstrom an Ihr Konto weiter (geben Sie Ihren Schlüssel also nicht an Dritte weiter).
Schritt 5: Führen Sie das Beispiel aus
Führen Sie das Testskript aus, um sicherzustellen, dass wir einen Datenstrom zu Ihrem Initial State-Konto erstellen können. Führen Sie Folgendes aus:
$ python is_example.py
Schritt 6: Gewinn
Gehen Sie in Ihrem Webbrowser zu Ihrem Initial State-Konto zurück. Ein neuer Daten-Bucket namens „Python Stream Example“sollte links in Ihrem Log-Regal angezeigt werden (möglicherweise müssen Sie die Seite aktualisieren). Klicken Sie auf diesen Bucket und dann auf das Waves-Symbol, um die Testdaten anzuzeigen.
Schritt 3: Python-Skript
Erstellen Sie ein Skript und öffnen Sie den Texteditor mit folgendem Befehl:
nano vistors.py
Kopieren Sie den Code von hier und fügen Sie ihn in Ihren Texteditor ein.
Bevor wir versuchen, etwas auszuführen, müssen wir einige Änderungen vornehmen und überprüfen, was in unserem Skript passiert.
RPi. GPIO als GPIO importieren
from time import sleep from ISStreamer. Streamer import Streamer # Sagen Sie dem Pi, dass wir sein Nummerierungssystem verwenden werden GPIO.setmode(GPIO. BCM) # Pins, an denen D1 und LED angeschlossen sind PIN = 23 BLAU = 17 GRÜN = 27 ROT = 22 # Geben Sie unseren Bewegungssensor-Pin als Eingang an GPIO.setup(PIN, GPIO. IN) # Geben Sie unsere LED-Pins als Ausgang an GPIO.setup(RED, GPIO. OUT) GPIO.output(RED, 0) GPIO.setup(GREEN, GPIO. OUT) GPIO.output(GRÜN, 0) GPIO.setup(BLUE, GPIO. OUT) GPIO.output(BLUE, 0)
Die Zeilen 1-21 dienen der Initialisierung. Zuerst importieren wir die GPIO-Schnittstelle des Pi und eine Möglichkeit, unser Skript zu schlafen. Dann importieren wir den Initial State Streamer, den wir auf der vorherigen Seite installiert haben.
GPIO.setmode gibt an, welches Nummerierungssystem wir für die Pins verwenden. Anstelle des physischen Standorts verwenden wir das Nummerierungssystem des Pi. Wie in unserem vorherigen Diagramm haben wir die Pins 23, 17, 27 und 22 ausgewählt. Anschließend richten wir den Motion-Pin als Eingang und die LED-Pins als Ausgang ein.
# Bucket-Name des Anfangsstatus (angezeigt)
BUCKET_NAME = ":jack_o_lantern: Trick or Treat Tracker" # Anfangsstatus-Bucket-Schlüssel (versteckt) BUCKET_KEY = "trickortreat" # Anfangsstatus-Zugriffsschlüssel ACCESS_KEY = "Your_Access_Key" # Variablen, die sicherstellen, dass wir nicht streamen, was es gab oder nicht gab motion zweimal hintereinander # Dies spart gesendete Ereignisse und Rechenleistung schonRecordedMotion = False schonRecordedNoMotion = False counter = 0 # Initialisieren des Initial State Streamer streamer = Streamer(bucket_name=BUCKET_NAME, Bucket_key=BUCKET_KEY, access_key=ACCESS_KEY) # Einschalten und einstellen die LED auf gelb GPIO.output (ROT, 1) GPIO.output (GRÜN, 1)
Die Zeilen 23-41 sind wichtig, da wir den Initial State Streamer initialisieren und die LED auf Gelb setzen. Geben Sie Ihren Initial State Access Key in Zeile 28 ein.
# Endlosschleife
while True: # Wenn der Bewegungssensor hoch zieht (Bewegung erkennt): if GPIO.input(PIN) == 1: "Bewegung erkannt" drucken # Wenn wir noch nicht gestreamt haben: falls noch nichtRecordedMotion: counter = counter + 1 # Setze LED auf Rot GPIO.output(RED, 1) GPIO.output(GREEN, 0) # Stream to Initial State streamer.log(":ghost: or:chocolate_bar:?", ":chocolate_bar: Time For Treats!") streamer.log(":candy: Hungry Humans?:candy:", counter) streamer.flush() schonRecordedMotion = True schonRecordedNoMotion = False else: # Skript für 1 Sekunde pausieren sleep(1) else: print "Keine Bewegung erkannt" # Falls wir noch nicht gestreamt haben: falls noch nichtRecordedNoMotion: # LED auf gelb setzen GPIO.output(RED, 1) GPIO.output(GREEN, 1) # Stream auf Initial State streamer.log(":ghost: or:chocolate_bar:?", ":no_pedestrians: No One Around") streamer.flush() schonRecordedNoMotion = True schonRecordedMotion = False sonst: # Pausiere das Skript für 1 Sekunde Schlaf(1)
Die Zeilen 43-77 sind das Fleisch des Codes. Wenn eine Bewegung erkannt wird, prüft das Skript, ob "Time For Treats!" wurde bereits gestreamt. Ist dies nicht der Fall, wird es an den Anfangszustand gesendet und die LED wird auf Rot gesetzt; Wenn ja, wartet das Skript 1 Sekunde und liest dann erneut vom Bewegungssensor. Das gleiche gilt, wenn keine Bewegung erkannt wird.
Es ist Zeit, den Code zu testen! Stellen Sie sicher, dass Sie Ihre bearbeitete Datei mit Ihrem in Zeile 28 hinzugefügten Zugriffsschlüssel gespeichert haben, und geben Sie dann in das Terminal ein:
Python-Besucher.py
Sie sollten sehen, dass die LED aufleuchtet und "Keine Bewegung erkannt" mit dem Ausdruck auf der Befehlszeile beginnt. Versuchen Sie, mit der Hand über den Bewegungssensor zu schwenken - Sie sollten jetzt ein rotes Licht sehen und "Bewegung erkannt" beginnt zu drucken!
Überprüfen Sie nun, ob unsere Messwerte in den Ausgangszustand gestreamt werden.
Schritt 4: Trick-or-Treat-Dashboard
Gehen Sie zum Initial State und sehen Sie sich Ihr Dashboard an! Sie sollten einen Eimer namens "?Trick or Treat Tracker" sehen. Bewegen Sie Ihre Hand in der Nähe des Bewegungssensors und sehen Sie zu, wie er aktualisiert wird!
Mein Dashboard besteht aus 2 Zusammenfassungskacheln, die den letzten Wert und ein Histogramm der Ereignisanzahl anzeigen, damit ich sehen kann, wann der Sensor ausgelöst wurde.
Hier sind einige Dinge zu beachten:
- Wahrscheinlich möchten Sie die Anzahl der "Hungrigen Menschen" durch 2 teilen, um der Tatsache Rechnung zu tragen, dass dieselbe Person zweimal vor dem Bewegungssensor vorbeikommt - auf dem Weg zu Ihrer Tür und auf dem Rückweg. Sie können dies mit Echtzeitausdrücken tun, indem Sie die Gleichung "=math.round(([Hungry Humans?]/2), 0)" verwenden.
- Sie können testen, wie empfindlich Ihr Bewegungssensor zu sein scheint und ihn entsprechend auf Ihrem Gehweg platzieren. Ich schlage vor, es weit genug von der Tür entfernt zu halten, damit es nicht ausgelöst wird, wenn jemand an der Tür steht.
- Sie können auch Textwarnungen einrichten, um Ihnen mitzuteilen, dass sich jemand nähert.
- Wählen Sie ein Hintergrundbild, um Ihrem Dashboard eine etwas gruselige Persönlichkeit zu verleihen!