This shows you the differences between two versions of the page.
pm:prj2022:amocanu:smart-tracker [2022/05/21 01:19] ilie.burdiniuc [Rezultate Obţinute] |
pm:prj2022:amocanu:smart-tracker [2022/05/28 19:45] (current) ilie.burdiniuc [Bibliografie/Resurse] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Smart Tracker ====== | + | ====== Fitness Tracker ====== |
===== Introducere ===== | ===== Introducere ===== | ||
Line 6: | Line 6: | ||
* numara pasii parcursi | * numara pasii parcursi | ||
* masoara pulsul (bataile inimii) | * masoara pulsul (bataile inimii) | ||
- | * sincronizeaza datele cu telefonul prin Bluetooth si aplicatie pe Android | + | * sincronizeaza datele cu telefonul prin Bluetooth si aplicatie mobila |
Pentru ce e util? | Pentru ce e util? | ||
Line 34: | Line 34: | ||
== Design == | == Design == | ||
- | Aici va fi poza reala | + | {{ :pm:prj2022:amocanu:design_hard_smart_tracker.jpg?400 |}} |
== Conexiunile si schema electrica == | == Conexiunile si schema electrica == | ||
Line 54: | Line 54: | ||
== compute_pulse() == | == compute_pulse() == | ||
- | Functia timp de 6 secunde citeste datele de la seszor 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 (acesta este BPM). Dupa ce s-au scrus 6 secunde se calculeaza media acestor BPM, acesta va fi rezultatul final si cel trimis pentru sincronizare pe telefon. | + | 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. |
== compute_steps() == | == compute_steps() == | ||
- | 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 creste peste 19500 (presupun ca aceasta valoare e doar pentru inaltimea mea si pasul meu). | + | 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 a crestul peste valoarea 19500, atunci se incrementeaza numarul de pasi parcursi si se calculeaza cat din numarul de pasi ca scop (pentru testare 2000) sunt parcursi. | + | 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. |
== get_temp() == | == get_temp() == | ||
Line 64: | Line 64: | ||
== loop() == | == loop() == | ||
- | Aceasta e functia care ruleaza la infinit pana placuta Arduino e conectata la tensiune. Se verifica daca a fost apasat butonul pentru masurarea BPM din interfata grafica a aplicatiei mobile si se apeleaza functia compute_pulse(). La infinit se apeleaza si functiile compute_steps() si get_temp() fara nicio verificare. | + | 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. |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | == Interfata grafica a aplicatiei pentru sincronizare la tracker: == | + | == Interfata grafica a aplicatiei pentru sincronizare cu tracker: == |
{{ :pm:prj2022:amocanu:android_app_smart_tracker.jpeg?300 |}} | {{ :pm:prj2022:amocanu:android_app_smart_tracker.jpeg?300 |}} | ||
== Demo: == | == Demo: == | ||
+ | <html><p align="center"><iframe width="560" height="315" src="https://www.youtube.com/embed/ghhTDJjEgpo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p></html> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | 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. | ||
===== Download ===== | ===== Download ===== | ||
{{:pm:prj2022:amocanu:smarttracker.zip|Arhiva cu surse si scheme}} | {{:pm:prj2022:amocanu:smarttracker.zip|Arhiva cu surse si scheme}} | ||
Line 79: | Line 79: | ||
Link-uri utile: | Link-uri utile: | ||
- | * Milestone 1: {{:pm:prj2022:amocanu:milestone1.pdf|}} | + | * {{:pm:prj2022:amocanu:milestone1_fitness_tracker.pdf|Milestone 1}} |
+ | * {{:pm:prj2022:amocanu:milestone2_fitness_tracker.pdf|Milestone 2}} | ||
* [[https://github.com/jarzebski/Arduino-MPU6050/blob/master/MPU6050_accel_simple/MPU6050_accel_simple.ino|Library Example]] folosit pentru intelegerea a cum se citesc date de pe MPU6050 | * [[https://github.com/jarzebski/Arduino-MPU6050/blob/master/MPU6050_accel_simple/MPU6050_accel_simple.ino|Library Example]] folosit pentru intelegerea a cum se citesc date de pe MPU6050 | ||
* [[https://www.xtronical.com/basics/heart-beat-sensor-ecg-display/|Heart Beat Sensot ECG Display]] algoritm folosit pentru masurarea BPM, putin update-at | * [[https://www.xtronical.com/basics/heart-beat-sensor-ecg-display/|Heart Beat Sensot ECG Display]] algoritm folosit pentru masurarea BPM, putin update-at |