Bulă este un roboțel Line Follower-elor. Urmarește o linie neagra pe fundal alb.
Pentru sasiu am folosit ceva in genul acestui kit
Am asamblat sasiul, am folosit motoarele, rotile si suportul pentru bateria de 9 V.
Am renuntat la suportul pentru 2 baterii de 1.5 V pentru ca aveam nevoie de o tensiune mai mare, asa ca l-am inlocuit cu un suport pentru 4 baterii AA.
Am renuntat la rotita folosita pentru suport (a treia rotita), pentru ca incomoda robotelul in timpul intoarcerilor. In locul ei am pus un led mare.
Am folosit alta placuta decat cea de la prima etapa. Am folosit un microcontroller ATtiny2313 si o punte H L293 pentru comanda motoarelor.
Pentru senzori am folosit un LED infrarosu (emitator) si un fotodetector IR (receptor).
Am scris programul pentru controller si robotelul se misca binisor (merge inainte, diferentia albul de negru, dar nu prea urmarea linia). Problema era din cod. Spre finalul proiectului, am vrut sa rescriu codul, dar nu am mai putut face rost de programator pentru attiny. Atunci (din lipsa de timp) i-am mai adaugat o extensie, o placuta Arduino Duemilanove, pe care o puteam programa usor, prin usb, fara sa am nevoie de programator sau altceva. Am adaugat Arduino-ul si am realizat conexiunile necesare pentru a putea comanda robotelul din microcontrollerul de pe Arduino.
Initial am scris cod pentru ATtiny2313.
void main() { ddrb=0xff; portb=0x00; while (1) { forward(); if (PIND.b4 == 1 && PING.b5==0) right(); else if (PIND.B4==0 && PIND.b5==1) left(); } } void forward() { PORTB=0b10010000; Delay_ms(500); } void right() { PORTB=0b01110000; Delay_ms(500); } void left() { PORTB=0b11100000; Delay_ms(500); }
Apoi, in urma testelor, am observat ca nu functiona chiar cum trebuie, si cum nu mai puteam face rost de programator pentru a rescrie programul pe microcontroller, am hotarat sa schimb microcontrollerul cu unul pe care il pot programa. Asa ca am adaugat ca extensie o placuta Arduino Duemilanove, si am realizat programul pentru el:
#define M11 3 #define M12 9 #define M21 10 #define M22 11 int negru = 600; void setup(){ Serial.begin(9600); pinMode(M11,OUTPUT); pinMode(M12,OUTPUT); pinMode(M21,OUTPUT); pinMode(M22,OUTPUT); } void loop(){ int SenzS = analogRead(0); int SenzD = analogRead(1); set_motors(255,255); if(SenzS>negru){ set_motors(-255,255); }else if(SenzD>negru){ set_motors(255,-255); } } int set_motors(int motA, int motB){ if(motA>=0){ analogWrite(M11,motA); analogWrite(M12,0); } if(motA<0){ analogWrite(M11,0); analogWrite(M12,-1*motA); } if(motB>=0){ analogWrite(M22,motB); analogWrite(M21,0); } if(motB<0){ analogWrite(M22,0); analogWrite(M21,-1*motB); } }