Sadržaj:

Modul za praćenje biciklista: 5 koraka
Modul za praćenje biciklista: 5 koraka

Video: Modul za praćenje biciklista: 5 koraka

Video: Modul za praćenje biciklista: 5 koraka
Video: SONY IMX415 8МП+5-X zoom Купольная антивандальная IP камера фиксирует лица и людей ICsee XMEye 2024, Srpanj
Anonim
Modul za praćenje biciklista
Modul za praćenje biciklista

Ovaj modul za praćenje biciklista modul je koji automatski detektira sudare u utrci i koji detektira mehanički kvar dodirom osjetnika na dodir. Kada se dogodi jedan od ovih događaja, modul šalje događaj u bazu podataka na maline pi putem LoRa. Ovaj događaj bit će prikazan na LCD zaslonu i na web stranici. Također možete pretraživati na web stranici određenu biciklističku utrku s događajima i u bazu podataka dodati biciklističke utrke ili bicikliste. Napravio sam ovaj projekt jer me jako zanimaju biciklizam i IOT, pa mi je kombiniranje ova dva predmeta bilo jednostavno uzbudljivo.

Prije nego što možete izraditi modul za praćenje biciklista, morate prikupiti svoj materijal. Alate i zalihe možete pronaći na donjim popisima ili možete preuzeti BOM (Build Of Materials).

Pribor:

  • pleksi staklo (56 mm x 85 mm)
  • 10 X 2M vijci 10 mm i matice
  • 10 X 3M vijci 10 mm i matice
  • 2 X 3M vijka 50 mm i matice
  • PLA Filament za 3D ispis vašeg LCD kućišta
  • termoskupljanje
  • Muški do ženski kabeli
  • Osnovni PCB
  • Muška zaglavlja
  • Malina Pi 3b+
  • SD kartica od 16 GB
  • Sparkfun 4X20 LCD
  • Kapacitivni osjetnik na dodir
  • Zvučni signal
  • Troosni akcelerometar + žirometar
  • GPS modul
  • SODAQ Mbili ploča
  • LoRa WAN modul
  • Baterija od 3,7 V 1000 mAh
  • Napajanje Raspberry Pi 3b+

Alati:

  • Lemljeni lim
  • Lemilica
  • Kliješta
  • Odvijači
  • Jigsaw
  • Bušilica
  • Bušilice 2,5 i 3,5
  • Upaljač / pištolj za topli zrak

Ako trebate kupiti sve zalihe, trebat će vam proračun od 541,67 €. Ovaj projekt je jako skup jer sam koristio LoRa brzi razvojni komplet koji košta 299 € (imao sam priliku koristiti ovaj komplet iz svoje škole). Uvijek možete koristiti uobičajeni Arduino i uštedjeti mnogo novca, ali programi će tada biti drugačiji.

Korak 1: Shema zamrzavanja

Shema prelijevanja
Shema prelijevanja
Shema prelijevanja
Shema prelijevanja

Prvi korak je izgradnja sklopova. Za ovaj projekt imamo 2 električna kruga, jedan s Raspberry Pi i jedan s pločom SADAQ Mbili. Počet ćemo s Raspberry Pi krugom.

Shema fritzinga od Raspberry Pi:

Raspberry Pi shema je prilično jednostavna, jedino što povezujemo s Pi je 4X20 Sparkfun LCD zaslon. Zaslon radi sa serijskom komunikacijom, SPI ili I2C. Koji komunikacijski protokol ćete koristiti ovisi o vama. Koristio sam SPI protokol jer je vrlo jednostavan. Ako koristite SPI poput mene, trebate sljedeće veze:

  • 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

Na shemi Fritzing vidjet ćete da je LCD zaslon 2X16. To je zato što nisam pronašao 4X20 LCD na frizingu. Međutim, sve su veze neke pa to i nije važno.

SODAQ Mbili Fritzing shema:

Spojit ćemo 4 elektroničke komponente sa pločom SODAQ Mbili, pa je i ova električna shema vrlo jednostavna. Počet ćemo s povezivanjem Capactive senzora dodira. OUT-pin osjetnika bit će VISOK kada dodirnete senzor, a u protivnom će biti NISKI. To znači da je OUT-pin digitalni izlaz koji možemo povezati s digitalnim ulazom ploče Mbili. Veze su sljedeće:

  • OUT senzor dodira D5 Mbili
  • VCC osjetnik na dodir 3.3V Mbili
  • GND Senzor dodira GND Mbili

Druga komponenta je Trostruki pristup + žiroskop. Koristio sam ploču GY-521 koja koristi I2C protokol za komunikaciju s pločom Mbili. Uočite da AD0-pin na ploči GY-521 mora biti povezan s VCC-om ploče Mbili! To je zato što ploča Mbili ima sat s istom I2C adresom poput GY-521. Spajanjem AD0-pina na VCC mijenjamo I2C adresu GY-521. Veze su sljedeće:

  • 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

Nakon toga ćemo spojiti zujalicu. Koristim standardni zvučni signal koji proizvodi zvuk kad postoji struja. To znači da samo možemo spojiti zujalicu na digitalni pin Mbili ploče. Veze su sljedeće:

  • + Zujalica D4 Mbili
  • - Zvučni signal GND Mbili

Na kraju, ali ne i najmanje važno, povezat ćemo GPS modul. GPS modul komunicira putem RX i TX. Veze su sljedeće:

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

Korak 2: Normalizirana baza podataka

Normalizirana baza podataka
Normalizirana baza podataka

Drugi korak je dizajniranje normalizirane baze podataka. Dizajnirao sam svoj ERD u Mysqlu. Vidjet ćete da je moja baza podataka napisana na nizozemskom jeziku, ovdje ću objasniti tablice.

Tablica "ploeg":

Ovaj stol je stol za biciklističke klubove. Sadrži identifikacijski broj biciklističkog kluba i naziv biciklističkog kluba.

Tablica "renners":

Ova tablica je tablica za bicikliste. Svaki biciklist ima LoRaID koji je ujedno i primarni ključ tablice. Također imaju prezime, ime, državu podrijetla i identifikacijski broj biciklističkog kluba koji je povezan sa stolom biciklističkog kluba.

Tablica "plaatsen":

Ovaj stol je tablica koja pohranjuje mjesta u Belgiji na kojima se može održati biciklistička utrka. Sadrži naziv grada (koji je primarni ključ) i pokrajine u kojoj se grad nalazi.

Tablica 'wedstrijden':

Ovaj stol sprema sve biciklističke utrke. Primarni ključ tablice je ID. Tablica također sadrži naziv biciklističke utrke, grad utrke koji je povezan s tablicom mjesta, udaljenost utrke, kategoriju biciklista i datum utrke.

Tablica "gebeurtenissen":

Ova tablica pohranjuje sve događaje koji su se dogodili. To znači da će, kada biciklist sudjeluje u sudaru ili ima mehanički kvar, događaj biti pohranjen u ovoj tablici. Primarni ključ tablice je ID. Tablica također sadrži datum i vrijeme događaja, zemljopisnu širinu položaja, dužinu položaja, LoRaID biciklista i vrstu događaja (sudar ili mehanički kvar).

Tablica 'wedstrijdrenner':

Ova tablica je tablica koja je potrebna za vezu mnogi prema mnogima.

Korak 3: Registrirajte svoj LoRa modul

Registrirajte svoj LoRa modul
Registrirajte svoj LoRa modul

Prije nego počnete s kodom, morate registrirati svoj LoRa modul na LoRa pristupniku. Koristio sam telekomunikacijsku tvrtku u Belgiji pod nazivom 'Proximus' koja organizira komunikaciju za moj LoRa modul. Podaci koje šaljem sa svojim LoRa čvorom prikupljaju se na web stranici s AllThingsTalk -a. Ako također želite koristiti AllThingsTalk API za prikupljanje svojih podataka, možete se registrirati ovdje.

Nakon što ste se registrirali na AllThingsTalk, morate registrirati svoj LoRa čvor. Da biste to učinili, možete slijediti ove korake ili možete pogledati gornju sliku.

  1. Idite na 'Uređaji' u glavnom izborniku
  2. Kliknite na "Novi uređaj"
  3. Odaberite svoj LoRa čvor
  4. Ispunite sve ključeve.

Sada ste gotovi! Svi podaci koje šaljete sa svojim LoRa čvorom pojavit će se u vašem AllThingsTalk alatu. Ako imate bilo kakvih problema s registracijom, uvijek se možete obratiti dokumentima AllThingsTalk.

Korak 4: Kôd

Kod
Kod
Kod
Kod
Kod
Kod
Kod
Kod

Za ovaj projekt trebat će nam 5 jezika za kodiranje: HTML, CSS, Java Script, Python (Flask) i jezik Arduino. Prvo ću objasniti Arduino program.

Arduino program:

Na početku programa deklariram neke globalne varijable. Vidjet ćete da za povezivanje sa svojim GPS -om koristim SoftwareSerial. To je zato što Mbili ploča ima samo 2 serijska porta. Možete povezati GPS s Serial0, ali tada nećete moći koristiti Arduino terminal za otklanjanje pogrešaka. To je razlog zašto koristim SoftwareSerial.

Nakon globalnih varijabli deklariram neke funkcije koje olakšavaju čitanje programa. Očitavaju koordinate GPS -a, oglašavaju zvučni signal, šalju vrijednosti putem LoRa -e,…

Treći blok je instalacijski blok. Ovaj blok je početak programa koji postavlja pinove, serijsku komunikaciju i I2C komunikaciju.

Nakon instalacijskog bloka dolazi glavni program. Na početku ove glavne petlje provjeravam je li osjetnik na dodir aktivan. Ako je tako, oglašavam zvučni signal, dobivam GPS podatke i šaljem sve vrijednosti putem LoRa -e ili Bluetootha na Raspberry PI. Nakon osjetnika na dodir, očitao sam vrijednosti mjerača brzine. Formulom izračunavam točan kut osi X i Y. Ako su ove vrijednosti prevelike, možemo zaključiti da se biciklist srušio. Kad se dogodi sudar, ponovno oglašavam zvučni signal, dobivam GPS podatke i šaljem sve vrijednosti putem LoRa -e ili Bluetootha na Raspberry PI.

Vjerojatno razmišljate: 'Zašto koristite Bluetooth i LoRa?'. To je zato što sam imao problema s licencom LoRa modula koji sam koristio. Kako bih program radio za moju demo verziju, neko sam vrijeme morao koristiti Bluetooth.

2. Stražnji kraj:

Stražnji kraj je malo složen. Za svoje rute koristim Flask koji je dostupan za prednji kraj, koristim socketio za automatsko ažuriranje nekih prednjih stranica, GPIO pinove za prikazivanje poruka na LCD zaslonu i primanje poruka putem Bluetootha (nije potrebno ako koristite LoRa) i ja koristimo Threading i Timers za redovito čitanje AllThinksTalk API -ja i pokretanje poslužitelja flask.

Također koristim SQL bazu podataka za spremanje svih dolazećih rušenja, čitanje osobnih podataka biciklista i podataka utrka. Ova je baza podataka povezana s pozadinskim uređajem i također radi na Raspberry Pi. Za interakciju s bazom podataka koristim klasu 'Database.py'.

Kao što znate iz Fritzing sheme, lcd je spojen na Raspberry Pi putem SPI protokola. Kako bih to olakšao, napisao sam klasu 'LCD_4_20_SPI.py'. Ovom klasom možete promijeniti kontrast, promijeniti boju pozadinskog osvjetljenja, pisati poruke na ekranu,…. Ako želite koristiti Bluetooth, možete koristiti klasu 'SerialRaspberry.py'. Ova klasa upravlja serijskom komunikacijom između Bluetooth modula i Raspberry Pi. Jedino što trebate učiniti je spojiti Bluetooth modul na Raspberry Pi povezivanjem RX -a s TX -om i obrnuto.

Rute za prednji kraj ispisane su pravilom @app.route. Ovdje možete napraviti vlastiti prilagođeni put za umetanje ili unos podataka u bazu podataka ili iz nje. Pobrinite se da uvijek imate odgovor na kraju rute. Uvijek vraćam JSON objekt na prednji kraj, čak i kad je došlo do pogreške. Varijablu možete koristiti u URL -u postavljanjem oko varijable.

Koristim socketio za web stranicu s padovima utrke. Kad Raspberry Pi primi rušenje, emitiram poruku na prednji kraj putem socketio. Prednji kraj tada zna da moraju ponovno pročitati bazu podataka jer je došlo do novog rušenja.

Vidjet ćete da je u mom kodu komunikacija LoRa postavljena kao naredba. Ako želite koristiti LoRa, morate pokrenuti mjerač vremena koji ponavljajuće šalje zahtjev na AllThinksTalk API. Iz ovog API -ja ćete primiti vrijednosti senzora (GPS, vrijeme, vrsta pada) koje šalje određeni čvor LoRa. Ove vrijednosti možete koristiti za umetanje rušenja u bazu podataka.

3. Prednji kraj:

Prednji kraj sastoji se od 3 jezika. HTML za tekst web stranice, CSS za označavanje web stranice i JavaScript za komunikaciju sa stražnjim dijelom. Imam 4 stranice web stranice za ovaj projekt:

  • Indeks.html gdje možete pronaći sve biciklističke utrke.
  • Stranica sa svim padovima i mehaničkim kvarovima za začinjenu utrku.
  • Stranica na koju možete dodati cilindre u bazu podataka i urediti njihov tim.
  • Stranica na koju možete dodati novu utrku sa svim sudionicima u bazu podataka.

Kako ćete ih dizajnirati, u potpunosti ovisi o vama. Ako želite, možete dobiti inspiraciju na mojoj web stranici. Nažalost moja web stranica je na nizozemskom jeziku, žao mi je zbog toga.

Za svaku stranicu imam zasebnu CSS datoteku i JavaScript datoteku. Svaka JavaScript datoteka koristi dohvaćanje za dobivanje podataka iz baze podataka putem pozadine. Kad skripta primi podatke, html se dinamički mijenja. Na stranici na kojoj možete pronaći rušenja i mehaničke kvarove pronaći ćete kartu na kojoj su se svi događaji dogodili. Koristio sam letak da pokažem ovu kartu.

Možete pogledati sav moj kôd ovdje na mom Githubu.

Korak 5: Izgradite konstrukcije

Izgradite konstrukcije
Izgradite konstrukcije
Izgradite konstrukcije
Izgradite konstrukcije
Izgradite konstrukcije
Izgradite konstrukcije

Prije nego što počnemo s izgradnjom, provjerite imate li sav materijal iz BOM -a ili sa stranice 'Tools + Supplies'.

Raspberry Pi + LCD

Počet ćemo sa slučajem za Raspberry Pi. Uvijek možete 3D ispisati kućište, ovo je bila i moja prva ideja. No, budući da mi se rok bližio, odlučio sam iznijeti jednostavan slučaj. Uzeo sam standardno kućište od Raspberry Pi -ja i izbušio rupu u kućištu za žice sa svog LCD zaslona. Da biste to učinili, samo slijedite ove jednostavne korake:

  1. Izbušite rupu u poklopcu kućišta. To sam učinio bušilicom od 7 mm sa strane poklopca. To možete vidjeti na gornjoj slici.
  2. Uzmite žice s LCD zaslona i gurnite glavu koja se skuplja preko žica.
  3. Upaljačem ili pištoljem s vrućim zrakom smanjite skupljanje glave.
  4. Povucite žice s glavom koja se skuplja kroz otvor na kućištu i spojite ih natrag na LCD.

Sada kada ste spremni s kućištem za Raspberry Pi, možete početi s kućištem za LCD zaslon. 3D sam ispisao kućište za svoj LCD zaslon jer sam na ovoj poveznici pronašao kućište na mreži. Morao sam samo malo promijeniti visinu kućišta. Kad mislite da crtate dobro, možete izvesti datoteke i započeti ispis. Ako ne znate kako 3D ispisivati, možete slijediti ove upute o tome kako 3D ispisivati pomoću fusion 360.

SODAQ MBili konstrukcija

Nisam baš napravio slučaj za ploču SODAQ Mbili. Koristio sam pleksi staklo za postavljanje komponenti bez kućišta oko konstrukcije. Ako želite učiniti i ovo, možete slijediti ove korake:

  1. Odjavite se od pleksiglasa dimenzijama ploče SODAQ Mbili. Dimenzije su: 85 mm x 56 mm
  2. Plexiglass izrežite ubodnom pilom.
  3. Postavite elektroničke komponente na pleksiglas i označite rupe olovkom.
  4. Izbušite rupe koje ste upravo potpisali i rupe za odstupanja bušilicom od 3,5 mm.
  5. Montirajte sve elektroničke komponente na pleksiglas pomoću 3M vijaka i matica od 10 mm.
  6. Posljednji korak je postavljanje pleksiglasa iznad ploče Mbili. To možete učiniti s odstupanjima, ali ja sam koristio dva 3M vijka od 50 mm i 8 3M matica za postavljanje pleksiglasa iznad ploče.

Preporučeni: