SmartThermo – Termometru Smart cu Afișaj, Alertă și Răcire

Nume: Luca Plian
Grupa: 332CA

Introducere

SmartThermo este un proiect creat cu scopul de a transforma citirea temperaturii dintr-un proces simplu și abstract într-o experiență multisenzorială — vizuală, mecanică și sonoră. Cu ajutorul LED-urilor RGB, a unui servo care mimează mișcarea mercurului dintr-un termometru clasic, a unui afișaj LCD, a unui ventilator care se activează automat, a unui buzzer de avertizare pentru praguri critice, dar și a unui modul RTC care resetează zilnic valorile minime și maxime. În plus, două butoane adaugă funcționalitate suplimentară: unul oprește alerta sonoră, iar celălalt comută între afișajul temperaturii curente și informațiile despre data curentă și valorile extreme.

Ideea proiectului a pornit dintr-o nevoie personală: am observat că atunci când temperatura din cameră crește, îmi scade semnificativ capacitatea de concentrare. Astfel, am vrut să creez un sistem care să reacționeze automat la variațiile de temperatură — fără să fie nevoie de intervenția mea.

Funcționalități principale

  • LED RGB care indică vizual temperatura prin culoare
  • Servomotor care poziționează un indicator proporțional cu temperatura
  • LCD I²C care afișează valorile, mesaje și data curentă
  • Ventilator care pornește automat la temperaturi ridicate
  • Buzzer care avertizează sonor la depășirea unui prag critic
  • Modul RTC care resetează automat valorile minime și maxime zilnic
  • Două butoane: unul pentru oprirea alertei sonore, celălalt pentru afișarea informațiilor suplimentare

Descriere generală

Proiectul folosește o plăcuță compatibilă cu Arduino Uno R3 care conține procesorul ATMega328P conectată la un senzor de temperatură digital DS18B20, cu rezistor pull-up de 4.7 kΩ. În funcție de valoarea obținută, LED-ul RGB (catod comun) își schimbă culoarea, un servomotor SG90 mișcă un indicator printr-un mecanism tip crank-slider, iar valorile sunt afișate pe un LCD I²C 1602. Dacă temperatura depășește un prag setat, un ventilator de 5V pornește automat pentru răcire activă. Ventilatorul este controlat cu ajutorul unui tranzistor NPN 2N2222A, protejat cu o diodă flyback 1N4007 și un rezistor de bază. De asemenea, un buzzer activ este declanșat acustic când se atinge un prag critic. Un modul RTC DS3231 resetează valorile minime și maxime zilnic, iar două butoane adaugă funcționalități precum}} comutarea între moduri de afișaj și dezactivarea buzzerului.

Toate componentele sunt montate pe breadboard și conectate cu fire Dupont.

Schema bloc

Hardware Design

Componente utilizate:

  • Arduino Uno R3 (ATMega328P + ATmega16U2)
  • Senzor de temperatură digital DS18B20
  • Modul LED RGB
  • Modul RTC DS3231
  • 2 x Butoane tactil
  • LCD 1602 cu interfață I²C și backlight albastru
  • Breadboard (750 puncte)
  • Fire Dupont (M-M, M-T, T-T)
  • Băț de plastic (indicator)
  • Tijă subțire
  • Ventilator 5V
  • Buzzer activ
  • Tranzistor NPN 2N2222A
  • Diodă 1N4007
  • Condensator de 100 µF
  • Rezistor 220 Ω

Laboratoare relevante

  • Lab 0 - GPIO: Configurarea pinilor digitali pentru LED RGB, servo, buzzer și controlul ventilatorului
  • Lab 3 - PWM: Control servo și LED RGB prin semnale PWM
  • Lab 6 - I²C: Comunicarea cu LCD-ul 16×2 prin magistrala I²C

Software Design

Mediu de dezvoltare: Arduino IDE (C/C++)

