This shows you the differences between two versions of the page.
pm:prj2023:gpatru:maria_teona.olteanu [2023/05/30 04:20] maria_teona.olteanu [Bibliografie/Resurse] |
pm:prj2023:gpatru:maria_teona.olteanu [2024/04/01 10:16] (current) maria_teona.olteanu [Download] |
||
---|---|---|---|
Line 62: | Line 62: | ||
Senzorii au o impedanta de iesire foarte mare (aprox. 110K - 120K), iar in momentul in care vreau sa citesc la rand mai multi senzori conectati la pinii analogici am nevoie de un delay destul mare (cel putin o secunda) pentru a face esantionari corecte. Acest lucru este cauzat de faptul ca ADC-ul ATmega328P este optimizat pentru semnale analogice de maxim 10K Ohm, iar daca impedanta este mai mare timpul de esantionare depinde de durata de incarcare a condensatorului intern (vezi [[https://ocw.cs.pub.ro/courses/_media/pm/atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf| datasheet]] - 23.6.1 Analog Input Circuitry). | Senzorii au o impedanta de iesire foarte mare (aprox. 110K - 120K), iar in momentul in care vreau sa citesc la rand mai multi senzori conectati la pinii analogici am nevoie de un delay destul mare (cel putin o secunda) pentru a face esantionari corecte. Acest lucru este cauzat de faptul ca ADC-ul ATmega328P este optimizat pentru semnale analogice de maxim 10K Ohm, iar daca impedanta este mai mare timpul de esantionare depinde de durata de incarcare a condensatorului intern (vezi [[https://ocw.cs.pub.ro/courses/_media/pm/atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf| datasheet]] - 23.6.1 Analog Input Circuitry). | ||
- | Am rezolvat aceasta problema conectand la fiecare iesire a senzorului un condensator de 100nF legat la masa pentru a micsora impedanta. | + | Am rezolvat aceasta problema conectand la fiecare iesire a senzorilor un condensator de 100nF legat la masa pentru a micsora impedanta. |
<html><center></html> | <html><center></html> | ||
{{:pm:prj2023:gpatru:condensator_mariateona.jpeg?300|}}<html></center></html> | {{:pm:prj2023:gpatru:condensator_mariateona.jpeg?300|}}<html></center></html> | ||
+ | |||
=== Modul Bluetooth === | === Modul Bluetooth === | ||
- | Am conectat Rx si Tx ai modulului la pinii digitali 2, respectiv 3 pentru a avea disponibila seriala dintre arduino si laptop pentru debugging. | + | Am conectat Rx si Tx ai modulului la pinii digitali 2, respectiv 3 pentru a avea disponibila comunicarea UART dintre arduino si laptop pentru debugging. |
- | Pentru ca modulul HC-05 considera 3.3V ca logic 1 am | + | Pentru ca modulul HC-05 si Arduino functioneaza la nivele logice diferite am folosit un divizor de tensiune. O solutie mai buna ar fi un Convertor de nivel logic. |
- | === Modul cu 9 axe MPU9250 === | ||
- | ===== Software Design ===== | + | === Mici probleme :) === |
+ | La inceput, proiectul a fost gandit cu Arduino Nano pentru ca are mai multi pini analogici si deoarece ar fi fost mult mai usor de atasat pe manusa. Dar, am avut o problema cu driver-ul, nu am putut sa incarc pe placuta. | ||
+ | Am ars multiplexorul din greseala cu 2 zile inainte, deci device-ul va citi date doar pentru 4 degete. Am ales sa nu esantionez inelarul si sa folosesc datele degetului mijlociu, pentru ca nu am gesturi care sa presupuna stari diferite ale acestora. | ||
+ | |||
+ | ===== Software Design ===== | ||
<note tip> | <note tip> | ||
* mediu de dezvoltare: ArduinoIDE | * mediu de dezvoltare: ArduinoIDE | ||
- | * biblioteci utilizate: | + | * biblioteci utilizate: [[https://github.com/hideakitai/MPU9250|MPU9250]], [[https://docs.arduino.cc/learn/built-in-libraries/software-serial|SoftwareSerial]] |
</note> | </note> | ||
- | ===== Rezultate Obţinute ===== | + | === Senzori de indoire === |
+ | Am incercat sa mapez gradul de indoire al degetelor in functie de outputul analog al senzorilor, stiind rezistenta acestora si tensiunea de intrare, dar senzorii nu permit acest lucru: aproximativ pentru orice tip de flexare acestia au aceleasi valori.\\ | ||
+ | Asadar, am stabilit daca degetele sunt indoite sau nu, calculand valorile medii primite de la senzori si determinand daca acestea se afla peste un prag care semnaleaza flexarea. | ||
- | ===== Concluzii ===== | + | <html><center><iframe width="560" height="315" src="https://www.youtube.com/embed/w2z7MWLmrIo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe></center></html> |
- | ===== Download ===== | + | === MPU9250 === |
+ | |||
+ | Inainte de a utiliza manusa pentru a traduce gesturile, se realizeaza conexiunea I2C si senzorul accelerometru si giroscop este calibrat. De fiecare data cand sezorul inregistreaza date noi acestea sunt interpretate. | ||
+ | |||
+ | Pentru a determina ce valori ale accelerometrului trebuie sa folosesc pentru a traduce anumite semne am testat si esantionat mai multe miscari in prealabil. | ||
+ | |||
+ | === Bluetooth === | ||
+ | Pentru a realiza conexiunea dintre Arduino si telefonul mobil am folosit aplicatia Serial Bluetooth Terminal.\\ | ||
+ | Interpretarea comenzilor primite de la telefon este implementata in **serial_com.h**. | ||
+ | |||
+ | |||
+ | === Flow === | ||
+ | Device-ul functioneaza pe baza unui FSM, acesta se poate afla in urmatoarele stari:\\ | ||
+ | * **STATE_WAIT_INPUT**: Asteapta sa primeasca input de la modulul Bluetooth. | ||
+ | |||
+ | * **STATE_TRANSLATE**: Inregistreaza gesturile utilizatorului si verifica daca acestea corespund inputului primit. Traducerea semnelor se realizeaza tot prin intermediul unui FSM: daca secventa de miscari se potriveste cu secventa de stari atunci semnul este potrivit (STATE_CORRECT), altfel utilizatorul a folosit gesturile gresite (STATE_UNDEFINED). | ||
+ | |||
+ | * **STATE_CORRECT**: Utilizatorul este anuntat ca a folosit semnul potrivit. Device-ul trece in starea de recalibrare. | ||
+ | |||
+ | * **STATE_UNDEFINED**: Utilizatorul ste anuntat ca a folosit semnul gresit. Device-ul trece in starea de recalibrare | ||
+ | |||
+ | * **STATE_RECALIBRATE**: In urma unei traduceri, device-ul este recalibrat timp de 4 secunde pentru a asigura faptul ca senzorii de indoire nu vor fi afectati de semnul anterior. Device-ul asteapta un nou input (STATE_WAIT_INPUT). | ||
+ | |||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | <html><center></html> | ||
+ | {{:pm:prj2023:gpatru:final_mariateona.jpeg?400|}} | ||
+ | <html></center></html> | ||
+ | |||
+ | Am implementat un device ce recunoaste daca un utilizator a folosit sau nu semnul/semnele corecte pentru un input dat. Acest proiect isi indeplineste rolul de instrument educativ - se pot exersa urmatoarele cuvinte/fraze: | ||
+ | * **Thank You** | ||
+ | * **Hello** | ||
+ | * **I love you** | ||
+ | * **Yes** | ||
+ | * **Welcome** | ||
+ | * **You** | ||
+ | ===== Concluzii ===== | ||
+ | Proiectul faciliteaza invatarea limbajului semnelor. Acesta este util pentru oamenii care folosesc limbajul semnelor in viata de zi cu zi, cum ar fi profesori, kinetoterapeuti sau cei ce au persoane cu nevoi speciale in familie. | ||
- | ===== Jurnal ===== | + | De asemenea, acest device este un prototip de recunoastere a miscarii, ce poate fi folosit atat in medicina, cat si industria jocurilor sau pentru control automat. |
- | 05.05.2023: Documentatia initiala | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 99: | Line 140: | ||
https://ro.mouser.com/datasheet/2/13/Alpha_03112019_Position_sensor_MAT060-BXXK-231-A01-1541956.pdf\\ | https://ro.mouser.com/datasheet/2/13/Alpha_03112019_Position_sensor_MAT060-BXXK-231-A01-1541956.pdf\\ | ||
https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=en\\ | https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=en\\ | ||
+ | https://github.com/hideakitai/MPU9250\\ | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||