This is an old revision of the document!


Cigarette Pack Counter

Introducere

Proiectul meu este un dispozitiv inteligent care determina automat cate tigari au mai ramas intr-un pachet de tigari, folosind un senzor de greutate de precizie.

Ideea a pornit de la o observatie simpla: de multe ori nu stii cate tigari mai ai in pachet fara sa-l deschizi sau sa numeri manual. Mi-am propus sa rezolv acest lucru intr-un mod elegant si non-invaziv, fara a modifica pachetul si fara sa fie nevoie de o camera sau de procesare de imagine complexa.

Sistemul foloseste un senzor de forta (load cell) conectat la un modul de amplificare ADC pe 24 de biti (HX711) pentru a masura greutatea pachetului cu precizie sub 0.1g. Deoarece fiecare tigara Marlboro Red cantareste aproximativ 0.95g, iar greutatea ambalajului gol este cunoscuta si calibrata la pornire, microcontrollerul ATmega328P calculeaza numarul de tigari prin simpla impartire a greutatii nete la greutatea unei singure tigari. Rezultatul este afisat in timp real pe un ecran OLED de 128×64 pixeli. Interactiunea cu utilizatorul se face printr-un singur buton: o apasare scurta actualizeaza afisajul, iar una lunga recalibra tara (greutatea ambalajului gol).

Proiectul este util pentru ca:

  • Demonstreaza practic utilizarea unui ADC extern de inalta precizie (24 biti) cu ATmega328P
  • Combina mai multe notiuni din laborator: GPIO, I2C, intreruperi si calibrare ADC
  • Reprezinta o solutie robusta si independenta de conditiile de iluminare, spre deosebire de o abordare bazata pe camera
  • Poate fi adaptat pentru orice tip de pachet sau produs cu greutate cunoscuta per unitate

Descriere generala

Sistemul este compus din urmatoarele module hardware si software, care interactioneaza dupa cum urmeaza:

  • ATmega328P Xplained Mini este unitatea centrala de procesare. Citeste datele de la senzorul de greutate, calculeaza numarul de tigari si trimite rezultatul catre display. Totodata, gestioneaza butonul de interactiune al utilizatorului.
  • Load cell (celula de sarcina) 100g este senzorul mecanic care se deformeaza proportional cu greutatea plasata pe el. Genereaza un semnal diferential de tensiune in intervalul mV, care este amplificat de modulul HX711.
  • Modulul HX711 este un amplificator si convertor analog-digital de 24 de biti, dedicat celulelor de sarcina. Comunica cu ATmega328P printr-un protocol two-wire (DOUT si PD_SCK), diferit de SPI sau I2C standard. Ofera o rezolutie de aproximativ 0.1g, mai mult decat suficienta pentru a distinge o singura tigara (~0.95g).
  • Display OLED SSD1306 128×64 afiseaza numarul curent de tigari din pachet, greutatea neta masurata si mesaje de stare (ex: “Calibrating…”, “Ready”). Comunicarea se face prin protocolul I2C pe pinii PC4 (SDA) si PC5 (SCL).
  • Butonul de interactiune este conectat pe pinul PD2 cu rezistenta de pull-up interna activata. O apasare scurta (< 1s) declanseaza o noua masurare si actualizeaza afisajul. O apasare lunga (> 2s) initiaza recalibrarea tarei: sistemul salveaza greutatea curenta ca greutate de referinta a ambalajului gol.
  • Alimentarea se face de la 5V prin cablul USB al placii Xplained Mini. Modulul HX711 si display-ul OLED sunt alimentate de la acelasi rail de 5V, cu condensatoare de decuplare pentru stabilitate.

Fluxul de functionare al sistemului este urmatorul: la pornire, utilizatorul plaseaza pachetul GOL pe platforma si apasa lung butonul pentru a calibra tara. Dupa calibrare, indiferent de cate tigari se afla in pachet, sistemul calculeaza automat numarul ramas la fiecare apasare scurta a butonului si il afiseaza pe OLED.

