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:
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:
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