Inhaltsverzeichnis:

Tracking-Modul für Radfahrer - Gunook
Tracking-Modul für Radfahrer - Gunook

Video: Tracking-Modul für Radfahrer - Gunook

Video: Tracking-Modul für Radfahrer - Gunook
Video: GPS-Tracker + Alarm @boschebikesystems #ConnectModule ▶️https://youtu.be/iZNiUw_PHjQ 2024, Juli
Anonim
Tracking-Modul für Radfahrer
Tracking-Modul für Radfahrer

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

Fritzing-Schema
Fritzing-Schema
Fritzing-Schema
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

Normalisierte Datenbank
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

Registrieren Sie Ihr LoRa-Modul
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.

  1. Gehen Sie im Hauptmenü auf „Geräte“
  2. Klicken Sie auf „Neues Gerät“
  3. Wählen Sie Ihren LoRa-Knoten aus
  4. 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

Der Code
Der Code
Der Code
Der Code
Der Code
Der Code
Der Code
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

Baue die Konstruktionen
Baue die Konstruktionen
Baue die Konstruktionen
Baue die Konstruktionen
Baue die Konstruktionen
Baue 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:

  1. 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.
  2. Nehmen Sie die Drähte vom LCD-Display und schieben Sie einen Kopf über die Drähte.
  3. Verwenden Sie ein Feuerzeug oder eine Heißluftpistole, um den Kopf schrumpfen zu lassen.
  4. 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:

  1. Unterschreiben Sie das Plexiglas mit den Maßen des SODAQ Mbili Boards. Die Abmessungen sind: 85mm X 56mm
  2. Schneiden Sie das Plexiglas mit einer Stichsäge zu.
  3. Legen Sie die elektronischen Komponenten auf das Plexiglas und markieren Sie die Löcher mit einem Bleistift.
  4. Bohren Sie die gerade abgemeldeten Löcher und die Löcher für die Abstandshalter mit einem 3,5-mm-Bohrer.
  5. Montieren Sie alle elektronischen Komponenten auf dem Plexiglas mit den 3M 10mm Schrauben und Muttern.
  6. 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: