Inhaltsverzeichnis:

CleanBot von Guillaume Meurillon - Gunook
CleanBot von Guillaume Meurillon - Gunook

Video: CleanBot von Guillaume Meurillon - Gunook

Video: CleanBot von Guillaume Meurillon - Gunook
Video: 19 Gaillarde Milanoise I Adrian Le Roy 2024, Juli
Anonim
CleanBot von Guillaume Meurillon
CleanBot von Guillaume Meurillon
CleanBot von Guillaume Meurillon
CleanBot von Guillaume Meurillon

Dies ist eine Anleitung für ein Projekt, das ich für die Schule gemacht habe. Ziel war es, mit dem Raspberry Pi ein Gerät zu schaffen, das mit dem Internet verbunden ist und gleichzeitig Daten von Sensoren sammelt. Diese Daten mussten in einer (MySQL-)Datenbank gespeichert werden. Die Daten mussten mit einer Website visualisiert werden, die in Python mit dem Flask-Webapp-Paket und Jinja2-Templating codiert wurde.

Meine Idee war, einen „gehackten“Roboterstaubsauger zu bauen, mit einem Raspberry Pi, einem Arduino, einem bereits kaputten Roboterstaubsauger und einer Reihe von Sensoren.

Schritt 1: Sammeln der Teile

Sammeln der Teile
Sammeln der Teile
Sammeln der Teile
Sammeln der Teile
Sammeln der Teile
Sammeln der Teile
Sammeln der Teile
Sammeln der Teile

Bevor ich überhaupt etwas erstellte, habe ich viel darüber recherchiert, welche Teile verwendet werden sollen, wie man sie verbindet, Softwareklassen in Python schreibt und so weiter.

Die Stückliste wird als Datei beigefügt, so dass Sie einfach nach den benötigten Teilen suchen können.

Ich entschied mich, neben dem Raspberry Pi ein Arduino Uno zu verwenden, damit ich meine Sensoren effizient auslesen konnte, ohne meinen Raspberry Pi zu belasten. Ich habe mich auch für das Uno entschieden, weil es eine schöne Taktrate hat und wegen der analogen Pins. Ich hätte einen ADC (zB MCP3008) für meinen Raspberry Pi verwenden können, aber ich hätte viel mehr Drähte gebraucht, es wäre teurer gewesen und mein Pi hätte viel härter arbeiten müssen.

Dann begann ich, die Teile zu inspizieren, die vom kaputten Roboterstaubsauger verwendbar waren. Die interne Elektronik war beschädigt, aber das war kein Problem, da ich diese sowieso komplett ersetzen würde. Zum Glück funktionierten die Gleichstrommotoren noch, sodass keiner von denen ersetzt werden musste.

Liste der Einzelteile:

  • Raspberry Pi 3 mit mindestens 8 GB MicroSD Klasse 10 und einem Gehäuse;
  • Raspberry Pi T-Schusser und Steckbrett(e);
  • Arduino Uno oder ähnlich (vorzugsweise eine nicht-chinesische Version mit einem anständigen ADC, einige Chinesen haben AREF-Probleme) mit einer Art Fall;
  • Ein Ethernet-Kabel;
  • Ein (kaputter) Roboterstaubsauger;
  • 3x HC-SR04 Ultraschallmodule;
  • 1x Hallsensormodul;
  • Mehrere Widerstände in unterschiedlichen Werten;
  • Ein LDR;
  • 6x 18650 Li-Ion-Akkus + 3-Zellen-Halter für 12V (am besten neue Akkus oder noch besser LiPo-Akkus verwenden, diese halten deutlich länger);
  • 18650 (oder welche Art von Batterie Sie verwenden) 12 V 3-Zellen-Ladeplatine;
  • Einige DIY-Leiterplatten zum Löten Ihrer Komponenten;
  • Ein Blatt aus Polyurethan-Kunststoff;
  • Ein Laptop / Desktop-Computer.

Werkzeugliste:

  • Ein Bohrer mit mehreren Bohrern;
  • Ein Winkelschleifer (nicht verwenden, wenn Sie keine Erfahrung haben) oder so etwas wie ein Dremel;
  • Ein Stück Schleifpapier;
  • Mehrere Schraubendreher;
  • Sekundenkleber, Montagekleber, …;
  • Ein Lötkolben (verwenden Sie Fett, um Ihre Drähte leichter zu löten);
  • Ein Paar Drahtschneider und ein Abisolierwerkzeug.

Softwareliste (optional):

  • Adobe XD: Wireframing und Erstellen eines Prototyps;
  • Fritzing: Erstellen eines elektrischen Schemas;
  • PyCharm Professional: Python-IDE mit Funktionen zur Verwendung von Bereitstellung und Remote-Interpreter;
  • Putty: schnelle und einfache SSH-Verbindung mit Pi;
  • Etcher.io: einfaches Tool zum Flashen eines Raspbian-Image auf eine SD-Karte;
  • Win32DiskImager: einfaches Tool zum Erstellen eines Images aus einem bestehenden Raspbian-Setup;
  • Programmers Notepad: einfaches Tool, mit dem Sie die Datei /boot/cmdline.txt sicher bearbeiten können.

Schritt 2: Sprühlackierung und Gestaltung der Schnittstelle

Sprühlackieren & Design der Schnittstelle
Sprühlackieren & Design der Schnittstelle
Sprühlackieren & Design der Schnittstelle
Sprühlackieren & Design der Schnittstelle
Sprühlackieren & Design der Schnittstelle
Sprühlackieren & Design der Schnittstelle
Sprühlackieren & Design der Schnittstelle
Sprühlackieren & Design der Schnittstelle

Bevor ich anfing, das Design zu entwerfen, habe ich das Äußere besprüht, weil mir die Farben überhaupt nicht gefielen. Ich ging in den Laden und nahm eine Plastikgrundierung, eine Dose Weiß und eine Dose Türkis, um das Topcase neu zu lackieren.

Nachdem ich die Sprühfarbe trocknen ließ, suchte ich den genauen Hex-Farbcode für die von mir verwendete Farbe, damit ich mein Webinterface perfekt mit meinem Gerät abgleichen konnte. Es war ziemlich einfach, diesen Hex-Code zu finden, da ich Montana 94-Graffiti verwendet habe und die Hex- und RGB-Codes auf ihrer Website waren.

Ich habe für jede Seite meiner Website High-Fidelity-Wireframes erstellt, sodass ich genau wusste, wie ich diese Schnittstelle erstellen würde. Nachdem ich meinen Lehrern mein Interface gezeigt hatte, bekam ich den Rat, den Hintergrund etwas grauer und die Schaltflächen weißer zu machen, und das Ergebnis war meiner Meinung nach gut.

Schritt 3: Erstellen der Datenbank

Erstellen der Datenbank
Erstellen der Datenbank

Der nächste logische Schritt war, darüber nachzudenken, welche Daten ich in der MySQL-Datenbank speichern wollte. Die Leute wissen nicht so viel über ihren Staubsauger, also habe ich mich mit Tabellen für Benutzer und deren Login-Daten sowie Tabellen für Sensoren (Akku, Abstand & Staubbehälter) befasst.

Das Bild zeigt Ihnen das Layout meiner Tabellen, gezeichnet in MySQL Workbench, mit allen Beziehungen zwischen den Tabellen.

Für meine Benutzer wollte ich ihren Vor- und Nachnamen verfolgen, um die Benutzeroberfläche und die E-Mails zu personalisieren. Zum Versenden von E-Mails benötige ich natürlich auch deren E-Mail-Adresse. Ich habe auch eine Tabelle hinzugefügt, um die E-Mail-Präferenzen meiner Benutzer zu verfolgen (ob sie E-Mails erhalten möchten oder nicht). Das letzte, was ich über Benutzer speichern wollte, ist ihre Rolle für das Gerät. Ich unterteile Benutzer als Administratoren und normale Benutzer. Administratoren haben das Recht, Benutzer im System hinzuzufügen, zu entfernen und zu verwalten, während normale Benutzer nicht auf diese Tools zugreifen können.

Die nächste Tabelle enthält "deviceruns", das sind die tatsächlichen Durchläufe, die das Gerät ausgeführt hat. Die Geräteläufe gehören einem bestimmten Benutzer (der Person, die den Lauf gestartet hat) und haben eine Start- und Endzeit, um die Laufzeit zu berechnen.

Eine weitere Tabelle wird verwendet, um Sensordaten mit jedem Gerätelauf zu verknüpfen. Die Sensoren selbst werden in einer weiteren Tabelle gespeichert, die ihre ID, ihren Namen und ihre Beschreibung enthält.

Schritt 4: Verbinden der Teile miteinander

Verbinden der Teile miteinander
Verbinden der Teile miteinander
Verbinden der Teile miteinander
Verbinden der Teile miteinander

Nachdem ich das Datenbankschema erstellt hatte, begann ich, Steckbretter und Verkabelung zu verwenden, um alle Teile in einem funktionierenden Prototyp miteinander zu verbinden.

Schritt 5: Einrichten des Raspberry Pi

Einrichten des Raspberry Pi
Einrichten des Raspberry Pi

Um das neueste Image von Raspbian herunterzuladen, gehen Sie auf die Raspbian-Website. Hier können Sie auswählen, welche Distribution Sie herunterladen möchten. Für einen schnelleren Betrieb können Sie die Headless-Distribution für weniger RAM-Auslastung herunterladen oder den Desktop mit GUI herunterladen, wenn Sie eine grafische Benutzeroberfläche bevorzugen.

Um das Betriebssystem zu installieren, laden Sie einfach Etcher herunter, es ist ein GUI-Tool, mit dem Sie das Image schnell und einfach auf Ihre Micro-SD-Karte schreiben können.

Um den Headless-Modus zu aktivieren, damit Sie auf das Pi zugreifen können, müssen Sie Putty auf Ihrem Computer installieren. Der nächste Schritt besteht darin, in den von Etcher erstellten Boot-Ordner zu gehen und die Datei cmdline.txt mit Ihrem bevorzugten Texteditor, ex Programmers Notepad, zu öffnen. Fügen Sie diesen Text am Ende der Datei hinzu:

ip=169.254.10.1

Stellen Sie nur sicher, dass Sie keine neue Zeile erstellen, fügen Sie diese am Ende der Zeile hinzu!

Gehen Sie als Nächstes zurück zum Stammverzeichnis des Boot-Ordners und erstellen Sie eine Datei namens ssh. Fügen Sie keine Erweiterung hinzu. Dadurch wird sichergestellt, dass der SSH-Server jedes Mal gestartet wird, wenn Ihr Pi gestartet wird. Legen Sie nun einfach die SD-Karte in Ihren Pi ein, schließen Sie eine ausreichende Stromquelle an Ihren Pi an und fügen Sie ein Ethernet-Kabel zwischen Ihrem Pi und Ihrem Computer hinzu.

Öffnen Sie Putty und geben Sie die IP-Adresse ein: 169.254.10.1. Klicken Sie nun auf JA und melden Sie sich an, der Standardbenutzername ist pi und das Passwort ist raspberry.

Führen Sie als nächstes den folgenden Befehl aus, um auf dem neuesten Stand zu sein:

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y

Der letzte Schritt besteht darin, einen virtuellen Python-Interpreter auf Ihrem Raspberry Pi zu erstellen, der Ihren Code ausführt. Öffnen Sie dazu einfach Putty und geben Sie Folgendes ein:

sudo mkdir Projekt1

cd project1 python3 -m pip install --upgrade pip setuptools wheel virtualenv python3 -m venv --system-site-packages venv

Schritt 6: Schreiben der Web-Anwendung

Schreiben der Web-Anwendung
Schreiben der Web-Anwendung

Nachdem ich alle Teile angeschlossen und den Raspberry Pi eingerichtet hatte, begann ich meine Haupt-Webanwendung mit Flask und Jinja2 zu schreiben. Flask ist ein einfach zu verwendendes Backend-Framework für Python, und Jinja2 ist die Vorlagensprache, die ich verwendet habe. Mit Jinja können Sie normale HTML-Dateien mit for-Schleifen, if-Strukturen usw. erstellen.