Librării utilizate:

  • OneWire.h – senzor temperatură 1-Wire
  • DallasTemperature.h – citire temperatură
  • Wire.h – I²C
  • LiquidCrystal_I2C.h – afișaj LCD I²C
  • Servo.h – servo
  • DS3232RTC.h – ceas RTC
  • Streaming.h – Serial « text
  • Time.h / TimeLib.h – dată și oră

Algoritmi și funcții:

  • Afișarea temperaturii curente și a mesajelor corespunzătoare pe LCD
  • Selectarea dinamică a culorii LED-ului RGB pe baza pragurilor de temperatură
  • Mișcarea servomotorului proporțional cu temperatura măsurată (simulare mercur)
  • Controlul ventilatorului prin tranzistor în funcție de temperatură
  • Controlul buzzer-ului (cu mod silențios activabil prin buton)
  • Resetarea automată a valorilor maxime și minime la ora 00:00 folosind RTC
  • Navigare între afișajele LCD (temp curentă / max / min / dată) prin al doilea buton
  • Implementare de debounce software simplificat pentru cele două butoane
  • Utilizare `tone()` pentru avertizare sonoră periodică
  • Calibrare temperatură și rotire servomotor la valori realiste folosind formule proporționale

Hardware Design

Lista de componente (Bill of Materials)

Componentă Model / Detalii Conectare la Arduino UNO Observații
Arduino UNO R3 ATmega328P - Placă principală
DS18B20 Senzor digital temperatură D8, VCC, GND Necesită rezistor de 4.7kΩ între PWM și VCC
Rezistor pull-up 4.7kΩ Între PWM8 și VCC Asigură funcționarea corectă a protocolului 1-Wire
Modul LED RGB RGB, catod comun D9 (B), D10 (G), D11 (R) Control culoare prin PWM
Servomotor SG90 SG90 90° D6 (PWM), VCC, GND Mișcare indicator termometru
Ventilator 5V DC, 3 fire VCC, GND, control prin tranzistor Răcire automată
Tranzistor NPN 2N2222A Bază → A3, Emitor → GND, Colector → GND fan Control ON/OFF pentru ventilator
Diodă flyback 1N4007 Între VCC și GND ventilator Protejează de tensiuni inverse
Condensator 100 µF Între VCC și GND ventilator Filtrare și stabilizare
Rezistor bază 330Ω Între A3 și baza tranzistorului Limitare curent
Buzzer activ Modul simplu A1, GND Alertă acustică
LCD 1602 I²C Afișaj I2C SDA → A4, SCL → A5 Afișează temperatura și stare
Modul RTC DS3231 Real Time Clock SDA → A4, SCL → A5, VCC, GND Pinurile SQW și 32K NU sunt folosite
Buton 1 Tact switch D4, GND Activare mod informații LCD
Buton 2 Tact switch D7, GND Activare / Dezactivare buzzer (mod silențios)

Stadiul actual al implementării:

Până în acest moment, am conectat și testat cu succes următoarele componente hardware: senzorul de temperatură DS18B20, LED-ul RGB, servomotorul MG90, buzzer-ul și un ventilator de 5V, care este controlat printr-un tranzistor NPN și un condensator de 100 µF pentru stabilizarea alimentării. De asemenea, afișajul LCD I²C funcționează corespunzător și afișează temperatura în timp real.

Servomotorul este utilizat pentru a mișca un indicator din plastic într-un mecanism de tip crank-slider, simulând urcarea sau coborârea „mercurului” dintr-un termometru clasic, în funcție de temperatura măsurată. Acesta funcționează corespunzător, răspunzând la variațiile de temperatură.

Sistemul reacționează dinamic: dacă temperatura crește peste un prag definit, se activează ventilatorul pentru răcire activă, iar buzzer-ul emite un semnal sonor de avertizare.

Schematic:

Schema electrică prezintă conexiunile dintre componentele proiectului. Pentru a evita aglomerarea și suprapunerile vizuale ale firelor, unele conexiuni nu au fost trasate direct, fiind înlocuite cu etichete explicative (în paranteze), care indică pinul de ieșire corespunzător.

