Sommario:

Modulo di localizzazione per ciclisti: 5 passaggi
Modulo di localizzazione per ciclisti: 5 passaggi

Video: Modulo di localizzazione per ciclisti: 5 passaggi

Video: Modulo di localizzazione per ciclisti: 5 passaggi
Video: Trackting l’antifurto | GPS + SIM 2024, Luglio
Anonim
Modulo di localizzazione per ciclisti
Modulo di localizzazione per ciclisti

Questo modulo di tracciamento per ciclisti è un modulo che rileva automaticamente gli incidenti in una gara e rileva un guasto meccanico toccando un sensore tattile. Quando si verifica uno di questi eventi, il modulo invia l'evento a un database su un raspberry pi tramite LoRa. Questo evento sarà mostrato su un display LCD e su un sito web. Puoi anche cercare sul sito web una specifica gara ciclistica con gli eventi e aggiungere gare ciclistiche o ciclisti al database. Ho realizzato questo progetto perché sono molto interessato al ciclismo e all'IOT, quindi combinare queste due materie è stato molto eccitante per me.

Prima di poter realizzare un modulo di tracciamento per ciclisti, devi raccogliere i tuoi materiali. Puoi trovare gli strumenti e le forniture negli elenchi sottostanti, oppure puoi scaricare la BOM (Build Of Materials).

Forniture:

  • vetro plexi (56mm X 85mm)
  • 10 X 2 M bulloni 10 mm e dadi
  • 10 X 3M bulloni 10mm e dadi
  • 2 bulloni 3M da 50 mm e dadi
  • Filamento PLA per stampare in 3D la tua custodia LCD
  • termoretraibile
  • Cavi maschio-femmina
  • Un PCB di base
  • Intestazioni maschili
  • Un Raspberry Pi 3b+
  • Una scheda SD da 16 GB
  • Un divertente display LCD 4X20
  • Un sensore tattile capacitivo
  • un cicalino
  • Un accelero a 3 assi + giroscopio
  • Un modulo GPS
  • Una scheda SODAQ Mbili
  • Un modulo WAN LoRa
  • Una batteria da 3,7 V 1000 mAh
  • Un alimentatore Raspberry Pi 3b+

Utensili:

  • stagno di saldatura
  • Saldatore
  • Pinza
  • cacciaviti
  • puzzle
  • Trapano
  • 2,5 e 3,5 trapani
  • Accendino/pistola ad aria calda

Se hai bisogno di acquistare tutte le forniture, avrai bisogno di un budget di 541,67 €. Questo progetto è molto costoso perché ho usato un kit di sviluppo LoRa rappid che costa 299€ (ho avuto la possibilità di usare questo kit dalla mia scuola). Puoi sempre usare un normale Arduino e risparmiare un sacco di soldi, ma i programmi saranno diversi allora.

Passaggio 1: schema di frittura

Schema Fritzing
Schema Fritzing
Schema Fritzing
Schema Fritzing

Il primo passo è costruire i circuiti. Per questo progetto abbiamo 2 circuiti elettrici, uno con un Raspberry Pi e uno con una scheda SADAQ Mbili. Inizieremo con il circuito Raspberry Pi.

Schema di Raspberry Pi Fritzing:

Lo schema Raspberry Pi è piuttosto semplice, l'unica cosa che colleghiamo al Pi è un display LCD Sparkfun 4X20. Il Display funziona con comunicazione seriale, SPI o I2C. Quale protocollo di comunicazione utilizzi dipende da te. Ho usato il protocollo SPI perché è molto semplice. Se usi SPI come me, hai bisogno delle seguenti connessioni:

  • 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

Nello schema Fritzing vedrai che il display LCD è un display 2X16. Questo perché non ho trovato un LCD 4X20 su frizting. Tuttavia, tutte le connessioni sono alcune, quindi non importa.

Schema SODAQ Mbili Fritzing:

Collegheremo 4 componenti elettronici con la scheda SODAQ Mbili, quindi anche questo schema elettrico è molto semplice. Inizieremo con il collegamento del sensore tattile Capactive. Questo pin OUT del sensore sarà ALTO quando viene toccato il sensore, altrimenti sarà BASSO. Ciò significa che il pin OUT è un'uscita digitale che possiamo collegare con un ingresso digitale della scheda Mbili. I collegamenti sono i seguenti:

  • OUT sensore tattile D5 Mbili
  • Sensore tattile VCC 3.3V Mbili
  • GND Sensore tattile GND Mbili

