Inhaltsverzeichnis:

Kontaktloser Wasserbrunnen - Gunook
Kontaktloser Wasserbrunnen - Gunook

Video: Kontaktloser Wasserbrunnen - Gunook

Video: Kontaktloser Wasserbrunnen - Gunook
Video: Mobiles Bezahlen - Brunnen (36 Sek.) 2024, Juli
Anonim
Kontaktlose Wasserfontäne
Kontaktlose Wasserfontäne

Am Ende meines ersten Jahres als MCT-Studentin wurde ich beauftragt, ein Projekt zu erstellen, das alle Fähigkeiten enthält, die ich im Laufe des Jahres in den Kursen erworben hatte.

Ich war auf der Suche nach einem Projekt, das alle Anforderungen meiner Lehrer überprüft und mir gleichzeitig Spaß macht. Bei der Suche nach einem Thema konnte ich nicht anders, als mich von Covid-19 inspiriert zu fühlen (Dies war kurz bevor es zu einem weltweiten Ausbruch kam.) Ich entschied mich für einen kontaktlosen Wasserspender / -spender, da er eine Möglichkeit bieten würde, Trinkwasser zu trinken, ohne einige Tasten zu berühren, bevor Wasser austritt.

Dieses Projekt verwendet einen Abstandssensor, um zu erkennen, ob eine Tasse oder ein Glas unter den Wasserauslass gestellt wurde. Der Brunnen gibt dann 60 Sekunden lang Wasser aus (100 ml / Minute). Dies soll es konsistenter machen, da sich das Erkennen, ob das Glas weggezogen wurde, als zu schwierig/langsam erwies, weshalb ein Timer eingesetzt wurde. Nachdem Ihr Glas mit 100 ml Wasser gefüllt wurde, können Sie 5 Sekunden warten und wenn sich das Glas noch vor dem Distanzsensor befindet, wird es ein weiteres Mal gefüllt (das bedeutet, dass zwischen dem Befüllen von zwei verschiedenen auch eine Zeitüberschreitung von 5 Sekunden liegt Produkte).

Lieferungen

Komponenten

- 1x RaspberryPi (ich habe die 4. Version verwendet, aber ältere Versionen könnten auch funktionieren) - 1x S8050 Transistor oder 1x PN2222 Transistor könnte auch funktionieren - 1x Fotowiderstand - 1x HC-SR04 (Ultraschall Distanzsensor) - 1x RFID-RC522- 3x Different Farben LEDs (blau, gelb, rot)- 1x LCD1602- 1x Aktiver Summer- 1x PCF8574- 1x MCP3008- 1x Wasserpumpe (Es wurde eine 12V Schlauchpumpe verwendet, Link zu diesem Artikel)

- 1x DC-Netzteil (12V, 600mAh)- 1x Power Brick mit 3 Spots- 3x Steckbretter (du könntest wahrscheinlich weniger gebrauchen)- T-Schusser für RaspberryPi GPIO-Pins- T-Schusser-Kabel (zum Verbinden zwischen Pi und Schuster)

Verwendete Materialien und Werkzeuge

- Eine Bohrmaschine mit folgenden Bohrern:

- 4mm (um Löcher für die Schrauben vorzubohren) - 15mm (um Löcher für den Distanzsensor zu bohren)

- Jeder Schraubendreher - 30 Schrauben von 45 mm Länge - 6 Schrauben von 20 mm - 2 Scharniere für die Tür - Eine MDF-Platte von ca. 130 cm x 80 cm - Ein paar Dateien

Schritt 1: Zusammenbau der Schaltung

Zusammenbau der Schaltung
Zusammenbau der Schaltung
Zusammenbau der Schaltung
Zusammenbau der Schaltung
Zusammenbau der Schaltung
Zusammenbau der Schaltung

Für die Schaltung haben wir 2 Sensoren, einen Abstandssensor und einen Fotowiderstand. Der Abstandssensor wird verwendet, um zu erkennen, ob eine Tasse in Reichweite der Wasserfontäne gestellt wurde und optional habe ich einen Fotowiderstand hinzugefügt, dieser wird verwendet, um zu erkennen, ob das Gehäuse von jemandem geöffnet wurde, der es nicht öffnen soll. Darüber hinaus haben wir einen RFID-Leser, mit dem ein Mechaniker authentifiziert werden kann, der das Gehäuse zum Auffüllen des Wasserbehälters oder für ein anderes mechanisches Problem öffnen muss.

Für die aktiven Elemente haben wir das LCD1602, einen aktiven Summer und eine peristaltische Pumpe, das LCD wird verwendet, um den Status anzuzeigen, wie wenn das Gehäuse geöffnet ist oder die Pumpe läuft, sowie die IP-Adresse des Geräts wird angezeigt, der Summer ist Wird verwendet, um ein alarmierendes Geräusch zu erzeugen, wenn das Gehäuse geöffnet wurde, ohne dass jemand dies autorisiert hat.

Ich habe das Steckbrett und die schematischen Ansichten der Schaltung unten hinzugefügt.

Schritt 2: Einrichten unseres RaspberryPi

Um unseren RaspberryPi einzurichten, laden wir die Imaging-Software von der Raspberry-Site herunter, mit der Sie die gewünschte Version von Raspbian herunterladen und Ihre SDCARD für Sie abbilden können. Nachdem dieses Tool seine Arbeit getan hat, können Sie die SDCARD im Windows Explorer öffnen, Sie können die Bootpartition Ihres RaspberryPi sehen. Hier finden wir eine Datei namens cmdline.txt (öffnen Sie diese Datei nicht in Notepad, öffnen Sie sie in Notepad ++ oder einer anderen IDE). Wir fügen ip=169.254.10.1 am Ende dieser Datei hinzu, um sicherzustellen, dass wir über Ethernet eine Verbindung zu unserem Gerät herstellen können (stellen Sie sicher, dass Sie am Ende Ihrer Datei keine EINGABETASTE hinzufügen, sonst haben Sie Probleme).

Jetzt können Sie Ihre SDCARD in Ihren RaspberryPi stecken und booten, den Pi an Ihren Computer anschließen und Putty verwenden, um sich über SSH mit Ihrem Pi zu verbinden. Ich verwende den folgenden Befehl, um eine Verbindung zu meinem Pi herzustellen, anstatt Putty zu verwenden. "ssh [email protected]"Dies könnte eine Zeitüberschreitung haben. Seien Sie also geduldig und warten Sie, bis der Pi hochfährt. Sobald wir nach einem Passwort gefragt werden, geben wir das Standardpasswort "raspberry" ein. Stellen Sie sicher, dass Sie dieses Passwort nach der Anmeldung ändern, um zu verhindern, dass jemand mit bösen Absichten auf Ihren Raspberry Pi zugreift.

Wir werden nun unseren Pi so konfigurieren, dass er die erforderliche Funktionalität für unseren Code bereitstellt. Verwenden Sie "sudo raspi-config", um das Konfigurationsmenü zu öffnen, und gehen Sie hier zu den Schnittstellenoptionen.

Unter hier werden wir die folgenden Optionen EINschalten:- SPI- I2C

Befolgen Sie diese Anleitung, um eine drahtlose Internetverbindung auf Ihrem Pi einzurichten. Nachdem Sie dies erfolgreich getan haben, können wir unsere erforderlichen Pakete installieren.

Pakete: (führen Sie die Befehle in der hier angegebenen Reihenfolge aus)

Das Folgende, um die neuesten Updates für unser Pisudo apt-Update && apt-Upgrade zu erhalten -y

Installieren Sie unseren MySQL-Server und Webserver - sudo apt install mariadb-server apache2

Ich werde MySQL Workbench später in diesem Handbuch zum Einrichten der Datenbank verwenden. Wenn Sie dies nicht verwenden und phpmyadmin bevorzugen, können Sie dies mit dem folgenden Befehl installieren. Sie können jeden anderen MySQL-Client verwenden, solange Sie 'können die Datenbank richtig importieren.- sudo apt install phpmyadmin

Nachdem Sie alle oben genannten Schritte ausgeführt haben, müssen wir einen Benutzer für unsere Datenbank erstellen. Verwenden Sie "sudo mysql -u root", um sich bei Ihrem MySQL-Server anzumelden. Hier erstellen wir einen Benutzer namens db_admin mit seinem entsprechenden Passwort dieses Passwort irgendwo für später in der Anleitung notiert. GEWÄHREN SIE ALLE PRIVILEGIEN AUF *.* AN "db_admin"@"%" IDENTIFIED BY "yourPasswordHere" WITH GRANT OPTION;

Verwenden Sie den Befehl "\q", um das MySQL-Terminal zu verlassen.

Python-Pakete: Wir müssen noch einige Python-Pakete installieren, bevor Sie fortfahren können. Führen Sie den folgenden Befehl aus, um sicherzustellen, dass alles für eine einwandfreie Erfahrung vorhanden ist.

