Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:cezar.zlatea:tiberiu_florin.gila [2026/05/08 20:24]
tiberiu_florin.gila
pm:prj2026:cezar.zlatea:tiberiu_florin.gila [2026/05/23 11:38] (current)
tiberiu_florin.gila [Scheletul proiectului și interacțiunea dintre funcționalități]
Line 5: Line 5:
 <note tip> <note tip>
 Ideea a pornit de la modul în care lumina influențează starea oamenilor, iar aceasta de obicei este setată static. Astfel, proiectul creează un sistem ambiental care observă mediul și se adaptează automat la el.  Ideea a pornit de la modul în care lumina influențează starea oamenilor, iar aceasta de obicei este setată static. Astfel, proiectul creează un sistem ambiental care observă mediul și se adaptează automat la el. 
 +
 Astfel, o zi însorită și caldă va induce o lumină roșie-portocalie vibrantă, iar o zi rece și întunecată va genera o lumină albastră cu intensitate scăzută. De asemenea, utilizatorul va putea ajusta luminiozitatea manual printr-un buton, și va putea vedea temperatura și luminiozitatea prin intermediul unui display. Astfel, o zi însorită și caldă va induce o lumină roșie-portocalie vibrantă, iar o zi rece și întunecată va genera o lumină albastră cu intensitate scăzută. De asemenea, utilizatorul va putea ajusta luminiozitatea manual printr-un buton, și va putea vedea temperatura și luminiozitatea prin intermediul unui display.
 +
 scopul este de a avea un obiect decorativ care poate fi ușor integrat în orice locuință, care reacționează la contextul dat și poate  scopul este de a avea un obiect decorativ care poate fi ușor integrat în orice locuință, care reacționează la contextul dat și poate 
 </​note>​ </​note>​
Line 24: Line 26:
  
 ===== Hardware Design ===== ===== Hardware Design =====
 +
 +
  
 <note tip> <note tip>
-Aici puneţi tot ce ţine de hardware design:+Listă ​de componente
 ^ Componentă ^ Model ^ Cantitate ^ ^ Componentă ^ Model ^ Cantitate ^
 | Microcontroller | ATmega328P XPlained Mini | 1 | | Microcontroller | ATmega328P XPlained Mini | 1 |
