This is an old revision of the document!
ErgoDesk Assistant este un dispozitiv ergonomic de birou conceput pentru a monitoriza in timp real doi indicatori asociati unei pozitii necorespunzatoare in timpul lucrului la birou: distanta prea mica fata de monitor si inclinarea unui suport de referinta. Sistemul ofera feedback local printr-un afisaj LCD, un LED RGB si un buzzer, astfel incat utilizatorul sa poata corecta rapid pozitia detectata ca problematica.
Ideea proiectului a pornit de la o problema reala intalnita frecvent atat de studenti, cat si de persoanele care lucreaza mult timp la calculator: apropierea excesiva de monitor si mentinerea unei pozitii incomode pentru perioade lungi. Proiectul isi propune sa ofere un mecanism simplu de avertizare si constientizare a acestor obiceiuri.
Dispozitivul poate fi util atat pentru utilizatorul final, cat si pentru mine, deoarece combina senzori, procesare locala si feedback vizual si sonor intr-un produs embedded cu aplicabilitate practica.
Sistemul are la baza o placa compatibila Arduino Uno, care colecteaza datele de la senzori si genereaza feedback local in functie de starea detectata.
Componentele principale conectate la microcontroler sunt:
Functionarea sistemului este bazata pe citirea periodica a senzorilor si pe compararea valorilor obtinute cu praguri predefinite sau calibrate de utilizator.
| Componenta | Cantitate | Link | Pret unitar (RON) |
|---|---|---|---|
| Placa compatibila Arduino Uno | 1 | Kit Plusivo Microcontroller Starter | inclus in kit |
| Senzor ultrasonic HC-SR04 | 1 | Kit Plusivo Microcontroller Starter | inclus in kit |
| LED RGB | 1 | Kit Plusivo Microcontroller Starter | inclus in kit |
| Buzzer pasiv | 1 | Kit Plusivo Microcontroller Starter | inclus in kit |
| Fotorezistor | 1 | Kit Plusivo Microcontroller Starter | inclus in kit |
| Buton | 1 | Kit Plusivo Microcontroller Starter | inclus in kit |
| Breadboard | 1 | Kit Plusivo Microcontroller Starter | inclus in kit |
| Fire de legatura | mai multe | Kit Plusivo Microcontroller Starter | inclus in kit |
| Rezistente 220 ohm | 3 | Kit Plusivo Microcontroller Starter | inclus in kit |
| Rezistenta 10k ohm | 1 | Kit Plusivo Microcontroller Starter | inclus in kit |
| Modul accelerometru/giroscop MPU6050 | 1 | eMAG MPU6050 | 15.46 |
| Afisaj LCD 1602 cu I2C | 1 | eMAG LCD 1602 I2C | 30.25 |
Pret kit baza: 74.99 RON
Pret componente achizitionate separat: 45.71 RON
Pret total hardware utilizat in proiect: 120.70 RON
Firmware-ul aplicatiei a fost dezvoltat pentru platforma Arduino Uno / ATmega328P, in limbajul C/C++, folosind o combinatie de functii oferite de mediul Arduino si acces direct la registrele microcontroller-ului. Scopul acestei abordari a fost atat implementarea functionalitatii aplicatiei, cat si evidentierea clara a conceptelor studiate in laboratoare, precum GPIO, intreruperi, PWM, ADC si comunicatie I2C/TWI.
Codul sursa este organizat modular, pe mai multe fisiere, astfel incat logica aplicatiei sa fie separata de partea de acces la periferice. Structura proiectului urmareste o impartire clara a responsabilitatilor: configurarea pinilor digitali, configurarea PWM pentru LED-uri, citirea valorilor analogice de la fotorezistor, implementarea comunicatiei I2C la nivel de registri, controlul LCD-ului, comunicarea cu MPU6050 si logica principala a aplicatiei.
Repository-ul proiectului: https://github.com/ionutmantu8/ErgoDeskAssistant
Mediul de dezvoltare folosit a fost Arduino IDE, utilizat pentru scrierea, compilarea si incarcarea firmware-ului pe placa. In implementare nu au fost folosite biblioteci third-party dedicate pentru LCD I2C sau MPU6050, aceste componente fiind controlate prin functii proprii construite peste acces direct la registrele perifericului TWI/I2C. Au fost folosite doar headerele standard necesare pentru lucru low-level si pentru functii de baza, precum Arduino.h, avr/io.h, avr/interrupt.h, util/twi.h, math.h si string.h.
La nivel de organizare, aplicatia foloseste cateva structuri principale pentru stocarea starii curente. Valorile citite de la senzori sunt pastrate intr-o structura dedicata, care contine unghiul curent, abaterea fata de postura calibrata, distanta masurata de senzorul ultrasonic, validitatea acestei masuratori si valoarea bruta citita de la fotorezistor. Starea alertelor este memorata separat si indica daca exista alerta de postura, alerta de distanta sau un nivel critic pentru fiecare dintre acestea. Aceste informatii sunt reunite intr-o structura globala de stare a aplicatiei, care mai contine si unghiul de referinta obtinut la calibrare, starea de calibrare si modul curent de afisare pe LCD.
Din punct de vedere al functionarii, firmware-ul este bazat pe o bucla principala care executa periodic trei tipuri de operatii: citirea senzorilor, actualizarea starii alertelor si actualizarea feedback-ului catre utilizator. Citirea senzorilor include trei surse de date: MPU6050 pentru determinarea inclinarii, HC-SR04 pentru determinarea distantei si LDR-ul conectat la ADC pentru estimarea luminii ambientale. Din valorile brute ale accelerometrului se calculeaza unghiul de inclinare, iar din diferenta dintre acesta si valoarea obtinuta la calibrare se determina abaterea posturii. Pentru senzorul ultrasonic se masoara durata impulsului de ecou si se calculeaza distanta in centimetri. Pentru fotorezistor se citeste valoarea analogica bruta si se transforma ulterior intr-un nivel de luminozitate PWM pentru LED-uri.
Calibrarea posturii reprezinta un pas important in functionarea aplicatiei. La pornire, dar si la apasarea lunga a butonului, sistemul citeste mai multe mostre consecutive de la accelerometru si calculeaza media unghiului. Aceasta medie devine pozitia de referinta a utilizatorului. In continuare, sistemul nu mai compara postura cu un unghi absolut fix, ci cu aceasta valoare calibrata, ceea ce permite o adaptare mai buna la modul in care este pozitionat senzorul si la pozitia naturala a utilizatorului.
Detectarea alertelor nu se face instantaneu, ci pe baza unor praguri si a unei persistente temporale. Daca abaterea de postura depaseste pragul stabilit, nu se activeaza imediat alerta, ci doar daca situatia persista un anumit timp. Acelasi principiu este aplicat si pentru distanta prea mica fata de ecran. In plus, exista praguri critice separate pentru postura foarte incorecta si pentru apropierea excesiva. Aceasta abordare reduce alarmele false si face comportamentul aplicatiei mai stabil.
Pentru controlul LED-urilor se foloseste PWM hardware configurat la nivel de registre, prin Timer0 si Timer1. Severitatea alertei este mapata pe culori diferite: un nivel redus activeaza LED-ul verde, un nivel mediu activeaza LED-ul albastru, iar un nivel sever activeaza LED-ul galben. Intensitatea LED-urilor nu este constanta, ci depinde de valoarea citita de la fotorezistor, astfel incat in intuneric luminozitatea este redusa, iar in lumina puternica LED-urile devin mai intense. In plus, schimbarea severitatii nu este aplicata instantaneu, ci doar dupa ce noul nivel ramane stabil o perioada scurta, pentru a evita oscilatiile vizibile.
Feedback-ul sonor este realizat prin buzzer, folosind modele diferite de semnalizare in functie de tipul si gravitatea alertei. Alertele critice sau situatiile in care sunt active simultan atat alerta de postura, cat si cea de distanta, produc un model sonor mai rapid si mai insistent. Alertele individuale au modele sonore mai lente si mai putin agresive. Acest mecanism ofera o diferentiere clara intre situatiile normale, avertizarile moderate si cele critice.
Afisajul LCD este utilizat pentru feedback textual. In timpul calibrarii sunt afisate mesaje care indica progresul procesului. In timpul functionarii normale, daca exista alerte, acestea au prioritate si sunt afisate explicit. Daca nu exista alerte, utilizatorul poate comuta intre doua moduri: un mod simplu, orientat pe alertare, si un mod detaliat, in care sunt afisate valori precum abaterea de postura, distanta masurata si nivelul de lumina.
Butonul este tratat printr-o combinatie intre intrerupere externa si debounce software. Intreruperea de pe pinul asociat butonului este folosita doar pentru a semnaliza rapid faptul ca starea butonului s-a schimbat, iar logica efectiva de debounce, short press si long press este implementata in software, pe baza de timp. O apasare scurta schimba modul de afisare, iar o apasare lunga porneste recalibrarea posturii.
In concluzie, partea de software a proiectului implementeaza atat logica functionala a aplicatiei, cat si o integrare clara a conceptelor de laborator la nivel practic. Firmware-ul citeste si proceseaza date din mai multe surse, decide starea de alerta pe baza unor praguri si conditii temporale si ofera feedback multimodal prin LED-uri, buzzer si LCD, intr-o arhitectura modulara si relativ usor de extins. nu mi place mult prea mult text formatat prost mai scurt asa cumva si clar dar mai scurt explicat cumva si formatat frumos cu buline ingroseri si PUNE LINKU DE LA REPO ASTA E https://github.com/ionutmantu8/ErgoDeskAssistant
- Repository GitHub: https://github.com/ionutmantu8/ErgoDeskAssistant
- Mediu de dezvoltare: Arduino IDE, folosit pentru scrierea, compilarea si incarcarea firmware-ului pe placa Arduino Uno / ATmega328P.
- Tehnologii si surse folosite:
- Organizarea codului:
- Functionalitatea firmware-ului:
- Algoritmi si mecanisme implementate:
- Concepte de laborator evidentiate in implementare: