This shows you the differences between two versions of the page.
|
pm:prj2026:alexandru.predescu:philip.agapie [2026/05/09 19:24] andrei.cotiga |
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 ===== | ||
| - | Ce face: | + | Ce face: Proiectul este un suport inteligent care masoara temperatura lichidului in timp real. Afiseaza datele pe LCD si |
| - | Proiectul reprezinta un suport de cana inteligent. Acesta masoara temperatura lichidului in timp real si ma avertizeaza | + | ma avertizeaza prin LED si buzzer cand bautura este prea fierbinte sau tocmai buna de consum. Un senzor LDR pune |
| - | atat atunci cand bautura este prea fierbinte cat si atunci cand a ajuns la temperatura optima de consum. | + | sistemul in repaus automat cand ridic cana. |
| - | Care este scopul lui: | + | Scopul: Vreau sa evit arsurile si situatiile in care uit bautura pe birou pana se raceste complet. |
| - | Vreau sa evit situatiile neplacute in care ma ard cu lichide fierbinti sau in care ajung sa consum cafeaua complet rece | + | |
| - | din cauza neglijentei. | + | |
| - | Care a fost ideea de la care am pornit: | + | Ideea de pornire: In timpul orelor lungi de invatat imi pierdeam concentrarea si ajungeam sa beau cafeaua prea fierbinte |
| - | Am observat ca in timpul sesiunilor de studiu pierd notiunea timpului si fie incerc sa beau ceaiul prea repede | + | sau complet rece. |
| - | provocandu mi arsuri fie il uit pe birou pana cand devine imbuvabil. | + | |
| - | De ce este util: | + | Utilitate: SmartMug Monitor monitorizeaza constant starea bauturii. Astfel raman concentrat pe invatat si primesc alerte |
| - | SmartMug Monitor asigura siguranta utilizatorului si elimina risipa de resurse prin monitorizare automata. Pot ramane | + | clare doar cand actiunea mea este necesara. |
| - | concentrat pe sarcini deoarece primesc alerte vizuale prin LED RGB care indica starile critice de temperatura si o | + | |
| - | alerta sonora cand lichidul este sigur pentru consum. | + | |
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| + | {{:pm:prj2026:alexandru.predescu:blocagapi2.jpeg?600|}} | ||
| - | Sistemul este alimentat printr o conexiune USB C, tensiunea fiind stabilizata la 5V printr un regulator LDO pentru a | + | Sistemul primeste curent printr un cablu micro USB direct din laptop. Creierul intregului montaj este placa de |
| - | asigura functionarea corecta a componentelor. Unitatea centrala este microcontrolerul ATmega328P care gestioneaza | + | dezvoltare ATmega328P Xplained Mini care controleaza toate modulele pe care le am adaugat pe breadboard. |
| - | comunicarea intre modulele de intrare si cele de iesire. | + | |
| - | Modulele de intrare sunt compuse dintr un senzor LM35, conectat la pinul ADC0 pentru citirea temperaturii, si un buton | + | Pe partea de intrare folosesc un senzor analogic LM35 prins de exteriorul canii ca sa citesc temperatura si un senzor de |
| - | de start legat la pinul INT0 pentru activarea sistemului prin intreruperi externe. Modulele de iesire includ un LED RGB | + | lumina LDR pus sub cana. LDR ul detecteaza lumina din camera cand ridic cana de pe suport, iar microcontrolerul stie |
| - | pentru semnalizare vizuala si un buzzer pasiv controlat prin semnal PWM generat de Timer1. | + | astfel sa opreasca alertele. Mai am si un buton push ca sa pornesc manual sistemul din starea de asteptare. |
| - | Interactiunea hardware software: | + | Pe partea de iesire am un ecran LCD 1602 cu modul I2C care imi afiseaza temperatura exacta si mesajele de stare. Mai |
| - | Dupa activarea din buton, microcontrolerul preia datele analogice de la senzor si le proceseaza folosind o medie mobila. | + | folosesc un LED RGB care isi schimba culoarea in functie de cat de fierbinte e bautura si un buzzer pasiv care ma anunta |
| - | In functie de rezultatul obtinut, logica interna comanda culorile LED ului si frecventa buzzer ului pentru a oferi | + | cand pot sa beau in siguranta. Microcontrolerul ia datele de la senzori si decide in timp real ce sa scrie pe ecran si |
| - | feedback in timp real despre starea lichidului din cana. | + | cum sa controleze lumina si sunetul. |
| Line 41: | Line 36: | ||
| ^ # ^ Componenta ^ Cantitate ^ Rol ^ | ^ # ^ Componenta ^ Cantitate ^ Rol ^ | ||
| | 1 | Placuta de dezvoltare ATmega328P Xplained Mini | 1 | Controlul sistemului si procesarea datelor | | | 1 | Placuta de dezvoltare ATmega328P Xplained Mini | 1 | Controlul sistemului si procesarea datelor | | ||
| - | | 2 | Senzor de temperatura analogic LM35 | 1 | Preluarea temperaturii lichidului din cana | | + | | 2 | Modul senzor de temperatura LM35 | 1 | Citirea valorilor termice de pe exteriorul canii | |
| - | | 3 | Buton push | 1 | Activarea sistemului din starea de asteptare | | + | | 3 | Modul senzor de lumina LDR | 1 | Detectarea ridicarii canii pentru oprirea alertelor | |
| - | | 4 | Buzzer pasiv | 1 | Generarea avertizarilor sonore | | + | | 4 | Modul buton switch | 1 | Activarea manuala a sistemului | |
| - | | 5 | LED RGB | 1 | Afisarea vizuala a temperaturii prin culori | | + | | 5 | Modul buzzer pasiv | 1 | Generarea avertizarilor sonore de tip PWM | |
| - | | 6 | Rezistente de 330 ohmi | 3 | Limitarea curentului pentru culorile LED ului | | + | | 6 | Modul LED RGB | 1 | Semnalizarea vizuala a starilor de temperatura | |
| - | | 7 | Breadboard si fire de conexiune | 1 | Asamblarea fizica a componentelor | | + | | 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 ===== | ===== 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 | ||