Can crusher - Popa Peter

Introducere

Prezentarea pe scurt a proiectului vostru:

  • Proiectul propus are ca scop realizarea unui dispozitiv automatizat pentru zdrobirea dozelor goale de aluminiu, facilitând reciclarea și reducerea volumului acestora.
  • Utilizatorul plasează doza într-o zonă marcată și inițiază procesul prin apăsarea unui buton. Un mecanism de siguranță integrat previne accesul accidental în zona de zdrobire în timpul funcționării.
  • În timpul procesului, curentul consumat de piston este monitorizat în timp real cu ajutorul unui senzor de curent ACS712. Valoarea puterii consumate este calculată și afișată pe un display LCD conectat la Arduino, oferind utilizatorului o imagine clară asupra consumului energetic.
  • La finalul ciclului de strivire, mecanismul de siguranță se eliberează, permițând plasarea unei noi doze în compartimentul de lucru.

Descriere generală

Lista pieselor:

  • Arduino Uno
  • Piston electric 12V – 900N – realizează forța mecanică necesară zdrobirii dozelor
  • Driver de Motoare Dual L298N – comandă pistonul în ambele direcții
  • Senzor de curent Hall ACS712 (5A) – măsoară curentul consumat de piston
  • Display LCD 1602 cu adaptor I2C – afișează puterea consumată pe durata ciclului de zdrobire
  • Sursă de tensiune 12V, 180W – alimentează pistonul

Hardware Design

Schema electrica: schematic.pdf

Componentele sunt conectate intre ele in modul urmator:

  • Driverul L298N
    • Pinii IN1 si IN2 ai driverului sunt conectati la pinii digitali D2 si D3 de pe Arduino.
    • Iesirile OUT1 si OUT2 sunt conectate la pistonul electric, permitand controlul directiei de deplasare.
    • Alimentarea driverului este realizata de la o sursa de 12V conectata prin pinul VCC si GND.
    • Pinul ENA este lasat conectat intern (cu jumper), ceea ce permite functionarea continua fara control PWM.
  • Senzorul de curent – ACS712 (20A)
    • Este conectat intre sursa de 12V si pinul VCC al driverului L298N, astfel incat masoara curentul total consumat de motor.
    • Iesirea analogica a senzorului (OUT) este conectata la pinul A0 de pe Arduino.
    • Alimentarea senzorului este realizata la 5V si GND.
  • Butoane de control – SW1 si SW2
    • Cele doua butoane tactile sunt conectate la pinii digitali D8 si D9 ai Arduino-ului. Fiecare buton are un rezistor pull-down de 100kΩ catre GND pentru a mentine starea LOW atunci cand nu sunt apasate.
    • Un buton controleaza pornirea/opirea pistonului, iar celalalt controleaza directia de deplasare (deschidere/inchidere).
  • Afisaj LCD 16×2 I2C
    • Afisajul este conectat la pinii SDA (A4) si SCL (A5) ai Arduino-ului.
    • Pe ecran sunt afisate in timp real valorile masurate de senzorul de curent: amperajul (A) si puterea estimata (W) consumata de piston.

Software Design

  • Mediu de dezvoltare: Codul a fost scris în limbajul C, utilizând extensia PlatformIO din Visual Studio Code, folosind toolchain-ul AVR GCC pentru microcontrolerul ATmega328P.
  • Librării și surse externe utilizate:
    • twi.h și twi.cpp – implementare low-level pentru comunicația I2C
    • lcd.h și lcd.cpp – implementare pentru afișarea pe LCD 16×2 I2C
  • Algoritmi și structuri implementate: Aplicația implementează o interfață de control pentru un piston acționat electric, cu control direcție și stare ON/OFF, citind în același timp valoarea de curent consumat și calculând puterea livrată.
    • Debounce pentru butoane: Implementat software folosind Timer1 în CTC mode, cu întrerupere la 1ms. Fiecare buton este filtrat prin contorizarea stării stabile timp de 20ms pentru a elimina bouncing-ul mecanic.
    • Controlul motorului: Două ieșiri digitale (D2, D3) comandă un driver L298N pentru controlul direcției pistonului. Un buton comută între ON/OFF, iar altul între sensul de deplasare. LED-urile indică starea (roșu = oprit, verde = activ).
    • Citire senzor ACS712 (20A): Se utilizează ADC-ul intern pentru a citi tensiunea analogică proporțională cu curentul.
    • Calcul putere: Puterea activă este calculată ca produs între curent și tensiunea de alimentare fixă a pistonului (10.65V). Aceasta se actualizează la fiecare 500ms folosind același timer ca și pentru debounce, dar cu un contor separat în ISR.
    • Afișare pe LCD I2C: Pe LCD-ul 16×2 sunt afișate:
      • Linia 1: curentul (A) și puterea (W)
      • Linia 2: starea curentă a sistemului (ACTIV/OPRIT)

Elementul de noutate constă în integrarea controlului hardware de motor, monitorizarea consumului electric printr-un senzor de curent și afișarea în timp real a acestor valori pe un LCD I2C.

Proiectul valorifică funcționalități studiate în laborator precum: temporizare prin Timer1 în CTC, utilizarea întreruperilor pentru debounce, citire ADC pentru senzori analogici și comunicație I2C pentru afișaj.

Senzorul ACS712 a fost calibrat pe baza valorii de referință (2.5V la 0A) și a sensibilității declarate de producător (100 mV/A). Calibrarea s-a verificat cu un multimetru în serie pe o sarcină de test cunoscută (ex: rezistor de putere), iar valoarea de 10.65V a fost măsurată pe sursa de alimentare a pistonului. ​

Optimizările au fost realizate în principal în ceea ce privește utilizarea memoriei și resurselor hardware. Timerul 1 a fost utilizat pentru debounce și pentru sampling periodic (calculul curentului și al puterii, urmate de afișarea pe LCD), economisind un timer suplimentar.

Videoclip: https://youtu.be/CnxCBeDxjME

Download

Bibliografie/Resurse

  • Fisa tehnica ATmega328P: ATmega328P
  • Librarie LCD I2C (LiquidCrystal_I2C): LCD_I2C
  • Fisa tehnica ACS712:ACS712
  • Informatii lucru registrii: OCW
pm/prj2025/vstoica/popapeter.txt · Last modified: 2025/05/28 00:37 by peter.popa
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