This shows you the differences between two versions of the page.
|
pm:prj2026:atoader:stefan.covaliu [2026/05/16 22:48] stefan.covaliu [Introducere] |
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 ====== | ||
| + | |||
| + | ====== Smart Lamp Controller ====== | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| Punctul de plecare a 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. | Punctul de plecare a 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. | ||
| - | 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 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. | ||
| + | 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 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 PWM. Sunt tranzistori de tip Logic Level, deci se deschid complet la 5V. | + | {{:pm:prj2026:atoader:proiectpmschema.drawio.png?600|}} |
| - | Initial voiam sa folosesc o banda led dar am decis sa folosesc 3 leduri diferite pentru canalele R,G,B. | + | ===== Hardware Design ===== |
| - | **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. | + | |
| - | **3x LED discret (Rosu, Verde, Albastru)** reprezinta elementul de iluminat. Fiecare LED are un rezistor de 220Ω conectat in serie pe linia anodului, pentru limitarea curentului. Anodul fiecarui LED este conectat la 5V prin rezistorul sau, iar catodul este conectat la pinul Drain al MOSFET-ului corespunzator. | + | ==== Lista componente ==== |
| - | **Alimentare: L7805CV** regleaza tensiunea de la 12V la 5V pentru microcontroler si module. | + | ^ 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 | | ||
| - | Logica de prioritizare: butonul fizic are prioritate maxima, urmat de comenzile Bluetooth, apoi modul automat bazat pe LDR si RTC. | + | ==== Conexiuni pini ==== |
| + | ^ Pin MCU ^ Conectat la ^ Functie ^ | ||
| + | | D0 (RX) | HC-06 TX | UART receptie Bluetooth | | ||
| + | | 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 | | ||
| - | {{:pm:prj2026:atoader:proiectpmschema.drawio.png?600|}} | + | ==== Schema electrica ==== |
| - | + | ||
| - | ===== Hardware Design ===== | + | |
| {{:pm:prj2026:atoader:schemaElectricaPNG.png?800|}} | {{:pm:prj2026:atoader:schemaElectricaPNG.png?800|}} | ||
| Line 44: | 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 | | ||