Differences

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

Link to this comparison view

pm:prj2026:atoader:stefan.covaliu [2026/05/15 17:09]
stefan.covaliu [Hardware Design]
pm:prj2026:atoader:stefan.covaliu [2026/05/16 22:58] (current)
stefan.covaliu [Software Design]
Line 1: Line 1:
 ====== Lampa RGB Inteligenta cu Adaptare Automata a Culorii ====== ====== Lampa RGB Inteligenta cu Adaptare Automata a Culorii ======
  
-===== Introducere ​=====+====== Smart Lamp Controller ======
  
-Proiectul consta intr-o lampa cu banda LED RGB controlata de un microcontroler ATmega328P-XMINI. Lampa isi schimba automat temperatura de culoare in functie de lumina din camera si de ora din zi, trecand de la lumina rece (albastru-alb) ziua la lumina calda (galben-portocaliu) seara.+===== Introducere =====
  
-Ideea pornit de la faptul ​ca lumina albastra seara afecteaza ​somnul. Majoritatea oamenilor stau la birou sau in camera cu aceeasi lumina alba tot timpul, indiferent de ora. O lampa care se adapteaza singura rezolva aceasta problema fara sa trebuiasca sa faci ceva.+Punctul de plecare ​fost observatia ​ca lumina albastra seara afecteaza ​calitatea somnului. Majoritatea oamenilor stau la birou sau in camera cu aceeasi lumina alba tot timpul, indiferent de ora din zi. O lampa care isi adapteaza singura ​temperatura de culoare ​rezolva aceasta problema fara nicio interventie din partea utilizatorului.
  
-Pe langa modul automat, lampa poate fi controlata ​si manual printr-un buton fizic sau de pe telefon prin Bluetooth. ​Pe un display OLED mic se vede in timp real ce mod e activ, ​ce culoare e setata si ora curenta+Proiectul consta intr-o lampa RGB controlata de un microcontroler ATmega328P-XMINI. Lampa trece automat de la lumina rece (albastru-alb) ziua la lumina calda (galben-portocaliu) seara, in functie de luminozitatea ambientala citita de un fotorezistor si de ora curenta furnizata de un modul RTC. Pe langa modul automat, lampa poate fi controlata manual printr-un buton fizic sau de pe telefon prin Bluetooth. ​Un display OLED afiseaza ​in timp real modul activ, ​culoarea ​setata si ora curenta.
- +
-Proiectul e util pentru confortul vizual de zi cu zi si pentru prevenirea durerilor de ochi. In plus, acopera practic majoritatea laboratoarele de la PM: GPIO, UART, intreruperi,​ PWM, ADC, SPI si I2C.+
  
 +Proiectul este util pentru confortul vizual zilnic si pentru prevenirea durerilor de ochi cauzate de expunerea prelungita la lumina albastra seara. In acelasi timp, acopera practic toate periferalele studiate in laboratoarele PM: GPIO, UART, intreruperi externe, PWM, ADC, SPI si I2C.
 ===== Descriere generala ===== ===== Descriere generala =====
  
 Sistemul are urmatoarele module principale: Sistemul are urmatoarele module principale:
  
-**ATmega328P-XMINI** este microcontrolerul central care coordoneaza tot. Citeste senzorii, calculeaza culoarea potrivita si trimite semnalele PWM catre MOSFET-uri.+==== Module Hardware ====
  
-**Modul HC-06 (Bluetooth UART)** permite controlul lampii de pe telefon. Microcontrolerul primeste comenzi text prin UART (ex: "​WARM",​ "​COOL",​ "​OFF"​) si aplica culoarea ​corespunzatoare.+  * **ATmega328P-XMINI** : microcontrolerul central, compatibil Arduino Uno, arhitectura AVR 8-bit la 5V. Coordoneaza toata logica sistemului: citeste senzorii, calculeaza temperatura de culoare, genereaza semnalele PWM si gestioneaza comunicatia cu toate perifericele. 
 +  * **Modul ​Bluetooth ​HC-06** ​permite controlul ​wireless al lampii de pe telefon ​prin UART. Microcontrolerul primeste comenzi text ("​WARM",​ "​COOL",​ "​OFF"​) si le aplica ​imediat. TX-ul modulului este conectat direct la D0 (RX), iar RX-ul este protejat printr-un divizor de tensiune 1kΩ+2kΩ deoarece modulul lucreaza la 3.3V logic. 
 +  * **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. 
 +  * **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. 
 +  * **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 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. 
 +  * **Regulator L7805** - converteste tensiunea sursei externe de 24V la 5V stabili pentru microcontroler si toate modulele.
  
-**Fotorezistor GL5539 + ADC** citeste luminozitatea ambientala. Valoarea analogica e convertita de ADC-ul intern si folosita pentru a determina cat de multa lumina calda sa adauge.+==== Module Software ====
  
-**Modul DS3231 ​(RTC, I2C)** tine ora exacta chiar si cand sistemul e oprit (are baterie CR2032). Microcontrolerul ​citeste ora prin I2C si selecteaza ​automat ​profilul de culoare corespunzator ​momentului din zi.+  ​* **Handler intrerupere buton (INT0)** - la apasarea butonului pe D2 se genereaza intrerupere pe front descrescator. Cicleza intre modurile: AUTO, WARM, COOL, OFF. Are prioritate maxima. 
 +  * **Receptor UART Bluetooth** : citeste comenzile primite de la HC-06 si actualizeaza modul activ. Comenzi suportate: "​WARM",​ "​COOL",​ "​OFF",​ "​AUTO"​. 
 +  * **Citire ADC (LDR)** : ADC-ul intern citeste tensiunea de pe A0 si returneaza o valoare 0–1023 proportionala cu luminozitatea ambientala. 
 +  * **Citire RTC prin I2C** : microcontrolerul ​citeste ora curenta de la DS3231 o data pe secunda ​prin TWI/I2C si selecteaza profilul de culoare corespunzator
 +  * **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. 
 +  * **Driver OLED SPI** : actualizeaza display-ul SH1106 o data pe secunda cu modul activ, valorile RGB curente si ora. 
 +  * **Logica de prioritizare** : buton fizic > comanda Bluetooth > mod automat (LDR + RTC).
  
-**Display OLED SSD1306 (SPI)** afiseaza modul activ, culoarea curenta si ora. Este actualizat la fiecare secunda. 
  
-**3x MOSFET LR7843** controleaza independent cele trei canale ale benzii LED (R, G, B) prin semnale PWMSunt tranzistori de tip Logic Level, deci se deschid complet la 5V.+{{:​pm:​prj2026:​atoader:​proiectpmschema.drawio.png?600|}}
  
-**Banda LED RGB 12V anod comun** este elementul de iluminat. Firul comun primeste 12V, iar cele trei fire de culoare sunt trase la GND prin MOSFET-uri cu duty cycle variabil.+===== Hardware Design =====
  
-**Alimentare:​ L7805CV** regleaza tensiunea de la 12V la 5V pentru microcontroler si module.+==== Lista componente ====
  
-Logica de prioritizare:​ butonul fizic are prioritate maxima, urmat de comenzile ​Bluetooth, apoi modul automat bazat pe LDR si RTC.+^ Componenta ^ Model / Specificatii ^ Cantitate ^ 
 +| Placa microcontroller | ATmega328P-XMINI | 1 | 
 +| Modul Bluetooth ​| HC-06 UART | 1 | 
 +| Display OLED | SH1106 1.3" SPI | 1 | 
 +| Modul RTC | DS3231 I2C | 1 | 
 +| MOSFET | IRLZ44N N-Channel Logic Level | 3 | 
 +| LED rosu | LED 5mm rosu | 1 | 
 +| LED verde | LED 5mm verde | 1 | 
 +| LED albastru | LED 5mm albastru | 1 | 
 +| Fotorezistor | GL5528 LDR | 1 | 
 +| Buton | Push tactil | 1 | 
 +| Regulator tensiune | L7805CV | 1 | 
 +| Rezistor | 220Ω | 3 | 
 +| Rezistor | 10kΩ | 2 | 
 +| Rezistor | 1kΩ | 1 | 
 +| Rezistor | 2kΩ | 1 | 
 +| Breadboard | 830 puncte | 1 | 
 +| Fire jumper | Male-to-male | ~30 | 
 +| Cablu USB | Micro-USB | 1 | 
 +| Sursa alimentare | 24V externa | 1 |
  
 +==== Conexiuni pini ====
  
-{{:​pm:​prj2026:​atoader:​proiectpmschema.drawio.png?​600|}} +^ Pin MCU ^ Conectat la ^ Functie ^ 
- +| D0 (RX) | HC-06 TX | UART receptie Bluetooth | 
-===== Hardware Design =====+| D1 (TX) | HC-06 RX via 1kΩ+2kΩ | UART transmisie (protejat 3.3V) 
 +| D2 | Buton + pull-up 10kΩ | Intrerupere externa INT0 | 
 +| D3 (PWM) | Gate MOSFET Rosu | PWM canal R | 
 +| D4 | OLED RST | SPI Reset | 
 +| D5 (PWM) | Gate MOSFET Verde | PWM canal G | 
 +| D6 (PWM) | Gate MOSFET Albastru | PWM canal B | 
 +| D7 | OLED DC | SPI Data/​Command | 
 +| D10 | OLED CS | SPI Chip Select | 
 +| D11 (MOSI) | OLED SDA | SPI Date | 
 +| D13 (SCK) | OLED SCK | SPI Clock | 
 +| A0 | Nod LDR + 10kΩ | ADC citire luminozitate | 
 +| A4 (SDA) | DS3231 SDA | I2C date RTC | 
 +| A5 (SCL) | DS3231 SCL | I2C clock RTC |
  
 +==== Schema electrica ====
  
 {{:​pm:​prj2026:​atoader:​schemaElectricaPNG.png?​800|}} {{:​pm:​prj2026:​atoader:​schemaElectricaPNG.png?​800|}}
Line 45: Line 91:
 {{:​pm:​prj2026:​atoader:​pozalampargb2.jpg?​400|}} {{:​pm:​prj2026:​atoader:​pozalampargb2.jpg?​400|}}
 {{:​pm:​prj2026:​atoader:​pozalampargb1.jpg?​400|}} {{:​pm:​prj2026:​atoader:​pozalampargb1.jpg?​400|}}
-==== Lista de piese ====+===== Software Design ===== 
 + 
 +**Mediu ​de dezvoltare:​** VSCode cu PlatformIO, framework Arduino, upload prin avrdude cu protocol custom (flags: ''​-P usb -c xplainedmini''​). 
 + 
 +**Librarii folosite:​** 
 +  * ''​Wire.h''​ : comunicatie I2C cu DS3231 
 +  * ''​RTClib''​ : citire ora de la DS3231 
 +  * ''​U8g2lib''​ : driver display OLED SH1106 prin SPI 
 +  * ''​SPI.h''​ : comunicatie SPI hardware 
 + 
 +**Algoritmi implementati:​** 
 + 
 +Logica principala ruleaza intr-un loop cu trei straturi de prioritate. La fiecare iteratie se verifica intai daca a fost apasata o intrerupere de la buton (flag setat in ISR), apoi daca au sosit date pe UART de la Bluetooth, si in final se ruleaza modul automat bazat pe LDR si RTC. 
 + 
 +Calculul temperaturii de culoare combina liniar doua profile: profilul "​rece"​ (R=200, G=220, B=255) si profilul "​cald"​ (R=255, G=180, B=80). Factorul de interpolatie este calculat din ora curenta si modulat de valoarea ADC a LDR-ului. 
 + 
 +Intreruperea pe INT0 seteaza un flag atomic si cicleza un contor de mod. Debouncing-ul este realizat software prin ignorarea intreruperilor successive la interval mai mic de 200ms. 
  
-^ Componenta ^ Model ^ Cantitate ^ 
-| Microcontroler | ATmega328P-XMINI | 1 | 
-| Modul Bluetooth | HC-06 RS232 | 1 | 
-| Modul RTC | DS3231 ZS-042 | 1 | 
-| Baterie RTC | CR2032 3V | 1 | 
-| Display OLED | SSD1306 0.96" SPI 7 pini | 1 | 
-| Fotorezistor | GL5539 5mm | 1 | 
-| MOSFET | LR7843 (Logic Level N-ch) | 3 | 
-| Regulator tensiune | L7805CV | 1 | 
-| Banda LED RGB | 12V anod comun, 5050 | 1m | 
-| Condensator electrolitic | 10uF 50V | 2 | 
-| Condensator ceramic | 100nF 50V | 2 | 
-| Rezistenta | 220 ohm | 3 | 
-| Rezistenta | 1k ohm | 1 | 
-| Rezistenta | 2k ohm | 1 | 
-| Rezistenta | 4.7k ohm | 2 | 
-| Rezistenta | 10k ohm | 5 | 
-| Breadboard | 830 puncte | 1 | 
-| Fire DuPont M-F | 40 bucati 20cm | 1 set | 
-| Fire DuPont M-M | 40 bucati 20cm | 1 set | 
-| Conector DC | 5.5x2.1mm cu terminal | 1 | 
-| Adaptor alimentare | 12V 2A | 1 | 
pm/prj2026/atoader/stefan.covaliu.1778854186.txt.gz · Last modified: 2026/05/15 17:09 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