Modul Descriere Tehnica Protocol / Interfata
ATmega328P Xplained Mini Unitate centrala de procesare, 16MHz, 5V Master al intregului sistem
Load Cell 100g Senzor mecanic rezistiv (punte Wheatstone) Semnal analogic diferential (mV)
HX711 ADC 24-bit + amplificator pentru load cell Two-wire: DOUT (PC3), PD_SCK (PC2)
OLED SSD1306 128×64 Display grafic pentru afisarea rezultatelor I2C: SDA (PC4), SCL (PC5)
Buton Interactiune utilizator (masurare / calibrare) GPIO: PD2, pull-up intern

Hardware Design

Stadiul actual al implementării

Am realizat conectarea display-ului 7-segment 5461AS (4 cifre) la ATmega328P Xplained Mini pe breadboard, cu rezistoarele de limitare curent pe segmente. Am validat funcționarea plăcii prin upload de firmware de test (LED blink pe PB5), confirmat vizual.

Componentele de măsurare a greutății (load cell 1kg + modul HX711) au fost comandate și urmează să fie integrate în etapa următoare.

Componente folosite și rolul lor

Componentă Rol în proiect Interfață
ATmega328P Xplained Mini Unitate centrală de procesare
Display 7-segment 5461AS Afișarea numărului de țigări GPIO — multiplexare software
7× rezistor 220Ω Limitare curent pe segmente
Buton tactil Declanșare măsurare / calibrare tară GPIO PD2, pull-up intern
Load cell 1kg (în așteptare) Măsurarea greutății pachetului Semnal analogic diferențial
Modul HX711 (în așteptare) ADC 24-bit pentru load cell Two-wire: DOUT + PD_SCK

Pinii utilizați

Modul Semnal Pin ATmega328P
Display — segment a OUT PD2
Display — segment b OUT PD3
Display — segment c OUT PD4
Display — segment d OUT PD5
Display — segment e OUT PD6
Display — segment f OUT PD7
Display — segment g OUT PB0
Display — DIG1 OUT PB1
Display — DIG2 OUT PB2
Display — DIG3 OUT PB3
Display — DIG4 OUT PB4
Buton IN PD2
HX711 DOUT (în așteptare) IN PC3 (A3)
HX711 PD_SCK (în așteptare) OUT PC2 (A2)

Rezistoarele de 220Ω sunt montate pe fiecare linie de segment pentru a limita curentul la ~14mA per LED. Pinii de cifră (DIG1–DIG4) merg direct, fără rezistor. Butonul folosește pull-up intern activat software (INPUT_PULLUP).

Schema electrică

TODO — schemă KiCad în lucru.

Dovadă de funcționare

Am uploadat un program de test blink pe LED-ul onboard (PB5). LED-ul clipește la 500ms, confirmând că placa, toolchain-ul PlatformIO și conexiunea USB funcționează corect.

Schema electrica

TODO - schema electrica realizata in KiCad

Calcul greutate → numar tigari

Marlboro Red Long (cu tigari scurte):

  • Greutate ambalaj gol: ~23g (calibrata la pornire)
  • Greutate per tigara: ~0.95g (constanta in cod)
  • Formula: nr_tigari = round( (greutate_totala - tara) / 0.95 )

Software Design

  • Mediu de dezvoltare: PlatformIO (Visual Studio Code) cu framework Arduino
  • Limbaj: C++ (Arduino)
  • Programare: USB direct prin EDBG integrat pe Xplained Mini (fara ISP extern)

Rezultate Obtinute

TODO - rezultate dupa realizarea montajului fizic

Concluzii

TODO

Download

TODO - link GitHub cu surse, schema KiCad, README

pm/prj2026/cezar.zlatea/teodor.pana.1778952348.txt.gz · Last modified: 2026/05/16 20:25 by teodor.pana
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