Componente: Arduino uno, LCD 16×2, butoane (3), rezistor 221ohm, rezistor 10k ohm (3), potentiometru de 10k ohm, potentiometru 10k ohm, senzor hall
Descriere:
- Cand arduino este initializat va aparea un mesaj pe lcd: “Press button to start”
- Cand biclistul va apasa oricare dintre cele 2 butoane se va considera ca o cursa a inceput si se va afisa mesajul “START”
- Displayul va incepe sa arate km parcursi si durata deplasarii care se vor actualiza in timp real.
- Senzorul hall montat la roata va inregistra fiecare rotatie completa a rotii. La fiecare rotatie completa se va afisa un '+' pe ecranul lcd pentru cateva secunde.
- Apasand butonul asignat schimbarii modului de afisare pe display, lcd-ul va arata viteza maxima atinsa in loc de distanta parcursa
- Apasand butonul de pauza va pune pe pauza cursa curenta, iar apasandu-l a doua oara va reporni toate functionalitatile
- Apasand butonul de oprire consideram ca biciclistul a incheiat cursa, iar rezultatele finale vor fi afisate pe LCD
Listă de piese:
- Arduino uno
- LCD 16×2
- Butoane (3)
- Rezistor 221ohm
- Rezistor 10k ohm (3)
- Potentiometru de 10k ohm
- Senzor hall
- LiquidCrystal_I2C.h
- Wire.h
Setup si initializari:
Setez pinii butoanelor pe mod “INPUT_PULLUP”, iar pinul pentru senzorul hall pe “INPUT”. De asemenea, setez ca lcd-ul sa afiseze mesajul “PRESS BUTTON TO START”. Am initiaizat variabilele globale, inclusiv cea care desemneaza lungimea in metrii a unei rotatii de roata.
In loop:
- Extrag timpul curent
- Citesc senzorul hall si verific daca a mai avut loc o rotatie completa a rotii. Daca biciclistul nu se afla in modul de pauza, incrementez numarul de revolutii, actualizez distanta parcursa, afisez semnul plus pe lcd, calculez timpul trecut de la ultima rotatie completa si actualizez viteza maxima, daca e cazul.
- Citesc pinul butonului de start/pauza:
1. Daca sunt pe cazul de start afisez mesajul “CYCLE SAFELY!”
Ulterior, displayul va arata distanta parcursa (stanga sus), viteza in km/h (In dreapta sus), timpul deplasarii (Stanga jos), viteza medie (dreapta jos)
2. Daca sunt pe cazul de pauza afisez “PAUSED!”
Ulterior, displayul va afisa detaliile curselor: in stanga sus se va vedea numerul cursei, sus pe mijloc va fi viteza medie, dreapta sus viteza maxima, pe a doua linie a lcd-ului va fi afisata distanta totala si durata cursei.
- Citesc pinul pentru butonul de display.
1. In cazul in care sunt in timpul unei curse si acesta este apasat se va jongla intre afisarea vitezei medii(A) pe ecran si viteza maxima atinsa(M).
2) In cazul in care ciclistul se afla in pauza, apasand pe buton acesta va putea itera prin arrayul cu cursele acestuia pentru a-si putea analiza performanta
Pe langa alte mici cazuri tratate in loop, am mai implememtat niste functii care sa ma ajute la rezolvare.
computeHMS - primeste ca parametru timpul in milisecunde si il transforma in formatul ORe:MIN:SEC
resetLapVariables - reseteaza variabilele pentru a putea incepe o noua cursa
showCycleSafely, showPaused, showLabels - care ajuta la afisarea pe lcd
debounce - care verifica daca butoanele au fost apasate sau daca senzorul hall a mai inregistrat ceva
Link youtube:
Acest proiect m-a invatat cum sa proiectez un aparat de la 0, care include parte de software, des intalnita in facultate, dar si de hardware cu care nu am prea avut ocazia sa ma intalnesc.