Poze:

Pozele sunt cu scopul de a arată funcționare dispozitivului

Video: https://youtube.com/shorts/4BHMPG3DN1A?si=zHZJEK0EK-5zXnsQ

Rezultate Obținute

În urma implementării proiectului SmartThermo, sistemul funcționează stabil și îndeplinește toate funcționalitățile propuse:

  • Temperatura este măsurată precis cu senzorul DS18B20 și afișată pe LCD în timp real.
  • LED-ul RGB indică vizual temperatura: culori reci pentru temperaturi joase și culori calde pentru temperaturi ridicate.
  • Servomotorul acționează corect indicatorul de plastic, simulând coloana de mercur a unui termometru clasic.
  • Ventilatorul pornește automat la temperaturi ridicate și se oprește sub pragul definit.
  • Buzzer-ul semnalizează sonor depășirea pragului critic de temperatură.
  • Modulul RTC (DS3231) permite resetarea automată a valorilor maxime și minime ale temperaturii la începutul fiecărei zile.
  • Primul buton permite oprirea buzzer-ului manual, în cazul unei alerte continue.
  • Al doilea buton schimbă afișajul LCD pentru a arăta:
    • temperatura maximă înregistrată în ziua curentă
    • temperatura minimă
    • data curentă

Concluzii

Proiectul SmartThermo demonstrează cum o combinație de componente accesibile și logică bine structurată poate duce la realizarea unui sistem complet de monitorizare și reacție la temperatură. Dispozitivul funcționează în mod autonom, oferind utilizatorului o experiență clară și intuitivă prin afișare, semnale vizuale, acustice și mecanice.

Folosirea unui LED RGB pentru feedback vizual, a unui servomotor pentru simularea termometrului clasic și a unui LCD pentru afișarea valorilor în timp real transformă o funcționalitate simplă într-o interfață prietenoasă și educativă. Integrarea ventilatorului și a buzzerului oferă răspuns automat la condiții de temperatură ridicată, iar modulul RTC asigură gestionarea corectă a valorilor pe termen lung. Cele două butoane oferă un nivel suplimentar de control și personalizare a interacțiunii.

Jurnal

Prima modificare importantă a fost adăugarea unui ventilator controlat automat cu ajutorul unui tranzistor NPN, pentru a activa un mecanism de răcire în cazul temperaturilor ridicate. Ulterior, am înlocuit senzorul analogic LM35 cu DS18B20, un senzor digital care oferă măsurători mai precise și mai stabile.

Pentru o interfață mai intuitivă, am integrat un afișaj LCD I²C, care afișează temperatura în timp real și mesaje contextuale. Am adăugat apoi două butoane: unul pentru a comuta între afișarea temperaturii curente și a altor informații (dată, temperaturi maxime și minime), iar celălalt pentru a dezactiva alerta sonoră (buzzer-ul) în modul silențios.

O contribuție semnificativă a fost integrarea unui modul RTC DS3231, care permite resetarea automată a valorilor maxime și minime ale temperaturii în fiecare zi la ora 00:00, oferind o funcționalitate suplimentară de tip jurnal zilnic.

Proiectul a fost testat în mai multe etape, optimizat pentru funcționare continuă, iar integrarea s-a realizat treptat, cu atenție la alimentare și la stabilitatea software-ului. La final, toate componentele funcționează armonios, iar sistemul este gata de prezentare.

Download

proiect_pm_luca_plian2.zip

  • proiect_pm_luca_plian.ino - Cod sursă Arduino (.ino)
  • proiect_pm_final.kicad_sch - Schema electrică (.kicad_sch)
  • README_proiect.md - Fișier README (.md)

Bibliografie / Resurse

pm/prj2025/mdinica/luca.plian.txt · Last modified: 2025/05/28 23:33 by luca.plian
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0