This shows you the differences between two versions of the page.
pm:prj2021:amocanu:ciclocomputer [2021/04/27 10:04] teodora.argintaru |
pm:prj2021:amocanu:ciclocomputer [2021/05/22 16:49] (current) teodora.argintaru |
||
---|---|---|---|
Line 8: | Line 8: | ||
Astfel, proiectul pe care l-am ales constă într-un ciclocomputer, deoarece consider că un astfel de device este util oricărui ciclist. | Astfel, proiectul pe care l-am ales constă într-un ciclocomputer, deoarece consider că un astfel de device este util oricărui ciclist. | ||
\\ | \\ | ||
- | Scopul principal al proiectului este familiarizarea cu plăcuța Arduino și modul în care diferiți senzori interacționează cu aceasta. Computerul de bicicletă va oferi informații în timp real despre viteză, distanța parcursă, iar la frânare aprinde stopul bicicletei. | + | Scopul principal al proiectului este familiarizarea cu plăcuța Arduino și modul în care diferiți senzori interacționează cu aceasta. Computerul de bicicletă va oferi informații în timp real despre viteză, timpul trecut de la începutul turei, precum și despre elevația din timpul acesteia. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Ciclocomputerul va avea un buton de ON/OFF.\\ | + | Ciclocomputerul va fi un device care se va monta pe bicicletă. Singura parte vizibilă pentru utilizator va fi ecranul LCD, unde vor fi afișate informațiile relevante. |
- | **Viteza roții** va fi calculată cu ajutorul unui senzoru de efect Hall, și un magnet prins pe roata din față.\\ | + | **Viteza roții** va fi calculată cu ajutorul unui senzor de efect Hall, și un magnet prins pe roata din față.\\ |
- | **Distanța parcursă** va fi calculată drept //media vitezei de la începutul execuției * timpul total//. | + | **Elevația** va fi calculată cu ajutorul modulului de accelerometru și giroscop.\\ |
- | Tot senzorul pentru efect Hall și magnetul vor fi folosiți și pentru detectarea momentelor de frânare. În aceste cazuri se va aprinde stopul bicicletei.\\ | + | |
- | + | ||
- | Pentru pierderile cauzate de frecare se va lua în calcul tipul de cauciucuri.\\ | + | |
=== Schema bloc === | === Schema bloc === | ||
- | {{ :pm:prj2021:amocanu:ciclocomputer_block_2.png |}} | + | {{ :pm:prj2021:amocanu:ciclocomputer_block.png |}} |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
<note> | <note> | ||
** Lista de componente ** | ** Lista de componente ** | ||
* Arduino UNO | * Arduino UNO | ||
- | * LCD 16x2 | + | * Modul LCD Nokia 5110 |
- | * Breadboard | + | |
* Fire | * Fire | ||
* Modul senzor efect Hall (luat de la un device de kilometraj) | * Modul senzor efect Hall (luat de la un device de kilometraj) | ||
* Magnet | * Magnet | ||
- | * Buzzer | + | * Modul accelerometru și giroscop MPU6050 |
- | * LED | + | |
</note> | </note> | ||
+ | |||
+ | === Schema electrică === | ||
+ | {{ :pm:prj2021:amocanu:ciclocomputer_pinout.png?500 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Pentru implementare, am folosit interfața I2C pentru comunicația cu modulul MPU6050 (alături de biblioteca MPU6050_tockn) și comunicația SPI (implementată in software în biblioteca //Adafruit_PCD8544.h//) cu modulul LCD Nokia 5110. | ||
+ | Pentru senzorul de efect Hall, am testat mai întâi cu un multimetru polaritatea celor doi pini (pentru că senzorul făcea parte inițial dintr-un vitezometru) și l-am conectat la pinul digital 8, în modul INPUT_PULLUP. | ||
+ | === Structura codului === | ||
+ | * funcția **setup** inițializează pinul pentru senzor Hall, display-ul și comunicația I2C cu senzorul MPU6050 | ||
+ | * funcția **loop** afișează de fiecare dată noile informații | ||
+ | * funcțiile **print_speed**, **print_elevation**, **print_time_elapsed** realizează afișarea efectivă | ||
+ | * funcția **calculate_elevation** adaugă la elevația curentă abs(sin(variație_OY)), în cazul în care variația trece de un prag setat | ||
+ | * funcția **calculate_speed_elevation** verifică dacă este prima dată când se întâlnește magnetul după o perioadă în care starea a fost HIGH (adică s-a făcut o rotație completă a roții din față) și dacă da, atunci calculează viteza curentă și elevația; dacă a trecut prea mult timp de când nu s-a mai întâlnit magnetul, atunci viteza este probabil 0 | ||
+ | * funcția **calculate_time_elapsed** actualizează timpul trecut de la începerea turei | ||
+ | |||
===== Rezultate obținute ===== | ===== Rezultate obținute ===== | ||
+ | [[https://youtu.be/uyjJ-Wnt36Q|Link demo proiect]] | ||
+ | [[https://github.com/teodoraargintaru/ciclocomputer|Cod sursă]] | ||
+ | |||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | În concluzie, proiectul la PM a reprezentat o provocare interesantă anul acesta. | ||
+ | Cred că una dintre cele mai dificile părți la proiectul meu a fost calibrarea și poziționarea senzorilor (parte la care sunt destul de sigură că încă se mai pot aduce îmbunătățiri :-)). | ||
+ | Proiectul reprezintă un punct de plecare bun pentru un device pe care chiar l-aș putea folosi atunci când merg cu bicicleta. Singurul dezavantaj este probabil dimensiunea componentelor, mult mai incomodă decât cea a unui ceas care ar avea aceleași funcții. | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | * https://github.com/tockn/MPU6050_tockn/blob/master/examples/GetAllData/GetAllData.ino | ||
+ | * https://create.arduino.cc/projecthub/muhammad-aqib/interfacing-nokia-5110-lcd-with-arduino-7bfcdd | ||
+ | * https://maker.pro/arduino/tutorial/how-to-interface-arduino-and-the-mpu-6050-sensor | ||
{{:pm:prj2021:amocanu:ciclocomputer.pdf|}} | {{:pm:prj2021:amocanu:ciclocomputer.pdf|}} |