Beim Codieren des Backends habe ich auch das Frontend für die Anwendung geschrieben, inklusive HTML, CSS und JavaScript für einige Elemente. Ich habe die ITCSS-Methode und die BEM-Notation für meine Stylesheets verwendet.

Neben der Hauptweb-App habe ich noch 2 weitere Hauptprogramme erstellt. Eine wird geschrieben, um die IP-Adresse des Geräts an die Benutzer in der Liste zu senden. Jeder registrierte Benutzer, der dem Empfang von E-Mails zugestimmt hat, erhält eine E-Mail mit einem Link zum Starten der Weboberfläche. Dieses Programm wird als systemd-Dienst ausgeführt.

Die andere Hauptdatei ist für das eigentliche Gerät. Diese Hauptleitung kann über meine Flask-Anwendung aufgerufen werden, um das Gerät zu starten und zu stoppen und Daten zu sammeln. Die gesammelten Daten werden über diesen Main auch in die Datenbank des Geräts hochgeladen. Diese Daten können dann in der Web-App visualisiert werden.

Die Web-App ist mit Python Threading mit dem Gerät verbunden, das main ausgeführt wird. Wenn ein Benutzer auf die Startschaltfläche klickt, wird ein Thread generiert, um das Gerät im Hintergrund auszuführen. Währenddessen kann der Benutzer die App perfekt durchsuchen. Wenn Sie auf Stopp klicken, wird dieser Thread gestoppt und damit das Gerät gestoppt.

Schritt 7: Erstellen von Teilen zum Fertigstellen des Gehäuses

Erstellen von Teilen zum Fertigstellen des Gehäuses
Erstellen von Teilen zum Fertigstellen des Gehäuses
Erstellen von Teilen zum Fertigstellen des Gehäuses
Erstellen von Teilen zum Fertigstellen des Gehäuses
Erstellen von Teilen zum Fertigstellen des Gehäuses
Erstellen von Teilen zum Fertigstellen des Gehäuses
Erstellen von Teilen zum Fertigstellen des Gehäuses
Erstellen von Teilen zum Fertigstellen des Gehäuses

Nachdem ich den größten Teil der Anwendung geschrieben hatte, begann ich, das Gerätegehäuse zu modifizieren, damit meine Sensoren & andere Teile tatsächlich passen. Dazu kaufte ich in einem örtlichen Baumarkt eine Polyurethanplatte und fing an, 2 Klammern zu schneiden. Ich habe diese Polyurethanplatte verwendet, da sie beim Schneiden wahrscheinlich nicht in Stücke bricht und weil sie ziemlich flexibel ist, was perfekt ist, da mein Roboter eine kreisförmige Form hat.

Die erste Halterung wird gemacht, um oben ein Loch zu füllen, in dem früher ein Display saß. Ich habe das Display durch einen Ein / Aus-Schalter ersetzt, damit die Batterien tatsächlich ausgeschaltet werden können.

Die andere Halterung ist eine Halterung für meine HC-SR04 Ultraschallsensoren, die vorne am Gerät positioniert sind.

Das letzte, was noch zu tun war, war, ein Loch in die Verstärkungen eines der Räder zu schneiden und einen Magneten einzusetzen, damit ich die Drehungen des Rades überwachen kann.

Nachdem ich diese Klammern fertiggestellt hatte, habe ich sie auch mit der Farbe, die ich übrig hatte, besprüht, damit sie zum Design passt.

Schritt 8: Der Code

Um das Programm zu installieren, laden Sie die Datei code.zip herunter und entpacken Sie diese in das Verzeichnis project1.

Führen Sie als nächstes diesen Befehl in einem Terminal auf Raspbian oder Putty aus:

sudo cp project1/conf/project-1* /etc/systemd/system/

sudo cp project1/conf/project1-* /etc/systemd/system/sudo systemctl daemon-reload sudo systemctl enable project-1* sudo systemctl enable project1* sudo systemctl restart nginx

Öffnen Sie als Nächstes die von Ihnen generierte Datenbank und erstellen Sie einen neuen Benutzer mit einem Argon2-Hash-Passwort. Jetzt können Sie das Programm verwenden.

Genießen!

Empfohlen: