Cuprins:

Modul de urmărire pentru bicicliști: 5 pași
Modul de urmărire pentru bicicliști: 5 pași

Video: Modul de urmărire pentru bicicliști: 5 pași

Video: Modul de urmărire pentru bicicliști: 5 pași
Video: Investitii la bursa in 5 pasi 2024, Noiembrie
Anonim
Modul de urmărire pentru bicicliști
Modul de urmărire pentru bicicliști

Acest modul de urmărire pentru cicliști este un modul care detectează automat accidentele într-o cursă și care detectează o defecțiune mecanică prin atingerea unui senzor tactil. Când se întâmplă unul dintre aceste evenimente, modulul trimite evenimentul către o bază de date pe un raspberry pi prin LoRa. Acest eveniment va fi afișat pe un ecran LCD și pe un site web. De asemenea, puteți căuta pe site o cursă de ciclism specifică cu evenimentele și puteți adăuga curse de ciclism sau bicicliști în baza de date. Am făcut acest proiect pentru că sunt foarte interesat de ciclism și IOT, așa că combinarea acestor două subiecte a fost foarte interesantă pentru mine.

Înainte de a putea realiza un modul de urmărire pentru bicicliști, trebuie să vă colectați materialele. Puteți găsi instrumentele și consumabilele în listele de mai jos sau puteți descărca BOM (Build Of Materials).

Provizii:

  • sticlă plexi (56mm X 85mm)
  • 10 X 2M șuruburi 10mm și piulițe
  • 10 X 3M șuruburi 10mm și piulițe
  • 2 șuruburi X 3M 50mm și piulițe
  • PLA Filament pentru a imprima 3D carcasa LCD
  • micșorarea căldurii
  • Cabluri de la Tată la Tată
  • Un PCB de bază
  • Anteturi masculine
  • Un Raspberry Pi 3b +
  • Un card SD de 16 GB
  • Un LCD sparkxun 4X20
  • Un senzor tactil capacitiv
  • Un buzzer
  • Un accelerometru cu 3 axe + girometru
  • Un modul GPS
  • O placă SODAQ Mbili
  • Un modul LoRa WAN
  • O baterie de 3.7V 1000mAh
  • O sursă de alimentare Raspberry Pi 3b +

Instrumente:

  • Cutie de lipit
  • Ciocan de lipit
  • Clești
  • Șurubelnițe
  • Jigsaw
  • Masina de gaurit
  • Burghie 2,5 și 3,5
  • Pistol cu brichetă / aer cald

Dacă trebuie să cumpărați toate consumabilele, veți avea nevoie de un buget de 541,67 €. Acest proiect este foarte scump deoarece am folosit un kit de dezvoltare LoRa rapid care costă 299 € (am avut șansa să folosesc acest kit de la școala mea). Puteți folosi oricând un Arduino normal și economisiți mulți bani, dar programele vor fi diferite atunci.

Pasul 1: Schema Fritzing

Schema Fritzing
Schema Fritzing
Schema Fritzing
Schema Fritzing

Primul pas este construirea circuitelor. Pentru acest proiect avem 2 circuite electrice, unul cu un Raspberry Pi și unul cu o placă SADAQ Mbili. Vom începe cu circuitul Raspberry Pi.

Schema Raspberry Pi Fritzing:

Schema Raspberry Pi este destul de simplă, singurul lucru pe care îl conectăm cu Pi este un afișaj LCD Sparkfun 4X20. Afișajul funcționează cu comunicații seriale, SPI sau I2C. Ce protocol de comunicare utilizați depinde de dvs. Am folosit protocolul SPI pentru că este foarte simplu. Dacă utilizați SPI ca mine, aveți nevoie de următoarele conexiuni:

  • 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

Pe schema Fritzing veți vedea că afișajul LCD este un afișaj 2X16. Acest lucru se datorează faptului că nu am găsit un LCD 4X20 pe frizare. Cu toate acestea, toate conexiunile sunt unele, deci nu contează cu adevărat.

Schema SODAQ Mbili Fritzing:

Vom conecta 4 componente electronice cu placa SODAQ Mbili, deci această schemă electrică este de asemenea foarte simplă. Vom începe cu conectarea senzorului tactil Capactive. Acest senzor OUT-pin va fi ÎNALT când senzorul este atins și va fi LOW în caz contrar. Aceasta înseamnă că pinul OUT este o ieșire digitală pe care o putem conecta cu o intrare digitală a plăcii Mbili. Conexiunile sunt următoarele:

  • Senzor tactil OUT D5 Mbili
  • Senzor tactil VCC 3.3V Mbili
  • Senzor GND Touch GND Mbili

A doua componentă este senzorul Triple acces + giroscop. Am folosit placa GY-521 care utilizează protocolul I2C pentru a comunica cu placa Mbili. Observați că pinul AD0 al plăcii GY-521 trebuie să fie conectat la VCC-ul plăcii Mbili! Acest lucru se datorează faptului că placa Mbili are un ceas cu aceeași adresă I2C ca GY-521. Prin conectarea pinului AD0 la VCC schimbăm adresa I2C a GY-521. Conexiunile sunt următoarele:

  • 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

Ulterior vom conecta buzzerul. Folosesc buzzerul standard care scoate un sunet atunci când există curent. Aceasta înseamnă că putem conecta buzzerul la un pin digital al plăcii Mbili. Conexiunile sunt următoarele:

  • + Buzzer D4 Mbili
  • - Buzzer GND Mbili

Nu în ultimul rând, vom conecta modulul GPS. Modulul GPS comunică prin RX și TX. Conexiunile sunt următoarele:

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

Pasul 2: Baza de date normalizată

Baza de date normalizată
Baza de date normalizată

Al doilea pas este de a proiecta o bază de date normalizată. Mi-am proiectat ERD în Mysql. Veți vedea că baza mea de date este scrisă în limba olandeză, voi explica tabelele de aici.

Tabelul „ploeg”:

Acest tabel este un tabel pentru cluburile de ciclism. Acesta conține un ID de club de ciclism și un nume de club de ciclism.

Tabelul „chei”:

Acest tabel este un tabel pentru bicicliști. Fiecare ciclist are un LoRaID care este, de asemenea, cheia primară a tabelului. Au, de asemenea, un nume de familie, prenume, țara de origine și un ID de club de ciclism care este legat de masa clubului de ciclism.

Tabelul „plaatsen”:

Acest tabel este un tabel care stochează locurile din Belgia unde poate avea loc o cursă de ciclism. Conține numele orașului (care este cheia primară) și provincia în care este situat orașul.

Tabelul „wedstrijden”:

Această masă stochează toate cursele de ciclism. Cheia primară a tabelului este un ID. Tabelul conține, de asemenea, numele cursei de ciclism, orașul cursei care este legat de tabelul locurilor, distanța cursei, categoria bicicliștilor și data cursei.

Tabelul „gebeurtenissen”:

Acest tabel stochează toate evenimentele care se întâmplă. Aceasta înseamnă că, atunci când un biciclist este implicat într-un accident sau are o defecțiune mecanică, evenimentul va fi stocat în acest tabel. Cheia primară a tabelului este un ID. Tabelul conține, de asemenea, data și ora evenimentului, latitudinea poziției, longitudinea poziției, LoRaID-ul ciclistului și tipul evenimentului (blocare sau defecțiune mecanică).

Tabelul „wedstrijdrenner”:

Acest tabel este un tabel care este necesar pentru o relație între mulți și mulți.

Pasul 3: Înregistrați-vă modulul LoRa

Înregistrați-vă modulul LoRa
Înregistrați-vă modulul LoRa

Înainte de a putea începe cu codul, trebuie să vă înregistrați modulul LoRa într-un gateway LoRa. Am folosit o companie de telecomunicații din Belgia numită „Proximus” care organizează comunicarea pentru modulul meu LoRa. Datele pe care le trimit cu nodul meu LoRa se adună pe site-ul web de la AllThingsTalk. Dacă doriți, de asemenea, să utilizați API-ul AllThingsTalk pentru a vă colecta datele, vă puteți înregistra aici.

După ce v-ați înregistrat pe AllThingsTalk, trebuie să vă înregistrați nodul LoRa. Pentru a face acest lucru, puteți urma acești pași sau puteți privi imaginea de mai sus.

  1. Accesați „Dispozitive” din meniul principal
  2. Faceți clic pe „Dispozitiv nou”
  3. Selectați nodul LoRa
  4. Completați toate tastele.

Acum ai terminat! Toate datele pe care le trimiteți cu nodul LoRa vor apărea în producătorul dvs. AllThingsTalk. Dacă aveți probleme cu înregistrarea, puteți consulta întotdeauna documentele AllThingsTalk.

Pasul 4: Codul

Codul
Codul
Codul
Codul
Codul
Codul
Codul
Codul

Pentru acest proiect vom avea nevoie de 5 limbaje de codare: HTML, CSS, Java Script, Python (Flask) și limbajul Arduino. Mai întâi voi explica programul Arduino.

Programul Arduino:

La începutul programului, declar unele variabile globale. Veți vedea că folosesc SoftwareSerial pentru conexiunea cu GPS-ul meu. Acest lucru se datorează faptului că placa Mbili are doar 2 porturi seriale. Puteți conecta GPS-ul la Serial0, dar nu veți putea utiliza terminalul Arduino pentru depanare atunci. Acesta este motivul pentru care folosesc un SoftwareSerial.

După Global Variables, declar unele funcții care facilitează citirea programului. Au citit coordonatele GPS, fac sunetul sonor, trimit valori prin LoRa, …

Al treilea bloc este blocul de configurare. Acest bloc este începutul programului care configurează pinii, comunicația serială și comunicația I2C.

După blocul de instalare vine programul principal. La începutul acestei bucle principale, verific dacă senzorul tactil este activ. Dacă da, fac soneria sonoră, primesc datele GPS și trimit toate valorile prin LoRa sau Bluetooth către Raspberry PI. După senzorul tactil, am citit valorile accelerometrului. Cu o formulă calculez unghiul exact al axelor X și Y. Dacă aceste valori sunt prea mari, putem concluziona că ciclistul s-a prăbușit. Când se întâmplă un accident, fac din nou sunetul sonor, obțin datele GPS și trimit toate valorile prin LoRa sau Bluetooth către Raspberry PI.

Probabil că vă gândiți: „De ce utilizați bluetooth și LoRa?”. Acest lucru se datorează faptului că am avut unele probleme cu licența modulului LoRa pe care l-am folosit. Deci, pentru ca programul să funcționeze pentru demo-urile mele, a trebuit să folosesc Bluetooth o vreme.

2. Partea din spate:

Partea din spate este puțin complexă. Folosesc Flask pentru traseul meu care este accesibil pentru front-end, folosesc socketio pentru a actualiza automat unele dintre paginile front-end, folosesc pinii GPIO pentru a afișa mesaje pe un ecran LCD și a primi mesaje prin Bluetooth (nu este necesar dacă utilizați LoRa) și folosesc Threading și Timers pentru a citi în mod regulat API-ul AllThinksTalk și pentru a porni serverul balon.

De asemenea, folosesc baza de date SQL pentru a stoca toate accidentele de intrare, pentru a citi datele personale ale bicicliștilor și datele despre curse. Această bază de date este conectată la back-end și rulează și pe Raspberry Pi. Folosesc o clasă „Database.py” pentru a interacționa cu baza de date.

După cum știți din schema Fritzing, lcd-ul este conectat la Raspberry Pi prin protocolul SPI. Pentru a-l face mai ușor, am scris o clasă „LCD_4_20_SPI.py”. Cu această clasă puteți schimba contrastul, puteți schimba culoarea luminii de fundal, puteți scrie mesaje pe ecran,…. Dacă doriți să utilizați Bluetooth, puteți utiliza clasa „SerialRaspberry.py”. Această clasă reglementează comunicarea în serie între modulul Bluetooth și Raspberry Pi. Singurul lucru pe care trebuie să-l faceți este să conectați un modul Bluetooth la Raspberry Pi conectând RX-ul la TX și virsa versa.

Traseele pentru front-end sunt scrise cu regula @ app.route. Aici puteți crea propriul traseu personalizat pentru a insera sau a obține date în sau din baza de date. Asigurați-vă că aveți întotdeauna un răspuns la sfârșitul traseului. Întorc întotdeauna un obiect JSON în partea frontală, chiar și atunci când a apărut o eroare. Puteți utiliza o variabilă în adresa URL plasând în jurul variabilei.

Folosesc socketio pentru pagina web cu blocările unei curse. Când Raspberry Pi primește un blocaj, emit un mesaj către front-end prin socketio. Front-end-ul știe apoi că trebuie să citească din nou baza de date, deoarece a avut loc un nou crash.

Veți vedea că în codul meu comunicarea LoRa este setată la comandă. Dacă doriți să utilizați LoRa, trebuie să porniți un cronometru care trimite repetitiv o cerere către API-ul AllThinksTalk. Din acest API, veți primi valorile senzorului (GPS, Timp, Crash) care sunt trimise de un anumit nod LoRa. Puteți utiliza aceste valori pentru a insera un blocaj în baza de date.

3. Capătul frondei:

Capătul frunzei este format din 3 limbi. HTML pentru textul site-ului web, CSS pentru marcajul site-ului web și JavaScript pentru comunicarea cu back-end-ul. Am 4 pagini web pentru acest proiect:

  • Index.html unde puteți găsi toate cursele de ciclism.
  • O pagină cu toate accidentele și defecțiunile mecanice pentru o cursă specifică.
  • O pagină în care puteți adăuga cilindri în baza de date și puteți edita echipa lor.
  • O pagină în care puteți adăuga o nouă cursă cu toți participanții la baza de date.

Modul în care le proiectați depinde în totalitate de dvs. Puteți obține o inspirație de pe site-ul meu, dacă doriți. Din păcate, site-ul meu web este realizat în limba olandeză, îmi pare rău pentru asta.

Am un fișier CSS separat și fișier JavaScript pentru fiecare pagină. Fiecare fișier JavaScript folosește fetch pentru a obține datele din baza de date prin back-end. Când scriptul primește datele, html se schimbă dinamic. În pagina unde puteți găsi accidentele și defecțiunile mecanice, veți găsi o hartă unde se petrec toate evenimentele. Am folosit un pliant pentru a arăta această hartă.

Puteți vedea toate codurile mele aici pe Github.

Pasul 5: Construiți construcțiile

Construiește construcțiile
Construiește construcțiile
Construiește construcțiile
Construiește construcțiile
Construiește construcțiile
Construiește construcțiile

Înainte de a putea începe cu construcția, asigurați-vă că aveți toate materialele din BOM sau din pagina „Tools + Supplies”.

Raspberry Pi + LCD

Vom începe cu carcasa pentru Raspberry Pi. Puteți imprima 3D o carcasă, aceasta a fost și prima mea idee. Dar pentru că termenul meu se apropia foarte aproape, am decis să fac un caz simplu. Am luat carcasa standard de la Raspberry Pi și am făcut o gaură în carcasă pentru firele de pe ecranul meu LCD. Pentru a face acest lucru, trebuie doar să urmați acești pași simpli:

  1. Faceți o gaură în capacul carcasei. Am făcut acest lucru cu un burghiu de 7 mm în partea laterală a capacului. Puteți vedea acest lucru în imaginea de mai sus.
  2. Luați firele de pe ecranul LCD și glisați un cap care se micșorează peste fire.
  3. Folosiți o brichetă sau un pistol cu aer cald pentru a face capul să se micșoreze.
  4. Trageți firele cu capul micșorat prin orificiul carcasei și conectați-le înapoi pe ecranul LCD.

Acum că sunteți gata cu carcasa pentru Raspberry Pi, puteți începe cu carcasa pentru afișajul LCD. Am imprimat carcasa 3D pentru ecranul meu LCD, deoarece am găsit o carcasă online pe acest link. A trebuit doar să fac o mică schimbare în înălțimea carcasei. Când credeți că desenul este bun, puteți exporta fișierele și puteți începe imprimarea. Dacă nu știți cum să imprimați 3D, puteți urma acest lucru instructiv despre cum să imprimați 3D cu fusion 360.

SODAQ MBili constructie

Nu am făcut un caz pentru placa SODAQ Mbili. Am folosit o sticlă plexi pentru a-mi așeza componentele fără o carcasă în jurul construcției. Dacă doriți să faceți și acest lucru, puteți urma acești pași:

  1. Deconectați-vă de plexiglas cu dimensiunile plăcii SODAQ Mbili. Dimensiunile sunt: 85mm X 56mm
  2. Tăiați plexiglasul cu un ferăstrău.
  3. Așezați componentele electronice pe plexiglas și semnați găurile cu un creion.
  4. Găuriți găurile pe care tocmai le-ați semnat și găurile pentru distanțe cu un burghiu de 3,5 mm.
  5. Montați toate componentele electronice pe plexiglas cu șuruburile și piulițele de 3 mm de 10 mm.
  6. Ultimul pas este montarea plexiglasului deasupra plăcii Mbili. Puteți face acest lucru cu standoffs, dar am folosit două șuruburi de 3M 50mm și 8 piulițe de 3M pentru a monta plexiglasul deasupra plăcii.

Recomandat: