Table of Contents

SmartMug Monitor

Introducere

Ce face: Proiectul este un suport inteligent care masoara temperatura lichidului in timp real. Afiseaza datele pe LCD si ma avertizeaza prin LED si buzzer cand bautura este prea fierbinte sau tocmai buna de consum. Un senzor LDR pune sistemul in repaus automat cand ridic cana.

Scopul: Vreau sa evit arsurile si situatiile in care uit bautura pe birou pana se raceste complet.

Ideea de pornire: In timpul orelor lungi de invatat imi pierdeam concentrarea si ajungeam sa beau cafeaua prea fierbinte sau complet rece.

Utilitate: SmartMug Monitor monitorizeaza constant starea bauturii. Astfel raman concentrat pe invatat si primesc alerte clare doar cand actiunea mea este necesara.

Descriere generală

Sistemul primeste curent printr un cablu micro USB direct din laptop. Creierul intregului montaj este placa de dezvoltare ATmega328P Xplained Mini care controleaza toate modulele pe care le am adaugat pe breadboard.

Pe partea de intrare folosesc un senzor analogic LM35 prins de exteriorul canii ca sa citesc temperatura si un senzor de lumina LDR pus sub cana. LDR ul detecteaza lumina din camera cand ridic cana de pe suport, iar microcontrolerul stie astfel sa opreasca alertele. Mai am si un buton push ca sa pornesc manual sistemul din starea de asteptare.

Pe partea de iesire am un ecran LCD 1602 cu modul I2C care imi afiseaza temperatura exacta si mesajele de stare. Mai folosesc un LED RGB care isi schimba culoarea in functie de cat de fierbinte e bautura si un buzzer pasiv care ma anunta cand pot sa beau in siguranta. Microcontrolerul ia datele de la senzori si decide in timp real ce sa scrie pe ecran si cum sa controleze lumina si sunetul.

Hardware Design

# Componenta Cantitate Rol
1 Placuta de dezvoltare ATmega328P Xplained Mini 1 Controlul sistemului si procesarea datelor
2 Modul senzor de temperatura LM35 1 Citirea valorilor termice de pe exteriorul canii
3 Modul senzor de lumina LDR 1 Detectarea ridicarii canii pentru oprirea alertelor
4 Modul buton switch 1 Activarea manuala a sistemului
5 Modul buzzer pasiv 1 Generarea avertizarilor sonore de tip PWM
6 Modul LED RGB 1 Semnalizarea vizuala a starilor de temperatura
7 Display LCD 1602 cu interfata I2C 1 Afisarea temperaturii si a mesajelor de stare
8 Set rezistente (utilizare 220 ohmi) 1 Protectia componentelor si limitarea curentului
9 Breadboard 400 puncte si fire jumper 1 Realizarea conexiunilor fizice intre module
10 Cablu date micro USB 1 Alimentarea si programarea microcontrolerului

Am finalizat montarea și cablarea tuturor componentelor pe breadboard și le-am conectat cu succes la placa ATmega328P Xplained Mini. Din punct de vedere fizic, prototipul este complet asamblat, iar toate legăturile electrice sunt sigure.

Codul rulează stabil pe microcontroler, realizând achiziția automată de date de la senzori și gestionarea alertelor. Sistemul reacționează instantaneu la modificările din mediu: ecranul LCD își actualizează valorile în timp real, LED-ul RGB își schimbă culorile în funcție de temperatură, buzzerul emite semnalele sonore setate, iar butonul push și senzorul LDR controlează corect stările de funcționare și repaus.

Componentele folosite și rolul lor în proiect:

*Plăcuța ATmega328P Xplained Mini*: Reprezintă creierul întregului montaj. Colectează datele trimise de senzori, rulează algoritmul de control în timp real și comandă ecranul, buzzerul și culorile luminoase.

*Senzor de temperatură LM35* (Conectat la pinul PC0): Se fixează pe exteriorul cănii pentru a citi temperatura lichidului în mod constant și pentru a trimite alerte dacă băutura este prea fierbinte sau dacă s-a răcit.

*Modul senzor de lumină LDR* (Conectat la pinul PC1): Se poziționează direct sub cană. Detectează lumina din cameră în momentul ridicării cănii de pe suport și transmite microcontrolerului comanda de oprire imediată a alertelor sonore. Buton push switch (Conectat la pinul PD2): Funcționează ca un comutator manual de siguranță. Oferă posibilitatea de a opri complet monitorizarea sau de a trezi sistemul instantaneu din starea de repaus.

*Display LCD 1602 cu modul I2C* (Conectat la pinii PC4 / SDA și PC5 / SCL): Afișează temperatura exactă în grade Celsius și mesaje clare de stare privind starea băuturii.

*Modul buzzer pasiv* (Conectat la pinul PB1): Emite sunete scurte sau alarme pe frecvențe diferite pentru a atrage atenția în timpul orelor lungi de învățat.

*LED RGB* (Conectat la pinii PD3, PD5 și PD6): Își schimbă culoarea dinamic pentru a indica starea băuturii dintr-o privire, fără a fi necesară citirea ecranului (Roșu pentru fierbinte, Verde pentru gata de băut și Albastru pentru rece).

*Set rezistențe de 220 ohmi*: Sunt montate în serie pe firele LED-ului RGB pentru a limita curentul electric și pentru a proteja pinii plăcuței de dezvoltare. Breadboard și fire jumper: Asigură realizarea tuturor legăturilor fizice și distribuirea alimentării de la placă către restul modulelor.

Ce pini folosesc pentru fiecare componentă și de ce:

*Pinul PC0* (Analog 0) → Senzorul LM35: Destinat citirii semnalului analogic de tensiune trimis de senzor. Portul C este legat direct la convertorul analog-digital (ADC) al plăcuței, fiind singura modalitate de a transforma variația de tensiune în grade Celsius.

*Pinul PC1* (Analog 1) → Modulul LDR: Ales tot pentru funcția hardware ADC de pe Portul C, necesară pentru a măsura și traduce variațiile de lumină sub formă de numere în intervalul 0 - 1023.

*Pinul PD2* → Butonul Push: Dispune de o funcție hardware dedicată numită întrerupere externă (INT0). Permite oprirea instantanee a restului de cod la apăsarea butonului, fără ca această comandă să fie blocată sau întârziată de pauzele (delay) din programul principal.

*Pinul PB1* → Buzzerul Pasiv: Reprezintă pinul hardware dedicat OC1A, conectat la timerul intern al plăcii. Permite generarea unor frecvențe audio curate prin funcția tone, fără a încărca procesorul cu calcule suplimentare.

*Pinii PD3, PD5 și PD6* → LED-ul RGB: Dispun de funcție hardware PWM (Pulse Width Modulation). Permit variația fină a tensiunii de ieșire pentru a controla intensitatea fiecărei culori în parte (Roșu, Verde, Albastru) și pentru a obține nuanțe curate.

*Pinii PC4 (SDA) și PC5 (SCL)* → Display-ul LCD: Reprezintă liniile dedicate pentru protocolul de comunicare serială I2C. Permit controlul complet și transmiterea datelor către ecranul LCD folosind doar două fire, economisind restul pinilor digitali ai plăcuței.

Software Design

Stadiul implementarii software

Codul este finalizat si functional pe placa. Programul citeste senzorii continuu, proceseaza datele si actualizeaza LCD ul, LED ul si buzzerul in timp real.

Motivatia bibliotecilor

Wire.h: Necesara pentru initierea comunicatiei I2C. LiquidCrystal I2C.h: Simplifica controlul ecranului prin comenzi directe, eliberand codul de manipularea manuala a registrilor.

Functionalitati din laborator

ADC: Transforma tensiunea analoaga de la senzorii LM35 si LDR in valori numerice. Intreruperi Externe: Butonul foloseste un pin de intrerupere pentru a pune sistemul pe pauza instantaneu, blocand restul codului. PWM si Timere: Controleaza intensitatea culorilor LED ului RGB si genereaza frecventele audio pentru buzzer. I2C: Asigura comunicatia cu ecranul LCD folosind doar doua fire de date SDA si SCL.

Scheletul proiectului

Functia setup initializeaza pinii si intreruperea. Functia loop verifica intai starea butonului. Apoi citeste LDR ul pentru a detecta cana. Daca sistemul e activ, face 10 citiri succesive pentru temperatura si afiseaza media. Peste 32 de grade activeaza alarma si aprinde rosu. Intre 25 si 32 de grade emite un bip si aprinde verde. Sub 25 de grade aprinde albastru.

Calibrarea senzorilor

LDR: Calibrare empirica prin Serial Monitor. Valorile citite au fost peste 100 in lumina si 20 in intuneric cu cana pusa. Pragul din cod a fost setat la 80. LM35: Calibrare matematica. Valoarea ADC este convertita in temperatura calculand raportul la referinta de 5000mV a placii, senzorul oferind 10mV per grad Celsius.

Optimizari realizate

