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/16 17:55]
andrei.cotiga [Hardware Design]
pm:prj2026:alexandru.predescu:philip.agapie [2026/05/23 23:24] (current)
andrei.cotiga [Descriere generală]
Line 1: Line 1:
-====== SmartMug Monitor ======+===== SmartMug Monitor ======
 ===== Introducere ===== ===== Introducere =====
  
Line 17: Line 17:
 ===== Descriere generală ===== ===== Descriere generală =====
  
 +{{:​pm:​prj2026:​alexandru.predescu:​blocagapi2.jpeg?​600|}}
  
-Descriere generala 
 Sistemul primeste curent printr un cablu micro USB direct din laptop. Creierul intregului montaj este placa de 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. dezvoltare ATmega328P Xplained Mini care controleaza toate modulele pe care le am adaugat pe breadboard.
Line 47: Line 47:
  
  
-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.+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.+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:+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.+*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.+*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.+*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.+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.+*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.+*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).+*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.+*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.+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:+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 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 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 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.+*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.
  
-**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:​poza1ag.jpeg?​600|}}
 {{:​pm:​prj2026:​alexandru.predescu:​poza2ag.jpeg?​600|}} {{:​pm:​prj2026:​alexandru.predescu:​poza2ag.jpeg?​600|}}
 {{:​pm:​prj2026:​alexandru.predescu:​poza3ag.jpeg?​600|}} {{:​pm:​prj2026:​alexandru.predescu:​poza3ag.jpeg?​600|}}
- 
 ===== Software Design ===== ===== 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 ===== ===== 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 ===== ===== 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 ===== ===== Download =====
  
 +{{:​pm:​prj2026:​alexandru.predescu:​smartmug.zip|}}
 ===== Jurnal ===== ===== 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 ===== ===== 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.1778943323.txt.gz · Last modified: 2026/05/16 17:55 by andrei.cotiga
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