This shows you the differences between two versions of the page.
pm:prj2023:gpatru:maria_teona.olteanu [2023/05/30 05:14] maria_teona.olteanu [Jurnal] |
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> | ||
Line 79: | Line 79: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | |||
- | |||
<note tip> | <note tip> | ||
* mediu de dezvoltare: ArduinoIDE | * mediu de dezvoltare: ArduinoIDE | ||
Line 86: | Line 84: | ||
</note> | </note> | ||
+ | === 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.\\ | ||
- | ===== Rezultate Obţinute ===== | + | 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. |
+ | <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> | ||
+ | |||
+ | === 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 ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | 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. |
+ | 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. | ||