This shows you the differences between two versions of the page.
si:laboratoare:2025:02 [2025/10/08 17:26] farhad_ali.gul created |
si:laboratoare:2025:02 [2025/10/08 17:43] (current) farhad_ali.gul Update exercitii |
||
---|---|---|---|
Line 56: | Line 56: | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
- | Pentru a putea rula exercițiile, compilați NuttX folosind ''hacktorwatch:iot'' și activați manual următoarele config-uri: | + | Pentru a putea rula exercițiile, compilați NuttX folosind ''hacktorwatch:iot'' și activați manual următoarele opțiuni din ''make menuconfig'': |
==== Haptics (DRV2605L) ==== | ==== Haptics (DRV2605L) ==== | ||
Line 65: | Line 65: | ||
<note important> | <note important> | ||
- | Activați mai întâi toate **dependințele** acestor config-uri. | + | Activați mai întâi toate **dependințele** pentru CONFIG_FF_DRV2605L. |
</note> | </note> | ||
Line 81: | Line 81: | ||
</note> | </note> | ||
- | **1.** Înțelegeți API-ul oferit de NuttX pentru aceste două device-uri: | + | **1.** Pentru a va acomoda cu API-ul pe care NuttX il ofera pentru a interactiona cu cele doua device-uri, in cadrul acestui exercitiu va trebui sa inspectati codul si sa rulati aplicatiile de demo disponibile in repository-ul ''nuttx-apps''. |
+ | - ''nuttx-apps/examples/drv2605l/'' initializeaza device-ul cu anumite efecte de vibrare (''upload_rom_effect'', ''upload_constant_effect''). Apelarea acestora se face ulterior, "on demand", prin ''play_effect''. | ||
+ | - ''nuttx-apps/examples/lsm6dsl_reader'' afiseaza la consola o data la doua secunde datele obtinute de la accelerometru si giroscop. Observati modul de interactiune cu senzorul: acesta este expus printr-o intrare in ''/dev/'' care va trebui folosita in cadrul apelului de sistem ''open'', iar mai apoi folosim apeluri de ''ioctl'' pentru a interactiona cu hardware-ul. | ||
+ | - Cautati definitiile pentru structurile de date folosite in ambele aplicatii. | ||
- | - ''nuttx-apps/examples/drv2605l/'' – inițializează efecte haptice (''upload_rom_effect'', ''play_effect'' etc.). | + | <note important> |
- | - ''nuttx-apps/examples/lsm6dsl_reader'' – afișează valorile de la accelerometru și giroscop la fiecare 2 secunde. | + | Toate fișierele de tip header le puteți găsi în ''nuttx/include/nuttx/''. Puteți căuta recursiv din linia de comandă folosind ''grep -r <string>''. |
+ | </note> | ||
+ | |||
+ | **2.** In cadrul acestui exercitiu, vrem ca ceasul sa ne ofere informatii (prin vibrare) atunci cand viram stanga, respectiv dreapta. | ||
+ | - Folosindu-ne de ''lsm6dsl_reader'' vom citi datele oferite de accelerometru si vom determina directia de mers. | ||
+ | - Daca ceasul este nemiscat sau merge inainte nu va oferi niciun fel de feedback utilizatorului. | ||
+ | - ''drv2605l'' are o biblioteca interna de efecte de vibrare pe care o puteti consulta [[https://www.ti.com/lit/ds/symlink/drv2605l.pdf|aici]], la pagina 63. Alegeti doua efecte din acest tabel si incarcati-le pe ceas. | ||
+ | - In functie de directia de mers, vom rula in mod constant unul dintre cele doua efecte pana cand ceasul va reveni in stare initiala (ceasul este nemiscat sau sau se misca doar inainte). | ||
<note tip> | <note tip> | ||
- | Folosiți ''grep -r <string> nuttx/include/nuttx/'' pentru a găsi structurile de date relevante. | + | **Hint:** pentru a opri un efect, trebuie sa scrieti o functie care realizeaza inversul lui ''play_effect''. Parametrul care ne intereseaza si trebuie modificat este ''play.value'' (trebuie sa fie setat pe 0 - disabled). |
</note> | </note> | ||
- | **2.** Implementați feedback prin vibrație în funcție de direcția de mișcare: | + | <note tip> |
- | + | **Hint:** pentru a putea face polling mai des pe senzor si sa obtineti date mai accurate este nevoie sa folositi ''usleep''. | |
- | - Folosiți ''lsm6dsl_reader'' pentru a determina direcția (stânga/dreapta). | + | </note> |
- | - Alegeți două efecte haptice din [[https://www.ti.com/lit/ds/symlink/drv2605l.pdf|biblioteca DRV2605L]] (pagina 63). | + | |
- | - Asociați efectele: | + | |
- | * viraj stânga → efect 1 | + | |
- | * viraj dreapta → efect 2 | + | |
- | * staționar / înainte → fără vibrație | + | |
- | - Scrieți o funcție pentru oprirea vibrației (''play.value = 0''). | + | |
- | - Folosiți ''usleep()'' pentru citiri mai dese ale senzorului. | + | |
- | **3. (Bonus)** | + | **3. (Bonus)** La exercitiul anterior, intensitatea de vibrare era absoluta (on/off). Ne dorim sa avem un mecanism mai complex prin care sa folosim vibrare graduala in functie de nivelul acceleratiei - cu cat acceleratia este mai mare, cu atat vibratia va fi mai puternica. |
- | Faceți vibrația proporțională cu intensitatea accelerației – cu cât accelerația e mai mare, cu atât vibrația e mai puternică. | + | |
===== Resurse ===== | ===== Resurse ===== | ||
* [[https://www.ti.com/lit/ds/symlink/drv2605l.pdf|DRV2605L Effect library]] | * [[https://www.ti.com/lit/ds/symlink/drv2605l.pdf|DRV2605L Effect library]] | ||