Bicycle GPS Tracker

Introducere

Voi crea un dispozitiv de masurare si afisare a vitezei, distantei parcurse, a coordonatelor latitudine si longitudine. Scopul proiectului este acela de a-mi crea un dispozitiv ce poate fi folosit pe bicicleta pe post de tablou de bord ce include vitezometru, calculul distantei parcurse, afisarea coordonatelor in timp real, ora exacta.

Descriere generala

Prin acest proiect, vreau sa imi creez propriul tablou de bord pentru bicicleta, care sa replice functionalitatea unui vitezometru si sa imi aduc cateva functionalitati in plus, cum ar fi: calculul energiei consumate, afisarea unui ceas exact, calculul vitezei medii, si afisarea unor date geografice.

Proiectul il voi monta pe bicicleta cu ajutorul unui suport pe care il voi crea eu manual din lemn.

Schema bloc

Hardware design

Lista de piese necesare:

  1. Placuta Arduino Uno Compatible
  2. Ecran LCD cu comunicatie SPI (Nokia 5110)
  3. Senzor GPS (U-BLOX NEO-6M)
  4. Senzor Magnetic Hall (A3144E)
  5. Magnet neodim
  6. Fire mama-tata
  7. Cablu de legatura (am luat un cablu de conexiune USB si am legat pini mama si tata in capete) pentru senzorul magnetic Hall
  8. Suport de montat pe bicicleta (facut manual din lemn, imbinat cu cuie si cu adeziv special)

Software design

Pentru implementarea software m-am folosit de 3 librarii:

  1. LCD5110_Graph.h pentru lucrul cu display-ul LCD
  2. SoftwareSerial.h pe care am folosit-o pentru comunicarea pe seriala cu modulul GPS si cu senzorul Hall
  3. TinyGPS++.h pentru interactiunea cu modulul GPS

Atat modulul GPS, cat si modulul cu senzorul Hall comunica pe seriala la un baud rate de 9600, motiv pentru care am ales sa folosesc Software serial in loc de interfata seriala USART

In practica, senzorul hall va fi lipit de furca bicicletei, iar magnetul va sta pe janta metalica a bicicletei. Pentru detectarea trecerii magnetului la viteze mari, nu imi permit sa fac citirea de pe seriala in functia loop si sa verific daca a trecut sau nu magnetul. Ca solutie, am implementat o intrerupere externa la schimbarea starii de pe pinul digital 2.

Astfel, de fiecare data cand magnetul intra in aria de detectie a senzorului, inputul pe seriala este LOW, se activeaza intreruperea si iau la cunostinta faptul ca roata a trecut. Cand roata iese din aria de detectie a senzorului, inputul pe seriala este HIGH si se activeaza intreruperea, atfel eu stiu ca am intrat in urmatoarea rotatie.

Viteza o calculez ca distanta parcursa supra timp. Aceasta se actualizeaza la fiecare rotatie completa a rotii, in momentul in care magnetul intra in aria de detectie a senzorului Hall. Distanta parcursa este constanta (circumferinta rotii), iar timpul este diferenta intre timpul curent si timpul la care s-a intamplat ultima rotatie completa.

Ora exacta, coordonatele si altitudinea le obtin de la modulul GPS, atunci cand acesta are semnal. Cand nu are semnal atunci afisez un mesaj de tipul “no gps signal”. Am un contor pentru distanta parcursa, iar pentru calculul vitezei medii, impart distanta parcursa la timpul total de cand a fost pornit proiectul. Calculul pentru kilocaloriile consumate este de asemena unul in care impart distanta parcursa la o constanta (nu este cel mai bun mod de a calcula aceasta valoare, insa satisface scopul proiectului).

Codul sursa final poate fi gasit aici.

Rezultate obtinute

Early testing

In prima faza de testare am montat proiectul pe o placuta de lemn, lipita cu banda adeziva de cadru, si am pus senzorul hall la roata din spate a biciceletei, unde iese din ecuatie miscarea ghidonului si implicit a furcii. In urma testului am realizat faptul ca proiectul functioneaza asa cum imi doresc cu exceptia faptului ca nu imi ajung firele ca sa montez senzorul hall pe furca si sa tin placuta arduino la nivelul cadrului.

Adjustments

Am cautat pe internet ce cabluri uzuale contin 4 fire in interior si am descoperit faptul ca un cablu USB are 4 fire. Am luat un cablu USB pe care nu il mai foloseam, l-am taiat, si am lipit la capete conectorii mama respectiv tata pe care ii foloseam inainte.

Pe urma, am inceput sa lucrez la constructia de lemn pe care voi tine proiectul. Am folosit un lemn de brad pentru ca era usor de taiat si initial am facut o placa de sustinere care se prinde fix de cadru in apropierea ghidonului. Pe urma am creat un suport pentru ecran pe care l-am prins cu cuie si l-am lipit de placa de sustinere folosind un adeziv pentru lemn.

Rezultatul:

Rezultatul final

Montajul final a iesit excelent, proiectul fiind foarte stabil. Am mers cu bicicleta pe strazi cu gropi si denivelari si nu am intampinat nicio problema. Asa arta proiectul de aproape:

Un demo cu proiectul final in stare de functionare poate fi vizionat pe YouTube.

Concluzii

Proiectarea cu microprocesoare poate fi distractiva. Cel putin, mie mi-a placut sa lucrez la acest proiect. Am invatat sa folosesc un letcon deoarece am avut de lipit atat pinii pentru modului GPS cat si pinii ecranului LCD. Inevitabil, primele lipituri facute nu au fost cele mai bune si a trebuit sa le refac, insa in final pot spune ca a fost fun.

Dupa finalizarea proiectului m-am ales cu mai multa experienta atat pe partea de Harware cat si pe partea de Software, recapituland materia de laborator. De asemenea, am acum un tablou de bord pentru bicicleta care imi da posibilitatea extinderii proiectului la un nivel mai inalt (de exemplu business).

Download

Codul sursa: GitHub

Bibliografie/Resurse

pm/prj2021/apredescu/gps_tracker.txt · Last modified: 2021/06/09 16:45 by alexandru.careja
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0