Line 39: Line 43:
 | Rezistoare | [[https://​sigmanortec.ro/​kit-rezistori-30-valori-20-bucati|Kit 30 valori, 600 buc, 1/4W]] | 1 | | Rezistoare | [[https://​sigmanortec.ro/​kit-rezistori-30-valori-20-bucati|Kit 30 valori, 600 buc, 1/4W]] | 1 |
 </​note>​ </​note>​
 +
 +**Schema electrică realizată in KiCad**:
 +
 +
 +
 +{{ :​pm:​prj2026:​cezar.zlatea:​schema_electrica_gila_tiberiu-florin.png?​800 |}}
 +
 +Componentele au fost legate în configurația următoare
 +
 +^ Componentă ^ Pin componentă ^ Pin ATmega328P XPlained Mini ^ Observații ^
 +| **DHT22** | VCC | 5V (J202) | — |
 +| ::: | DATA | PD2 (J201) | Pull-up inclus pe modul |
 +| ::: | GND | GND (J202) | — |
 +| **BH1750** | VCC | 5V (J202) | — |
 +| ::: | GND | GND (J202) | — |
 +| ::: | SDA | PC4 (J200) | Magistrală I2C partajată |
 +| ::: | SCL | PC5 (J200) | Magistrală I2C partajată |
 +| ::: | ADD | GND | Adresă I2C → 0x23 |
 +| **SSD1306 OLED** | VCC | 5V (J202) | — |
 +| ::: | GND | GND (J202) | — |
 +| ::: | SDA | PC4 (J203) | Magistrală I2C partajată |
 +| ::: | SCL | PC5 (J203) | Magistrală I2C partajată |
 +| **WS2812B** | +5V | 5V (J202) | — |
 +| ::: | GND | GND (J202) | — |
 +| ::: | DIN | PD6 (J201) | Prin rezistor 300Ω |
 +| **Buton** | Pin 1 | PD4 (J201) | Pull-up intern activat |
 +| ::: | Pin 2 | GND | — |
 +| **Rezistor 300Ω** | Terminal 1 | PD6 (J201) | Protecție date WS2812B |
 +| ::: | Terminal 2 | WS2812B DIN | — |
 +
 +**Componente folosite și rolul lor**:
 +
 +ATmega328P XPlained Mini — Coordonează citirea senzorilor, rulează algoritmul de mapare a culorii și gestionează toate perifericele de intrare și ieșire
 +
 +DHT22 AM2302 — senzor de temperatură și umiditate. Furnizează temperatura în grade Celsius, valoare folosită pentru a determina culoarea benzii LED prin mapare HSV: temperaturi scăzute generează nuanțe de albastru, temperaturi ridicate generează nuanțe de portocaliu-roșu.
 +
 +BH1750 GY-302 — senzor de luminozitate. Returnează valoarea iluminării în lux. Valoarea este folosită în modul automat pentru a controla intensitatea benzii LED: mediu întunecat produce lumină mai slabă, mediu luminos produce lumină mai intensă.
 +
 +WS2812B (banda LED) - elementul de ieșire principal al sistemului. Culoarea și intensitatea sunt calculate de microcontroller pe baza datelor de la senzori.
 +
 +SSD1306 OLED 0.96" — display auxiliar care afișează în timp real valorile de temperatură,​ luminozitate și modul curent de funcționare (AUTO / MANUAL).
 +
 +Buton - permite utilizatorului să regleze manual intensitatea,​ unde aceasta crește în trepte la fiecare apăsare. Revenirea la modul automat se face automat după 5 secunde de inactivitate.
 +
 +===== Stadiu actual + Componentă funcțională =====
 +
 +La momentul de față întreg proiectul este ansamblat, fiecare componentă fiind funcțională. Temperatura și luminozitatea sunt citite corect și afișate pe display, alături de modul AUTO/MANUAL + NIVELUL DE LUMINOZITATE.
 +
 +{{ :​pm:​prj2026:​cezar.zlatea:​img_3205.jpg?​300 |}}
 +
 +Banda LED a afișat culoarea corespunzătoare temperaturii măsurate - nuanță de albastru, conform mapării implementate pentru intervalul 24-31°C, cu intensitatea reglementată automat în funcție de luminozitatea ambientală. În link-ul următor se poate observa un video în care acesta își schimbă culoarea, având un feon care era țintit către senzorul de temperatură DHT22:
 +
 +https://​drive.google.com/​drive/​folders/​14bySmPVbB63vOo3YLh20IzzRB1eumNvZ?​usp=sharing
 +
 +
  
 ===== Software Design ===== ===== Software Design =====
  
  
-<note tip> +==== Scheletul proiectului și interacțiunea dintre funcționalități ==== 
-Descrierea codului aplicaţiei (firmware)+ 
-  * mediu de dezvoltare ​(if any) (e.gAVR Studio, CodeVisionAVR+Firmware-ul este organizat în trei straturi funcționale care rulează concurent în bucla principală. 
-  * librării şsurse 3rd-party (e.gProcyon AVRlib+ 
-  * algoritmi şstructuri ​pe care plănuiţi să le implementaţ+Stratul de intrare se execută la fiecare 2 secunde și are rolul de a citi valorile de la senzori și de a actualiza starea sistemului. Pe baza temperaturii citite de DHT22 se calculează culoarea țintă, iar pe baza luminozității citite de BH1750 se calculează intensitatea țintă în modul AUTO. La finalul fiecărei achiziții, display-ul OLED este actualizat cu valorile curente. 
-  ​* ​(etapa 3surse şfuncţii implementate + 
-</note>+Stratul de control al butonului rulează la fiecare iterație a buclei și verifică dacă ISR-ul a semnalat o apăsare. Dacă da, aplică debouncing-ul de 50ms, apoi comută între modurile AUTO și MANUAL sau avansează treapta de luminozitate. De asemenea, monitorizează timeout-ul de 5 secunde după care sistemul revine automat la modul AUTO. 
 + 
 +Stratul de ieșire rulează la aproximativ 50fps și este responsabil de actualizarea benzii LED. La fiecare frame, culoarea curentă avansează treptat spre culoarea țintă prin blending, iar intensitatea curentă avansează cu un pas spre intensitatea țintă. Valorile rezultate sunt trimise benzii WS2812B. 
 + 
 +Validarea sistemului a fost realizată pe mai multe niveluri. Temperatura și luminozitatea au fost comparate cu valori de referință prin Serial Monitor. Maparea culorii a fost verificată prin printarea valorilor RGB calculate la diverse temperaturi simulate. Butonul a fost testat prin apăsări rapide pentru a confirma că debouncing-ul funcționează corect. Timeout-ul de revenire la AUTO a fost verificat cu cronometru pe telefon, iar tranziția de culoare a fost validată vizual, confirmând absența salturilor la schimbări bruște de temperatură. 
 + 
 + 
 +===== Biblioteci folosite ===== 
 + 
 +FastLED - aleasă pentru controlul benzii WS2812B datorită funcției nblend() care realizează interpolarea lină între culori fără a fi nevoie ​de implementarea manuală fiecare canal RGB. De asemenea, fill_solid() și FastLED.setBrightness() simplifică controlul întregii benzi. #define FASTLED_ALLOW_INTERRUPTS 0 dezactivează întreruperile în timpul scrierii pe LED-uri, prevenind coruperea semnalului one-wire al WS2812B care foarte sensibil la timing 
 + 
 +DHT (Adafruit) - biblioteca standard pentru protocolul one-wire proprietar al senzorului DHT22 
 + 
 +BH1750 - bibliotecă simplă pentru senzorul de luminozitate care comunică pe I2ClightMeter.readLightLevel(returnează direct valoarea în lux, nefiind necesară conversia manuală din valori ADC 
 + 
 +Adafruit SSD1306 + Adafruit GFX - set standard de biblioteci pentru display-uri OLED. GFX oferă funcții de desenare text șgrafice, SSD1306 gestionează comunicația I2C cu display-ulAlternativa ar fi fost controlarea display-ului prin registre TWI care ar fi adus complexitate codului 
 + 
 +Wire - biblioteca Arduino pentru I2C, utilizată implicit de BH1750 și SSD1306 
 + 
 +avr/​interrupt.h - inclusă pentru configurarea întreruperii hardware PCINT2 prin registre directe 
 + 
 +===== Elementul de noutate ===== 
 + 
 +Proiectele de tip ambient light existente folosesc în general o singură variabilă de intrare (cel mai des temperatura sau lumina, separat). Noutatea proiectului constă prin combinarea a două variabile de mediu - temperatura și luminozitatea,​ pentru a le putea controla simultan 
 + 
 +===== Funcționalitățdin laborator ===== 
 + 
 +Lab 0 - GPIO: Butonul este configurat prin registrele DDR și PORT ale ATmega, cu pull-up intern activat 
 + 
 +Lab 2 - Întreruperi:​ Butonul este gestionat printr-un Pin Change Interrupt, evitând polling-ul în bucla principală. Configurarea registrelor,​ marcarea volatile a flag-ului partajat între ISR și main, și debouncing-ul fără blocare 
 + 
 +Lab 6 - I2C: BH1750 și SSD1306 comunică ​pe magistrala I2C.  
 + 
 +===== Logica de proiectare a culorii/​intensității ===== 
 + 
 +La fiecare 2 secunde, senzorii furnizează o nouă culoare șintensitate țintă. În loc să fie aplicate imediat, valorile curente sunt interpolate spre cele țintă la fiecare frame (~50fps). Interpolarea funcționează proporțional cu diferența rămasă - pasul aplicat la fiecare frame este o fracțiune fixă din distanța dintre valoarea curentă șcea țintă, astfel: tranziția este rapidă la început și încetinește natural pe măsură ce valorile se apropie. Acest comportament este obținut prin nblend() pentru culoare, care operează independent pe fiecare canal RGB, și printr-un increment/​decrement de 1 pas per frame pentru intensitate. 
 + 
 +===== Calibrarea elementelor de senzoristică ===== 
 + 
 +DHT22: Senzorul a fost comparat cu temperatura camerei. Intervalele TEMP_MIN = 24.0°C și TEMP_MAX = 31.0°C au fost alese pentru a acoperi domeniul de temperatură interior tipic vară/​iarnă și pentru a produce variație vizibilă de culoare în condiții normale de utilizare. 
 + 
 +BH1750: Senzorul returnează direct lux calibrați din fabrică, fără a necesita calibrare suplimentară. Pragurile LUX_DARK = 10 lux (lcameră întunecatășLUX_BRIGHT = 800 lux (lumină puternică de zi) au fost determinate prin testarea acestuia în cameră, similar cu senzorul de temperatură 
 + 
 +===== Optimizări realizate ===== 
 + 
 +1. Non-blocking timing: Citirea senzorilor folosește millis() - lastRead >= READ_INTERVAL_MS în loc de delay(2000),​ permițând buclei principale să ruleze continuu la 50fps pentru tranziții line și răspuns rapid la buton, indiferent de intervalul de citire al senzorilor. 
 + 
 +2. Separarea target/current: Prin delimitarea valorilor dorite de cele afișate fiecare rulează la frecvența proprie fără a se bloca reciproc. 
 + 
 +3. BRIGHTNESS_MAX = 20 în loc de 255: WS2812B la putere maximă pe 12 LED-uri consumă până la ~720mA. Limitând la 20/255, aprox. 8%, consumul scade la ~56mA, astfel fiind compatibil cu alimentarea prin USB fără risc de supraîncărcare și fără a necesita sursă externă dedicată  
 + 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 <note tip> <note tip>
-Care au fost rezultatele obţinute ​în urma realizării proiectului vostru.+Sistemul funcționează conform specificațiilor inițiale. Temperatura și luminozitatea sunt citite corect și reflectate ​în timp real pe bandă și pe display. Tranziția de culoare este lină și continuă, fără salturi vizibile între citiri, efectul vizual fiind cel al unei lumini care se schimbă organic. Intensitatea se adaptează automat la lumina ambientală,​ banda fiind discretă în întuneric și mai prezentă în lumină puternică. 
 + 
 +Modul MANUAL funcționează corect - butonul ciclează prin cele 5 trepte de luminozitate,​ iar sistemul revine automat la modul AUTO după 5 secunde de inactivitate,​ fără intervenția utilizatorului. 
 + 
 +Display-ul afișează în permanență valorile numerice de temperatură și luminozitate,​ precum și modul curent.
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Prin realizarea acestui proiect am reușit să înțeleg mai bine cum se integrează o serie de periferice simultan. Am realizat că integrarea mai multor componente într-un sistem care trebuie să răspundă constant și natural cere detalii care par mici la prima vedere (cum ar fi modul în care treci de la o culoare la alta), însă pot face diferența dintre un rezultat care își atinge obiectivul și unul care nu.
  
 ===== Download ===== ===== Download =====
  
-<​note ​warning+<​note>​ 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +Arhivă proiect{{:pm:prj2026:cezar.zlatea:pm_proiect.zip|}}
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul)**Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:dumitru_alin**.+
 </​note>​ </​note>​
  
-===== Jurnal ​=====+===== Bibliografie/​Resurse ​=====
  
-<note tip> +=== Resurse Hardware ===
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/Resurse =====+[[https://​www.sparkfun.com/​datasheets/​Sensors/​Temperature/​DHT22.pdf|Datasheet DHT22 AM2302]]
  
-<​note>​ +[[https://​www.mouser.com/​datasheet/​2/​348/​bh1750fvi-e-186247.pdf|Datasheet BH1750FVI]] 
-Listă cu documente, ​datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+ 
-</note>+[[https://​cdn-shop.adafruit.com/​datasheets/​SSD1306.pdf|Datasheet SSD1306]] 
 + 
 +[[https://​cdn-shop.adafruit.com/​datasheets/​WS2812B.pdf|Datasheet WS2812B]] 
 + 
 + 
 +=== Resurse Software ​=== 
 + 
 +[[https://​fastled.io/​|Documentație FastLED]] 
 + 
 +[[https://​github.com/​adafruit/​Adafruit_SSD1306|Documentație Adafruit SSD1306]] 
 + 
 +[[https://​github.com/​adafruit/​Adafruit-GFX-Library|Documentație Adafruit GFX]]  
 +  
 +[[https://​github.com/​claws/​BH1750|Documentație BH1750 Arduino]] 
 + 
 +[[https://​github.com/​adafruit/​DHT-sensor-library|Documentație DHT sensor library]]
  
 <​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>​
  
pm/prj2026/cezar.zlatea/tiberiu_florin.gila.1778261076.txt.gz · Last modified: 2026/05/08 20:24 by tiberiu_florin.gila
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0