This shows you the differences between two versions of the page.
|
pm:prj2026:atoader:stefan.covaliu [2026/05/24 15:01] stefan.covaliu |
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 95: | Line 95: | ||
| ===== 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 ==== | ||
| Line 118: | Line 113: | ||
| ==== 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. Actualizat o data pe secunda cu ora curenta, valoarea LDR, modul activ si tripletul RGB curent. | 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 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__)))''. | 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 ''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. | 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 pentru control precis fara overhead Arduino. | 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. | ||
| Line 145: | Line 140: | ||
| ^ Laborator ^ Periferal ^ Utilizare in proiect ^ | ^ Laborator ^ Periferal ^ Utilizare in proiect ^ | ||
| - | | [[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/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 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, 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 MOSFET-urile 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 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 | Comunicatie cu display OLED, 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, 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 ==== | ||
| Line 234: | Line 229: | ||
| ==== Cum se testeaza ==== | ==== Cum se testeaza ==== | ||
| - | **Test 1 — Buton:** | + | **Test 1 - Buton:** |
| Apasa butonul de pe D2. Display-ul cicleza: AUTO, CALD, RECE, ALB, TIME, OPRIT. LED-urile isi schimba culoarea la fiecare apasare. | Apasa butonul de pe D2. Display-ul cicleza: AUTO, CALD, RECE, ALB, TIME, OPRIT. 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. 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 | ||
| Line 245: | Line 240: | ||
| * ''200 50 10'' => culoare custom RGB | * ''200 50 10'' => culoare custom RGB | ||
| - | **Test 3 — LDR:** | + | **Test 3 - LDR:** |
| Acopera fotorezistorul cu mana. In modul AUTO LED-urile vireze spre cald (galben). Descopera LDR, LED-urile vireze spre rece (alb-albastru). | Acopera fotorezistorul cu mana. In modul AUTO LED-urile vireze spre cald (galben). Descopera LDR, LED-urile vireze spre rece (alb-albastru). | ||
| - | **Test 4 — RTC:** | + | **Test 4 - RTC:** |
| 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. | 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: | 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]] | ||