This is an old revision of the document!
Speciality Coffee Dispenser
Introducere
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, se previne risipa de ingrediente și se menține un gramaj consistent la fiecare utilizare.
Descriere Generală
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) folosind butoane fizice. Apăsarea butoanelor este detectată prin întreruperi externe pentru a nu bloca execuția codului principal.
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 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 ingredientul să cadă treptat (sub formă de impulsuri), prevenind depășirea gramajului. Greutatea în timp real este afișată pe un ecran LCD 16×2 folosind protocolul I2C.
Hardware Design
Lista de componente
Microcontroler: 1x Plăcuță de dezvoltare ATmega328P Xplained Mini
Senzor de greutate: 1x Celulă de sarcină (Load Cell) cu o limită de 1kg
Amplificator semnal: 1x Modul amplificator ADC HX711
Actuator mecanic: Servomotor SG90 (pentru acționarea trapelor de ingrediente)
Afișaj: 1x Ecran LCD 16×2 cu modul adaptor I2C integrat
Interacțiune utilizator: 5x Butoane tip Push
Componente auxiliare: Condensator electrolitic, breadboard și fire de conexiune.
Schema electrică
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 (Pinul Digital 9 / PB1): Servomotoarele sunt controlate prin semnale PWM. Pinul 9 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 intenționat lăsați liberi deoarece sunt folosiți de interfața UART a plăcii pentru a comunica cu PC-ul prin cablul USB. Folosirea lor ar fi blocat posibilitatea de a încărca cod nou pe microcontroler.
Software Design
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.
Wire.h și LiquidCrystal_I2C.h: Au fost folosite pentru protocolul I2C necesar display-ului LCD.
HX711.h: Este esențială 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).
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ă.
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): Funcționalitatea este demonstrată prin 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 preia o ultimă citire.
Calibrarea elementelor de senzoristică
Link de Github
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 granulație similară. Sistemul adaptează dinamic deschiderea trapei în timp real, prevenind astfel blocajele mecanice și asigurând o dozare a cantității țintă.