sudo pip3 install Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev

Sowie die folgenden MySQL-Connect-Python-Paketesudo apt install python3-mysql.connector -y

Wenn alles gut gegangen ist, können Sie jetzt Ihren Pi in Ihrem Webbrowser mit der folgenden Adresse besuchen

Schritt 3: Einrichten des Backends

Einrichten des Backends
Einrichten des Backends

Hier werde ich erklären, wie Sie das Backend selbst einrichten können, zuerst die rar-Datei von unten herunterladen und in ein temporäres Verzeichnis entpacken. Verbinden Sie sich mit FileZilla oder WinSCP mit den folgenden Zugangsdaten zu Ihrem RaspberryPi:

IP: 169.254.10.1Benutzer: piPassword: raspberry (wenn Sie das Passwort geändert haben, tun Sie dies auch hier)

Sie können dann damit fortfahren, die Dateien, die Sie entrarrt haben, in ein beliebiges Verzeichnis im Home-Verzeichnis des pi-Benutzers zu übertragen. Der Einfachheit halber gehen wir bei diesem Setup davon aus, dass wir alle unsere Dateien im Dokumentenverzeichnis hochgeladen haben.

Halten Sie Ihr FTP-Programm für den nächsten Schritt geöffnet!

Öffnen Sie nun Ihre Eingabeaufforderung erneut mit Ihrer SSH-Verbindung, da wir einige Änderungen am Webserver vornehmen müssen, damit das Frontend mit dem Backend kommunizieren kann. Wir werden die Standard-Apache2-Konfigurationsdatei öffnen und leicht modifizieren: sudo nano /etc/apache2/sites-available/000-default.conf

Fügen Sie die folgenden Zeilen unter DocumentRoot in die gerade geöffnete Konfigurationsdatei ein:ProxyPass /api/ https://127.0.0.1:5000/api/ProxyPassReverse /api/

Als Beispiel können Sie sich das angehängte Bild ansehen.

Schritt 4: Einrichten des Frontends

Vor der Übertragung unserer Dateien müssen wir etwas tun, bevor wir mit der Übertragung unserer Frontend-Dateien beginnen können. Öffnen Sie Ihre Eingabeaufforderung mit der zuvor hergestellten SSH-Verbindung und verwenden Sie den folgenden Befehl, um zum Root-Benutzer unseres RaspberryPi zu wechseln: "sudo su -"

Danach können wir das Passwort unseres Root-Benutzers mit dem folgenden Befehl ändern: "passwd"Damit werden Sie aufgefordert, ein neues Passwort einzugeben, nachdem Sie dies getan haben, können Sie zurück zu Ihrem FTP-Programm wechseln und sich mit Ihren Root-Zugangsdaten anmelden:

IP: 169.254.10.1Benutzer: rootPasswort:

Laden Sie die rar-Datei von unten herunter und entpacken Sie sie in einem temporären Ordner, Sie können diese Dateien auf Ihren RaspberryPi in das folgende Verzeichnis /var/www/html/ verschieben, nachdem Sie dies getan haben, können Sie das Frontend unter https:// besuchen: /169.254.10.1, Sie können noch nicht interagieren, da das Backend noch nicht läuft. Ich zeige Ihnen später in dieser Anleitung, wie das geht.

Schritt 5: Importieren der Datenbank für unser Projekt

Importieren der Datenbank für unser Projekt
Importieren der Datenbank für unser Projekt
Importieren der Datenbank für unser Projekt
Importieren der Datenbank für unser Projekt

Öffnen Sie Ihr bevorzugtes MySQL-Serververwaltungsprogramm und stellen Sie eine Verbindung zu Ihrem Raspberry Pi mit den in Schritt 2 erstellten Anmeldeinformationen her.

Laden Sie den Datenbank-Dump von unten herunter und importieren Sie ihn wie gewohnt, MySQL-Workbench. Gehen Sie zu Datei> SQL-Skript öffnen und wählen Sie den heruntergeladenen Datenbank-Dump aus für die Datenbank erstellt werden.

Ich habe die Zugangsdaten, die ich für meinen RaspberryPi als Beispiel verwendet habe, unten sowie mehrere Bilder der Datenbankstruktur hinzugefügt, Sie können sie sich ansehen und versuchen, sich einen Überblick zu verschaffen, wie alles funktioniert.

Schritt 6: Starten unseres Projekts

Unser Projekt starten
Unser Projekt starten
Unser Projekt starten
Unser Projekt starten

Bevor wir unser Projekt starten können, müssen wir die Datenbankanmeldeinformationen in der Datei config.py ändern. Wenn Sie die Anweisungen genau wie in dieser Anleitung beschrieben befolgt haben, finden Sie diese unter /home/pi/Documents/Backend/src/config.py Hier müssen Sie die Anmeldeinformationen der Variablen db_config ändern, damit sie denen entsprechen, die wir zuvor für unsere Datenbank erstellt haben. Ich habe ein Beispiel für das hinzugefügt, was Sie in dieser Datei unten sehen werden.

Danach fügen wir eine.service-Datei hinzu. Diese Datei stellt sicher, dass unser Projekt beim Start des RaspberryPi startet. Stellen Sie sicher, dass Sie das Verzeichnis entsprechend ändern, in dem Sie die Backend-Dateien installiert haben. Verwenden Sie den folgenden Befehl, um die Servicedatei zu erstellen: sudo nano /etc/systemd/system/dispenser.serviceDies erstellt eine Servicedatei und kopiert den folgenden Code in diese Datei.

[Unit]Description=WasserspenderAfter=mysql.service

[Service]Type=simpleRestart=alwaysRestartSec=1User=piExecStart=/usr/bin/python3 /home/pi/Documents/Backend/index.py

[Install]WantedBy=multi-user.target

Ändern Sie die Zeile /home/pi/Documents/Backend/index.py dahin, wo Sie Ihre Backend-Dateien installiert haben. Wenn Sie dies nicht richtig tun, wird das Projekt nicht korrekt gestartet! Ich werde unten eine Beispieldatei hinzufügen.

Nachdem Sie dies getan und den Texteditor verlassen haben, können wir den Dienst mit den folgenden Befehlen aktivieren:- sudo systemctl daemon-reload- sudo systemctl enable spender- sudo systemctl start spender

Und als Extra können wir ausführen: sudo systemctl status SpenderDies zeigt einige Informationen rund um unseren Dienst an, ob er aktiv ist oder nicht, …

Schritt 7: Der Fall

Der Fall
Der Fall
Der Fall
Der Fall
Der Fall
Der Fall
Der Fall
Der Fall

Herzlichen Glückwunsch, wir sind fast da, ich werde ein paar Bilder hinzufügen, die genau die Abmessungen zeigen, die ich für mein Projekt verwendet habe, ich habe MDF-Platten von 18 mm Dicke verwendet, Sie können optional eine andere Dicke verwenden. Mein Gehäuse kann als Richtlinie für Ihr Design verwendet werden oder Sie können das, was ich gemacht habe, nachbauen. (Wenn Sie eine andere MDF-Stärke verwenden, können Sie mein Design mit meinen Zeichnungen nicht mehr erstellen. Stellen Sie sicher, dass Sie es anpassen!) 32cm (Bodenplatte)- 2 Tafeln 16cm x 24cm (Frontplatte, wo LCD bleibt und benachbarte Platte)- 1 Tafel 28cm x 24cm (mittlere Platte von vorne gesehen)- 1 Tafel 30cm x 24cm (Oberplatte)

Schritt 8: Bewundern Sie das Endprodukt

Bewundern Sie das Endprodukt
Bewundern Sie das Endprodukt
Bewundern Sie das Endprodukt
Bewundern Sie das Endprodukt

Du bist am Ende angelangt und hast es jetzt hoffentlich geschafft, das Ganze Wirklichkeit werden zu lassen. Wenn Sie nur ein Vorbeilesender sind, auch willkommen, ich danke Ihnen für das Lesen bis zum letzten Schritt!

Ich habe viel Blut, Schweiß und Tränen in dieses Projekt investiert, daher würde ich mich über einen Kommentar freuen, jede Kritik zur Verbesserung ist willkommen!

Schritt 9: Die Probleme

Ich würde das Projekt in seinen aktuellen Zustand als funktionierenden Prototyp versetzen, der noch viel mehr Verbesserungen sehen kann.

Die Codebasis des Backends ist so aufgebaut, dass eine Master-Slave-Beziehung perfekt aufgebaut werden kann, bei der ein Brunnen als Haupt-Frontend fungieren würde und alle anderen Brunnen Daten und Änderungen über die REST-API des Masters pushen würden. Es gibt auch Reste eines API-Token-Systems im Code, da dieses implementiert werden sollte, aber aus Zeitgründen später gekürzt wird.

Ich habe meinen Code auf meinen Gitlab-Server hochgeladen und dort könnt ihr euch den ganzen Code anschauen: