Pentru ce e util?
Arduino primeste constant datele de la accelerometru si le trimite la modulul Bluetooth care le trimite la telefon pentru sincronizare si afisarea numarului de pasi si temperatura. In interfata aplicatiei mobile exista un buton, care porneste algroitmul de masurare a batailor inimii pe minut. Acest algoritm ruleaza 6 secunde, ceea ce provoaca blocarea celorlalte calculari. Dupa ce se termina masurarea BPM se afiseaza rezultatul pe telefon si se intoarce la celelalte calcule.
Initializeaza structurile de date, varaibilele si libraria mpu (initializeaza comunicatia si seteaza senzorul).
Functia timp de 6 secunde citeste datele de la senzor si detecteaza daca s-a efectuat o bataie completa. Aceste 6 secunde au fost alese pentru ca rezulta o valoare mai exacta si e timp destul de mic ca sa nu se piarda conexiunea Bluetooth cu telefonul. Ca sa putem asocia un rezultat al pulsului cu o bataie de inima, am luat doua valoari de referinta 550 si 520, daca e mai mica de 520 atunci a fost efectuata o bataie, iar in momentul cand am citit o valoarea mai mare de 550, calculam timpul scurs intre aceste doua citiri si calculam numarul de batai pe minut folosind aceste date. Dupa ce s-au scrus 6 secunde se calculeaza media acestor BPM, acesta va fi rezultatul final si cel trimis pentru sincronizare pe telefon.
Pentru a deduce algoritmul de numarare a pasilor, am conectat arduino la laptop cu firmware care afiseaza valorile X, Y, Z citite de la accelerometrul MPU6050. Dupa am deschis Serial Plotter si ma plimbam prin camera cu laptop si arduino conectat. De aici am dedus ca la fiecare pas valoarea Z depaseste 19500 (presupun ca aceasta valoare e doar pentru inaltimea mea si pasul meu). Algoritmul consta in verificarea daca variabila Z e mai mare ca 19500, atunci se incrementeaza numarul de pasi si se calculeaza ce procentaj din scopul zilnic (pentru testare 2000) sunt parcursi.
Se citeste temperatura de la senzorul MPU6050.
Aceasta e functia care ruleaza la infinit cat timp placuta Arduino e conectata la tensiune. Se verifica daca a fost apasat butonul pentru masurarea BPM si se apeleaza functia compute_pulse(). La infinit se apeleaza si functiile compute_steps() si get_temp() fara nicio verificare.
Acest proiect m-a invatat cum e sa proiectezi un device de la zero, care include si hardware si software. Am invatat cum sa deduc pattern-uri din datele citite din lumea reala si sa le utilizez in proiect. Am invatat cum comunica Arduino prin Bluetooth cu alte device-uri. Consider ca acest “fitness-tracker” isi atinge scopurile: calculeaza bine pulsul cu o eroare mica si numara bine pasii.
Link-uri utile: