Line Follower

Autori

  • Diana Maria Prăjescu - 331CC
  • Ștefan Neculai - 331CC

Introducere

Line follower este un roboțel care poate să urmărească o linie neagră pe fundal alb. Am ales acest proiect pentru că ni s-a părut interesant să-l construim și implica atât parte hardware, cât și parte software. Pe viitor ne-am propus să îmbunătățim algoritmul folosit pentru a participa la RoboChallenge.

Descriere generală

Blocuri principale

  • Microcontroller Atmega16 (alimentarea plăcuței este la 9V, microcontrollerul este la 5V)
  • Driver motoare L298N
  • Bandă 8 senzori
  • Alimentări
  • Motoare
Schemă robot

Componente
  • plăcuță de baza realizată la laborator
  • driver pentru motoare (folosește L298N cu diode pe output pentru a limita curentul de inducție ce se poate genera)
  • magician robot kit (motoare, șasiu, roți)
  • o bară senzori linie (QTR-8A)
  • o baterie 9V
  • 6 baterii 1.5V
  • suport pentru baterii
  • cablu conectare baterii
  • întrerupător
  • plăcuță de test (folosită ca suport pentru senzori)
  • fire de legătură
  • șuruburi
  • piulițe
  • clame de prins cablu
  • bandă dublu adezivă și bandă izolatoare
  • șofer :-)

Materiale ajutătoare
  • Pistol de lipit cu tot ce este necesar
  • Multimetru
  • Mini-bormașină (am găsit una în jur de 30 de lei pe Maica Domnului la Conex Electronics)
  • Trusă de scule
  • Traseu pentru roboțel

Hardware design

Descriere componente
  • Plăcuță La plăcuța de baza realizată în laborator am mai adăugat un întrerupător pentru a opri/porni circuitul. Pentru alimentare folosim o baterie de 9V care este conectată la ISP-ul de pe placa de bază.
  • Kit robot L-am cumpărat de la Robofun. A fost ușor de montat și ușor de adaptat pentru a prinde toate componentele pe el
  • Driver motoare Am cumpărat un driver deja asamblat de la cei de pe RoboFun însă putem spune că aceasta a fost cea mai proastă decizie luată în construirea robotului. Driverul era special creat pentru Arduino UNO și a trebuit să îi facem mici modificări (întrerupt conexiuni, creat conexiuni noi) pentru a funcționa cum trebuie. Întrucât nu aveam experiență foarte multă am pierdut mai bine de o zi făcând debugging până să reușim să ajungem la o primă versiune funcțională. Mai jos este schematicul driverului modificat.

  • Senzori Senzorii sunt conectați pe portul A al microcontrolerului. Mai multe detalii despre senzori pot fi găsite la: 960
Conexiuni
  • Am încercat pe cât posibil să folosim aceleași culori pentru fire astfel încât să știm care și unde merg: portocaliu - motor stânga, galben - motor dreapta, GND - este mereu negru, conexiune senzori - gri
  • Bateria de 9V este conectată la ISP pentru a alimenta plăcuța de baza.
  • Pe portul A (PA0 → PA7) al microcontrollerului sunt conectați senzorii. Alimentarea senzorilor se face de pe plăcuța de baza.
  • Pe portul D al microcontrollerului sunt conectate semnalele de enable (PD4 și PD5 corespunzători cu pinii 6 și 11 de pe driver) pentru motoare și ground-ul pentru driverul de motoare. Alimentarea motoarelor se face separat de la cele 6 baterii de 1.5V puse într-un suport, însă este nevoie de GND și de la plăcuța de bază.
  • Pe portul C al microcontrellerului sunt cele 4 input-uri ale driverului (PC0, PC1, PC2, PC3 care corespund pinilor 5,7, 10 și 12 de pe driver).

Software design

  • Am folosit Ubuntu 12.04 pe 32 de biți. Ca editor am folosit Vim și pentru compilare am folosit Makefile-ul din primul laborator.
  • Pentru a desena schematicul am folosit Eagle, iar pentru schema bloc am folosit Gliffy.com
  • Pentru a încărca programul .hex am folosit avrusbboot (trebuie folosit sudo atunci când se încarcă programul)
  • La începtul programului se fac inițializările necesare (Timer1, PWM), iar apoi într-o bucla infinită se interpretează valorile obținute de la senzori.
  • Algoritmul este destul de simplu și implementarea acestuia nu ne-a luat foarte mult timp. Se citesc valorile de la senzori și în funcție de acestea se mărește puterea într-un motor sau în altul. În cazul în care se detectează linia neagra la senzorii din dreapta (senz. 4,5,6,7), roboțelul va merge spre dreapta, iar în caz contrar (senz 1,2,3,4) acesta va merge spre stânga.
  • Conținutul funcției care seteaza puterea din motoare este:
/* set motor power */
void go(int speedLeft, int speedRight)
{
	/* left motor power */
	OCR1A = speedLeft;
	PORTC |= (1 << PC0);
	PORTC &=~(1 << PC1);
 
	/* right motor power */
	OCR1B = speedRight;
	PORTC |= (1 << PC2);
	PORTC &=~(1 << PC3);
}

Testare

  • Testarea hardware a fost destul de greoaie. Inițial am montat totul fără să ne facem prea multe griji pentru conexiuni greșite însă a fost nevoie să desfacem și să luăm la puricat fiecare conexiune. Recomandăm folosirea multimetrului și testarea pe bucăți cât mai mici posibile.
  • Pentru a testa algoritmul am verificat întâi dacă răspunde bine la curbe, iar apoi am printat un traseu (se găsesc foarte multe pe Internet)
  • Mai jos este un filmuleț cu o versiune aprope finală

The Adobe Flash Plugin is needed to display this content.

Rezultate obținute și concluzii

  • Realizarea roboțelului (drumuri până pe Maica Domnului, asamblat, debugging, testat, documentație) ne-a luat undeva în jur de 30 de ore
  • Roboțelul este funcțional: detecteaza linia și o urmărește destul de binișor, însă nu merge foarte repede.
  • Posibile îmbunătățiri ar fi: folosirea PID controller pentru a urmări linia mai bine și reducerea greutății.
  • A fost o experiență interesantă pe care am repeta-o.

Jurnal

  • Documentare
  • Cumpărat kit de robot, driver, senzori și suport pentru baterii (Robofun)
  • Montat kit de robot
  • Cumpărat fire, șuruburi, piulițe, baterii (str. Maica Domnului, Baumax)
  • Testat motoare
  • Modificat driver de motoare
  • Testat senzori
  • Scris algoritm
  • Testat roboțel pe un traseu mic și nu foarte greu
  • Scris documentație

Download

Recomandări

  • Documentare înainte de a cumpăra orice pentru a nu face prea multe drumuri până pe Maica Domnului
  • Realizare driver propriu
  • Mare atenție la scurturi
  • Testare conexiuni înainte de asambla roboțelul
  • Etichetare fire de conexiune
  • Mare atenție la cod. Noi uitam să dăm enable la unul din motoare și ne-am speriat crezând că e o problemă cu driverul
  • Montare senzori astfel încât să fie ușor de variat distanța la care sunt situați

Bibliografie

  • Datasheet microcontroller doc2466.pdf
  • Datasheet driver pentru motoare (L298N) L298N.pdf
  • Datasheet bară senzori QTR-8x.pdf
  • Laboratoarele de PM
  • Proiectele din anii trecuți pentru a ne face o idee generală asupra modului de construire și eventuale probleme
pm/prj2012/mdobre/1.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