This shows you the differences between two versions of the page.
|
pm:prj2026:farhad_ali.gul:antonia_maria.barbu [2026/05/03 20:38] antonia_maria.barbu created |
pm:prj2026:farhad_ali.gul:antonia_maria.barbu [2026/05/19 16:25] (current) antonia_maria.barbu |
||
|---|---|---|---|
| Line 9: | Line 9: | ||
| <note tip> | <note tip> | ||
| - | Proiectul constă într-un sistem automat de dozare, conceput pentru a măsura cantități precise de ingrediente solide (precum boabe de cafea și ceai vrac) pe baza unor rețete predefinite, selectate în prealabil de către utilizator. Scopul principal al acestui dispozitiv este automatizarea procesului de dozare individuală necesar în prepararea băuturilor de specialitate, sistemul fiind proiectat să asigure o precizie ridicată. Din punct de vedere al utilității, aparatul se adresează direct pasionaților de cafea sau ceai. Astfel, se eficientizează procesul de preparare prin economisirea timpului, se previne risipa de ingrediente și se menține un gramaj consistent la fiecare utilizare. | + | Proiectul constă într-un sistem automat de dozare, conceput pentru a măsura cantități precise de ingrediente solide (precum boabe de cafea) pe baza unor rețete predefinite, selectate în prealabil de către utilizator. Scopul principal al acestui dispozitiv este automatizarea procesului de dozare individuală necesar în prepararea băuturilor de specialitate, sistemul fiind proiectat să asigure o precizie ridicată. Din punct de vedere al utilității, aparatul se adresează direct pasionaților de cafea sau ceai. Astfel, se eficientizează procesul de preparare prin economisirea timpului și se previne risipa de ingrediente. |
| </note> | </note> | ||
| Line 17: | Line 17: | ||
| Sistemul funcționează pe principiul unei bucle de control închis, folosind microcontrolerul ATmega328P Xplained Mini. | Sistemul funcționează pe principiul unei bucle de control închis, folosind microcontrolerul ATmega328P Xplained Mini. | ||
| - | * **Input:** Utilizatorul selectează băutura dorită (ex. Espresso Simplu, Espresso Dublu, Ceai) folosind butoane fizice. Apăsarea butoanelor este detectată prin întreruperi externe pentru a nu bloca execuția codului principal. | + | * **Input:** Utilizatorul selectează băutura dorită (ex. Espresso Simplu, Espresso Dublu) folosind butoane fizice. |
| * **Procesare și Feedback:** O celulă de sarcină (load cell) conectată la un modul amplificator HX711 monitorizează constant greutatea ingredientului ales. Microcontrolerul citește aceste date prin pini GPIO. | * **Procesare și Feedback:** O celulă de sarcină (load cell) conectată la un modul amplificator HX711 monitorizează constant greutatea ingredientului ales. Microcontrolerul citește aceste date prin pini GPIO. | ||
| - | * **Output:** Pe baza rețetei, microcontrolerul generează un semnal PWM pentru a controla unul dintre cele două servomotoare (unul pentru cafea, altul pentru ceai/alte ingrediente), deschizând trapa de dozare. | + | * **Output:** Pe baza rețetei, microcontrolerul generează un semnal PWM pentru a controla servomotorul (pentru cafea sau alte ingrediente), deschizând trapa de dozare. |
| - | * **Ajustare Dinamică:** Pe măsură ce greutatea măsurată se apropie de valoarea țintă, lățimea pulsului PWM este ajustată dinamic pentru a încetini mișcarea servomotorului. Acesta începe să lase ingredientele să cadă treptat (sub formă de impulsuri), prevenind depășirea gramajului. Greutatea în timp real este afișată pe un ecran LCD 16x2 folosind protocolul I2C. | + | * **Ajustare Dinamică:** Pe măsură ce greutatea măsurată se apropie de valoarea țintă, lățimea pulsului PWM este ajustată dinamic pentru a încetini mișcarea servomotorului. Acesta începe să lase ingredientul să cadă treptat (sub formă de impulsuri), prevenind depășirea gramajului. Greutatea în timp real este afișată pe un ecran LCD 16x2 folosind protocolul I2C. |
| - | {{: pm:prj2026:farhad_ali.gul:schema_bloc_descriere.png?700| }} | + | {{: pm:prj2026:farhad_ali.gul:schema_bloc_descriere.png?600| }} |
| Line 32: | Line 32: | ||
| * **Senzor de greutate:** 1x Celulă de sarcină (Load Cell) cu o limită de 1kg | * **Senzor de greutate:** 1x Celulă de sarcină (Load Cell) cu o limită de 1kg | ||
| * **Amplificator semnal:** 1x Modul amplificator ADC HX711 | * **Amplificator semnal:** 1x Modul amplificator ADC HX711 | ||
| - | * **Actuatoare mecanice:** 2x Servomotoare MG996R (pentru acționarea trapelor de ingrediente) | + | * **Actuator mecanic:** Servomotor SG90 (pentru acționarea trapelor de ingrediente) |
| * **Afișaj:** 1x Ecran LCD 16x2 cu modul adaptor I2C integrat | * **Afișaj:** 1x Ecran LCD 16x2 cu modul adaptor I2C integrat | ||
| - | * **Interacțiune utilizator:** 3x Butoane tip Push | + | * **Interacțiune utilizator:** 5x Butoane tip Push |
| - | * **Componente auxiliare:** Condensator electrolitic, breadboard și fire de conexiune. | + | * **Componente auxiliare:** Breadboard și fire de conexiune. |
| == Schema electrică == | == Schema electrică == | ||
| - | {{:pm:prj2026:farhad_ali.gul:schema_electrica_hw.png?700|}} | + | {{:pm:prj2026:farhad_ali.gul:hw_schema_electrica.png?600|}} |
| + | |||
| + | == Pinii folosiți pentru fiecare componentă == | ||
| + | |||
| + | * **Ecranul LCD** (Pinii PC4 și PC5): Ecranul comunică prin protocolul I2C, iar pe arhitectura ATmega328P pinii dedicați hardware pentru magistrala I2C sunt PC4 pentru SDA și PC5 pentru SCL. | ||
| + | * **Servomotorul** (PB1): Servomotoarele sunt controlate prin semnale PWM. Pinul PB1 este conectat intern la Timer-ul 1 capabil să genereze semnale PWM precise. | ||
| + | * **Modulul Cântar HX711** (Pinul 4 pentru SCK și Pinul 5 pentru DT): Acestea sunt conexiuni digitale standard (GPIO). Au fost alese pentru a ușura trasarea firelor. Modulul HX711 poate fi conectat la orice pin digital liber. | ||
| + | * **Butoanele** (Pinii PD6, PD7, PC0, PC1, PC2, PC3): Au fost folosiți ca intrări digitale generale (GPIO). | ||
| + | Pinii PD0 (RX) și PD1 (TX) au fost lăsați liberi deoarece sunt folosiți de interfața UART a plăcii pentru a comunica cu PC-ul prin cablul USB. | ||
| + | |||
| Line 45: | Line 55: | ||
| * **Mediu de dezvoltare:** PlatformIO. | * **Mediu de dezvoltare:** PlatformIO. | ||
| - | * **Biblioteci și resurse folosite:** Configurările Timerelor pentru PWM și comunicatia I2C vor fi scrise prin accesarea directă a regiștrilor AVR. | + | * **Biblioteci și resurse folosite:** Configurările Timerelor pentru PWM și comunicatia I2C sunt scrise prin accesarea directă a regiștrilor AVR. |
| - | * **Algoritmi și structuri implementate:** Logica principală a programului este implementată de un **Automat cu Stări Finite (FSM)**. Acesta este împărțit în următoarele stări: | + | * **Wire.h** și **LiquidCrystal_I2C.h**: Au fost folosite pentru protocolul I2C necesar display-ului LCD. |
| - | * **INIT:** Calibrarea cântarului, configurarea Timerelor hardware pentru PWM, inițializarea magistralei TWI (I2C) pentru ecran și configurarea întreruperilor externe pentru butoane. | + | * **HX711.h**: Este necesară pentru comunicația sincronă cu convertorul ADC pe 24 de biți. Biblioteca gestionează impulsurile de ceas (SCK) pentru extragerea datelor seriale (DT) de la celula de sarcină și oferă funcții integrate pentru mediere (averaging) și aducere la zero (tare). |
| - | * **IDLE:** Sistemul așteaptă inputul utilizatorului prin întreruperi. Meniul de selecție este afișat pe ecranul LCD. | + | |
| - | * **DISPENSE:** La declanșarea unei rețete, semnalul PWM deschide trapa la 100%. În acest timp, senzorul HX711 este citit continuu într-o buclă non-blocantă, iar valoarea curentă este actualizată pe ecran. | + | |
| - | * **FINE-TUNING:** Când ''greutate_curenta >= greutate_tinta - 2.0g'', lățimea pulsului PWM este modificată brusc pentru a închide trapa la o deschidere de doar 15% (curgere lentă pentru precizie). | + | |
| - | * **STOP:** Când ''greutate_curenta >= greutate_tinta'', semnalul PWM comandă închiderea totală a trapei (0%). Sistemul resetează variabilele curente și revine în starea **IDLE**. | + | |
| + | == Dozarea ingredientelor == | ||
| + | * **Dozare Bulk:** Trapa se deschide la unghi maxim pentru un debit ridicat atunci când cantitatea rămasă depășește pragul de 5 grame. | ||
| + | * **Dozare Fină:** În apropierea țintei, trapa se întredeschide și se deschide/închide lent, permițând trecerea individuală a ingredientelor pentru o acuratețe cat mai bună. | ||
| - | === Rezultate Obţinute === | + | == Funcționalități din laborator == |
| + | * **Laboratorul 0 (GPIO):** Interfațarea celor 6 butoane a fost realizată prin registre. Am configurat direcția pinilor (''DDRC'', ''DDRD''), am activat rezistențele interne de pull-up (''PORTC'', ''PORTD'') și am citit starea fizică prin mascări pe biți direct pe regiștrii de intrare (''PINC'', ''PIND''). | ||
| + | * **Laboratorul 3 (Timere și Hardware PWM):** Am generat pentru servomotor un semnal Fast PWM de 50Hz (perioadă 20ms) direct prin **Timerul 1** pe 16 biți. Lățimea impulsului (între 1000 și 3000 de tick-uri) este controlată scriind direct în registrul de comparare ''OCR1A''. | ||
| + | * **Laboratorul 6 (I2C):** Controlul display-ului LCD, microcontrolerul transmițând asincron date de interfață pe magistrala cu 2 fire (SDA/SCL). | ||
| + | == Scheletul proiectului == | ||
| + | Arhitectura se bazează pe un **Automat de Stări Finite (FSM)**: | ||
| + | * **Starea 0 (Meniu):** Sistemul așteaptă input de la utilizator via GPIO (setare gramaj, tara). Microcontrolerul procesează cererile și trimite comenzi I2C pentru actualizarea LCD-ului. | ||
| + | * **Starea 1 (Dozare):** FSM-ul intră în bucla de control. Modulul HX711 trimite constant date către procesor, care calculează eroarea (diferența până la țintă) și ajustează dinamic registrul ''OCR1A''. | ||
| + | * **Starea 2 (Finalizat):** Servomotorul este forțat în poziția închis. Sistemul face o ultimă citire. | ||
| - | === Concluzii === | + | == Calibrarea elementelor de senzoristică == |
| + | * **Senzorul de greutate (ADC HX711):** S-a determinat un ''calibration_factor'' de 971.64 folosind o greutate etalon. Am implementat o funcție automată de tare apelată la fiecare inițializare a ciclului de dozare. | ||
| - | === Download === | + | {{:pm:prj2026:farhad_ali.gul:img_5172.png?200|}} |
| + | |||
| + | |||
| + | === Link de Github === | ||
| + | [[https://github.com/antoniaa286/coffee-dispenser | Github proiect]] | ||
| + | |||
| + | |||
| + | === Rezultate Obţinute === | ||
| + | În urma implementării, a rezultat un dozator automat funcțional, capabil să cântărească și să porționeze cu precizie boabe de cafea sau alte ingrediente solide cu consistență și dimensiuni similare. Sistemul adaptează dinamic deschiderea trapei în timp real, prevenind astfel blocajele mecanice și asigurând o dozare a cantității țintă. | ||
| - | === Bibliografie/Resurse === | ||