Ceas inteligent cu alarmă și senzori de mediu
Introducere
Proiectul meu constă în realizarea unui ceas electronic multifuncțional care îmi va oferi informații despre ora curentă, data calendaristică, temperatura mediului înconjurător și funcționalitate de alarmă.
Ce face: Afișează ora, data, temperatura, permite setarea orei/datei, a formatului de afișare 12/24 ore și a unei alarme programabile, care alege random dintr-o serie de melodii cum sa sune.
Scop: Crearea unui dispozitiv funcțional, independent, care combină elemente hardware și software pentru a oferi funcționalitățile unui ceas digital modern, demonstrând în același timp capacitatea de integrare a diferitelor tehnologii și protocoale de comunicație.
Ideea de pornire: Totul a început din nevoia de a avea un ceas digital în cameră, dar cu funcționalități extinse.
Utilitate: Acest proiect rezolvă problema dependenței de telefon pentru verificarea orei și a temperaturii. Mulți dintre noi ne uităm la telefon înainte de culcare și dimineața, ceea ce poate afecta somnul și concentrarea. Ceasul meu oferă aceste informații esențiale fără distragerea atenției și tentația de a verifica notificările sau social media. În plus, funcția de alarmă personalizabilă îmbunătățește rutina zilnică, fiind adaptată nevoilor specifice ale utilizatorului, spre deosebire de soluțiile comerciale care oferă opțiuni limitate.
Descriere generală
Funcționalități:
Afișarea și setarea orei
Ora curentă este obținută de la modulul RTC și afișată pe ecranul LCD.
Formatul orei poate fi setat în mod 12 ore (AM/PM) sau 24 ore prin intermediul butoanelor.
Setarea orei se face prin intermediul celor trei butoane.
Afișarea datei și a temperaturii
Data calendaristică este obținută de la modulul RTC și afișată pe ecranul LCD.
Temperatura este citită de la senzorul DHT22 și afișată pe ecranul LCD.
Actualizarea informațiilor se face automat la intervale regulate de timp.
Sistem de alarmă programabil
Setarea alarmei se face prin interfața cu butoane, permițând configurarea orei exacte.
Semnalul sonor este generat de buzzer atunci când ora curentă coincide cu ora alarmei.
Interfață cu utilizatorul
Navigare prin meniuri folosind butoanele pentru setarea diverselor parametri.
Feedback vizual prin intermediul LED-urilor pentru confirmarea acțiunilor.
Laboratoare folosite:
Laboratorul 0 (GPIO) - utilizat pentru configurarea butoanelor și LED-urilor, formând interfața fizică prin care utilizatorul interacționează cu ceasul pentru setarea orei și alarmei.
Laboratorul 2 (Întreruperi) - implementate pentru detectarea apăsărilor butoanelor cu funcționalitate de debounce, asigurând o citire precisă a comenzilor utilizatorului și pentru declanșarea alarmei la momentul programat.
Laboratorul 4 (ADC) - folosit pentru citirea valorilor de la senzorul de temperatură și convertirea lor în valori de temperatură afișabile pe ecran.
Laboratorul 6 (I2C) - utilizat pentru comunicarea cu modulul RTC și cu ecranul LCD I2C, permițând transferul eficient al datelor.
Module Hardware:
Unitate de procesare - Arduino UNO bazat pe microcontrollerul ATmega328p
Afișare - Display LCD cu interfață I2C pentru afișarea informațiilor
Cronometrare precisă - Modul RTC (Real-Time Clock) DS1307 pentru menținerea timpului
Senzori - Senzor de temperatură DHT22 pentru măsurarea parametrilor de mediu
Interfață utilizator - Trei butoane pentru setarea orei, datei și controlul alarmei
Feedback - Buzzer pentru alarmă și LED-uri pentru indicatori vizuali
Alimentare - Baterie/acumulator pentru funcționare independentă
Module Software:
Control display - Gestionarea afișării informațiilor pe LCD
Procesare timp - Citirea și procesarea datelor de la modulul RTC
Interfață utilizator - Interpretarea intrărilor de la butoane și actualizarea stării sistemului
Managementul temperaturii - Citirea și procesarea datelor de la senzorul de temperatură
Sistem alarmă - Gestionarea alarmei programabile
Management energetic - Optimizarea consumului de energie
Interacțiunea între module se realizează astfel:
Microcontrollerul comunică cu RTC și LCD-ul prin protocolul I2C
Senzorii și butoanele sunt interfațate prin pini
Modulul de procesare timp actualizează periodic informațiile afișate pe display
Interfața utilizator interpretează apăsările butoanelor și modifică setările
Sistemul de alarmă verifică continuu ora curentă și declanșează alarma la momentul programat
Schema bloc:
Hardware Design
Listă de componente:
Arduino UNO - Unitatea centrală de procesare
Display LCD I2C (16×2 caractere) - Afișarea informațiilor
Modul RTC - Menținerea timpului precis
Senzor de temperatură - Măsurarea temperaturii ambientale
Buzzer Activ - Sonerie pentru alarmă
Butoane tactile - Interfața utilizator pentru setări
Breadboard
Fire de conexiune - Realizarea conexiunilor
Rezistențe 330Ω - Limitare curent pentru LED-uri
Rezistențe 4.7kΩ - Pull-up pentru butoane
LED-uri cu catod comun (verde, roșu) - Indicatori vizuali
Schema electrica realizata in fusion
Componentele hardware conectate
!!! In cadrul schemei am folosit o baterie pentru alimentare, iar proiectul momentan este alimentat prin intermediul laptopului.
Proiectul cu tot cu carcasa
Software Design
Mediu de dezvoltare utilizat
Aplicația este scrisă în Arduino C++. Mediul de dezvoltare folosit este Arduino IDE.
Librării și surse third-party utilizate
Aplicația folosește mai multe librării externe:
Wire.h - Comunicație I2C. Folosită pentru a comunica cu modulul RTC și LCD.
RTClib.h - Parte din Adafruit RTClib, pentru lucrul cu modulul RTC DS3231 si permite obținerea și setarea timpului.
LiquidCrystal_I2C.h - Pentru afișaj LCD 16×2 cu interfață I2C si permite afișarea textului fără control direct al pinilor LCD.
DHT.h - Pentru lucrul cu senzorul DHT22 (temperatură și umiditate).
Algoritmi și structuri implementate
Afișare oră, dată, temperatură
Se utilizează modulul RTC (rtc.now()).
Se afișează în format 12h sau 24h, configurabil.
Afișare temperatură obținută de la DHT22.
Moduri de operare prin buton multifuncțional (buttonModeAlarmPin) - Toggle între moduri:
Modul normal
Modul de setare alarmă
Modul de setare dată
Comutare între 12h și 24h
Setarea orei și alarmei cu 3 butoane separate:
buttonHourPin – modifică ora
buttonMinutePin – modifică minutul
buttonSecondPin – modifică secunda
Verificare alarmă (checkAlarm())
Compară ora actuală cu valorile setate.
Dacă sunt egale și alarma este activată → se pornește o melodie și un LED.
Alarma
Redă o melodie aleatorie din 3 variante (Twinkle Star, Happy Birthday, Jingle Bells).
Se folosește tone() pe pinul buzzer.
LED-ul pentru alarmă clipește sincron cu notele.
Se poate opri manual cu un buton.
Setarea datei
Anti-rebound pentru butoane
STRUCTURA GENERALĂ A CODULUI
Firmware-ul este structurat astfel:
Inițializare componente hardware și variabile globale
Loop principal (loop()): gestionează modurile de funcționare
Funcții de afișare (LCD)
Funcții pentru setarea timpului/datei/alarmei
Funcții pentru alarmă (sunet și LED)
Funcții auxiliare (conversii, formate, ani bisecți etc.)
Rezultate Obţinute
În urma implementării proiectului, am obținut un sistem funcțional care îndeplinește următoarele cerințe:
🔹 Afișarea corectă a orei, datei și temperaturii pe un ecran LCD 16×2 cu interfață I2C;
🔹 Comutare între format 12h și 24h pentru ora afișată;
🔹 Setare manuală a datei și a alarmei folosind 4 butoane;
🔹 Alarmă activă cu melodii aleatorii redată printr-un buzzer și semnalizată vizual printr-un LED;
🔹 Funcție de oprire a alarmei prin apăsarea unui buton dedicat;
🔹 Feedback vizual pe ecran pentru fiecare mod de funcționare, inclusiv modul de setare a alarmei și datei;
🔹 Implementarea corectă a debounce-ului software pentru a preveni multiple declanșări false ale butoanelor;
🔹 Trecerea automată între moduri (afișare, setare alarmă, setare dată) printr-un buton multifuncțional.
Link videoclip youtube:
https://youtube.com/shorts/8U7rqjtlfug?si=eXz-076XvNCoucfd
(In cadrul acestui videoclip, proiectul nu se afla la varianta lui finala, intre timp am modificat modalitatea de a suna a buzzerului. I-am adăugat acestuia posibilitatea de a suna cu una din trei melodii alese de mine pe frecvente, frecvente care se transmit și către led astfel încât să clipească concomitent cu ritmul melodiei. )
Concluzii
Download
Jurnal
🔹 Configurare inițială
Am început cu conectarea componentelor principale: modulul RTC DS3231, senzorul de temperatură DHT22, LCD-ul I2C și butoanele. Am întâmpinat dificultăți în conectarea firelor pe breadboard – unele jumpere nu făceau contact corect, iar alimentarea era instabilă. A fost nevoie să schimb mai multe fire pentru a obține conexiuni stabile.
🔹 Probleme hardware neașteptate
Am ars un LED (care semnala activarea alarmei) deoarece l-am conectat fără rezistență de limitare. A fost o lecție bună privind protejarea componentelor și calculul corect al curentului. Am înlocuit componenta și am inclus un rezistor de 220Ω.
🔹 Debugging RTC
Inițial, ora nu se seta corect. După mai multe încercări de a regla ora din cod, am descoperit că bateria de backup de pe modulul RTC era descărcată. După ce am înlocuit-o, modulul a început să rețină corect ora și data, chiar și după resetări.
🔹 Implementare alarmă și testarea sunetului
Am integrat partea de alarmă și redare melodii. A fost o provocare sincronizarea buzzerului cu LED-ul și testarea fără a deranja vecinii. De asemenea, m-am asigurat că oprirea alarmei funcționează fiabil – adăugând debounce corect pentru buton.
🔹 Finalizare și testare completă
Am testat toate scenariile: schimbarea orei, comutare 12h/24h, afișare temperatură, setarea și declanșarea alarmei. Toate funcțiile au fost verificate și funcționează stabil. Am făcut și un mic stres-test, simulând resetări și reporniri pentru a verifica persistența funcționării RTC-ului.
Bibliografie/Resurse