Introducere

Proiectul propune realizarea unui robot ,alimentat cu baterii, ce urmărește o linie.

Un robot line follower este o masina autonoma, ce poate urmari o anumita traiectorie. Traiectoria este redata prin intermediul unei linii negre pe un fundal alb.

Initial, robotul se va deplasa in linie dreapta. Detectarea pozitiei traiectoriei se face pe baza informatiei primite de la 2 senzori. Microcontroller-ul ATmega16 este cel care va controla functiile motoarelor si va monitoriza senzorii.

Descriere generala

Robotul a fost proiectat initial ca un robot sumo(20cm x 20cm, 3 Kg), si modificat ulterior.

In prima faza cu ajutorul celor doi senzori(ce detecteaza alb sau negru) situati in partea din fata a robotului, asezati sub sasiu, cu o distanta de 3 cm intre ei, putem lua decizia pozitionarii fata de traseul de urmat (o linie neagra). Senzorii vor prelucra lumina reflectata de traiectorie si vor indica un anumit voltaj. Microcontroller-ul Atmega16, citind valorile de pe senzori, va decide daca masina trebuie sa urmeze o linie dreapta sau sa faca o curba.

La placuta din prima etapa la care am cuplat un driver de motor pentru comanda celor doua motoare de curent continuu. Driverul este prevazut cu patru intrari si patru iesiri permitand comanda in paralel a doua motoare alimentate la 5V fiecare. In faza urmatoare cele doua motoare sunt actionate in functie de semnalele primate de la cei doi senzori.

Iesirile spre motoare (pinii PC 0,1 si PC 5,6) sunt 4 biti pentru codificarea directiilor iar pinii PD 4 si 5 sunt pentru turatia motoarelor. Puntea motoare are la baza un circuit L298 alimentat la o sursa de 12V si poate da un curent maxim de 2A. Motoarele sunt conectate direct la circuitul L298.

Hardware Design

Lista piese:

- Placa de baza de la etapa 1

- 2 senzori IR QRD1114

- Controller motoare L298N

- 2 motoare de current continuu (50:1 Metal Gearmotor 37Dx54L mm)

- Acumulator HFR-12V AA1600

- Sasiu din lemn + 2 roti de la o masina Lego

Schema este urmatoarea:

Software Design

Programul este implementat in limbajul C, utilizand compilatorul avr-gcc.

Algoritm

Se trateaza urmatoarele cazuri:

Daca ambii senzori detecteaza alb inseamna ca directia de miscare e corecta deci comanda la iesire va fi de mers inainte.

Daca unul din senzori detecteaza negru (deci se afla pe linie) inseamna ca directia de miscare se va schimba catre senzorul aflat pe linie.

Codul este urmatorul:

int check_line() {

int front_right_sensor, front_left_sensor;
int ret = 0;

front_left_sensor = GetADC(frontLeftSensor);
front_right_sensor = GetADC(frontRightSensor);
	
if (front_left_sensor > DETECTION_THRESHOLD_FL)
	ret += 1;

if (front_right_sensor > DETECTION_THRESHOLD_FR)
	ret += 2;

return ret;

}

int main() {

InitADC();
InitPWM();

/* have the motors stop */
SetLeftMotorPWM(0);
SetRightMotorPWM(0);
	
// led
SetBit(DDRD, DDD2);

int sensor_state = 0;

while (1) {
	sensor_state = check_line();
	
	switch (sensor_state) {
		case 0: 
			SetLeftMotorPWM(SPEED);
			SetRightMotorPWM(SPEED);
			break;
		case 1:
			SetLeftMotorPWM(ROTATION_SPEED);
			SetRightMotorPWM(SPEED);
			break;
		case 2:
			SetLeftMotorPWM(SPEED);
			SetRightMotorPWM(ROTATION_SPEED);
			break;
		default: break;
	}
return 0;

}

Rezultate Obtinute

In urma realizării proiectului s-a obtinut un robot functional, care incearca urmarirea unei linii.

Concluzii

Parafrazandu-l pe Aristokeles ” Programarea da suflet universului, aripi gandirii, avant inchipuirii, farmec tineretii, viata si veselie tuturor lucrurilor. Ea da esenta ordinii, inaltand sufletul catre tot ce este mai bun, drept si frumos. ”

pm/prj2010/dtudose/line_follower1.txt · Last modified: 2021/04/14 17:07 (external edit)
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