Innholdsfortegnelse:

Sporingsmodul for syklister: 5 trinn
Sporingsmodul for syklister: 5 trinn

Video: Sporingsmodul for syklister: 5 trinn

Video: Sporingsmodul for syklister: 5 trinn
Video: Tine Stafetten Buskerudfinale Vikersund 2013 6.te trinn 2024, Juli
Anonim
Sporingsmodul for syklister
Sporingsmodul for syklister

Denne sporingsmodulen for syklister er en modul som automatisk oppdager krasjer i et løp, og som oppdager et mekanisk sammenbrudd ved å berøre en berøringssensor. Når en av disse hendelsene skjer, sender modulen hendelsen til en database på en bringebær pi via LoRa. Denne hendelsen vil bli vist på en LCD -skjerm og på et nettsted. Du kan også søke på nettstedet etter et bestemt sykkelritt med hendelsene, og legge til sykkelritt eller syklister i databasen. Jeg laget dette prosjektet fordi jeg er veldig interessert i sykling og IOT, så det var veldig spennende å kombinere disse to fagene.

Før du kan lage en sporingsmodul for syklister, må du samle materialet ditt. Du finner verktøyene og rekvisita i listene nedenfor, eller du kan laste ned styklisten (Build Of Materials).

Rekvisita:

  • plexiglass (56 mm x 85 mm)
  • 10 X 2M bolter 10 mm og muttere
  • 10 X 3M bolter 10 mm og muttere
  • 2 X 3M bolter 50 mm og muttere
  • PLA-filament for 3D-utskrift av LCD-etui
  • varme krympe
  • Mann til hunn kabler
  • En grunnleggende PCB
  • Mannlige overskrifter
  • En Raspberry Pi 3b+
  • Et 16 GB SD-kort
  • En sparkfun 4X20 LCD
  • En kapasitiv berøringssensor
  • En summer
  • En 3-akset akselero + gyromåler
  • En GPS -modul
  • Et SODAQ Mbili -brett
  • En LoRa WAN -modul
  • Et 3,7V 1000mAh batteri
  • En Raspberry Pi 3b+ strømforsyning

Verktøy:

  • Loddetinn
  • Loddejern
  • Tenger
  • Skrutrekkere
  • Stikksag
  • Drill maskin
  • 2,5 og 3,5 øvelser
  • Lettere / varmluftspistol

Hvis du trenger å kjøpe alt utstyret, trenger du et budsjett på € 541,67. Dette prosjektet er veldig dyrt fordi jeg brukte et LoRa rappid utviklingskit som koster € 299 (jeg hadde sjansen til å bruke dette settet fra skolen min). Du kan alltid bruke en vanlig Arduino no og spare mye penger, men programmene blir annerledes da.

Trinn 1: Fritzing Scheme

Fritzing -ordning
Fritzing -ordning
Fritzing -ordning
Fritzing -ordning

Det første trinnet er å bygge kretsene. For dette prosjektet har vi to elektriske kretser, en med en Raspberry Pi og en med et SADAQ Mbili -kort. Vi starter med Raspberry Pi -kretsen.

Raspberry Pi Fritzing -opplegg:

Raspberry Pi -opplegget er ganske enkelt, det eneste vi kobler til Pi er en 4X20 Sparkfun LCD -skjerm. Displayet fungerer med seriell kommunikasjon, SPI eller I2C. Hvilken kommunikasjonsprotokoll du bruker er opp til deg. Jeg brukte SPI -protokollen fordi den er veldig enkel. Hvis du bruker SPI som meg, trenger du følgende tilkoblinger:

  • VCC LCD VCC Raspberry Pi
  • GND LCD GND Raspberry Pi
  • SDI LCD MOSI (GPIO 10) Bringebær Pi
  • SDO LCD MISO (GPIO 9) Bringebær Pi
  • SCK LCD SCLK (GPIO 11) Bringebær Pi
  • CS LCD CS0 (GPIO 8) Bringebær Pi

På Fritzing -opplegget vil du se at LCD -skjermen er en 2X16 -skjerm. Dette er fordi jeg ikke fant en 4X20 LCD på frizting. Imidlertid er alle forbindelsene noen, så det spiller ingen rolle.

SODAQ Mbili Fritzing -opplegg:

Vi vil koble 4 elektroniske komponenter med SODAQ Mbili -kortet, så dette elektriske opplegget er også veldig enkelt. Vi starter med å koble til Capactive berøringssensoren. Denne sensoren OUT-pin vil være HØY når sensoren berøres, og vil være LAV ellers. Dette betyr at OUT-pinnen er en digital utgang som vi kan koble til med en digital inngang på Mbili-kortet. Tilkoblingene er som følger:

  • OUT berøringssensor D5 Mbili
  • VCC berøringssensor 3.3V Mbili
  • GND Touch sensor GND Mbili

Den andre komponenten er Triple acces + gyrosensoren. Jeg brukte GY-521-kortet som bruker I2C-protokollen til å kommunisere med Mbili-kortet. Legg merke til at AD0-pinnen til GY-521-kortet må kobles til VCC på Mbili-kortet! Dette er fordi Mbili-kortet har en klokke med samme I2C-adresse som GY-521. Ved å koble AD0-pinnen til VCC endrer vi I2C-adressen til GY-521. Tilkoblingene er som følger:

  • 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

Deretter kobler vi summeren. Jeg bruker standard summer som lager en lyd når det er en strøm. Dette betyr at vi bare kan koble summeren til en digital pinne på Mbili -kortet. Tilkoblingene er som følger:

  • + Summer D4 Mbili
  • - Summer GND Mbili

Sist, men ikke minst, kobler vi til GPS -modulen. GPS -modulen kommuniserer via RX og TX. Tilkoblingene er som følger:

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

Trinn 2: Normalisert database

Normalisert database
Normalisert database

Det andre trinnet er å designe en normalisert database. Jeg har designet ERD i Mysql. Du vil se at databasen min er skrevet på nederlandsk, jeg vil forklare tabellene her.

Tabell 'ploeg':

Dette bordet er et bord for sykkelklubbene. Den inneholder en sykkelklubb -ID og et sykkelklubbnavn.

Tabell 'renners':

Denne tabellen er en tabell for syklistene. Hver syklist har et LoRaID som også er hovednøkkelen i tabellen. De har også et etternavn, fornavn, Country of origen og en sykkelklubb -ID som er knyttet til sykkelklubbbordet.

Tabell 'plasser':

Dette bordet er et bord som lagrer stedene i Belgia hvor et sykkelritt kan finne sted. Den inneholder navnet på byen (som er hovednøkkelen) og provinsen der byen ligger.

Tabell 'konkurranser':

Dette bordet lagrer alle sykkelrittene. Hovednøkkelen i tabellen er en ID. Tabellen inneholder også navnet på sykkelrittet, løpsbyen som er knyttet til plassbordet, løpsdistansen, kategorien til syklistene og løpsdatoen.

Tabell 'gebeurtenissen':

Denne tabellen lagrer alle hendelsene som skjer. Dette betyr at når en syklist er involvert i et krasj eller har et mekanisk sammenbrudd, vil hendelsen bli lagret i denne tabellen. Hovednøkkelen i tabellen er en ID. Tabellen inneholder også datoen for hendelsen, posisjonens breddegrad, posisjonens lengdegrad, syklistens LoRaID og hendelsestypen (krasj eller mekanisk sammenbrudd).

Tabell 'wedstrijdrenner':

Denne tabellen er en tabell som er nødvendig for et mange til mange forhold.

Trinn 3: Registrer LoRa -modulen din

Registrer din LoRa -modul
Registrer din LoRa -modul

Før du kan begynne med koden, må du registrere LoRa -modulen din i en LoRa -gateway. Jeg brukte et teleselskap i Belgia kalt 'Proximus' som ordner kommunikasjonen for min LoRa -modul. Dataene jeg sender med LoRa -noden min, samles på nettstedet fra AllThingsTalk. Hvis du også vil bruke AllThingsTalk API for å samle inn dataene dine, kan du registrere deg her.

Etter at du har registrert deg på AllThingsTalk, må du registrere LoRa -noden din. For å gjøre dette kan du følge disse trinnene, eller du kan se på bildet ovenfor.

  1. Gå til "Enheter" i hovedmenyen
  2. Klikk på 'Ny enhet'
  3. Velg LoRa -noden din
  4. Fyll ut alle nøklene.

Nå er du ferdig! Alle dataene du sender med LoRa -noden din, vises i AllThingsTalk -maker. Hvis du har problemer med registreringen, kan du alltid konsultere AllThingsTalk -dokumentene.

Trinn 4: Koden

Koden
Koden
Koden
Koden
Koden
Koden
Koden
Koden

For dette prosjektet trenger vi 5 kodingsspråk: HTML, CSS, Java Script, Python (Flask) og Arduino -språket. Først vil jeg forklare Arduino -programmet.

Arduino -programmet:

I begynnelsen av programmet erklærer jeg noen globale variabler. Du vil se at jeg bruker SoftwareSerial for tilkoblingen til min GPS. Dette er fordi Mbili -kortet bare har 2 serielle porter. Du kan koble GPS -en til Serial0, men du vil ikke kunne bruke Arduino -terminalen for feilsøking da. Dette er grunnen til at jeg bruker en SoftwareSerial.

Etter de globale variablene, deklarerer jeg noen funksjoner som gjør det enkelt å lese programmet. De leser opp GPS -koordinatene, får summer til å høres, sender verdier via LoRa, …

Den tredje blokken er oppsettblokken. Denne blokken er begynnelsen på programmet som setter opp pinnene, seriell kommunikasjon og I2C -kommunikasjonen.

Etter oppsettblokken kommer hovedprogrammet. I begynnelsen av denne hovedsløyfen sjekker jeg om berøringssensoren er aktiv. I så fall gir jeg summeren lyd, får GPS -data og sender alle verdiene via LoRa eller Bluetooth til Raspberry PI. Etter berøringssensoren leste jeg opp verdiene til akselerometeret. Med en formel beregner jeg den eksakte vinkelen til X- og Y -aksen. Hvis disse verdiene er for store, kan vi konkludere med at syklisten krasjet. Når det skjer et krasj, får jeg summeren til å lyde igjen, får GPS -dataene og sender alle verdiene via LoRa eller Bluetooth til Raspberry PI.

Du tenker sannsynligvis: 'Hvorfor bruker du bluetooth og LoRa?'. Dette er fordi jeg hadde problemer med lisensen til LoRa -modulen jeg brukte. Så for å få programmet til å fungere for demoen min, måtte jeg bruke Bluetooth en stund.

2. Baksiden:

Baksiden er litt kompleks. Jeg bruker Flask for mine ruter som er tilgjengelige for frontend, jeg bruker socketio til å oppdatere noen av forsiden automatisk, jeg bruker GPIO -pinnene til å vise meldinger på en LCD -skjerm og motta meldinger via Bluetooth (ikke nødvendig hvis du bruker LoRa) og jeg bruker Threading and Timers til å lese AllThinksTalk API regelmessig og starte kolbserveren.

Jeg bruker også SQL -databasen til å lagre alle de påfølgende krasjene, lese opp syklistenes personlige data og løpsdataene. Denne databasen er koblet til back-end og kjører også på Raspberry Pi. Jeg bruker en klasse 'Database.py' for å samhandle med databasen.

Som du kjenner fra Fritzing -opplegget, er LCD -en koblet til Raspberry Pi via SPI -protokollen. For å gjøre det litt lettere skrev jeg klassen 'LCD_4_20_SPI.py'. Med denne klassen kan du endre kontrasten, endre bakgrunnsbelysningsfargen, skrive meldinger på skjermen,…. Hvis du vil bruke Bluetooth, kan du bruke klassen 'SerialRaspberry.py'. Denne klassen styrer den serielle kommunikasjonen mellom Bluetooth -modulen og Raspberry Pi. Det eneste du trenger å gjøre er å koble en Bluetooth -modul til Raspberry Pi ved å koble RX til TX og virsa versa.

Rutene for frontend er skrevet med @app.route -regelen. Her kan du lage din egen tilpassede rute for å sette inn eller hente data inn i eller fra databasen. Sørg for at du alltid har et svar på slutten av ruten. Jeg returnerer alltid et JSON -objekt til frontenden, selv om det oppstod en feil. Du kan bruke en variabel i nettadressen ved å plassere rundt variabelen.

Jeg bruker socketio til nettsiden med et krasj. Når Raspberry Pi mottar et krasj, sender jeg en melding til frontenden via socketio. Frontenden vet da at de må lese opp databasen igjen fordi det var et nytt krasj.

Du vil se at LoRa -kommunikasjonen i min kode er satt i kommando. Hvis du vil bruke LoRa, må du starte en timer som repeterende sender en forespørsel til AllThinksTalk API. Fra denne API -en vil du motta sensorverdiene (GPS, Time, Crash kind) som sendes av en bestemt LoRa -node. Du kan bruke disse verdiene til å sette inn et krasj i databasen.

3. Frondenden:

Frondenden består av 3 språk. HTML for nettstedsteksten, CSS for nettstedets oppslag og JavaScript for kommunikasjon med bakenden. Jeg har 4 nettsider for dette prosjektet:

  • Index.html hvor du finner alle sykkelrittene.
  • En side med alle krasj og mekaniske havarier for et spesiell løp.
  • En side der du kan legge til sylister i databasen og redigere teamet sitt.
  • En side der du kan legge til et nytt løp med alle deltakerne i databasen.

Hvordan du designer dem er helt opp til deg. Du kan få litt inspirasjon fra nettstedet mitt hvis du vil. Dessverre er nettstedet mitt laget på nederlandsk, jeg beklager det.

Jeg har en separat CSS -fil og JavaScript -fil for hver side. Hver JavaScript -fil bruker henting for å få dataene fra databasen via bakenden. Når skriptet mottar dataene, endres html dynamisk. På siden der du kan finne krasj og mekaniske havarier, finner du et kart der alle hendelsene skjedde. Jeg brukte brosjyre for å vise dette kartet.

Du kan se på alle kodene mine her på min Github.

Trinn 5: Bygg konstruksjonene

Bygg konstruksjonene
Bygg konstruksjonene
Bygg konstruksjonene
Bygg konstruksjonene
Bygg konstruksjonene
Bygg konstruksjonene

Før vi kan begynne med konstruksjonen, må du kontrollere at du har alt materialet fra styklisten eller fra siden "Verktøy + rekvisita".

Bringebær Pi + LCD

Vi starter med saken for Raspberry Pi. Du kan alltid 3D-skrive ut et etui, dette var også min første idé. Men fordi fristen min nærmet seg veldig, bestemte jeg meg for å lage en enkel sak. Jeg tok standard etui fra Raspberry Pi, og jeg boret et hull i saken for ledningene fra LCD -skjermen min. For å gjøre dette, følg bare disse enkle trinnene:

  1. Bor et hull i dekselet på saken. Jeg gjorde dette med en 7 mm drill på siden av dekselet. Du kan se dette på bildet ovenfor.
  2. Ta ledningene fra LCD -skjermen og skyv et hode som krymper over ledningene.
  3. Bruk en lighter eller en varmluftspistol for å få hodet til å krympe.
  4. Trekk ledningene med hodet krympet gjennom hullet i saken, og koble dem tilbake til LCD -skjermen.

Nå som du er klar med saken til Raspberry Pi, kan du starte med saken til LCD -skjermen. Jeg trykte 3D-saken på LCD-skjermen fordi jeg fant en sak på denne lenken. Jeg måtte bare gjøre en liten endring i høyden på saken. Når du synes at tegningen din er god, kan du eksportere filene og begynne å skrive ut. Hvis du ikke vet hvordan du 3D-skriver ut, kan du følge denne instruksjonen om hvordan du 3D-skriver ut med fusion 360.

SODAQ MBili konstruksjon

Jeg gjorde egentlig ikke en sak for SODAQ Mbili -brettet. Jeg brukte et plexiglass for å plassere komponentene mine på uten etui rundt konstruksjonen. Hvis du også vil gjøre dette, kan du følge disse trinnene:

  1. Logg av plexiglasset med dimesnionene på SODAQ Mbili -brettet. Dimensjonene er: 85 mm x 56 mm
  2. Skjær plexiglasset med et stikksag.
  3. Legg de elektroniske komponentene på plexiglasset og merk av hullene med blyant.
  4. Bor hullene du nettopp har logget av og hullene for avstandene med en 3,5 mm bor.
  5. Monter alle elektroniske komponenter på plexiglasset med 3M 10 mm bolter og muttere.
  6. Det siste trinnet er å montere plexiglasset over Mbili -kortet. Du kan gjøre dette med avstand, men jeg brukte to 3M 50mm bolter og 8 3M muttere for å montere plexiglasset over brettet.

Anbefalt: