Inhaltsverzeichnis:

Raspberry Pi IoT Tischkicker - Gunook
Raspberry Pi IoT Tischkicker - Gunook

Video: Raspberry Pi IoT Tischkicker - Gunook

Video: Raspberry Pi IoT Tischkicker - Gunook
Video: IoT Project - Connected Foosball 2024, November
Anonim
Raspberry Pi IoT Tischkicker
Raspberry Pi IoT Tischkicker

Willkommen zu meiner Version eines gehackten Tischkickers im Rahmen eines Studentenprojekts für Neue Medien und Kommunikationstechnologie. Ich bin im Grunde mit Tischfußball und Billardtischen aufgewachsen, also dachte ich, es wäre toll, eines dieser Geräte mit dem Internet zu verbinden.

Das Haupt-Setup verwendet einen vorhandenen Tischkicker, der mit einem Raspberry Pi verbunden ist und alle der folgenden Aufgaben ausführen kann:

  • Verwendet GPIO-Pins zum Ansteuern der IR-LED/Empfänger und der 8x8-Punktmatrix-Module
  • Führt eine Flask-Website mit nginx aus
  • Führt eine MySQL/MariaDB-Datenbank zur Datenspeicherung aus

Um dieses Projekt neu erstellen zu können, benötigen Sie die folgenden Fähigkeiten:

Backend:

  • HTML/CSS/Javascript für den Client der Website verstehen
  • Python mit Flask/Flask-SocketIO/Jinja2 für die Serverseite der Website verstehen
  • Grundkenntnisse in MySQL
  • Wissen, wie man einen Webserver betreibt

Prototyp

  • Grundkenntnisse zum Verdrahten eines Stromkreises
  • Löten
  • Grundlegendes Verständnis zum Schreiben eines Skripts in Python
  • Arbeiten mit Linux (Raspbian)
  • Viel Geduld haben, da viel Debugging erforderlich ist

Schritt 1: Die Materialien

Hier ist die Liste mit allen notwendigen Teilen für den Tisch:

  • Raspberry Pi Model 3 (mit Gehäuse)
  • T-Cobbler zum Verbinden des Pi mit dem Steckbrett
  • Kickertisch (Ich habe einen sehr alten Tisch ähnlich diesem verwendet. Muss bereit sein, Löcher darin zu bohren)
  • MAX7219 Arduino-Punktmatrix-Modul (2)
  • IR-LED-Emitter (2+, weil sie kaputt gehen, ähnlich wie dieser)
  • IR-Empfänger (2+, weil sie auch kaputt gehen, ähnlich wie dieser)
  • Einfaches lötfreies Steckbrett
  • Viel, viel Draht (abhängig von der Größe des Tischkickers)
  • Stecker (30+)
  • Buchsenstecker (10+)
  • 100-220 Ohm Widerstände (4+)
  • Lötmaterialien
  • Drahtbänder
  • LED-Halter
  • etwas Holz/Schrauben, falls du den Ball in die Rinne legen willst

Die Gesamtkosten dieses Projekts hängen vollständig von den Kosten Ihres Tischkickers ab (teuer). Außer dem Tisch kostet das Material maximal 150 Euro.

Schritt 2: Der Stromkreis

Der Stromkreis
Der Stromkreis
Der Stromkreis
Der Stromkreis
Der Stromkreis
Der Stromkreis

Bevor Sie versuchen zu löten, montieren Sie alle Komponenten, die ich dringend empfehle, sie zuerst auf einem Steckbrett zu testen. Es ist einfacher, fehlerhafte Komponenten auszutauschen, bevor Sie Stunden damit verbracht haben, sie zu löten.

Zuerst habe ich versucht, die 8x8 LED-Matrix mit einem 74HC595-Schieberegister (erstes Bild) und einem Transistor-Array zu implementieren, aber aufgrund der vielen Drähte und der sehr geringen Leistung bin ich auf das MAX7219-Dot-Matrix-Modul umgestiegen, da es nur 5 Drähte benötigt und direkt von ein SPI-Bus.

Die Schaltung, die ich schließlich verwendet habe, ist mit Fritzing gezeichnet. Bitte beachten Sie, dass die IR LEDs und Empfänger an jeden Ihrer freien GPIO Pins angeschlossen werden können.

Die IR-Empfänger und die LED sollten direkt übereinander liegen und die Oberseite der LED sollte auf den Empfänger gerichtet sein. Weil wir einen direkten Strahl simulieren wollen, der durch die Kugelbewegung unterbrochen werden kann, dann kommt es zu einem Zustandswechsel der DATA-Leitung des Empfängers von 0 auf 1.

Schritt 3: Codieren der Sensoren

Codierung der Sensoren
Codierung der Sensoren

Ich habe den größten Teil dieses Projekts mit Pycharm codiert, da es eine einfache SSH-Bereitstellung auf Ihrem Raspberry Pi mit einem Remote-Interpreter ermöglicht. Ich werde nicht im Detail darauf eingehen, wie dieses Programm funktioniert, aber viele Informationen finden Sie auf der pycharm-Website.

Ich arbeite derzeit noch an dem Projekt, aber sobald alles fertig ist, wird das gesamte Projekt auf meinem Github-Profil verfügbar sein

Der Code für die Sensoren besteht aus 3 Klassen, die in einem Hintergrundthread auf meinem Flask-Server ausgeführt werden (was später erklärt wird):

  1. Die Zielklasse (Link) -Diese Datei initiiert alle separaten Komponenten, die durch Einfügen des korrekten SPI-Geräts/Busses und der Pin-Nummer aufgerufen werden können
  2. Die Matrix-Klasse (Link) – Dies ist die Hauptklasse zum Einschalten des MAX7219-Moduls
  3. Die LED- und Empfängerklasse (Link) - Dies ist die Hauptklasse zum Einschalten des Infrarot-Break-Beams mit separaten Threads, um die CPU-Last des RPi zu reduzieren

Die LED und der Empfänger arbeiten beide mit einer 38kHz-Frequenz und der Empfänger erwartet immer, dass ein 50%-Aufwärts- und ein 50%-Abwärts-Impuls ordnungsgemäß funktioniert.

Schritt 4: Vorbereiten und Platzieren der Sensoren

Vorbereiten und Platzieren der Sensoren
Vorbereiten und Platzieren der Sensoren
Vorbereiten und Platzieren der Sensoren
Vorbereiten und Platzieren der Sensoren
Vorbereiten und Platzieren der Sensoren
Vorbereiten und Platzieren der Sensoren

Jetzt bereiten wir die IR-LED und den Empfänger vor. Im Bild der Tabelle finden Sie die Orte, an denen das RPi und die Sensoren platziert werden sollen.

Aber zuerst müssen wir die Verkabelung vorbereiten:

  1. Stellen Sie sicher, dass Sie die benötigte Kabelmenge von der RPi/Breadboard-Position bis zur Sensorposition messen
  2. Löten Sie die IR-Empfängerstifte an ein Ende des Kabels (COM/GND/V+)
  3. Löten Sie die männlichen Anschlussstücke am anderen Ende des Drahtes

Jetzt bereiten wir die Tabelle vor:

  1. Machen Sie eine grundlegende Zeichnung (basierend auf dem Bild), wo gebohrt werden soll. Es ist sehr wichtig, dass die 2 Löcher übereinander ausgerichtet sind, da dies die Strahlposition ist.
  2. Bohren Sie die Löcher
  3. Wenn Sie einige LED-Halter (Link) haben, können Sie diese in das Loch stecken, um es stabiler zu machen
  4. LED + Empfänger auf beiden Seiten einlegen + kleben
  5. Binden Sie die Drähte fest + kleben Sie sie auf das Holz, damit sie sich nicht zu sehr kreuzen
  6. Stecken Sie die männlichen Stifte auf das Steckbrett gemäß der zuvor bereitgestellten Schaltung

Schritt 5: Vorbereiten und Platzieren des Matrixmoduls

Vorbereiten und Platzieren des Matrixmoduls
Vorbereiten und Platzieren des Matrixmoduls

Als nächstes werden wir die 2 LED-Matrixmodule anschließen

Notiz:

Da ich einen alten Kickertisch benutzt habe, waren wegen Zigarettenspitzen schon Löcher in Richtung des oberen Teils. Wenn Sie diese nicht haben, müssen Sie sie erstellen.

So bereiten Sie die Drähte vor:

  1. Messen Sie den Draht vom Steckbrett zum oberen Teil des Tisches
  2. Löten Sie einige Buchsen an das erste Ende des Drahtes
  3. Löten Sie einige Stecker an das andere Ende des Drahtes

Platzieren der Matrix:

  1. Bringen Sie die Matrix durch das Loch oben heraus
  2. Gurt + Kleben Sie die Drähte innen auf das Holz, um ein Überkreuzen zu vermeiden
  3. Stecken Sie die männlichen Stifte auf das Steckbrett gemäß der zuvor bereitgestellten Schaltung

Irgendwann werde ich einen kleinen DIY-Schritt hinzufügen, um ein Gehäuse für das Matrixmodul hinzuzufügen, aber im Moment sind sie nackt.

Schritt 6: IoT machen

IoT machen
IoT machen

Wenn Sie nur die Punktzahlen registrieren und anzeigen möchten, können Sie das Projekt abschließen, indem Sie ein kleines laufendes Python-Skript schreiben, das eine Schleife wiederholt, bis eine der Punktzahlen 9 erreicht und dann zurückgesetzt wird.

Wenn Sie Ihren Tisch jedoch mit dem Internet verbinden möchten, sollten die nächsten Schritte Ihnen gefallen.

In den nächsten Schritten werden wir folgendes angehen:

  • Konfigurieren des Raspberry Pi
  • Erstellen einer Datenbank zum Speichern
  • Erstellen der Website
  • Online stellen

Wenn Sie mit Git vertraut sind, empfehle ich Ihnen an dieser Stelle, ein Repository auf GitHub/GitLab zu erstellen, um den Überblick über Ihre Dateien zu behalten. Wenn Sie es nicht sind, können Sie einen Ordner mit der gleichen Struktur wie im Bild erstellen.

Das vollständige Projekt wird in Kürze auf GitHub verfügbar sein. Es steht jedoch eine temporäre rar-Datei mit allen notwendigen Dateien zur Verfügung.

Schritt 7: Anschließen des Raspberry Pi

Als nächstes richten wir die Raspberry-Pi-Umgebung ein, dazu müssen Sie die folgenden Schritte ausführen:

  • Verbinden Sie sich über SSH mit Ihrem Rasberry Pi (Sie können PuTTY verwenden)
  • Erstellen Sie einen Ordner (Beispiel mkdir-Projekt) und verschieben Sie ihn mit dem Befehl cd
  • Erstellen Sie in diesem Ordner eine virtuelle Python-Umgebung mit dem Befehl python3 -m venv --system-site-packages env
  • Aktivieren Sie den virtuellen Interpreter mit dem Befehl source /env/bin/activate
  • Installieren Sie die Pakete aus der Requirements.txt mit dem Befehl python -m pip install package-name
  • Übertragen Sie die Dateien aus der zuvor bereitgestellten Datei project_example.rar über SSH in Ihren Projektordner

Jetzt sollten Sie das gesamte Projekt auf Ihrem Raspberry Pi ausführen können. Ich empfehle Ihnen, eine Python-IDE wie PyCharm zu verwenden, die es Ihnen ermöglicht, von Ihrem Remote-Interpreter über SSH zu debuggen und bei Bedarf Änderungen direkt hochzuladen.

Schritt 8: Einrichten der Datenbank

Einrichten der Datenbank
Einrichten der Datenbank

Nun müssen Sie eine sehr einfache Datenbank aufbauen, die auf diesem Modell basiert.

Am einfachsten erstellen Sie Ihre Datenbank in der MySQL-Workbench, wo Sie auch einige Tests durchführen können.

Sobald Sie fertig sind, können Sie einen Dump Ihrer Datenbank exportieren und auf Ihr RPi hochladen und dann mit sudo mariadb < pathtofile/file.sql. ausführen

Schritt 9: Erstellen der Website

Erstellen der Website
Erstellen der Website
Erstellen der Website
Erstellen der Website
Erstellen der Website
Erstellen der Website

Als nächstes können Sie den in der Datei project_example.rar bereitgestellten Code analysieren (und verwenden).

Die Hauptdatei ist die Flask.py, die das Brot und die Butter dieses Projekts ist:

  • Führt eine Flask-SocketIO-App aus, die das Backend der Website verwaltet
  • Erstellt eine Verbindung zwischen der Datenbank und Flask
  • Bietet Login-Validierung und Benutzerregistrierung
  • Bietet den erforderlichen Code zum Spielen eines Spiels verwendet Socketio, um die Website während des Spiels in Echtzeit zu aktualisieren
  • Legt die Spielergebnisse in die Datenbank

In den Ordnern static und templates finden Sie HTML/CSS/JS, die den Frontend-Teil der Website bereitstellen. Fühlen Sie sich frei, diese nach Ihren eigenen Wünschen zu ändern.

Schritt 10: Verbindung zum World Wide Web herstellen

Um unsere Website mit dem Internet zu verbinden, verwenden wir nginx und uwsgi. Im Projektbeispiel finden Sie die notwendigen Dateien im Ordner conf.

Zunächst müssen Sie in diesen Dateien Folgendes aktualisieren:

  • In der uwsgi-flask.ini müssen Sie den Pfad des virtualenv-Parameters zu Ihrem Interpreter ändern
  • Im project1-flask.service müssen Sie den [Service]-Teil der Datei mit Ihren Zugangsdaten und Pfaden zu den zugehörigen Dateien aktualisieren
  • In der nginx-Datei müssen Sie den Server und den Standort / Pfad zu Ihrem zugeordneten Socket aktualisieren

Als nächstes müssen Sie die Standard-nginx-Webserverdatei durch den Speicherort Ihrer nginx-Konfigurationsdatei ersetzen. Unten finden Sie ein Beispiel für Linux-Befehle, um dies zu tun

  • me@my-rpi:~/project1 $ sudo cp conf/nginx /etc/nginx/sites-available/project1
  • me@my-rpi:~/project1 $ sudo rm /etc/nginx/sites-enabled/defaul t
  • me@my-rpi:~/project1 $ sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/project1
  • me@my-rpi:~/project1 $ sudo systemctl restart nginx.service

Schließlich müssen Sie die benutzerdefinierten Dienste zu Ihrem systemd-Ordner hinzufügen. Dies ist ein Beispiel dafür:

  • me@my-rpi:~/project1 $ sudo cp conf/project1-*.service /etc/systemd/system/
  • me@my-rpi:~/project1 $ sudo systemctl daemon-reload
  • me@my-rpi:~/project1 $ sudo systemctl start project1-*
  • me@my-rpi:~/project1 $ sudo systemctl status project1-*

Wenn Sie möchten, dass der Webserver beim Booten Ihres Raspberry Pi gestartet wird, müssen Sie den Befehl sudo systemctl enable project1-*.service verwenden.

Wenn es richtig gemacht wurde, sollte Ihre Website nach einem Systemneustart auf Ihrer IP-Adresse laufen. Wenn Sie eine dieser Konfigurationsdateien bearbeiten möchten, müssen Sie den Dienst immer stoppen, die Dateien erneut hochladen und den Befehl daemon-reload gefolgt von einem Start verwenden, sonst werden die Änderungen nicht wirksam.

Schritt 11: Fertigstellen

Abschluss aus
Abschluss aus

Während Sie den letzten Teil dieses instructable eingeben, ist dieses kleine Schulprojekt noch in Arbeit.

Ich habe unzählige Stunden damit verbracht, dies in 2,5 Wochen zu erledigen. Auch wenn alles etwas überstürzt war, bin ich trotzdem stolz auf das Erreichte. Während der Montagephase bin ich auf unzählige Bugs/Fehler/defekte Sensoren gestoßen, also seien Sie nicht zu entmutigt, wenn nicht beim ersten Versuch alles funktioniert.

Das Beste, was Sie tun können, ist, im Internet nach Hilfe zu fragen oder nach Hilfe zu suchen, es gibt viele Leute mit weitaus besseren Kenntnissen, die Ihnen sehr gerne helfen.

Zu guter Letzt möchte ich meinen Lehrern der Neuen Medien und Kommunikationstechnologie danken, die mir viele Ratschläge gegeben und mir geholfen haben, dieses Projekt abzuschließen.

Empfohlen: