This is an old revision of the document!
Obstacle Avoiding Car reprezintă o platformă mobilă autonomă proiectată pentru detectarea și evitarea obstacolelor din mediul înconjurător. Sistemul utilizează Arduino Nano pentru procesarea datelor și coordonarea componentelor hardware, împreună cu un senzor ultrasonic montat pe un servomotor pentru scanarea mediului.
Scopul proiectului este implementarea unui sistem embedded capabil să realizeze deplasare autonomă și reacție în timp real la apariția obstacolelor.
Acest proiect este util atât din perspectivă educațională, deoarece implică lucrul cu microcontrolere, actuatori și senzori, cât și din perspectivă practică, reprezentând o bază pentru sisteme autonome mai complexe.
Sistemul este alcătuit dintr-o platformă cu 4 roți, controlată de un Arduino Nano. Controlul motoarelor este realizat prin intermediul unui driver L298N, care permite comandarea direcției și vitezei motoarelor utilizând semnale PWM generate de microcontroler.
Detectarea obstacolelor se realizează cu ajutorul unui senzor ultrasonic HC-SR04 montat pe un servomotor SG90. Servomotorul permite rotirea senzorului pe diferite unghiuri, oferind posibilitatea scanării mediului în direcțiile stânga, centru și dreapta.
Pe baza informațiilor primite de la senzor, microcontrolerul decide direcția optimă de deplasare, evitând obstacolele prin oprire, schimbare de direcție sau rotație.
Schema bloc a sistemului:
Interacțiunea modulelor:
Lista de componente hardware:
Descriere hardware:
Schema electrica:
Mediu de dezvoltare: PlatformIO
Biblioteci: doar biblioteci standard AVR (avr/io.h, avr/interrupt.h, util/delay.h).
hcsr04.c — driver pentru senzorul ultrasonic folosind Timer2 (prescaler 64, 4us/tick). HCSR04_measure() trimite pulsul de trig de 10us, asteapta frontul crescator al echo-ului, numara tick-urile cat echo-ul e HIGH (cu tracking manual de overflow), si converteste in centimetri prin formula ticks * 4us / 58.
l298n.c — driver pentru motoare cu functii de directie (forward, backward, turn_left, turn_right, stop) si control viteza prin set_speed(left, right). Viteza e controlata prin PWM pe Timer0 in Fast PWM mode (OC0A = ENB, OC0B = ENA, ~980Hz). Virajele sunt de tip pivot — rotile din partea opusa merg invers pentru rotatie pe loc.
servo.c — semnal PWM 50Hz generat cu Timer1 in Fast PWM mode cu TOP = ICR1 = 40000 (prescaler 8, 16MHz). servo_write(us) primeste o valoare in microsecunde si seteaza OCR1A = us * 2.
main.c — automat de stari cu 3 stari:
FORWARD: robotul merge inainte si masoara distanta la fiecare 50ms. La detectia unui obstacol sub 45cm, face o a doua masurare dupa 20ms pentru confirmare (eliminare fals-pozitive), dupa care opreste motoarele si trece in SCAN.SCAN: servo-ul se roteste la stanga si se masoara distanta, apoi la dreapta si se masoara din nou, dupa care revine la centru. Intre fiecare pozitie exista o pauza de 400ms pentru stabilizarea servo-ului.TURN: robotul vireaza pivot spre directia cu distanta mai mare masurata in SCAN, timp de 300-400ms, dupa care trece inapoi in FORWARD.