Table of Contents

Smart Lights

Mircea Popa 333CD

Introducere

Prezentarea proiectului:

Această Bandă LED este concepută să fie plasată în spatele monitorului îndreptat spre un perete de culoare deschisă

whatsapp_image_2024-05-27_at_10.13.27_7e7a2770.jpg whatsapp_image_2024-05-27_at_10.13.27_a404598c.jpg

În modul de iluminare immersive, culoarea luminii ambientale este corelată cu conținutul de pe ecran

Descriere generală

Schema bloc a proiectului:

Dispozitivul cu Windows și plăcuța de dezvoltare Arduino comunică (unidirecțional) folosind un format de date specific descris mai jos

Hardware Design

Schema hardware:

whatsapp_image_2024-05-27_at_10.13.25_01796a10.jpg

Listă de piese:

Au fost utilizate lipituri pentru legarea sursei la banda led. Firele de GND și semnal digital sunt legate direct pe plăcuța de dezvoltare

Software Design

Proiectul se împarte în două module software:

Arduino

Codul utilizează biblioteca FastLED pentru controlul semnalului.

Inițializare: Se configurează LED-urile și începe comunicarea serială (default pe portul 9600) Citire și interpretare intrări seriale: Citește date de la portul serial, interpretează comanda primită și actualizează modul de animație și parametrii LED-urilor (culori și întârzieri). Control LED-uri: În funcție de modul selectat (RAINBOW, PULSE, SOLID, IMMERSIVE), actualizează LED-urile corespunzător:

Modul IMMERSIVE se bazează pe un flux constant de date prin portul serial provenit de la computer

Codul folosește delay-uri pentru a temporiza actualizarea LED-urilor conform parametrilor primiți.

Capitolele din laborator înglobate sunt:

  • GPIO - Codul folosește pinul digital 6 pentru a controla LED-urile prin biblioteca FastLED
  • UART - Comunicarea serială este realizată cu Serial.begin(9600) în setup() și Serial.readStringUntil('\n') în loop()
  • Timere - Funcția delay(animationDelay) folosește timerul intern al microcontrolerului pentru a introduce întârzieri între actualizările LED-urilor.
  • PWM - Deși nu este folosit explicit PWM în codul prezentat pentru controlul direct al intensității LED-urilor, conceptul de ajustare a luminozității LED-urilor prin modificarea valorilor RGB sau a intensității (ex. brightness în modul PULSE) este similar cu controlul prin PWM.

GUI

Interfață grafică Python (biblioteca Tkinter)

Funcția get_dominant_screen_color preia o captură de ecran, calculează culoarea dominantă și o ajustează pentru a avea saturație și valoare maxime.

Trimiterea comenzilor către Arduino: Funcțiile send_rgb, send_immersive, send_rainbow, și send_pulse trimit diferite comenzi către Arduino pentru a schimba modul de iluminare și parametrii acestuia (culoare și viteză).

Funcția periodic_update verifică periodic dacă modul IMMERSIVE este activ și actualizează automat culoarea bazată pe culoarea dominantă a ecranului.

Formatul de date trimis de aplicația GUI către Arduino prin portul serial urmează o structură specifică, care constă dintr-o serie de valori separate prin virgule. Această structură permite Arduino-ului să interpreteze corect comanda și să ajusteze modul de iluminare și parametrii corespunzători.

Formatul general al datelor trimise este: <mode>,<speed>,<red>,<green>,<blue>

Interfața grafică

Culoarea selectată se actualizează dinamic când slider-urile RGB sunt modificate (valori de la 0 la 255).

Apăsarea unuia dintre cele 4 butoane determină schimbarea modului de iluminare și trimiterea noilor parametri prin serial.