Proiectul a pornit de la dorința de a realiza un sistem de ceas complet, care să combine afișarea grafică modernă (analog și digital) cu funcții utile precum alarma, măsurarea temperaturii și controlul de la distanță. Ideea a fost inspirată din nevoia unui dispozitiv compact, autonom, ușor de folosit, care să ofere atât informații utile zilnic, cât și o interfață interactivă.
Scopul proiectului este de a pune în aplicare cunoștințele despre microcontrolere, senzori și interfețe grafice, obținând un prototip bine organizat pe componente independente și ușor de extins cu funcții noi. Consider că este util atât pentru uz personal (birou, cameră), cât și ca bază educațională.
Proiectul urmărește realizarea unui sistem de ceas modular, compus din două plăci de dezvoltare și două display-uri OLED, care funcționează împreună pentru a oferi:
Am folosit două microcontrolere nu doar pentru separarea funcționalităților, ci și din motive tehnice. Placa Arduino UNO gestionează ceasul și meniul, însă are un spațiu de memorie limitat: doar 32 KB Flash (pentru cod) și 2 KB SRAM (pentru variabile și afișaj). Deoarece proiectul folosește două ecrane OLED, senzori (DHT11, RTC, IR), buzzer, meniu interactiv și salvare în EEPROM, utilizarea ambelor afișaje pe o singură placă ar fi depășit rapid resursele disponibile. În special, folosirea simultană a două librării grafice pentru ecrane I2C (cu fonturi și bufferuri de afișare) ar fi dus la erori sau blocaje.
Astfel, s-a optat pentru o arhitectură modulară, unde:
Această separare oferă și avantajul testării independente și a extinderii ușoare pe viitor.
Proiectul este împărțit în două module independente, fiecare cu roluri specifice:
Pentru o mai bună înțelegere a arhitecturii aplicației, am realizat o diagramă bloc care evidențiază componentele hardware implicate și modul în care acestea comunică între ele:
Această schemă ilustrează conexiunile dintre senzori, microcontrolere și periferice, precum și direcția fluxului de date – de la senzori și interfețe de control către unitățile de procesare și afișare.
Modulul Ceas & Alarmă:
Modulul Temperatură & IR:
Din punct de vedere software, fiecare microcontroler rulează un program independent care gestionează componentele aferente:
Cele două plăci nu comunică între ele, însă funcționează în paralel pentru a oferi o experiență unitară: un modul dedicat ceasului și alarmei, și unul pentru temperatură și control IR.
După pornirea sistemului, utilizatorul interacționează cu cele două afișaje OLED, fiecare având funcționalități distincte:
Secțiunea prezintă stadiul actual al implementării hardware — componentele folosite, legăturile dintre ele și dovezi de funcționare.
Structura hardware a proiectului este împărțită în două module principale, fiecare având funcții bine delimitate și componente dedicate:
• Modul Ceas & Alarmă – construit pe platforma Arduino UNO, acest modul gestionează afișarea orei și datei, precum și funcția de alarmă. Include un afișaj OLED de 0.96”, un modul RTC DS1307 pentru menținerea timpului real, un buzzer pentru semnal sonor și trei butoane pentru navigarea prin meniu.
• Modul Temperatură & IR – bazat pe NodeMCU (ESP8266), acest modul se ocupă cu măsurarea temperaturii și controlul prin telecomandă IR. Utilizează un senzor DHT11, un receptor IR și un afișaj OLED de 1.3” pentru vizualizarea temperaturii sau a unui mesaj personalizat.
Ambele montaje sunt complet funcționale, realizate pe breadboard și testate individual. Conexiunile între componente sunt stabile, iar semnalele sunt corect interpretate de fiecare microcontroler.
# | Componentă | Datasheet | Rol în proiect | Modul |
---|---|---|---|---|
1 | Arduino UNO | ATmega328P | unitate de control ceas & alarmă | Ceas |
2 | NodeMCU | ESP8266 ESP-12E | unitate de control temperatură & IR | Temperatură & IR |
3 | RTC DS1307 | breakout I2C | păstrează ora și data exacte | Ceas |
4 | OLED 0 .96″ | SSD1306 I2C | afișează ceas analog + digital | Ceas |
5 | OLED 1 .3″ | SH1106 I2C | afișează temperatura / text | Temperatură & IR |
6 | DHT11 | senzor digital | măsoară temperatura ambientală | Temperatură & IR |
7 | Receptor IR | VS1838B | primește comenzi telecomandă | Temperatură & IR |
8 | Telecomandă IR | NEC 17 butoane | comută moduri pe ecran | Temperatură & IR |
9 | Buzzer activ 5 V | — | semnal sonor la alarmă | Ceas |
10 | 3 × butoane tactile | 6 × 6 mm | navigare meniu | Ceas |
11 | Breadboard + fire | — | prototipare rapidă | ambele |
• RTC DS1307 – menține ora și data în mod precis, chiar și în absența alimentării principale (datorită bateriei ). Este conectat prin magistrala I2C:
Justificare: DS1307 comunică doar prin I2C, iar pe Arduino UNO, A4 și A5 sunt pinii dedicați I2C.
• OLED 0.96” (SSD1306) – afișează ora în mod digital și analog. Este conectat tot prin I2C:
Justificare: OLED-ul și RTC-ul partajează linia I2C, fiind compatibili și având adrese I2C diferite.
• Buzzer activ 5V – semnalizează sonor activarea alarmei:
Justificare: D7 este configurat ca pin digital de ieșire care activează buzzerul atunci când ora alarmei este atinsă.
• Butoane tactile (x3) – permit navigarea în meniul de configurare (Set Time / Set Alarm):
Justificare: butoanele sunt configurate cu INPUT_PULLUP, deci pinii sunt legați la GND pentru a înregistra o apăsare logică LOW.
• DHT11 – măsoară temperatura ambientală:
Justificare: D4 (GPIO2) este pin digital compatibil pentru citirea semnalului digital de la DHT11.
• Receptor IR (VS1838B) – primește semnale de la telecomanda IR:
Justificare: D5 este configurat ca pin de intrare pentru decodificarea semnalelor IR folosind biblioteca `IRremoteESP8266`.
• OLED 1.3” (SH1106) – afișează temperatura sau mesajul selectat:
Justificare: SDA și SCL sunt pinii standard I2C pe NodeMCU pentru OLED; I2C permite actualizare grafică rapidă și simplă.
Pentru implementarea funcționalităților am folosit biblioteci fiabile și compatibile cu microcontrolerele utilizate:
Bibliotecă | Rol în proiect | Justificare |
---|---|---|
RTClib | Citirea și scrierea timpului pe modulul RTC DS1307 | Ușor de folosit, compatibilă direct cu DS1307 și foarte bine documentată |
Adafruit_SSD1306 + Adafruit_GFX | Afișarea grafică a ceasului pe OLED 0.96” | Suportă text și forme grafice pentru reprezentarea ceasului analog |
GyverOLED | Afișaj pe OLED 1.3” cu driver SH1106 (ESP8266) | Rapidă, eficientă și optimizată pentru ESP8266 |
IRremote | Decodarea comenzilor IR de la telecomandă | Suportă protocoale populare (NEC, Sony etc.), ideală pentru ESP |
DHT | Citirea temperaturii de la senzorul DHT11 | Asigură timpi corecți de citire și stabilitate |
EEPROM | Salvarea alarmei și preferințelor între porniri | Permite păstrarea datelor în memoria internă a Arduino-ului |
Proiectul propus integrează în mod direct conceptele și funcționalitățile studiate în cadrul laboratoarelor, demonstrând aplicarea practică a noțiunilor teoretice în dezvoltarea unui sistem embedded interactiv. Tabelul de mai jos evidențiază principalele module hardware și tehnici utilizate, corelate cu implementarea din proiect:
Laborator | Funcționalitate | Aplicare practică în proiect |
---|---|---|
GPIO (General Purpose I/O) | Controlul pinilor digitali (INPUT/OUTPUT) | Configurarea butoanelor pentru navigarea prin meniu (`pinMode(4, 5, 6, INPUT_PULLUP)`) și controlul buzzerului prin pinul D7 (`digitalWrite`). |
UART (Serial Communication) | Comunicare serială între Arduino și PC | Inițializare și trimitere date prin `Serial.begin(9600)` și `Serial.println()` pentru testare și debug (ex: mesaje IR sau erori RTC). |
Întreruperi (fără delay) | Programare pe bază de evenimente, evitând `delay()` | Folosirea funcției millis() atât pentru actualizarea orei , cât și pentru citirea periodică a temperaturii , fără blocarea execuției. Acest lucru contribuie la un control fluid și receptiv în ambele module. |
Timer / PWM (Pulse Width Modulation) | Generarea semnalelor PWM pentru buzzer | Activarea buzzerului în timpul alarmei sau la apăsarea butoanelor, folosind un semnal PWM simplificat (`digitalWrite` pe pinul buzzerului). |
I2C (Inter-Integrated Circuit) | Comunicare serială sincronă cu mai multe dispozitive | Utilizarea magistralei I2C pentru conectarea simultană a modulului RTC DS1307 și a ecranelor OLED (0.96” și 1.3”), prin librăriile `Adafruit_SSD1306`, `GyverOLED`. |
Arhitectura proiectului este împărțită în două module hardware autonome, fiecare implementat printr-un sketch dedicat:
Interacțiunea între cele două module:
Testarea sistemului s-a realizat prin verificare practică, monitorizare continuă și comparare cu surse de referință. Rezultatele confirmă funcționarea corectă a componentelor hardware și a codului:
Pentru asigurarea preciziei datelor afișate și a fiabilității sistemului, fiecare senzor a fost calibrat și verificat astfel:
Pentru a îmbunătăți performanța și claritatea funcțiilor, au fost aplicate următoarele optimizări directe în codul proiectului:
Pentru o mai bună înțelegere a funcționării proiectului, am realizat două demonstrații video:
▶️ [https://drive.google.com/file/d/1IcjIhJSybZn36Gk-Nq22kOQmnmctzyUI/view?usp=sharing | Demonstrație inițială – Testare pe breadboard]
▶️ [https://drive.google.com/file/d/1WwQUFutX2TDG9qx4ybHrcaH8FPK8qCFA/view?usp=sharing | Demonstrație finală ]
Ambele demonstrații confirmă funcționalitatea proiectului, atât în faza de testare cât și în forma finală.
În urma realizării proiectului, au fost obținute următoarele rezultate concrete:
Aceste rezultate confirmă atingerea tuturor obiectivelor propuse inițial și demonstrează o integrare complet funcțională între hardware și software în cadrul unui proiect embedded modular.
Proiectul a permis aplicarea practică a cunoștințelor dobândite despre microcontrolere, afișaje grafice, senzori digitali și interfețe de control. Sistemul final rezultat este funcțional, modular, interactiv și oferă o experiență completă de utilizare, combinând:
Separarea funcționalităților între Arduino UNO și ESP8266 a simplificat gestionarea codului și a permis testarea independentă a fiecărui modul. De asemenea, utilizarea funcției `millis()` în locul `delay()` a contribuit semnificativ la fluiditatea interfeței.
Proiectul poate fi extins pe viitor cu funcții precum afișare pe web, notificări wireless sau integrare cu senzori suplimentari.
Perioada | Activități realizate |
---|---|
21–25 Aprilie | • Conceperea ideii generale de proiect (ceas + temperatură + alarmă) • Stabilirea structurii pe două microcontrolere (Arduino UNO + ESP8266) |
28 Aprilie – 2 Mai | • Crearea paginii de Wiki și introducerea conținutului general • Adăugare listă componente hardware și prima variantă de diagramă bloc |
5–9 Mai | • Realizare și testare afișaj ceas analog și digital pe OLED 0.96” • Implementarea RTC DS1307 și sincronizarea cu ora sistemului • Implementare meniu și navigare cu butoane (MENIU, UP, DOWN) |
12–16 Mai | • Adăugare și testare buzzer la activarea alarmei • Implementarea salvării în EEPROM a setărilor • Implementare afișare temperatură DHT11 pe OLED 1.3” cu ESP8266 |
19–23 Mai | • Adăugare receptor IR și integrare cu telecomandă (OK / #) • Comutare între afișaj text și temperatură cu IR • Validare funcționalități hardware |
24–26 Mai | • Finalizare documentație pe Wiki • Testare finală completă a ambelor module și capturi video |