Smart Desk Companion
Introducere
Ce face proiectul:
Dispozitivul monitorizeaza conditiile ambientale ale spatiului de lucru al utilizatorului, masurand:
calitatea aerului (CO2 / COV) - prin senzorul MQ-135
temperatura si umiditatea aerului - prin senzorul DHT11
nivelul de iluminare ambienta - prin LDR (fotorezistor)
Atunci cand un parametru depaseste un prag prestabilit:
se activeaza buzzer-ul (alerta sonora)
se aprinde LED-ul rosu de avertizare
LCD-ul afiseaza un mesaj de alerta prioritar
Timer-ul Pomodoro integrat:
se porneste/reseteaza printr-un buton fizic
LED-ul verde indica sesiunea activa (25 minute)
la finalul sesiunii, buzzer-ul emite un semnal distinctiv
Scopul si ideea de la care am pornit:
Mi-am propus sa construiesc un dispozitiv accesibil care sa ajute utilizatorii sa mentina un mediu de lucru sanatos si productiv, printr-un sistem care:
avertizeaza discret asupra conditiilor ambientale necorespunzatoare
colecteaza si afiseaza date climatice in timp real
integreaza o metoda dovedita de gestionare a timpului (tehnica Pomodoro)
functioneaza complet autonom, fara conexiune internet sau aplicatii externe
De ce cred ca este util:
Pentru utilizatori individuali - ajuta la mentinerea unui mediu de lucru sanatos si la structurarea sesiunilor de lucru.
Pentru studenti si freelanceri - solutie all-in-one pentru monitorizare si productivitate fara costuri mari.
Pentru sanatate pe termen lung - semnalarea calitatii slabe a aerului sau a luminii insuficiente previne oboseala oculara si problemele respiratorii.
Descriere generala
Diagrama Bloc
Dispozitivul este format din urmatoarele componente:
Senzor MQ-135 (analogic) - detecteaza calitatea aerului (CO2, COV, amoniac)
Senzor DHT11 - masoara temperatura si umiditatea relativa
LDR (Fotorezistor) - detecteaza nivelul de iluminare ambienta
LCD 16×2 cu interfata I2C - afiseaza datele in timp real
Buzzer pasiv 5V - emite alerte sonore la depasirea pragurilor
Buton normal - declansaza/reseteaza timer-ul Pomodoro
LED Verde - indicator vizual sesiune Pomodoro activa
LED Rosu - indicator vizual alerta ambienta
ATmega328P - citeste toti senzorii, decide actiunile si controleaza output-urile
Alimentare 5V (USB) - pentru toate modulele
Interactiuni intre module
Senzorul MQ-135 trimite un semnal analogic continuu pe pinul A0 al microcontrollerului. ATmega328P citeste valoarea prin ADC si o compara cu un prag prestabilit. Daca valoarea depaseste pragul, se activeaza alertele (buzzer + LED rosu) si se afiseaza un mesaj de avertizare pe LCD.
ATmega328P:
compara valoarea de la MQ-135 cu un prag de calitate a aerului
compara nivelul de lumina de la LDR (A1) cu un prag minim de iluminare
citeste temperatura si umiditatea prin protocol digital de la DHT11 (pinul D7)
actualizeaza periodic LCD-ul cu datele curente (rotatie ciclica)
gestioneaza starea timer-ului Pomodoro pe baza intreruperii butonului (D2)
DHT11:
masoara temperatura si umiditatea aerului
trimite datele microcontrollerului o data la 2 secunde, in format digital
LCD-ul:
primeste comenzi prin I2C (pinii A4-SDA si A5-SCL)
afiseaza ciclic: calitate aer, temperatura, umiditate, stare Pomodoro
mesajele de alerta au prioritate fata de afisarea normala
Buzzer-ul:
Butonul normal:
conectat pe D2 cu rezistor pull-up extern de 10kOhm
la apasare, porneste sau reseteaza sesiunea Pomodoro de 25 minute
Hardware Design
Bill of Materials (Lista Pieselor)
| Nr. | Componenta | Descriere | Cantitate |
| 1 | ATmega328P (Arduino Uno) | Microcontroller 8-bit AVR - unitatea centrala | 1 |
| 2 | Senzor MQ-135 | Senzor calitate aer (CO2, VOC, NH3) | 1 |
| 3 | Senzor DHT11 | Senzor temperatura si umiditate | 1 |
| 4 | LDR (Fotorezistor) | Detectare nivel luminos ambiental | 1 |
| 5 | LCD 16×2 cu modul I2C | Afisare date in timp real | 1 |
| 6 | Buzzer pasiv 5V | Alerte sonore (prag depasit, timer) | 1 |
| 7 | Buton normal | Declansare/resetare timer Pomodoro | 1 |
| 8 | LED Verde | Indicator sesiune Pomodoro activa | 1 |
| 9 | LED Rosu | Indicator alerta ambienta | 1 |
| 10 | Rezistori 10kOhm | Pull-up LDR si buton | 2 |
| 11 | Rezistori 220Ohm | Protectie LED-uri | 2 |
| 12 | Breadboard 400 puncte | Placa de prototipare | 1 |
| 13 | Cabluri tata-tata | Conectare componente | ~30 |
| 14 | Alimentare USB 5V | Alimentare sistem | 1 |
Schema Electrica
Schema electrica prezinta conexiunile dintre toate modulele si microcontrollerul ATmega328P. Alimentarea de 5V este comuna tuturor componentelor, asigurata prin portul USB al placii Arduino Uno.
Tabel Legaturi Componente
| Componenta | Pin Modul | Pin Arduino | Functie |
| Senzor MQ-135A | AOUT | A0 (PC0/ADC0) | Semnal analogic calitate aer |
| VCC | +5V | Alimentare incalzitor |
| GND | GND | Masa incalzitor |
| RL 10kOhm | AOUT - GND | A0 → GND | Rezistor sarcina divizor tensiune |
| Senzor DHT11 | DATA (I/O) | D7 (PD7) | Date temperatura & umiditate |
| VCC | +5V | Alimentare |
| GND | GND | Masa |
| R5 1kOhm pull-up | DATA - VCC | D7 → +5V | Pull-up linie date DHT11 |
| LDR + R4 10kOhm | Anod LDR | +5V | Alimentare divizor luminos |
| Jonctiune LDR-R4 | A1 (PC1/ADC1) | Semnal analogic nivel luminos |
| Catod R4 | GND | Masa divizor |
| LCD 16×2 I2C | SDA | A4 (PC4/SDA) | Date I2C |
| SCL | A5 (PC5/SCL) | Ceas I2C |
| VCC / GND | +5V / GND | Alimentare |
| Buzzer pasiv | PIN | D6 (PD6/OC0A) | Alerta sonora PWM |
| GND | GND | Masa |
| Buton normal | PIN | D2 (PD2/INT0) | Declansare Pomodoro (intrerupere INT0) |
| GND | GND | Masa |
| R3 10kOhm pull-up | D2 - VCC | D2 → +5V | Pull-up linie buton |
| LED Verde (LED2) | Anod | D4 (PD4) | Indicator sesiune Pomodoro activa |
| R2 220Ohm - GND | D4 → GND | Protectie LED verde |
| LED Rosu (LED1) | Anod | D5 (PD5/OC0B) | Indicator alerta ambienta |
| R1 220Ohm - GND | D5 → GND | Protectie LED rosu |
Poza montaj fizic:
Video demonstrativ:
https://youtu.be/-bkMuSFO8lg?feature=shared
Software Design
Mediu de dezvoltare:
Proiectul a fost dezvoltat folosind PlatformIO cu VSCode, fara framework Arduino, folosind doar avr-libc (bare-metal). Compilatorul folosit este avr-gcc cu target ATmega328P la 16MHz.
Structura codului:
Codul este organizat modular, fiecare fisier sursa avand o responsabilitate clara:
main.c - loop principal, initializare periferice, coordonare module
adc.c - driver ADC bare-metal, citire MQ-135 si LDR prin registre ADMUX/ADCSRA
dht11.c - protocol single-wire bit-banging pentru citirea temperaturii si umiditatii
i2c.c - driver TWI hardware la 100kHz prin registre TWBR/TWCR/TWDR
lcd.c - driver LCD 16×2 prin expander I2C PCF8574, mod 4-bit
buzzer.c - generare ton PWM prin Timer0 in mod CTC pe pinul OC0A (D6)
timer.c - Timer1 CTC pentru tick de 1 secunda (Pomodoro), Timer2 CTC pentru millis()
sensors.c - agregare date senzori si verificare praguri de alerta
display.c - logica afisare LCD cu rotatie pagini si prioritate alerte
pomodoro.c - timer Pomodoro 25 minute, ISR INT0 pentru buton, LED verde
Algoritmi implementati:
Citire ADC in mod Single Conversion cu prescaler 128 (125kHz)
Protocol DHT11 bit-banging: semnal START 20ms LOW, citire 40 biti cu masurare durata HIGH
Driver I2C hardware TWI: conditii START/STOP, transfer byte cu verificare ACK
Driver LCD in mod 4-bit: initializare HD44780, trimitere nibble cu puls Enable
Generare ton buzzer: Timer0 CTC cu toggle OC0A, frecventa variabila prin OCR0A
Timer Pomodoro: Timer1 CTC la 1Hz, decrement secunde in ISR, flag _second_tick
millis(): Timer2 CTC la 1000Hz, contor global incrementat in ISR
Debounce buton: verificare interval minim 200ms intre apasari consecutive
Rotatie pagini LCD: schimbare pagina la fiecare 3 secunde prin millis()
Prioritate alerte: mesajele de alerta suprascriu paginile normale pe LCD
Registre AVR folosite:
ADMUX, ADCSRA - configurare si pornire conversie ADC
TWBR, TWSR, TWCR, TWDR - comunicatie I2C hardware
TCCR0A, TCCR0B, OCR0A - Timer0 pentru buzzer PWM
TCCR1A, TCCR1B, OCR1A, TIMSK1 - Timer1 pentru Pomodoro tick
TCCR2A, TCCR2B, OCR2A, TIMSK2 - Timer2 pentru millis()
EICRA, EIMSK - configurare intrerupere externa INT0 pentru buton
DDRD, PORTD, PIND - configurare pini digitali LED-uri si buton
UBRR0H, UBRR0L, UCSR0B, UCSR0C, UDR0 - UART pentru debug serial
Rezultate Obtinute
Proiectul Smart Desk Companion functioneaza conform specificatiilor propuse. In urma testarii au fost validate urmatoarele functionalitati:
Senzorul MQ-135 detecteaza corect calitatea aerului si activeaza alerta sonora si vizuala atunci cand valoarea ADC depaseste pragul prestabilit.
Senzorul DHT11 transmite corect temperatura si umiditatea la fiecare 2 secunde, valorile fiind afisate pe LCD si monitorizate pentru depasirea pragurilor.
Fotorezistorul LDR detecteaza nivelul de lumina ambienta si activeaza alerta atunci cand iluminarea scade sub pragul minim, util in special pentru sesiunile de lucru in conditii de lumina slaba.
LCD-ul 16×2 afiseaza ciclic datele de la toti senzorii si prioritizeaza mesajele de alerta atunci cand este cazul.
Buzzer-ul emite alerte sonore clare la depasirea oricarui prag si un semnal distinctiv la finalul sesiunii Pomodoro.
Timer-ul Pomodoro functioneaza corect: sesiunea de 25 de minute porneste la apasarea butonului, LED-ul verde ramane aprins pe toata durata, iar la final buzzer-ul emite semnalul de incheiere.
Sistemul functioneaza complet autonom, fara conexiune la internet sau aplicatii externe.
Dispozitivul s-a dovedit util in practica, oferind feedback in timp real asupra conditiilor de lucru si ajutand la structurarea timpului prin tehnica Pomodoro. Utilizarea acestuia in timpul sesiunilor de studiu contribuie la constientizarea factorilor de mediu care pot afecta concentrarea si sanatatea pe termen lung.
Concluzii
Proiectul Smart Desk Companion reprezinta o solutie practica si accesibila pentru monitorizarea mediului de lucru si gestionarea timpului. Implementarea bare-metal pe ATmega328P a permis intelegerea aprofundata a registrelor AVR si a perifericelor hardware: ADC, timere, PWM, I2C, intreruperi externe si UART.
Principalele provocari intampinate au fost calibrarea fotorezistorului LDR (valorile ADC variind in functie de rezistorul din divizorul de tensiune si de conditiile de lumina) si implementarea corecta a protocolului DHT11 prin bit-banging.
Proiectul poate fi extins in viitor cu:
conectivitate Wi-Fi pentru logarea datelor in cloud
afisaj grafic color in locul LCD-ului text
notificari mobile la depasirea pragurilor
Download
Bibliografie/Resurse
Resurse Hardware:
Resurse Software: