Differences

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

Link to this comparison view

pm:prj2026:atoader:stefan.covaliu [2026/05/24 14:59]
stefan.covaliu [Software Design]
pm:prj2026:atoader:stefan.covaliu [2026/05/24 23:43] (current)
stefan.covaliu [Demo Video]
Line 20: Line 20:
   * **Fotorezistor LDR GL5528** : conectat intr-un divizor de tensiune cu o rezistenta de 10kΩ la GND. Punctul de mijloc este citit pe pinul A0 prin ADC-ul intern pe 10 biti. Valoarea citita determina cat de multa componenta calda se adauga in culoarea finala.   * **Fotorezistor LDR GL5528** : conectat intr-un divizor de tensiune cu o rezistenta de 10kΩ la GND. Punctul de mijloc este citit pe pinul A0 prin ADC-ul intern pe 10 biti. Valoarea citita determina cat de multa componenta calda se adauga in culoarea finala.
   * **Modul RTC DS3231** : tine ora exacta inclusiv la oprirea alimentarii,​ datorita bateriei CR2032. Comunicatia se face prin I2C: SDA pe A4, SCL pe A5. Ora citita determina automat profilul de culoare al momentului din zi.   * **Modul RTC DS3231** : tine ora exacta inclusiv la oprirea alimentarii,​ datorita bateriei CR2032. Comunicatia se face prin I2C: SDA pe A4, SCL pe A5. Ora citita determina automat profilul de culoare al momentului din zi.
-  * **Display OLED SH1106 1.3"** : afiseaza modul activ, culoarea curenta si ora. Comunicatia se face prin SPI hardware: SCK pe D13, MOSI pe D11, CS pe D10, DC pe D7, RST pe D4. Actualizat o data pe secunda. +  * **Display OLED SSD1306 0.96"** : afiseaza modul activ, culoarea curenta si ora. Comunicatia se face prin SPI hardware: SCK pe D13, MOSI pe D11, CS pe D10, DC pe D7, RST pe D4. Actualizat o data pe secunda. 
-  * **3x MOSFET ​IRLZ44N** : tranzistori N-Channel Logic Level care controleaza independent cele trei canale RGB prin PWM. Gate-urile sunt conectate la D3 (rosu), D5 (verde) si D6 (albastru). Se deschid complet la 5V pe gate.+  * **3x MOSFET ​LR7843** : tranzistori N-Channel Logic Level care controleaza independent cele trei canale RGB prin PWM. Gate-urile sunt conectate la D3 (rosu), D5 (verde) si D6 (albastru). Se deschid complet la 5V pe gate.
   * **3x LED discret (Rosu, Verde, Albastru)** - elementele de iluminat. Fiecare LED are un rezistor de 220Ω in serie pe anod conectat la 5V, iar catodul conectat la Drain-ul MOSFET-ului corespunzator.   * **3x LED discret (Rosu, Verde, Albastru)** - elementele de iluminat. Fiecare LED are un rezistor de 220Ω in serie pe anod conectat la 5V, iar catodul conectat la Drain-ul MOSFET-ului corespunzator.
   * **Buton tactil** : conectat la D2 cu pull-up de 10kΩ la 5V. Genereaza intrerupere externa pe INT0 la apasare. Cicleza intre modurile de functionare si are prioritate maxima in logica sistemului.   * **Buton tactil** : conectat la D2 cu pull-up de 10kΩ la 5V. Genereaza intrerupere externa pe INT0 la apasare. Cicleza intre modurile de functionare si are prioritate maxima in logica sistemului.
-  * **Regulator L7805** - converteste tensiunea sursei externe de 24V la 5V stabili pentru microcontroler si toate modulele.+  * **Regulator L7805** - converteste tensiunea sursei externe de 12V la 5V stabili pentru microcontroler si toate modulele.
  
 ==== Module Software ==== ==== Module Software ====
Line 34: Line 34:
   * **Calcul temperatura culoare** : combina valorile LDR si RTC pentru a calcula tripletul RGB final. Trece lin de la (255, 200, 100) seara la (200, 220, 255) dimineata.   * **Calcul temperatura culoare** : combina valorile LDR si RTC pentru a calcula tripletul RGB final. Trece lin de la (255, 200, 100) seara la (200, 220, 255) dimineata.
   * **Control PWM canale RGB** : aplica valorile RGB calculate pe D3, D5, D6, controlând duty cycle-ul pentru fiecare MOSFET.   * **Control PWM canale RGB** : aplica valorile RGB calculate pe D3, D5, D6, controlând duty cycle-ul pentru fiecare MOSFET.
-  * **Driver OLED SPI** : actualizeaza display-ul ​SH1106 ​o data pe secunda cu modul activ, valorile RGB curente si ora.+  * **Driver OLED SPI** : actualizeaza display-ul ​SSD1306 ​o data pe secunda cu modul activ, valorile RGB curente si ora.
   * **Logica de prioritizare** : buton fizic > comanda Bluetooth > mod automat (LDR + RTC).   * **Logica de prioritizare** : buton fizic > comanda Bluetooth > mod automat (LDR + RTC).
  
Line 47: Line 47:
 | Placa microcontroller | ATmega328P-XMINI | 1 | | Placa microcontroller | ATmega328P-XMINI | 1 |
 | Modul Bluetooth | HC-06 UART | 1 | | Modul Bluetooth | HC-06 UART | 1 |
-| Display OLED | SH1106 1.3" SPI | 1 |+| Display OLED | SSD1306 0.96" SPI | 1 |
 | Modul RTC | DS3231 I2C | 1 | | Modul RTC | DS3231 I2C | 1 |
-| MOSFET | IRLZ44N ​N-Channel Logic Level | 3 |+| MOSFET | LR7843 ​N-Channel Logic Level | 3 |
 | LED rosu | LED 5mm rosu | 1 | | LED rosu | LED 5mm rosu | 1 |
 | LED verde | LED 5mm verde | 1 | | LED verde | LED 5mm verde | 1 |
Line 63: Line 63:
 | Fire jumper | Male-to-male | ~30 | | Fire jumper | Male-to-male | ~30 |
 | Cablu USB | Micro-USB | 1 | | Cablu USB | Micro-USB | 1 |
-| Sursa alimentare | 24V externa | 1 |+| Sursa alimentare | 12V externa | 1 |
  
 ==== Conexiuni pini ==== ==== Conexiuni pini ====
Line 87: Line 87:
 {{:​pm:​prj2026:​atoader:​schemaElectricaPNG.png?​800|}} {{:​pm:​prj2026:​atoader:​schemaElectricaPNG.png?​800|}}
  
-{{:​pm:​prj2026:​atoader:​SchemaElectricaKiCad.png?800|}}+{{:​pm:​prj2026:​atoader:​schemaelectricakicadBun.png?800|}}
  
 {{:​pm:​prj2026:​atoader:​pozalampargb3.jpg?​200|}} {{:​pm:​prj2026:​atoader:​pozalampargb3.jpg?​200|}}
Line 94: Line 94:
 {{:​pm:​prj2026:​atoader:​LambaRgb5.jpeg?​200|}} {{:​pm:​prj2026:​atoader:​LambaRgb5.jpeg?​200|}}
  
-Video Demo 
-https://​drive.google.com/​file/​d/​1rH4AE9yBBfuPUU4mn2AI_eMcyocapCyA/​view?​usp=sharing 
 ===== Software Design ===== ===== Software Design =====
- 
-Github: https://​github.com/​CovaliuStefan/​LampaRGB 
- 
-Video Demo: https://​drive.google.com/​file/​d/​1rH4AE9yBBfuPUU4mn2AI_eMcyocapCyA/​view?​usp=sharing 
- 
 ==== Mediu de dezvoltare ==== ==== Mediu de dezvoltare ====
  
   * **IDE:** VSCode cu extensia PlatformIO   * **IDE:** VSCode cu extensia PlatformIO
-  * **Framework:​** Arduino ​(pentru compatibilitate rapida cu bibliotecile de periferice) +  * **Framework:​** Arduino 
-  * **Upload:** avrdude cu protocol custom ​— flags: ''​-P usb -c xplainedmini''​ (protocolul standard ​''​xplainedmini'' ​din PlatformIO nu functioneaza cu ATmega328P-XMINI ​si returneaza eroare de port)+  * **Upload:** avrdude cu protocol customflags: ''​-P usb -c xplainedmini''​ (protocolul standard din PlatformIO nu functioneaza cu ATmega328P-XMINI)
   * **Monitor serial:** 9600 baud, folosit pentru debug si receptie comenzi Bluetooth   * **Monitor serial:** 9600 baud, folosit pentru debug si receptie comenzi Bluetooth
  
 ==== Biblioteci folosite ==== ==== Biblioteci folosite ====
  
-^ Biblioteca ​^ Versiune ​^ Scop ^ +^ Biblioteca ^ Scop ^ 
-| ''​Wire.h'' ​| built-in Arduino ​| Comunicatie I2C (TWI) cu DS3231 | +| ''​Wire.h''​ | Comunicatie I2C cu DS3231 | 
-| ''​RTClib'' ​| Adafruit ​| Citire ora/data de la DS3231 ​in format lizibil ​+| ''​RTClib''​ | Citire ora si data de la DS3231 | 
-| ''​SPI.h'' ​| built-in Arduino ​| Comunicatie SPI hardware cu OLED | +| ''​SPI.h''​ | Comunicatie SPI hardware cu OLED | 
-| ''​Adafruit_GFX'' ​| Adafruit ​| Biblioteca grafica de baza pentru display | +| ''​Adafruit_GFX''​ | Biblioteca grafica de baza pentru display | 
-| ''​Adafruit_SSD1306'' ​| Adafruit ​| Driver display OLED SSD1306/​SH1106 ​prin SPI |+| ''​Adafruit_SSD1306''​ | Driver display OLED prin SPI |
  
 ==== Descriere comunicatie periferice ==== ==== Descriere comunicatie periferice ====
  
-**UART ​— HC-06 Bluetooth (D0/D1)**+**UART ​HC-06 Bluetooth (D0/D1)**
  
 HC-06 functioneaza ca bridge serial wireless la 9600 baud. Microcontrolerul citeste caractere din ''​Serial''​ pana la ''​\n'',​ apoi parseaza comanda. Comenzile suportate sunt ''​WARM'',​ ''​COOL'',​ ''​AUTO'',​ ''​WHITE'',​ ''​TIME'',​ ''​OFF''​ si format numeric ''​R G B''​ (ex: ''​200 50 10''​). Pinul RX al modulului este protejat printr-un divizor 1kΩ+2kΩ deoarece HC-06 lucreaza la 3.3V logic iar ATmega transmite la 5V. HC-06 functioneaza ca bridge serial wireless la 9600 baud. Microcontrolerul citeste caractere din ''​Serial''​ pana la ''​\n'',​ apoi parseaza comanda. Comenzile suportate sunt ''​WARM'',​ ''​COOL'',​ ''​AUTO'',​ ''​WHITE'',​ ''​TIME'',​ ''​OFF''​ si format numeric ''​R G B''​ (ex: ''​200 50 10''​). Pinul RX al modulului este protejat printr-un divizor 1kΩ+2kΩ deoarece HC-06 lucreaza la 3.3V logic iar ATmega transmite la 5V.
  
-**SPI — OLED SH1106 ​(D13/​D11/​D10/​D7/​D4)**+**SPI OLED SSD1306 0.96" SPI (D13/​D11/​D10/​D7/​D4)**
  
-Display-ul este controlat prin SPI hardware. ​Se foloseste biblioteca Adafruit_SSD1306 care este compatibila si cu controller-ul SH1106. Display-ul este actualizat ​o data pe secunda cuora curenta ​(HH:MM), valoarea LDR, modul activ si tripletul RGB curent. Pinii folositi: SCK=D13, MOSI=D11, CS=D10, DC=D7, RST=D4.+Display-ul este controlat prin SPI hardware. ​Actualizat ​o data pe secunda cu ora curenta, valoarea LDR, modul activ si tripletul RGB curent.
  
-**I2C — DS3231 RTC (A4/A5)**+**I2C DS3231 RTC (A4/A5)**
  
-Comunicatia cu modulul ​RTC se face prin protocolul ​TWI la adresa ​implicita ​0x68. Biblioteca RTClib abstractizeaza citirea registrilor BCD ai DS3231. La primul pornire ​(sau dupa pierderea alimentarii bateriei)RTC-ul ​se seteaza automat cu ora compilarii prin ''​rtc.adjust(DateTime(F(__DATE__),​ F(__TIME__)))''​.+Comunicatia cu RTC-ul se face prin TWI la adresa 0x68. La primul pornire sau dupa pierderea alimentarii bateriei, ​ora se seteaza automat cu ora compilarii prin ''​rtc.adjust(DateTime(F(__DATE__),​ F(__TIME__)))''​.
  
-**ADC — LDR GL5528 (A0)**+**ADC LDR GL5528 (A0)**
  
 LDR-ul este conectat intr-un divizor de tensiune cu 10kΩ la GND. Valoarea ADC (0–1023) este mapata la intervalul 0–255 si folosita ca factor de interpolare pentru temperatura de culoare. LDR-ul este conectat intr-un divizor de tensiune cu 10kΩ la GND. Valoarea ADC (0–1023) este mapata la intervalul 0–255 si folosita ca factor de interpolare pentru temperatura de culoare.
  
-**GPIO + Intrerupere ​— Buton (D2)**+**GPIO + Intrerupere ​Buton (D2)**
  
-Butonul este conectat la D2 cu pull-up intern activat (''​INPUT_PULLUP''​). Debouncing-ul este realizat ​software: ​se valideaza ​apasarea doar daca pinul e LOW cel putin 30ms si au trecut cel putin 300ms de la ultima apasare ​valida.+Butonul este conectat la D2 cu ''​INPUT_PULLUP''​. Debouncing software: apasarea ​e valida ​doar daca pinul e LOW cel putin 30ms si au trecut cel putin 300ms de la ultima apasare.
  
-**PWM — MOSFETs RGB (D3/​D5/​D6)**+**PWM MOSFETs RGB (D3/​D5/​D6)**
  
-Cele trei canale sunt controlate prin Timer0 (D5=OC0B, D6=OC0A) si Timer2 (D3=OC2B). PWM-ul este configurat direct prin registrii hardware TCCR0A, TCCR2A, OCR0A, OCR0B, OCR2B, fara a folosi ''​analogWrite'', ​pentru control precis ​al timerelor.+Cele trei canale sunt controlate prin Timer0 (D5=OC0B, D6=OC0A) si Timer2 (D3=OC2B). PWM-ul este configurat direct prin registrii hardware TCCR0A, TCCR2A, OCR0A, OCR0B, OCR2B pentru control precis ​fara overhead Arduino.
  
 ==== Laboratoare PM utilizate ==== ==== Laboratoare PM utilizate ====
  
 ^ Laborator ^ Periferal ^ Utilizare in proiect ^ ^ Laborator ^ Periferal ^ Utilizare in proiect ^
-| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab0-2024|Lab 0 — GPIO]] | GPIO, DDRD, PORTD | Configurare pini PWM ca OUTPUT, buton ca INPUT_PULLUP,​ control direct registri | +| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab0-2024|Lab 0 GPIO]] | DDRD, PORTD | Configurare pini PWM ca OUTPUT, buton ca INPUT_PULLUP,​ control direct registri | 
-| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab1-2023|Lab 1 — UART]] | Serial, USART | Comunicatie cu HC-06 Bluetooth ​la 9600 baud, parsare comenzi text, debug serial | +| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab1-2023|Lab 1 UART]] | Serial, USART | Comunicatie cu HC-06 la 9600 baud, parsare comenzi text, debug serial | 
-| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2023|Lab 2 — Intreruperi]] | INT0, D2 | Detectie apasare buton pe front descrescator, debouncing software cu millis() | +| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2023|Lab 2 Intreruperi]] | INT0, D2 | Detectie apasare buton, debouncing software cu millis() | 
-| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023-2024|Lab 3 — Timere / PWM]] | Timer0, Timer2, OCR | Generare PWM pe 3 canale independente pentru ​controlul ​MOSFET-urilor ​RGB | +| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023-2024|Lab 3 Timere / PWM]] | Timer0, Timer2, OCR | Generare PWM pe 3 canale independente pentru MOSFET-urile RGB | 
-| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab4-2023-2024|Lab 4 — ADC]] | ADC, A0 | Citire fotorezistor LDR, conversie 10-bit la factor ​de interpolare ​0–255 | +| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab4-2023-2024|Lab 4 ADC]] | ADC, A0 | Citire fotorezistor LDR, conversie 10-bit la factor 0–255 | 
-| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab5-2023-2024|Lab 5 — SPI]] | SPI hardware, D13/​D11 ​| Comunicatie cu display OLED SH1106, actualizare ecran la fiecare secunda | +| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab5-2023-2024|Lab 5 SPI]] | SPI hardware | Comunicatie cu display OLED, actualizare ecran la fiecare secunda | 
-| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab6-2023-2024|Lab 6 — I2C]] | TWI, A4/A5 | Citire ora de la DS3231 ​RTC, detectie pierdere alimentare baterie |+| [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab6-2023-2024|Lab 6 I2C]] | TWI, A4/A5 | Citire ora de la DS3231, detectie pierdere alimentare baterie |
  
 ==== Structura codului ==== ==== Structura codului ====
  
 <code cpp> <code cpp>
-// ── Setup ────────────────────────────────────────── 
 void setup() { void setup() {
-    Serial.begin(9600); ​  ​// UART pentru HC-06 si debug +    Serial.begin(9600); ​       // UART pentru HC-06 si debug 
-    pwmSetup(); ​          ​// Configurare Timer0 si Timer2 pentru PWM RGB +    pwmSetup(); ​               // Configurare Timer0 si Timer2 pentru PWM RGB 
-    setRGB(0, 0, 0);      // Pornire cu LED-urile stinse+    setRGB(0, 0, 0);           ​// Pornire cu LED-urile stinse
     pinMode(PIN_BTN,​ INPUT_PULLUP);​     pinMode(PIN_BTN,​ INPUT_PULLUP);​
     Wire.begin();​     Wire.begin();​
-    rtcSetup(); ​          ​// Init DS3231, seteaza ora daca RTC a pierdut alimentarea +    rtcSetup(); ​               // Init DS3231 
-    oledSetup(); ​         // Init OLED SSD1306/​SH1106 ​prin SPI+    oledSetup(); ​              ​// Init OLED prin SPI
 } }
  
-// ── Loop principal ───────────────────────────────── 
 void loop() { void loop() {
     parseBT(); ​      // 1. Citeste comenzi UART de la HC-06     parseBT(); ​      // 1. Citeste comenzi UART de la HC-06
Line 178: Line 169:
         case MODE_AUTO: ​ // LDR determina caldura culorii         case MODE_AUTO: ​ // LDR determina caldura culorii
         case MODE_TIME: ​ // RTC determina caldura culorii         case MODE_TIME: ​ // RTC determina caldura culorii
-        case MODE_WARM: ​ // Fix CALD (R=255G=180B=80) +        case MODE_WARM: ​ // Fix CALD  R=255 G=180 B=80 
-        case MODE_COOL: ​ // Fix RECE (R=200G=220B=255) +        case MODE_COOL: ​ // Fix RECE  R=200 G=220 B=255 
-        case MODE_WHITE: // Alb pur (R=255G=255B=255)+        case MODE_WHITE: // Alb pur   ​R=255 G=255 B=255
         case MODE_BT: ​   // Culoare primita prin Bluetooth         case MODE_BT: ​   // Culoare primita prin Bluetooth
-        case MODE_OFF: ​  // Stins (R=0G=0B=0)+        case MODE_OFF: ​  // Stins     ​R=0   ​G=0   ​B=0
     }     }
  
-    setRGB(cr, cg, cb);          // Aplica PWM pe Timer0/​Timer2 +    setRGB(cr, cg, cb); 
-    updateOLED(cr,​ cg, cb, ...); // Actualizeaza display SPI+    updateOLED(cr,​ cg, cb, ...);
 } }
 </​code>​ </​code>​
Line 193: Line 184:
  
 **Interpolare liniara temperatura culoare:** **Interpolare liniara temperatura culoare:**
- 
 <​code>​ <​code>​
 R = RECE_R + (CALD_R - RECE_R) * t / 255 R = RECE_R + (CALD_R - RECE_R) * t / 255
Line 199: Line 189:
 B = RECE_B + (CALD_B - RECE_B) * t / 255 B = RECE_B + (CALD_B - RECE_B) * t / 255
  
-unde t = 0   → culoare RECE (dimineata/​zi) +t = 0   => culoare RECE (dimineata/​zi) 
-      t = 255 → culoare CALD  (seara/​noapte)+t = 255 => culoare CALD (seara/​noapte)
 </​code>​ </​code>​
  
-**Factorul t in MODE_AUTO** ​— determinat de LDR:+**Factorul t in MODE_AUTO:**
 <​code>​ <​code>​
-t = 255 - ADC_value ​ // lumina puternica = RECE, intuneric = CALD+t = 255 - ADC_value 
 +// lumina puternica =RECE, intuneric =CALD
 </​code>​ </​code>​
  
-**Factorul t in MODE_TIME** ​— determinat de ora RTC:+**Factorul t in MODE_TIME:**
 <​code>​ <​code>​
-ora 06:0018:00 → t = 0   (RECE) +ora 06:00-18:00 => t = 0 
-ora 18:0022:00 → t = (h - 18) * 255 / 4  ​(tranzitie liniara) +ora 18:00-22:00 => t = (h - 18) * 255 / 4 
-ora 22:0006:00 → t = 255 (CALD)+ora 22:00-06:00 => t = 255
 </​code>​ </​code>​
  
Line 218: Line 209:
 <​code>​ <​code>​
 val_finala = val_calculata * MAX_BRIGHT / 255 val_finala = val_calculata * MAX_BRIGHT / 255
-MAX_BRIGHT = 160  // ~63% din maxim, protectie LED-uri si MOSFET-uri+MAX_BRIGHT = 160  // ~63% din maxim
 </​code>​ </​code>​
  
-**Curentul prin LED-uri** ​(verificare siguranta):+**Curentul prin LED-uri:**
 <​code>​ <​code>​
-I_LED = (VCC - Vf) / R_serie += (VCC - Vf) / R_serie 
-I_R = (5V - 2.0V) / 220Ω ≈ 13.6 mA  ​✓ (sub limita de 20mA) +I_R = (5V - 2.0V) / 220  ​= ​13.6 mA  (OK, sub 20mA) 
-I_G = (5V - 2.1V) / 100Ω ≈ 29 mA    ​⚠ (la limita, acceptabil) +I_G = (5V - 2.1V) / 100  ​= ​29 mA    (la limita, acceptabil) 
-I_B = (5V - 3.2V) / 220Ω ≈  8 mA   ✓+I_B = (5V - 3.2V) / 220  ​= ​ 8 mA    (OK)
 </​code>​ </​code>​
  
-==== Optimizari ​implementate ​====+==== Optimizari ====
  
-  ​* **PWM direct prin registri** in loc de ''​analogWrite()'' ​— evita overhead-ul Arduino si permite ​control independent al Timer0 si Timer2 ​fara conflicte +  * PWM configurat ​direct prin registri ​TCCR/​OCR ​in loc de ''​analogWrite()'' ​pentru ​control independent al Timer0 si Timer2 
-  ​* **Limita globala MAX_BRIGHT = 160** — protejeaza LED-urile ​de supracurent ​la duty cycle 100% si reduce consumul +  * Limita globala MAX_BRIGHT = 160 protejeaza LED-urile la duty cycle maxim 
-  ​* **Update OLED o data pe secunda** printr-un timer software (''​millis()''​) in loc de ''​delay()'' ​— nu blocheaza ​parsarea ​UART sau citirea butonului +  * Update OLED o data pe secunda ​prin ''​millis()'' ​fara ''​delay()''​nu blocheaza UART sau butonul 
-  * **Stingere hardware la OCR=0** — cand o valoare RGB e 0, pinul COM este dezactivat din registru si portul ​fortat LOW, eliminand glitch-uri PWM +  * Cand o valoare RGB e 0, pinul COM este dezactivat din registru si portul fortat LOW, eliminand glitch-uri PWM
-  * **Buffer UART de 20 caractere** cu timeout pe ''​\n''​ — previne blocaje daca HC-06 trimite date corupte+
  
 ==== Cum se testeaza ==== ==== Cum se testeaza ====
  
-**Test 1 — Buton:** +**Test 1 Buton:** 
-Apasa butonul ​fizic de pe D2. Display-ul ​trebuie sa cicleze prin modurile: AUTO → CALD → RECE → ALB → TIME → OPRIT → AUTO. LED-urile isi schimba culoarea la fiecare apasare.+Apasa butonul de pe D2. Display-ul ​cicleza: AUTOCALDRECEALBTIMEOPRIT. LED-urile isi schimba culoarea la fiecare apasare.
  
-**Test 2 — Bluetooth:​** +**Test 2 Bluetooth:​** 
-Conecteaza telefonul la HC-06 (PIN: 1234) cu o aplicatie serial Bluetooth ​(ex: Serial Bluetooth Terminal). Trimite comenzile:​ +Conecteaza telefonul la HC-06 (PIN: 1234) cu o aplicatie serial Bluetooth. Trimite comenzile:​ 
-  * ''​WARM'' ​→ LED-uri galben-portocaliu +  * ''​WARM'' ​=> LED-uri galben-portocaliu 
-  * ''​COOL'' ​→ LED-uri alb-albastrui +  * ''​COOL'' ​=> LED-uri alb-albastrui 
-  * ''​WHITE'' ​→ LED-uri alb pur +  * ''​WHITE'' ​=> LED-uri alb pur 
-  * ''​OFF'' ​→ LED-uri stinse +  * ''​OFF'' ​=> LED-uri stinse 
-  * ''​200 50 10'' ​→ culoare custom RGB+  * ''​200 50 10'' ​=> culoare custom RGB
  
-**Test 3 — ADC / LDR:** +**Test 3 LDR:** 
-Acopera fotorezistorul cu mana. In modul AUTOLED-urile ​trebuie sa vireze spre culori calde (galben). Descopera LDR — LED-urile vireze spre rece (alb-albastru).+Acopera fotorezistorul cu mana. In modul AUTO LED-urile vireze spre cald (galben). Descopera LDRLED-urile vireze spre rece (alb-albastru).
  
-**Test 4 — RTC:** +**Test 4 RTC:** 
-In modul TIME, ora afisata ​pe OLED determina culoarea. Intre 06:0018:00 culoarea e rece, intre 18:0022:00 face tranzitie ​spre cald, dupa 22:00 e culoare ​calda.+In modul TIME, ora de pe OLED determina culoarea. Intre 06:00-18:00 culoarea e rece, intre 18:00-22:00 face tranzitie, dupa 22:00 e calda.
  
-**Test 5 — Debug serial:** +**Test 5 Debug serial:** 
-Deschide Serial Monitor la 9600 baud. La fiecare 2 secunde ​se printeaza:+Deschide Serial Monitor la 9600 baud. La fiecare 2 secunde:
 <​code>​ <​code>​
 HH:MM:SS | L:xxx | R:xxx G:xxx B:xxx HH:MM:SS | L:xxx | R:xxx G:xxx B:xxx
 </​code>​ </​code>​
 +
 +==== Demo Video ====
 +
 +[[https://​drive.google.com/​file/​d/​1rH4AE9yBBfuPUU4mn2AI_eMcyocapCyA/​view?​usp=sharing|Demo Drive Video - Smart Lamp Controller]]
 +
 +
 +[[https://​www.youtube.com/​shorts/​O9K0OdRhifo |Demo YouTube Video - Smart Lamp Controller]]
 +==== Github ====
 +
 +[[https://​github.com/​CovaliuStefan/​LampaRGB|CovaliuStefan/​LampaRGB]]
pm/prj2026/atoader/stefan.covaliu.1779623974.txt.gz · Last modified: 2026/05/24 14:59 by stefan.covaliu
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