Table of Contents

Lampa RGB Inteligenta cu Adaptare Automata a Culorii

Smart Lamp Controller

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.

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

Sistemul are urmatoarele module principale:

Module Hardware

Module Software

Hardware Design

Lista componente

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

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

Schema electrica

Software Design

Mediu de dezvoltare: VSCode cu PlatformIO, framework Arduino, upload prin avrdude cu protocol custom (flags: -P usb -c xplainedmini).

Librarii folosite:

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.