This is an old revision of the document!
Lansator automat de mingi pentru animale
Introducere
Proiectul propus reprezintă un mecanism inteligent de lansare a mingilor pentru animale de companie, având ca scop atât stimularea activității fizice, cât și monitorizarea interacțiunilor cu dispozitivul. Sistemul funcționează autonom, în colaborare cu utilizatorul, și integrează mai mulți senzori și actuatori pentru a oferi o experiență interactivă și eficientă.
Dispozitivul este conceput pentru a detecta automat apropierea animalului de zona de lansare. Atunci când animalul se află la o distanță mică (sub 30 cm), se aprinde un LED roșu, oferind un semnal vizual clar pentru stăpân că animalul este pregătit să interacționeze cu dispozitivul.
La apăsarea unui buton de către stăpân, sistemul inițiază o secvență bine definită:
1. Se activează un buzzer, care emite un sunet scurt, confirmând acțiunea.
2. Un servomotor este acționat pentru a lansa o minge de ping pong.
3. În același timp, se înregistrează automat pe un card de memorie: numărul aruncării curente, ora la care s-a produs evenimentul.
Informațiile înregistrate sunt afișate instant și pe un ecran LCD, oferind utilizatorului un rezumat clar și util despre activitatea recentă.
Acest proces permite nu doar o interacțiune distractivă între animal și dispozitiv, ci și o monitorizare eficientă a utilizării în timp. Sistemul este intuitiv și ușor de utilizat, integrând detecție, semnalizare, acționare și raportare într-un singur mecanism compact.
Descriere generală
Pentru a asigura o comunicare eficientă între microcontroller și componentele periferice, proiectul integrează mai multe protocoale standard, fiecare având un rol specific în buna funcționare a sistemului.
Protocolul I2C este folosit pentru a controla ecranul LCD, permițând afișarea în timp real a informațiilor esențiale precum numărul lansărilor și momentul în care acestea au avut loc. Tot prin I2C este gestionată și semnalizarea LED-urilor, oferind un mod simplu și ordonat de control asupra acestora.
Pentru stocarea datelor, sistemul utilizează protocolul SPI, prin care microcontrollerul comunică cu modulul de card SD. Acest protocol asigură transferuri rapide și fiabile, necesare pentru scrierea imediată a evenimentelor înregistrate.
În ceea ce privește acționarea mecanică, PWM (Pulse Width Modulation) este folosit pentru a controla servomotorul, oferind precizie în mișcarea brațului care lansează mingea.
Schemă bloc:
Hardware Design
Schema electrica:
Software Design
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
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");
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.