This is an old revision of the document!
- fiecare mod se va schimba pe baza unei aplicatii pe PC-ul la care este conectat
Acest proiect este folositor pentru decorarea setup-ului de birou cu un element practic si la indemana.
Comunicatie si interfețe Afisajul OLED si senzorul de temperatura DHT22 sunt utilizati pentru a afisa ora si temperatura camerei. OLED-ul este controlat prin protocolul I2C, utilizand pinii dedicati SDA (pin 20) si SCL (pin 21) de pe Arduino Mega.
Modulul RTC DS3231 este utilizat pentru afisarea orei in timp real, folosind tot protocolul I2C.
Senzorul de temperatura DHT22 comunica printr-o linie digitala simpla (1-wire proprietar), conectata la un pin digital al placii Arduino.
Senzorul PIR (MH-SR602) detecteaza miscarea mainii deasupra ceasului si este conectat la un pin digital. Acesta trimite un semnal HIGH atunci cand detecteaza miscare, declansand afisarea informatiei pe ecran pentru o durata de timp.
Inelul de LED-uri RGB WS2812B este conectat la un singur pin digital si alimentat la 5V. Comunicarea se face printr-un protocol serial. Deoarece Arduino Mega opereaza la 5V logic, nu este necesara potrivirea de niveluri pentru semnalul de control.
Butonul fizic este conectat la un pin digital si permite interactiunea manuala directa cu ceasul pentru oprirea acestuia. Este utilizat cu o rezistenta de pull-up, pentru a asigura stabilitatea semnalului.
Moduri de functionare si comportament al sistemului: Sistemul are trei moduri de iluminare ambientala, care sunt comutate printr-o aplicatie de PC conectata la Arduino prin USB:
Mod temperatura: culoarea LED-urilor RGB se schimba in functie de temperatura camerei.
Mod sincronizare cu PC-ul: LED-urile se sincronizeaza cu culorile predominante de pe ecranul monitorului, pentru o experienta vizuala coerenta.
Mod focus: LED-urile sunt oprite complet pentru a evita distragerile. Senzorul PIR este activ si declanseaza afisarea orei si temperaturii pe OLED pentru 10 secunde la detectia miscarii.
Alimentare si integrare Ceasul este montat fizic pe monitor printr-un suport si este alimentat prin conexiunea USB la PC. Aceasta sursa ofera atat alimentare la 5V, cat si comunicatie seriala cu aplicatia de control.
Functionalitate generala La pornire, Arduino Mega initializeaza toti senzorii si display-ul OLED. In functie de modul activ, sistemul controleaza comportamentul inelului RGB si al afisajului OLED. Datele privind temperatura si ora sunt actualizate in timp real si afisate in format vizual clar. Aplicatia de PC trimite comenzi catre Arduino pentru a schimba modul de iluminare sau pentru a activa manual functii specifice.
Sistemul ofera atat un instrument util, cat si un element decorativ inteligent si adaptabil pentru birou sau spatii de lucru.
pinii SDA si SCL sunt folositi in paralel de Display si Modulul RTC
1. DHT22
Legături: * DATA → conectat la pinul digital D23 de pe Arduino Mega * VCC (roșu) → linia roșie de alimentare (+5V) * GND → linia neagră de GND
2. Display OLED 128×64 (I2C, SSD1306) Interfață: I2C
Pinout:
VCC → linia roșie de alimentare (+5V)
GND → linia GND
SCL → pinul SCL (pin 21 pe Arduino Mega)
SDA → pinul SDA (pin 20 pe Arduino Mega)
Tensiune de alimentare: 5V
3. Senzor de mișcare PIR (MH-SR602) Interfață: Digitală
Pinout:
VCC → linia roșie de alimentare (+5V)
GND → GND
OUT → pinul digital D29 de pe Arduino Mega
Tensiune de alimentare: 5V
4. Inel LED Neopixel (WS2812) Interfață: Digitală, un singur fir de date
Pinout:
VCC → linia roșie (+5V)
GND → GND
DIN → pinul D25 pe Arduino Mega
Tensiune de alimentare: 5V
5. Buton tactil Interfață: Digitală
Pinout:
Un capăt → GND
Celălalt capăt → pinul D27 pe Arduino Mega + rezistență pull-up software sau externă
Tensiune: Fără alimentare directă, e comutator pasiv (semnal 0/1)
6. Modul RTC DS3231
Interfata I2C
VCC → linia roșie de alimentare (+5V)
GND → linia GND
SCL → pinul SCL (pin 21 pe Arduino Mega)
SDA → pinul SDA (pin 20 pe Arduino Mega)
7. Modul ttl CH340G
Interfata TTL seriala
VCC → linia roșie de alimentare (+5V)
GND → linia GND
RXD → TX1, 18
TXD → RX1, 19
Motivarea alegerii bibliotecilor folosite:
FastLED: este biblioteca standard pentru controlul benzilor și inelelor WS2812. Oferă funcții rapide pentru controlul direct al culorilor LED-urilor, precum și conversie HSV-RGB, ideală pentru efectele termice și rainbow din proiect.
DHT: biblioteca oficială Adafruit pentru senzorii DHT22. Permite citirea stabilă a temperaturii și umidității, necesară pentru modulul de afișare a temperaturii.
Adafruit_GFX + Adafruit_SSD1306: folosite pentru controlul display-ului OLED 128×64 I2C. Permit desenarea de forme grafice, text și animații, utilizate în tranziția dintre moduri.
serial (PySerial): pentru comunicarea între aplicația Python și Arduino Mega, separând comanda modurilor (pe COM4) de datele RGB (pe COM5).
PyQt5: pentru interfața grafică a aplicației pe PC. Permite o interfață prietenoasă și modernă, cu butoane pentru comutarea modurilor.
Pillow + NumPy: folosite pentru capturarea ecranului și analiza pixelilor in mod ambilight, oferind culori dinamice pentru fiecare LED.
Elementul de noutate al proiectului:
Utilizarea simultană a două canale seriale distincte: COM4 pentru comenzi, COM5 pentru date RGB, evitând conflictele de bandă sau blocajele de sincronizare.
Modul FOCUSED bazat pe senzor PIR: ecranul OLED se aprinde doar când detectează mișcare, ideal pentru medii low-power sau scenarii de concentrare.
Modul ;)) unic, cu animație grafică pe OLED și efecte LED calde (roz, rosu, portocaliu) sincronizate.
Aplicație Python cu design personalizat și build final .exe portabil, realizat cu Inno Setup.
Justificarea utilizării funcționalităților din laborator:
Lab 1 (USART): proiectul folosește ambele porturi seriale (USB și CH340) pentru comunicație bidirecțională, conform structurii laboratorului.
Lab 2 (Timer și Întreruperi): folosirea millis() pentru actualizări temporizate (citire senzor/refresh LED) evită delay(), asigurând rulare fluidă.
Lab 3 (PWM): modulul FastLED utilizează PWM hardware/software pentru generarea culorilor RGB precise.
Lab 4 (ADC): senzorul DHT are un semnal digital, dar utilizarea sa este complet integrată într-un flux de actualizare periodică.
Lab 6 (I2C): display-ul OLED si Modulul RTC funcționează pe magistrala I2C, gestionată simultan cu alți senzori, conform exercițiilor de laborator.
Structura proiectului și interacțiunea funcționalităților:
Arduino Mega primește comenzi pe Serial1 (COM4) de la aplicația Python (mod TEMP, AMBILIGHT, FOCUSED, ;)).
Pe COM5 (USB), Arduino primește continuu date RGB doar când e în modul AMBILIGHT.
Senzorul DHT este folosit în TEMP și FOCUSED pentru afișarea temperaturii.
Senzorul PIR controlează aprinderea display-ului doar la mișcare (mod FOCUSED).
Display-ul OLED afișează ora/temperatura în toate modurile, cu animație într-un mod special.
Aplicația Python trimite comenzi și, când e cazul, date RGB capturate live de pe ecran.
Validarea funcționalităților a fost realizată prin:
observarea efectului LED vizual (culoare, animație, oprire)
testarea comutării rapide între moduri
monitorizare Serial pentru debug și afșaj OLED pentru feedback
Calibrarea elementelor de senzoristică:
DHT22 a fost plasat într-un mediu static pentru validarea temperaturii față de un termometru de cameră
PIR a fost reglat prin blocarea vederii lentilei in laterale, astfel va detecta doar miscarea de deasupra (detecție doar la mâna)
valorile din senzor au fost afișate pe OLED și comparate cu mișcarea fizică efectivă.
Optimizări realizate:
Folosirea millis() în loc de delay() pentru actualizări precise
Separarea modurilor pe porturi diferite previne blocajele
Evitarea actualizării continue a OLED (doar la nevoie)
Trimiterea de date RGB doar când este cazul (mod activ)
Aplicație GUI minimală, eficientă, cu thread separat pentru RGB, evitând blocarea UI
Compilare PyInstaller + Inno Setup pentru portabilitate totală
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.