Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:alexandru.predescu:philip.agapie [2026/05/09 17:56]
alexandru.predescu created
pm:prj2026:alexandru.predescu:philip.agapie [2026/05/23 23:24] (current)
andrei.cotiga [Descriere generală]
Line 1: Line 1:
-TODO+===== 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ă ===== 
 + 
 +{{:​pm:​prj2026:​alexandru.predescu:​blocagapi2.jpeg?​600|}} 
 + 
 +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. 
 + 
 + 
 +{{:​pm:​prj2026:​alexandru.predescu:​poza1ag.jpeg?​600|}} 
 +{{:​pm:​prj2026:​alexandru.predescu:​poza2ag.jpeg?​600|}} 
 +{{:​pm:​prj2026:​alexandru.predescu:​poza3ag.jpeg?​600|}} 
 +===== 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 ===== 
 + 
 +{{:​pm:​prj2026:​alexandru.predescu:​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
pm/prj2026/alexandru.predescu/philip.agapie.1778338585.txt.gz · Last modified: 2026/05/09 17:56 by alexandru.predescu
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