Optimizare ADC contra zgomotului electric: Am implementat o mediere software din 10 citiri consecutive la distanta de 10 milisecunde pentru a stabiliza temperatura afisata. Optimizare buton prin debouncing: Am creat un filtru software folosind functia millis care ignora automat fluctuatiile mecanice ale contactelor timp de 250 de milisecunde dupa apasare.

Justificarea utilizarii functionalitatilor din laborator

Ca sa fac ideea sa mearga, m am folosit de mai multe concepte invatate practic:

Convertorul Analog Digital (ADC): Il folosesc constant ca sa citesc voltajul de la senzorul de temperatura LM35 si de la cel de lumina LDR, transformand tensiunea in valori numerice pe care sa le pot prelucra matematic.

Intreruperi Externe: Am legat butonul fix pe un pin de intrerupere hardware. E super util pentru ca, indiferent ce instruciuni se executa in acel moment, cand apas butonul procesorul declanseaza intreruperea si imi opreste monitorizarea instantaneu.

Semnale PWM si Timere: Ca sa controlez cat de tare si in ce culoare se aprinde LED ul RGB, am folosit pinii de PWM hardware. Modific factorul de umplere din cod si obtin fix nuanta de care am nevoie pentru temperatura curenta. Tot cu timerele interne generez si notele audio pentru buzzer.

Comunicatia I2C: A fost esentiala ca sa leg ecranul la placa folosind doar 2 fire de date (SDA si SCL), economisind o groaza de pini pentru restul pieselor.

Explicarea scheletului proiectului

Structura codului are cele doua functii clasice, setup() si loop(), plus o functie separata numita schimba_stare() pentru intreruperea butonului. In setup() fac setarile initiale pentru pini, pornesc ecranul si atasez intreruperea. In loop() se intampla toata logica: prima data codul verifica daca am oprit manual sistemul din buton. Daca e pornit, verifica senzorul LDR sa vada daca am cana pe suport. Daca este acolo, face o medie din 10 citiri ale temperaturii ca sa am o valoare curata, fara zgomot. Valoarea asta ajunge pe ecran, iar printr un set de decizii aprind LED ul si buzzerul: peste 60 de grade da alarma si se face rosu, intre 40 si 60 de grade da un bip scurt de confirmare si se face verde, iar sub 40 se face albastru.

Rezultate Obţinute

Tot sistemul a fost validat direct pe birou, testandu l cu o cana de apa fierbinte. Elementul de noutate, adica detectia contextului prin senzorul LDR, functioneaza perfect: cand am ridicat cana, totul s a stins instantaneu, exact cum mi am propus ca sa nu ma deranjeze alertele in timp ce beau.

Cand am lasat cana pe suport, am vazut cum temperatura crestea pe ecran, LED ul s a facut rosu si a pornit alarma. Cand apa a coborat sub 60 de grade, sistemul a comutat instantaneu pe verde cu mesajul “Gata de baut”. Toate modulele hardware interactioneaza impecabil cu logica scrisa.

Concluzii

Proiectul si a atins scopul initial suta la suta. Am reusit sa construiesc un dispozitiv practic care imi rezolva problema cu bautul cafelei reci in timpul invatatului. Dincolo de utilitatea lui pe biroul meu, proiectul m a ajutat sa inteleg mult mai clar cum se leaga partea teoretica de programare a registrilor cu piesele fizice pe care pui mana, in special lucrul cu intreruperile hardware si traductoarele analogice.

Download

smartmug.zip

Jurnal

Saptamana 1: Alegerea ideii de proiect pe baza unei nevoi personale. Comandarea pieselor si documentarea pe datasheet uri pentru pinii de la ATmega328P.

Saptamana 2: Realizarea conexiunilor hardware pe breadboard. Testarea individuala a ecranului I2C si a butonului de push.

Saptamana 3: Scrierea codului principal. Integrarea senzorului de temperatura LM35 si a modulului LDR. Reglarea factorului de umplere PWM pentru culorile LED ului RGB.

Saptamana 4: Testarea finala a sistemului pe birou cu o cana reala. Fixarea debouncing ului la buton, calibrarea senzorului LDR la lumina din camera mea si redactarea documentatiei de laborator.

Bibliografie/Resurse

Instrument generare diagrame: Mermaid (pentru diagrama de flux logic a sistemului)

Proiectare circuit și schemă electrică: tinkercad (pentru vizualizarea conexiunilor hardware)

Datasheet ATmega328P: Documentația oficială pentru identificarea pinilor ADC, PWM și a întreruperilor hardware