Mediu de dezvoltare utilizat
Librarii folosite
Wire.h : Bibliotecă nativă Arduino care permite comunicarea pe magistrala I2C. Este folosită pentru comunicarea cu afișajul LCD, permițând transmiterea datelor în mod eficient pe două fire (SDA, SCL).
LiquidCrystal_I2C.h: Bibliotecă specializată pentru controlul afișajelor LCD compatibile cu interfața I2C.
Servo.h: Bibliotecă pentru controlul precis al servomotoarelor cu semnal PWM. În cadrul proiectului, servomotorul este folosit pentru a simula aruncarea mingii atunci când se apasă butonul: servo.attach(pin) leagă motorul de un pin PWM si servo.write(unghi) setează poziția motorului (180° pentru lansare, 0° pentru reset).
SPI.h: Bibliotecă nativă pentru comunicarea prin protocolul SPI. Este folosită în mod implicit de SD.h pentru accesul la cardul SD.
SD.h: Permite manipularea fișierelor pe un card SD – deschidere, scriere, citire și închidere. Este folosită pentru logarea automată a fiecărei aruncări de minge, împreună cu timestamp-ul în milisecunde.
Organizarea componenței software
1. Componenta de detecție (senzor ultrasonic) → Senzorul de distanță este utilizat pentru a detecta prezența animalului în fața mecanismului. Se emite un semnal ultrasonic prin pinul TRIG și se măsoară timpul de întoarcere cu pinul ECHO. Din această durată se calculează distanța în centimetri. Dacă distanța este mai mică de 20 cm, sistemul consideră că animalul s-a apropiat de dispozitiv, aprinzând LED-ul roșu ca semnal pentru utilizator. Codul utilizează funcțiile digitalWrite() și pulseIn() pentru a declanșa impulsuri ultrasonice și a calcula timpul de întoarcere, convertit apoi în distanță în centimetri:
* digitalWrite(TRIG, LOW);
* delayMicroseconds(2);
* digitalWrite(TRIG, HIGH);
* delayMicroseconds(10);
* durata = pulseIn(ECHO, HIGH);
* distanta_cm = durata * 0.034 / 2;
* digitalWrite(LED_VERDE, HIGH); // activ permanent
* digitalWrite(LED_ROSU, HIGH); // activat doar la apropiere
* digitalWrite(BUZZER, HIGH); // semnal sonor
* logFile.print("Aruncare ");
* logFile.print(aruncareNumar);
* logFile.print(" la ");
* logFile.print(timestamp);
* logFile.println(" ms");
5. Componenta de afișare (LCD) → Sistemul afișează mesaje precum „Mingea a fost aruncata” și, ulterior, ultima aruncare cu timpul în secunde, extras automat din fișierul logat.
7. Senzorul de touch → În proiectul meu, am utilizat un senzor de touch capacitiv (TTP223) ca metodă alternativă de interacțiune, înlocuind butonul fizic tradițional. Acesta detectează simpla atingere a utilizatorului, fără a necesita apăsare mecanică, declanșând astfel secvența de aruncare a mingii prin activarea servomotorului. Senzorul este conectat la pinul digital D8 al plăcii Arduino și este citit în bucla principală loop() folosind digitalRead(TOUCH_PIN). Când este detectată o atingere (ieșire HIGH), sistemul pornește buzzerul, rotește servomotorul, înregistrează aruncarea pe cardul SD și afișează informațiile pe LCD. Această metodă de activare adaugă un plus de modernitate și confort în utilizarea sistemului, eliminând contactul fizic direct cu un buton.