Inhaltsverzeichnis:
- Schritt 1: Fritzing-Schema
- Schritt 2: Normalisierte Datenbank
- Schritt 3: Registrieren Sie Ihr LoRa-Modul
- Schritt 4: Der Code
- Schritt 5: Bauen Sie die Konstruktionen
Video: Tracking-Modul für Radfahrer - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Dieses Tracking-Modul für Radfahrer ist ein Modul, das Unfälle bei einem Rennen automatisch erkennt und eine mechanische Panne durch Berühren eines Berührungssensors erkennt. Wenn eines dieser Ereignisse eintritt, sendet das Modul das Ereignis über LoRa an eine Datenbank auf einem Himbeer-Pi. Dieses Ereignis wird auf einem LCD-Display und auf einer Website angezeigt. Sie können auch auf der Website nach einem bestimmten Radrennen mit den Veranstaltungen suchen und Radrennen oder Radfahrer in die Datenbank aufnehmen. Ich habe dieses Projekt gemacht, weil ich mich sehr für Radfahren und IOT interessiere, daher war die Kombination dieser beiden Fächer für mich einfach sehr spannend.
Bevor Sie ein Tracking-Modul für Radfahrer erstellen können, müssen Sie Ihre Materialien sammeln. Die Werkzeuge und Verbrauchsmaterialien finden Sie in den folgenden Listen oder Sie können die Stückliste (Build Of Materials) herunterladen.
Lieferungen:
- Plexiglas (56 mm x 85 mm)
- 10 x 2M Schrauben 10mm und Muttern
- 10 x 3M Schrauben 10mm und Muttern
- 2 X 3M Schrauben 50mm und Muttern
- PLA-Filament zum 3D-Drucken Ihres LCD-Gehäuses
- Schrumpfen durch Hitze
- Kabel von Stecker zu Buchse
- Eine einfache Leiterplatte
- Steckerleisten
- Ein Raspberry Pi 3b+
- Eine 16GB SD-Karte
- Ein funkelnder 4X20 LCD
- Ein kapazitiver Berührungssensor
- Ein Summer
- Ein 3-Achsen-Accelero + Gyrometer
- Ein GPS-Modul
- Ein SODAQ Mbili-Board
- Ein LoRa WAN-Modul
- Ein 3,7V 1000mAh Akku
- Ein Raspberry Pi 3b+ Netzteil
Werkzeuge:
- Lötzinn
- Lötkolben
- Zange
- Schraubendreher
- Puzzle
- Bohrmaschine
- 2.5 und 3.5 Bohrer
- Feuerzeug / Heißluftpistole
Wenn Sie alle Vorräte kaufen müssen, benötigen Sie ein Budget von 541,67 €. Dieses Projekt ist sehr teuer, da ich ein LoRa Rapid Development Kit verwendet habe, das 299 € kostet (ich hatte die Chance, dieses Kit von meiner Schule zu verwenden). Sie können immer einen normalen Arduino verwenden und viel Geld sparen, aber die Programme werden dann anders sein.
Schritt 1: Fritzing-Schema
Der erste Schritt besteht darin, die Schaltungen aufzubauen. Für dieses Projekt haben wir 2 Stromkreise, einen mit einem Raspberry Pi und einen mit einem SADAQ Mbili Board. Wir beginnen mit der Raspberry Pi-Schaltung.
Raspberry Pi Fritzing-Schema:
Das Raspberry Pi-Schema ist ziemlich einfach, das einzige, was wir mit dem Pi verbinden, ist ein 4X20 Sparkfun-LCD-Display. Das Display arbeitet mit serieller Kommunikation, SPI oder I2C. Welches Kommunikationsprotokoll Sie verwenden, bleibt Ihnen überlassen. Ich habe das SPI-Protokoll verwendet, weil es sehr einfach ist. Wenn Sie wie ich SPI verwenden, benötigen Sie folgende Verbindungen:
- VCC LCD VCC Raspberry Pi
- GND LCD GND Raspberry Pi
- SDI LCD MOSI (GPIO 10) Raspberry Pi
- SDO LCD MISO (GPIO 9) Raspberry Pi
- SCK LCD SCLK (GPIO 11) Raspberry Pi
- CS LCD CS0 (GPIO 8) Raspberry Pi
Auf dem Fritzing-Schema sehen Sie, dass das LCD-Display ein 2X16-Display ist. Dies liegt daran, dass ich beim Fritzen kein 4X20-LCD gefunden habe. Alle Verbindungen sind jedoch einige, so dass es nicht wirklich wichtig ist.
SODAQ Mbili Fritzing-Schema:
Wir werden 4 elektronische Komponenten mit dem SODAQ Mbili-Board verbinden, so dass dieses elektrische Schema auch sehr einfach ist. Wir beginnen mit dem Anschließen des Capactive-Touchsensors. Der OUT-Pin dieses Sensors ist HIGH, wenn der Sensor berührt wird, andernfalls ist er LOW. Dies bedeutet, dass der OUT-Pin ein digitaler Ausgang ist, den wir mit einem digitalen Eingang des Mbili-Boards verbinden können. Die Anschlüsse sind wie folgt:
- OUT Berührungssensor D5 Mbili
- VCC Berührungssensor 3.3V Mbili
- GND Berührungssensor GND Mbili
Die zweite Komponente ist der Triple Acces + Gyrosensor. Ich habe das GY-521-Board verwendet, das das I2C-Protokoll verwendet, um mit dem Mbili-Board zu kommunizieren. Beachten Sie, dass der AD0-Pin des GY-521-Boards mit dem VCC des Mbili-Boards verbunden werden muss! Dies liegt daran, dass das Mbili-Board eine Uhr mit der gleichen I2C-Adresse wie das GY-521 hat. Durch Verbinden des AD0-Pins mit VCC ändern wir die I2C-Adresse des GY-521. Die Anschlüsse sind wie folgt:
- VCC GY-521 3.3V Mbili
- GND GY-521 GND Mbili
- SCL GY-521 SCL Mbili
- SDA GY-521 SDA Mbili
- AD0 GY-521 3.3V Mbili
Danach verbinden wir den Summer. Ich verwende den Standardsummer, der bei Strom ein Geräusch macht. Dies bedeutet, dass wir den Summer einfach an einen digitalen Pin der Mbili-Platine anschließen können. Die Anschlüsse sind wie folgt:
- + Summer D4 Mbili
- - Summer GND Mbili
Zu guter Letzt werden wir das GPS-Modul anschließen. Das GPS-Modul kommuniziert über RX und TX. Die Anschlüsse sind wie folgt:
- VCC GPS 3.3V Mbili
- GND GPS GND Mbili
- TX GPS RX Mbili
- RX GPS TX Mbili
Schritt 2: Normalisierte Datenbank
Der zweite Schritt besteht darin, eine normalisierte Datenbank zu entwerfen. Ich habe mein ERD in Mysql entworfen. Sie werden sehen, dass meine Datenbank in niederländischer Sprache geschrieben ist, ich werde die Tabellen hier erklären.
Tabelle 'ploeg':
Diese Tabelle ist eine Tabelle für die Radsportvereine. Es enthält eine Radsportvereins-ID und einen Radsportvereinsnamen.
Tabelle 'renner':
Dieser Tisch ist ein Tisch für die Radfahrer. Jeder Radfahrer hat eine LoRaID, die auch der Primärschlüssel der Tabelle ist. Sie haben auch einen Nachnamen, Vornamen, Herkunftsland und eine Radsportvereins-ID, die mit der Radsportvereinstabelle verknüpft ist.
Tabelle 'plaatsen':
Diese Tabelle ist eine Tabelle, die die Orte in Belgien speichert, an denen ein Radrennen stattfinden kann. Es enthält den Namen der Stadt (der Primärschlüssel ist) und die Provinz, in der sich die Stadt befindet.
Tabelle 'wedstrijden':
In dieser Tabelle sind alle Radrennen gespeichert. Der Primärschlüssel der Tabelle ist eine ID. Die Tabelle enthält auch den Namen des Radrennens, den Ort des Rennens, das mit der Ortstabelle verknüpft ist, die Distanz des Rennens, die Kategorie der Radfahrer und das Datum des Rennens.
Tabelle 'gebeurtenissen':
In dieser Tabelle werden alle Ereignisse gespeichert, die auftreten. Das heißt, wenn ein Radfahrer in einen Unfall verwickelt ist oder eine mechanische Panne hat, wird das Ereignis in dieser Tabelle gespeichert. Der Primärschlüssel der Tabelle ist eine ID. Die Tabelle enthält auch das Datum und die Uhrzeit des Ereignisses, den Breitengrad der Position, den Längengrad der Position, die LoRaID des Radfahrers und die Art des Ereignisses (Crash oder mechanische Panne).
Tabelle 'wedstrijdrenner':
Diese Tabelle ist eine Tabelle, die für eine Viele-zu-Viele-Beziehung benötigt wird.
Schritt 3: Registrieren Sie Ihr LoRa-Modul
Bevor Sie mit dem Code beginnen können, müssen Sie Ihr LoRa-Modul in einem LoRa-Gateway registrieren. Ich habe eine Telekommunikationsfirma in Belgien namens 'Proximus' benutzt, die die Kommunikation für mein LoRa-Modul organisiert. Die Daten, die ich mit meinem LoRa-Knoten sende, werden auf der Website von AllThingsTalk gesammelt. Wenn Sie auch die AllThingsTalk API zur Erfassung Ihrer Daten nutzen möchten, können Sie sich hier registrieren.
Nachdem Sie sich bei AllThingsTalk registriert haben, müssen Sie Ihren LoRa-Knoten registrieren. Um dies zu tun, können Sie diesen Schritten folgen oder sich das Bild oben ansehen.
- Gehen Sie im Hauptmenü auf „Geräte“
- Klicken Sie auf „Neues Gerät“
- Wählen Sie Ihren LoRa-Knoten aus
- Füllen Sie alle Schlüssel aus.
Jetzt bist du fertig! Alle Daten, die Sie mit Ihrem LoRa-Knoten senden, werden in Ihrem AllThingsTalk-Maker angezeigt. Bei Problemen mit der Registrierung können Sie jederzeit die AllThingsTalk-Dokumente einsehen.
Schritt 4: Der Code
Für dieses Projekt benötigen wir 5 Programmiersprachen: HTML, CSS, Java Script, Python (Flask) und die Arduino-Sprache. Zuerst werde ich das Arduino-Programm erklären.
Das Arduino-Programm:
Zu Beginn des Programms deklariere ich einige globale Variablen. Sie werden sehen, dass ich SoftwareSerial für die Verbindung mit meinem GPS verwende. Dies liegt daran, dass das Mbili-Board nur über 2 serielle Ports verfügt. Sie können das GPS an Serial0 anschließen, aber Sie können das Arduino-Terminal dann nicht zum Debuggen verwenden. Aus diesem Grund verwende ich eine SoftwareSerial.
Nach den Globalen Variablen erkläre ich einige Funktionen, die das Lesen des Programms erleichtern. Sie lesen die GPS-Koordinaten aus, lassen den Summer ertönen, senden Werte über LoRa, …
Der dritte Block ist der Setup-Block. Dieser Block ist der Anfang des Programms, das die Pins, die serielle Kommunikation und die I2C-Kommunikation einrichtet.
Nach dem Setup-Block kommt das Hauptprogramm. Zu Beginn dieser Hauptschleife überprüfe ich, ob der Touchsensor aktiv ist. Wenn ja, lasse ich den Summer ertönen, rufe die GPS-Daten ab und sende alle Werte per LoRa oder Bluetooth an den Raspberry PI. Nach dem Berührungssensor lese ich die Werte des Accelerometers aus. Mit einer Formel berechne ich den genauen Winkel der X- und Y-Achse. Wenn diese Werte zu groß sind, können wir daraus schließen, dass der Radfahrer gestürzt ist. Bei einem Crash lasse ich den Summer erneut ertönen, hole die GPS-Daten und sende alle Werte per LoRa oder Bluetooth an den Raspberry PI.
Sie denken wahrscheinlich: 'Warum verwenden Sie Bluetooth und LoRa?'. Dies liegt daran, dass ich einige Probleme mit der Lizenz des von mir verwendeten LoRa-Moduls hatte. Damit das Programm für meine Demos funktioniert, musste ich eine Weile Bluetooth verwenden.
2. Das Backend:
Das Backend ist etwas komplex. Ich verwende Flask für meine Routen, die für das Frontend zugänglich sind, ich benutze socketio, um einige der Frontend-Seiten automatisch zu aktualisieren, ich verwende die GPIO-Pins, um Nachrichten auf einem LCD-Display anzuzeigen und Nachrichten über Bluetooth zu empfangen (nicht erforderlich, wenn Sie verwenden LoRa) und ich verwende Threading und Timer, um regelmäßig die AllThinksTalk-API auszulesen und den Kolbenserver zu starten.
Ich nutze die SQL-Datenbank auch, um alle eingehenden Unfälle zu speichern, die persönlichen Daten der Radfahrer und die Renndaten auszulesen. Diese Datenbank ist mit dem Backend verbunden und läuft auch auf dem Raspberry Pi. Ich verwende eine Klasse 'Database.py', um mit der Datenbank zu interagieren.
Wie Sie vom Fritzing-Schema wissen, wird das LCD über das SPI-Protokoll mit dem Raspberry Pi verbunden. Um es etwas einfacher zu machen, habe ich eine Klasse 'LCD_4_20_SPI.py' geschrieben. Mit dieser Klasse können Sie den Kontrast ändern, die Farbe der Hintergrundbeleuchtung ändern, Nachrichten auf den Bildschirm schreiben, …. Wenn Sie Bluetooth verwenden möchten, können Sie die Klasse 'SerialRaspberry.py' verwenden. Diese Klasse regelt die serielle Kommunikation zwischen dem Bluetooth-Modul und dem Raspberry Pi. Das einzige, was Sie tun müssen, ist, ein Bluetooth-Modul mit dem Raspberry Pi zu verbinden, indem Sie den RX mit dem TX verbinden und umgekehrt.
Die Routen für das Frontend werden mit der @app.route-Regel geschrieben. Hier können Sie Ihre eigene benutzerdefinierte Route zum Einfügen oder Abrufen von Daten in oder aus der Datenbank erstellen. Stellen Sie sicher, dass Sie am Ende der Route immer eine Antwort haben. Ich gebe immer ein JSON-Objekt an das Frontend zurück, auch wenn ein Fehler aufgetreten ist. Sie können eine Variable in der URL verwenden, indem Sie sie um die Variable herum platzieren.
Ich benutze socketio für die Webseite mit den Abstürzen eines Rennens. Wenn der Raspberry Pi einen Crash bekommt, sende ich über socketio eine Nachricht an das Frontend. Das Frontend weiß dann, dass es die Datenbank erneut auslesen muss, weil es einen neuen Absturz gab.
Sie werden sehen, dass in meinem Code die LoRa-Kommunikation auf Kommando eingestellt ist. Wenn Sie LoRa verwenden möchten, müssen Sie einen Timer starten, der wiederholt eine Anfrage an die AllThinksTalk-API sendet. Von dieser API erhalten Sie die Sensorwerte (GPS, Zeit, Crash-Art), die von einem bestimmten LoRa-Knoten gesendet werden. Sie können diese Werte verwenden, um einen Absturz in die Datenbank einzufügen.
3. Das Wedelende:
Das Wedelende besteht aus 3 Sprachen. HTML für den Website-Text, CSS für das Website-Markup und JavaScript für die Kommunikation mit dem Backend. Ich habe 4 Webseiten für dieses Projekt:
- Die index.html, wo Sie alle Radrennen finden.
- Eine Seite mit allen Stürzen und mechanischen Pannen für ein besonderes Rennen.
- Eine Seite, auf der Sie Radfahrer zur Datenbank hinzufügen und ihr Team bearbeiten können.
- Eine Seite, auf der Sie ein neues Rennen mit allen Teilnehmern zur Datenbank hinzufügen können.
Wie Sie diese gestalten, liegt ganz bei Ihnen. Wenn Sie möchten, können Sie sich von meiner Website inspirieren lassen. Leider ist meine Website in niederländischer Sprache erstellt, das tut mir leid.
Ich habe für jede Seite eine separate CSS-Datei und JavaScript-Datei. Jede JavaScript-Datei verwendet fetch, um die Daten über das Backend aus der Datenbank zu holen. Wenn das Skript die Daten empfängt, ändert sich der HTML-Code dynamisch. Auf der Seite, auf der Sie die Abstürze und mechanischen Pannen finden, finden Sie eine Karte, auf der alle Ereignisse aufgetreten sind. Ich habe Broschüre verwendet, um diese Karte zu zeigen.
Sie können sich alle meine Codes hier auf meinem Github ansehen.
Schritt 5: Bauen Sie die Konstruktionen
Bevor wir mit dem Bau beginnen können, vergewissern Sie sich, dass Sie alle Materialien aus der Stückliste oder von der Seite "Werkzeuge + Zubehör" haben.
Raspberry Pi + LCD
Wir beginnen mit dem Fall für den Raspberry Pi. Eine Hülle kann man immer 3D-drucken, das war auch meine erste Idee. Aber da mein Abgabetermin sehr nah war, beschloss ich, einen einfachen Fall vorzubringen. Ich habe das Standardgehäuse vom Raspberry Pi genommen und ein Loch in das Gehäuse für die Drähte meines LCD-Displays gebohrt. Um dies zu tun, folgen Sie einfach diesen einfachen Schritten:
- Bohren Sie ein Loch in den Deckel des Gehäuses. Ich habe dies mit einem 7-mm-Bohrer an der Seite der Abdeckung gemacht. Sie können dies im Bild oben sehen.
- Nehmen Sie die Drähte vom LCD-Display und schieben Sie einen Kopf über die Drähte.
- Verwenden Sie ein Feuerzeug oder eine Heißluftpistole, um den Kopf schrumpfen zu lassen.
- Ziehen Sie die Drähte mit dem Kopfschrumpf durch das Loch im Gehäuse und verbinden Sie sie wieder mit dem LCD.
Nachdem Sie nun mit dem Gehäuse für den Raspberry Pi fertig sind, können Sie mit dem Gehäuse für das LCD-Display beginnen. Ich habe das Gehäuse für mein LCD-Display in 3D gedruckt, weil ich unter diesem Link online ein Gehäuse gefunden habe. Ich musste nur die Höhe des Gehäuses ein wenig ändern. Wenn Sie der Meinung sind, dass Ihre Zeichnung gut ist, können Sie die Dateien exportieren und mit dem Drucken beginnen. Wenn Sie nicht wissen, wie man 3D druckt, können Sie dieser Anleitung zum 3D-Drucken mit Fusion 360 folgen.
SODAQ MBili-Konstruktion
Ich habe mich nicht wirklich für das SODAQ Mbili-Board eingesetzt. Ich habe ein Plexiglas verwendet, um meine Komponenten ohne Gehäuse um die Konstruktion herum zu platzieren. Wenn Sie dies auch tun möchten, können Sie diese Schritte ausführen:
- Unterschreiben Sie das Plexiglas mit den Maßen des SODAQ Mbili Boards. Die Abmessungen sind: 85mm X 56mm
- Schneiden Sie das Plexiglas mit einer Stichsäge zu.
- Legen Sie die elektronischen Komponenten auf das Plexiglas und markieren Sie die Löcher mit einem Bleistift.
- Bohren Sie die gerade abgemeldeten Löcher und die Löcher für die Abstandshalter mit einem 3,5-mm-Bohrer.
- Montieren Sie alle elektronischen Komponenten auf dem Plexiglas mit den 3M 10mm Schrauben und Muttern.
- Der letzte Schritt besteht darin, das Plexiglas über der Mbili-Platine zu montieren. Sie können dies mit Abstandshaltern tun, aber ich habe zwei 3M 50mm Schrauben und 8 3M Muttern verwendet, um das Plexiglas über der Platine zu montieren.
Empfohlen:
Arduino Auto-Rückfahrwarnsystem - Schritt für Schritt: 4 Schritte
Arduino Auto-Rückfahrwarnsystem | Schritt für Schritt: In diesem Projekt entwerfe ich eine einfache Arduino-Auto-Rückwärts-Parksensorschaltung mit Arduino UNO und dem Ultraschallsensor HC-SR04. Dieses Arduino-basierte Car-Reverse-Warnsystem kann für eine autonome Navigation, Roboter-Ranging und andere Entfernungsr
So deaktivieren Sie die Autokorrektur für nur ein Wort (iOS): 3 Schritte
So deaktivieren Sie die Autokorrektur für nur ein Wort (iOS): Manchmal korrigiert die Autokorrektur möglicherweise etwas, das Sie nicht korrigieren möchten, z. Textabkürzungen beginnen sich in Großbuchstaben zu setzen (imo korrigieren zum Beispiel zu IMO). So erzwingen Sie, dass die Korrektur eines Wortes oder einer Phrase beendet wird, ohne aut zu deaktivieren
Interessante Programmieranleitung für Designer - Bringen Sie Ihr Bild zum Laufen (Teil 2): 8 Schritte
Interessante Programmieranleitung für Designer – Bringen Sie Ihr Bild zum Laufen (Teil 2): Mathematik scheint für die meisten von Ihnen nutzlos zu sein. Die in unserem täglichen Leben am häufigsten verwendete ist einfach Addieren, Subtrahieren, Multiplizieren und Dividieren. Es ist jedoch ganz anders, wenn Sie mit Programm erstellen können. Je mehr Sie wissen, desto mehr wundervolle Ergebnisse werden Sie erhalten
Installieren des Windows-Subsystems für Linux (WSL): 3 Schritte
Installieren des Windows-Subsystems für Linux (WSL): Diese Anleitung soll Benutzern helfen, das Windows-Subsystem für Linux auf ihrem Windows 10-Computer zu installieren. Die spezifische Linux-Distribution, die dieser Befehlssatz verwendet, heißt Ubuntu. Schauen Sie hier für eine Übersicht über die verschiedenen Linux
So erstellen Sie eine UML für Java in Microsoft Visio: 4 Schritte
So erstellen Sie eine UML für Java in Microsoft Visio: Das Erstellen einer UML kann zunächst etwas einschüchternd wirken. Es gibt viele komplizierte Notationsstile, und es kann sich anfühlen, als gäbe es keine guten Ressourcen, um eine lesbare und genaue UML zu formatieren. Microsoft Visio macht jedoch das Erstellen einer UML-Qu