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, Juli
Anonim
Modul za praćenje biciklista
Modul za praćenje biciklista

Ovaj modul za praćenje biciklista je modul koji automatski otkriva sudare u utrci i koji detektira mehanički kvar dodirom na senzor dodira. Kada se dogodi jedan od ovih događaja, modul šalje događaj u bazu podataka na maline pi putem LoRa. Ovaj događaj će biti prikazan na LCD ekranu i na web stranici. Na web stranici možete pretraživati i određenu biciklističku utrku s događajima te u bazu podataka dodati biciklističke utrke ili bicikliste. Napravio sam ovaj projekt jer me jako zanimaju biciklizam i IOT, pa mi je kombinacija ovih dviju tema bila vrlo uzbudljiva.

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

Potrošni materijal:

  • 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 štampanje vašeg LCD kućišta
  • termoskupljanje
  • Muški na ženski kabel
  • Osnovna PCB
  • Muška zaglavlja
  • Raspberry Pi 3b+
  • SD kartica od 16 GB
  • Sparkfun 4X20 LCD
  • Kapacitivni senzor dodira
  • Zvučni signal
  • Troosni merač ubrzanja + žiroskop
  • GPS modul
  • SODAQ Mbili ploča
  • LoRa WAN modul
  • Baterija od 3,7 V 1000 mAh
  • Napajanje Raspberry Pi 3b+

Alati:

  • Lemljeni lim
  • Lemilica
  • Klešta
  • Odvijači
  • Jigsaw
  • Bušilica
  • Bušilice 2,5 i 3,5
  • Upaljač / pištolj sa toplim vazduhom

Ako trebate kupiti sve zalihe, trebat će vam budžet 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 običan Arduino i uštedjeti mnogo novca, ali programi će tada biti drugačiji.

Korak 1: Shema prefrigavanja

Fritzing Scheme
Fritzing Scheme
Fritzing Scheme
Fritzing Scheme

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

Shema za fritzing 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. Od vas zavisi koji ćete komunikacijski protokol koristiti. Koristio sam SPI protokol jer je vrlo jednostavan. Ako koristite SPI poput mene, potrebne su vam 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 veze su 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 senzora će biti VISOK kada dodirnete senzor, a inače će biti NISKI. To znači da je OUT-pin digitalni izlaz koji možemo povezati s digitalnim ulazom Mbili ploče. Veze su sljedeće:

  • OUT senzor dodira D5 Mbili
  • VCC senzor dodira 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. Primijetite da AD0-pin na GY-521 ploči mora biti povezan s VCC-om Mbili ploče! To je zato što ploča Mbili ima sat sa istom I2C adresom kao 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 kada 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

Normalizovana baza podataka
Normalizovana baza podataka

Drugi korak je dizajniranje normalizirane baze podataka. Dizajnirao sam svoj ERD u Mysqlu. Videćete da je moja baza podataka napisana na holandskom jeziku, objasniću tabele ovde.

Tablica 'ploeg':

Ova tablica 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đe imaju prezime, ime, državu porijekla i identifikacioni broj biciklističkog kluba koji je povezan sa stolom biciklističkog kluba.

Tablica "plaatsen":

Ova tablica je tablica koja sadrži 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':

Ova tablica sprema sve biciklističke utrke. Primarni ključ tablice je ID. Tabela takođe sadrži naziv biciklističke trke, grad trke koji je povezan sa tabelom mjesta, udaljenost trke, kategoriju biciklista i datum trke.

Tablica 'gebeurtenissen':

Ova tablica pohranjuje sve događaje koji su se dogodili. To znači da, kada je biciklist uključen u sudar ili ima mehanički kvar, događaj će biti pohranjen u ovoj tablici. Primarni ključ tablice je ID. Tablica također sadrži datum i vrijeme događaja, zemljopisnu širinu pozicije, dužinu pozicije, LoRaID bicikliste 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 gatewayu. Koristio sam telekomunikacijsku kompaniju u Belgiji koja se zove 'Proximus' i koja organizira komunikaciju za moj LoRa modul. Podaci koje šaljem sa svojim LoRa čvorom prikupljaju se na web stranici sa AllThingsTalk -a. Ako također želite koristiti AllThingsTalk API za prikupljanje vaših 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 meniju
  2. Kliknite na "Novi uređaj"
  3. Odaberite svoj LoRa čvor
  4. Popunite sve ključeve.

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

Korak 4: Kôd

Kodeks
Kodeks
Kodeks
Kodeks
Kodeks
Kodeks
Kodeks
Kodeks

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 koristim SoftwareSerial za povezivanje sa svojim GPS -om. To je zato što Mbili ploča ima samo 2 serijska porta. Možete povezati GPS sa 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 Bluetooth -a na Raspberry PI. Nakon senzora dodira, očitao sam vrijednosti akcelerometra. Formulom izračunavam tačan ugao osi X i Y. Ako su ove vrijednosti prevelike, možemo zaključiti da se biciklist sudario. Kad se dogodi sudar, ponovo oglašavam zvučni signal, uzimam GPS podatke i šaljem sve vrijednosti putem LoRa ili Bluetooth -a 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. Da bih program radio za demo, morao sam neko vrijeme koristiti Bluetooth.

2. Zadnji kraj:

Zadnji kraj je malo složen. Koristim Flask za svoje rute koje su dostupne za prednji kraj, koristim socketio za automatsko ažuriranje nekih prednjih stranica, koristim GPIO pinove za prikazivanje poruka na LCD ekranu i primanje poruka putem Bluetooth -a (nije potrebno ako koristite LoRa) i ja koristimo Threading i Timers za redovno čitanje AllThinksTalk API -ja i pokretanje flask servera.

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

Kao što znate iz Fritzing sheme, LCD je povezan sa Raspberry Pi putem SPI protokola. Da bih bio lakši, 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 napisane 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 greš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 utičnice. Prednji kraj tada zna da moraju ponovo pročitati bazu podataka jer je došlo do novog pada.

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 LoRa čvor. Ove vrijednosti možete koristiti za umetanje rušenja u bazu podataka.

3. Prednji kraj:

Prednji dio se sastoji 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 određenu utrku.
  • Stranica na kojoj možete dodati cilindre u bazu podataka i urediti njihov tim.
  • Stranica na koju možete dodati novu utrku sa svim polaznicima u bazu podataka.

Na vama je kako ćete ih dizajnirati. Ako želite, možete dobiti inspiraciju na mojoj web stranici. Nažalost moja web stranica je na holandskom jeziku, žao mi je zbog toga.

Za svaku stranicu imam zasebnu CSS datoteku i JavaScript datoteku. Svaka JavaScript datoteka koristi dohvaćanje za preuzimanje podataka iz baze podataka putem pozadine. Kada 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 započ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 vrlo blizu, 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 ekrana. 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. Izvadite žice s LCD zaslona i gurnite glavu koja se skuplja preko žica.
  3. Upotrijebite upaljač ili pištolj s vrućim zrakom kako biste smanjili 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 odštampao kućište za svoj LCD ekran jer sam na ovoj vezi 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 zaista 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. Odpišite pleksiglas sa dimenzijama ploče SODAQ Mbili. Dimenzije su: 85 mm x 56 mm
  2. Izrežite pleksiglas 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 50 mm i 8 3M matica za postavljanje pleksiglasa iznad ploče.

Preporučuje se: