Bulă

Introducere

Bulă este un roboțel Line Follower-elor. Urmarește o linie neagra pe fundal alb.

Descriere generală

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.

Hardware Design

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.

800px-arduino_duemilanove_2009b.jpg

Software Design

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);
  }
}

Rezultate Obţinute

Am un robotel functional. Bulă urmareste o linie neagra pe fond alb.

1-1-.jpg 1-2-.jpg 1-3-.jpg 1-4-.jpg 1-5-.jpg 1-6-.jpg 1-7-.jpg 1-8-.jpg 1-9-.jpg 1-10-.jpg 1-11-.jpg

Concluzii

  • Nu e chiar atat de greu sa faci un line follower
  • Nu mai folosi lucruri imprumutate (programatorul → cand am ramas fara, a trebuit sa adaug un arduino ca sa il pot programa)
  • Daca robotul merge cu spatele, cel mai probabil ai alimentat motoarele invers ;)

Bibliografie/Resurse

pm/prj2011/rtataroiu/bula.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