This shows you the differences between two versions of the page.
|
pm:prj2026:alexandru.predescu:philip.agapie [2026/05/12 19:46] 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 ===== | ||
| 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 31: | Line 31: | ||
| cum sa controleze lumina si sunetul. | cum sa controleze lumina si sunetul. | ||
| - | {{:pm:prj2026:alexandru.predescu:blocagapi.jpeg?600|}} | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| Line 47: | Line 46: | ||
| | 10 | Cablu date micro USB | 1 | Alimentarea si programarea microcontrolerului | | | 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 | ||