Il secondo componente è il triplo accesso + sensore giroscopico. Ho utilizzato la scheda GY-521 che utilizza il protocollo I2C per comunicare con la scheda Mbili. Notare che il pin AD0 della scheda GY-521 deve essere collegato al VCC della scheda Mbili! Questo perché la scheda Mbili ha un orologio con lo stesso indirizzo I2C come il GY-521. Collegando il pin AD0 a VCC cambiamo l'indirizzo I2C della GY-521. I collegamenti sono i seguenti:

  • 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

Successivamente collegheremo il Buzzer. Uso il cicalino standard che emette un suono quando c'è corrente. Ciò significa che possiamo semplicemente collegare il cicalino a un pin digitale della scheda Mbili. I collegamenti sono i seguenti:

  • + Buzzer D4 Mbili
  • - Buzzer GND Mbili

Ultimo ma non meno importante, collegheremo il modulo GPS. Il modulo GPS comunica tramite RX e TX. I collegamenti sono i seguenti:

  • VCC GPS 3.3V Mbili
  • GND GPS GND Mbili
  • TX GPS RX Mbili
  • RX GPS TX Mbili

Passaggio 2: database normalizzato

Database normalizzato
Database normalizzato

Il secondo passaggio consiste nel progettare un database normalizzato. Ho progettato il mio ERD in Mysql. Vedrai che il mio database è scritto in lingua olandese, spiegherò le tabelle qui.

Tabella 'ploeg':

Questo tavolo è un tavolo per i club ciclistici. Contiene l'ID del club ciclistico e il nome del club ciclistico.

Tavola 'renner':

Questo tavolo è un tavolo per i ciclisti. Ogni ciclista ha un LoRaID che è anche la Chiave Primaria della tabella. Hanno anche un cognome, nome, Paese di origine e un ID del club di ciclismo che è collegato alla tabella del club di ciclismo.

Tabella 'piatti':

Questa tabella è una tabella che memorizza i luoghi in Belgio in cui può svolgersi una gara ciclistica. Contiene il nome della città (che è la Chiave Primaria) e la provincia in cui si trova la città.

Tabella 'wedstrijden':

Questa tabella memorizza tutte le gare ciclistiche. La chiave primaria della tabella è un ID. La tabella contiene anche il nome della corsa ciclistica, la città della corsa a cui è collegata la tabella dei luoghi, la distanza della corsa, la categoria dei ciclisti e la data della gara.

Tabella 'gebeurtenissen':

Questa tabella memorizza tutti gli eventi che si verificano. Ciò significa che, quando un ciclista è coinvolto in un incidente o ha un guasto meccanico, l'evento verrà memorizzato in questa tabella. La chiave primaria della tabella è un ID. La tabella contiene anche la data e l'ora dell'evento, la Latitudine della posizione, la Longitudine della posizione, il LoRaID del ciclista e il tipo di evento (incidente o guasto meccanico).

Tabella 'wedstrijdrenner':

Questa tabella è una tabella necessaria per una relazione molti a molti.

Passaggio 3: registra il tuo modulo LoRa

Registra il tuo modulo LoRa
Registra il tuo modulo LoRa

Prima di poter iniziare con il codice, devi registrare il tuo modulo LoRa in un gateway LoRa. Ho usato una società di telecomunicazioni in Belgio chiamata "Proximus" che organizza la comunicazione per il mio modulo LoRa. I dati che invio con il mio nodo LoRa vengono raccolti sul sito Web da AllThingsTalk. Se desideri utilizzare anche l'API AllThingsTalk per raccogliere i tuoi dati, puoi registrarti qui.

Dopo esserti registrato su AllThingsTalk, devi registrare il tuo nodo LoRa. Per fare ciò, puoi seguire questi passaggi o puoi guardare l'immagine sopra.

  1. Vai su "Dispositivi" nel menu principale
  2. Fare clic su "Nuovo dispositivo"
  3. Seleziona il tuo nodo LoRa
  4. Compila tutte le chiavi.

Ora hai finito! Tutti i dati che invii con il tuo nodo LoRa appariranno nel tuo creatore di AllThingsTalk. In caso di problemi con la registrazione, puoi sempre consultare i documenti di AllThingsTalk.

Passaggio 4: il codice

Il codice
Il codice
Il codice
Il codice
Il codice
Il codice
Il codice
Il codice

Per questo progetto avremo bisogno di 5 linguaggi di codifica: HTML, CSS, Java Script, Python (Flask) e il linguaggio Arduino. Per prima cosa spiegherò il programma Arduino.

Il programma Arduino:

All'inizio del programma, dichiaro alcune variabili globali. Vedrai che uso SoftwareSerial per la connessione con il mio GPS. Questo perché la scheda Mbili ha solo 2 porte seriali. Puoi collegare il GPS a Serial0, ma non sarai in grado di utilizzare il terminale Arduino per il debug. Questo è il motivo per cui uso un SoftwareSerial.

Dopo le Global Variables, dichiaro alcune funzioni che facilitano la lettura del programma. Leggono le coordinate GPS, fanno suonare il cicalino, inviano valori tramite LoRa, …

Il terzo blocco è il blocco di installazione. Questo blocco è l'inizio del programma che imposta i pin, la comunicazione seriale e la comunicazione I2C.

Dopo il blocco di installazione viene il programma principale. All'inizio di questo ciclo principale, controllo se il sensore tattile è attivo. Se è così, faccio suonare il cicalino, ricevo i dati GPS e invio tutti i valori tramite LoRa o Bluetooth al Raspberry PI. Dopo il sensore tattile, ho letto i valori dell'accelerometro. Con una formula calcolo l'angolo esatto degli assi X e Y. Se questi valori sono troppo grandi, possiamo concludere che il ciclista è caduto. Quando si verifica un crash, faccio suonare di nuovo il cicalino, ottengo i dati GPS e invio tutti i valori tramite LoRa o Bluetooth al Raspberry PI.

Probabilmente stai pensando: 'Perché usi bluetooth e LoRa?'. Questo perché ho avuto qualche problema con la licenza del modulo LoRa che ho usato. Quindi, per far funzionare il programma per le mie demo, ho dovuto usare il Bluetooth per un po'.

2. Il back-end:

Il back-end è un po' complesso. Uso Flask per i miei percorsi accessibili dal front-end, utilizzo socketio per aggiornare automaticamente alcune pagine del front-end, utilizzo i pin GPIO per visualizzare i messaggi su un display LCD e ricevere messaggi tramite Bluetooth (non necessario se usi LoRa) e utilizzo Threading e Timer per leggere regolarmente l'API AllThinksTalk e avviare il server flask.

Uso anche il database SQL per memorizzare tutti gli incidenti in arrivo, leggere i dati personali dei ciclisti e i dati delle gare. Questo database è connesso al back-end e funziona anche sul Raspberry Pi. Uso una classe 'Database.py' per interagire con il database.

Come saprai dallo schema Fritzing, l'lcd è collegato al Raspberry Pi tramite il protocollo SPI. Per renderlo un po' più semplice, ho scritto una classe 'LCD_4_20_SPI.py'. Con questa classe puoi cambiare il contrasto, cambiare il colore della retroilluminazione, scrivere messaggi sullo schermo, …. Se desideri utilizzare il Bluetooth, puoi utilizzare la classe "SerialRaspberry.py". Questa classe regola la comunicazione seriale tra il modulo Bluetooth e il Raspberry Pi. L'unica cosa che devi fare è connettere un modulo Bluetooth al Raspberry Pi collegando l'RX al TX e viceversa.

I percorsi per il front-end sono scritti con la regola @app.route. Qui puoi creare il tuo percorso personalizzato per inserire o ottenere dati nel o dal database. Assicurati di avere sempre una risposta alla fine del percorso. Restituisco sempre un oggetto JSON al front-end, anche quando si è verificato un errore. È possibile utilizzare una variabile nell'URL posizionandola intorno alla variabile.

Uso socketio per la pagina web con i crash di una gara. Quando il Raspberry Pi riceve un crash, emetto un messaggio al front-end tramite socketio. Il front-end sa quindi che devono rileggere il database perché si è verificato un nuovo arresto anomalo.

Vedrai che nel mio codice le comunicazioni LoRa sono impostate in comando. Se vuoi usare LoRa, devi avviare un timer che in modo ripetitivo invii una richiesta all'API AllThinksTalk. Da questa API riceverai i valori del sensore (GPS, Time, Crash kind) che vengono inviati da un nodo LoRa specifico. È possibile utilizzare questi valori per inserire un arresto anomalo nel database.

3. La fronda:

La fronda è composta da 3 lingue. HTML per il testo del sito, CSS per il markup del sito e JavaScript per la comunicazione con il back end. Ho 4 pagine web per questo progetto:

  • L'index.html dove puoi trovare tutte le gare ciclistiche.
  • Una pagina con tutti gli incidenti e i guasti meccanici per una gara particolare.
  • Una pagina in cui è possibile aggiungere ciclisti al database e modificare la loro squadra.
  • Una pagina dove puoi aggiungere una nuova gara con tutti i suoi partecipanti al database.

Il modo in cui li progetti dipende completamente da te. Se vuoi, puoi prendere ispirazione dal mio sito web. Sfortunatamente il mio sito web è realizzato in lingua olandese, mi dispiace per quello.

Ho un file CSS separato e un file JavaScript per ogni pagina. Ogni file JavaScript utilizza il recupero per ottenere i dati dal database tramite il back-end. Quando lo script riceve i dati, l'html cambia dinamicamente. Nella pagina dove puoi trovare gli incidenti e i guasti meccanici, troverai una mappa dove sono accaduti tutti gli eventi. Ho usato il volantino per mostrare questa mappa.

Puoi guardare tutto il mio codice qui sul mio Github.

Passaggio 5: costruisci le costruzioni

Costruisci le costruzioni
Costruisci le costruzioni
Costruisci le costruzioni
Costruisci le costruzioni
Costruisci le costruzioni
Costruisci le costruzioni

Prima di poter iniziare con la costruzione, assicurati di avere tutti i materiali dalla distinta base o dalla pagina "Strumenti + materiali di consumo".

Raspberry Pi + LCD

Inizieremo con il caso del Raspberry Pi. Puoi sempre stampare in 3D un caso, questa è stata anche la mia prima idea. Ma poiché la mia scadenza si stava avvicinando molto, ho deciso di fare un caso semplice. Ho preso la custodia standard dal Raspberry Pi e ho praticato un foro nella custodia per i cavi del mio display LCD. Per farlo, ti basta seguire questi semplici passaggi:

  1. Praticare un foro nel coperchio della custodia. L'ho fatto con un trapano da 7 mm sul lato del coperchio. Puoi vederlo nella foto sopra.
  2. Prendi i fili dal display LCD e fai scorrere una testina che si restringe sui fili.
  3. Usa un accendino o una pistola ad aria calda per far restringere la testa.
  4. Tirare i fili con la testina restringente attraverso il foro nella custodia e ricollegarli sul display LCD.

Ora che sei pronto con la custodia per il Raspberry Pi, puoi iniziare con la custodia per il display LCD. Ho stampato in 3D la custodia per il mio display LCD perché ho trovato una custodia online su questo link. Ho solo dovuto fare un piccolo cambiamento nell'altezza del case. Quando pensi che il tuo disegno sia buono, puoi esportare i file e iniziare a stampare. Se non sai come stampare in 3D, puoi seguire queste istruzioni su come stampare in 3D con Fusion 360.

Costruzione SODAQ MBili

Non ho davvero fatto un caso per la scheda SODAQ Mbili. Ho usato un vetro plexi per posizionare i miei componenti senza una custodia intorno alla costruzione. Se vuoi fare anche questo, puoi seguire questi passaggi:

  1. Firma il plexiglass con le dimensioni della scheda SODAQ Mbili. Le dimensioni sono: 85mm X 56mm
  2. Tagliare il plexiglass con un seghetto alternativo.
  3. Posiziona i componenti elettronici sul plexiglass e segna i fori con una matita.
  4. Praticare i fori appena firmati e i fori per i distanziatori con un trapano da 3,5 mm.
  5. Montare tutti i componenti elettronici sul plexiglass con i bulloni ei dadi 3M 10mm.
  6. L'ultimo passo è montare il plexiglass sopra la scheda Mbili. Puoi farlo con i distanziatori, ma ho usato due bulloni 3M 50mm e 8 dadi 3M per montare il plexiglass sopra la scheda.

Consigliato: