lijnvolgrobot

Hallo mensen,

Mijn naam is Bart en op dit moment ben ik een line following robot aan het maken, op het gebied van Arduino programmeren ben ik helemaal nieuw.
Voordat mensen gaan zeggen dit vraagstuk kan je ook googlen, heb ik al heel veel gedaan en ik ben als erg ver gekomen. De robot is geheel bedraad en de code is grotendeels af.

Ik heb een foto van de robot toegevoegd.
Imgur
Hier is te zien dat ik op de Arduino een sensor shield v5 geplaatst heb en dat ik werk met twee motoren die aangestuurd worden door een motorshield L298N. boven de auto is een zwenkwiel geplaatst en zijn 4 IR sensoren aangesloten.

Het probleem waar ik tegen aanloop:

  • De auto kan niet twee keer het parcour afleggen, de auto zal eindeloos blijven doorrijden. Hier moet een counter geprogrammeerd worden.
  • De auto kan sommige bochten goed maken, maar rijd geregeld uit de baan.
    Hij kan zichzelf dus ook niet goed corrigeren.

Hieronder de code die ik geschreven heb:

//Motor A motor rechts
int enA= 3;
int MotorA1 = 4; // 
int MotorA2 = 5; // 

//motor B motor links
int enB = 6;
int MotorB1 = 7; //  
int MotorB2 = 8; // 

// Lichtsensor uitlezen 

int tcrtLinks = A2; // Linker tcrt op analoge pin 2
int tcrtWaardeLinks = 0; // Rechter tcrt op anloge pin 5

int tcrtMLinks = A3; // Linker tcrt op analoge pin 2
int tcrtWaardeMLinks = 0; // Rechter tcrt op anloge pin 5

int tcrtMRechts = A4; // Linker tcrt op analoge pin 2
int tcrtWaardeMRechts= 0; // Rechter tcrt op anloge pin 5

int tcrtRechts = A5; // DEZE POORT AANPASSEN KAN GEWOON IN DIGITAAL
int tcrtWaardeRechts = 0; // Rechter tcrt op anloge pin 5

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(enB,OUTPUT);
pinMode(MotorA1, OUTPUT); // maak de motor pinnen output
pinMode(MotorA2, OUTPUT);
pinMode(MotorB1, OUTPUT);
pinMode(MotorB2, OUTPUT);
Serial.begin(9600);;
} 
void loop() { 

tcrtWaardeLinks = analogRead(tcrtLinks); 
Serial.print("WaardeLinks: ");Serial.print(tcrtWaardeLinks); 

tcrtWaardeMLinks = analogRead(tcrtMLinks); 
Serial.print("WaardeMLinks: ");Serial.print(tcrtWaardeMLinks); 

tcrtWaardeMRechts = analogRead(tcrtMRechts); 
Serial.print(" WaardeMRechts: ");Serial.println(tcrtWaardeMRechts); 

tcrtWaardeRechts = analogRead(tcrtRechts); 
Serial.print(" WaardeRechts: ");Serial.println(tcrtWaardeRechts); 

if (tcrtWaardeLinks > 200) {
    
  links();
delay(10);

}
else if (tcrtWaardeMLinks > 200) {

  links();
delay(10);

  
} 
else if (tcrtWaardeMRechts > 200) {

  rechts();
delay(10);

  
}
else if (tcrtWaardeRechts > 200) {

  rechts();
delay(10);

  
}
else {
  vooruit();}
}
void stop() { 
analogWrite(enA,0);
analogWrite(enB,0);
}

void achteruit() { 
digitalWrite(MotorA1,HIGH); // Snelheid motor A vooruit 0
digitalWrite(MotorA2, LOW); // Snelheid motor A achteruit 'snelheid'(255) 
digitalWrite(MotorB1, HIGH); // Snelheid motor B vooruit 0 
digitalWrite(MotorB2, LOW); // Snelheid motor B achteruit 'snelheid'(255) 
analogWrite(enA,70);
analogWrite(enB,70);
} 

void vooruit() {  
digitalWrite(MotorA1,LOW); // Snelheid motor A vooruit 0
digitalWrite(MotorA2, HIGH); // Snelheid motor A achteruit 'snelheid'(255) 
digitalWrite(MotorB1, LOW); // Snelheid motor B vooruit 0 
digitalWrite(MotorB2, HIGH); // Snelheid motor B achteruit 'snelheid'(255) 
analogWrite(enA,70);
analogWrite(enB,70);
}

void links() {  
digitalWrite(MotorA1,LOW); // Snelheid motor A vooruit 0
digitalWrite(MotorA2, HIGH); // Snelheid motor A achteruit 'snelheid'(255) 
digitalWrite(MotorB1, HIGH); // Snelheid motor B vooruit 0 
digitalWrite(MotorB2, LOW); // Snelheid motor B achteruit 'snelheid'(255) 
analogWrite(enA,95);
analogWrite(enB,95);
}

void rechts() { 
digitalWrite(MotorA1,HIGH); // Snelheid motor A vooruit 0
digitalWrite(MotorA2, LOW); // Snelheid motor A achteruit 'snelheid'(255) 
digitalWrite(MotorB1, LOW); // Snelheid motor B vooruit 0 
digitalWrite(MotorB2, HIGH); // Snelheid motor B achteruit 'snelheid'(255) 
analogWrite(enA,95);
analogWrite(enB,95);
}

De auto moet het volgende kunnen doen:

  • haakse bochten maken naar links en rechts
  • flauwe bochten maken naar links en rechts
  • 2x het parcour afleggen, de finishlijn is zichtbaar gemaakt door een stuk tape dat loodrecht op een recht stuk baan is geplakt.
    De auto rijdt op een lichte ondergrond, op deze ondergrond is het parcour uitgezet met zwarte tape van 20mm breed.

Ik hoop dat jullie mij kunnen helpen,
groetjes Bart

Dag Bart
Ik zie geen foto van je robot :frowning:
Als ik zo eens naar je code kijk moet je gewoon een beetje graderen. Je hebt nu links rechts en vooruit wat nogal binair is.
Je kan beter werken met een snelheid en richting.
richting 0 is dan vooruit
richting 255 is extreem rechts
richting -255 is extreem links
richting 10 is zwak naar rechts
Met vriendelijke groet
Jan

Wanneer moet je het project inleveren?

terror-bart's plaatje

~~ ~~[img]http://imgur.com/1xuLAc3[/img]~~ ~~
; hmm, werkt niet

Imgur

nicoverduin:
Wanneer moet je het project inleveren?

Kom op Nico, niet zo negatief :slight_smile:

"Voordeel van de twijfel" en "Onschuldig tot het tegendeel bewezen is" en dat soort dingen :wink:

Dit heeft niets met negatiefs te maken. Maar als wij het huiswerk gaan maken van een toekomstige generatie engineering zijn we verkeerd bezig...... maar als jij dit negatief vindt... so be it....

Ja hoor, werkt best.
In dit geval moest er schijnbaar nog .jpg achter geplakt worden.
Forumsoftware doet een automatische resize.
Door m klikbaar te maken, kun je nu er dus op klikken en naar het origineel gaan.
Daar kun je dan nog een keer er op klikken om m full screen in je browser te zien.

Er is nog wel het een en ander aan het prototype op de foto aan te merken.
Want hoewel er netjes bandjes, krimpkous en (correct aangeknepen) adereindhulzen zijn gebruikt, hangen er draden los en zitten er op het oog onnodige koppelingen in.
Op het 2D plaatje is niet te zien hoe goed het zal gaan, maar lijkt het er op dat er wel eens een of 2 draden gegrepen kunnen worden door de wielen.
Maar daar gingen de vragen niet over.
Sterker nog:

Hoi Bart, welkom.

Ik zie in jouw bericht 2 ietwat voortijdige conclusies, ik zie 3 voorwaarden waaraan jouw vehikel moet voldoen, en ik zie wat nadere informatie omtrent het parcours.
En dat je hoopt geholpen te worden.
Maar ik zie geen te beantwoorden vragen.
Zoals al aangegeven, het werk zul je zelf moeten doen, ook al vallen de mussen dood van het dak.

Daarom wat tips:

Maak een teller die telt hoe vaak je de start/finish al gezien hebt.
Bedenk eens iets waardoor je meerdere sensorwaarden tegelijkertijd beoordeelt, want dat doe je nu niet.
Het zou zomaar kunnen dat je daarmee meteen al, al jouw problemen kunt oplossen.
Stel gerichte vragen hier op het forum, dan schiet je een stuk beter op.
En die delays die heb je er nu natuurlijk inzitten om te kunnen debuggen...

sterretje:
~~ ~~[img]http://imgur.com/1xuLAc3[/img]~~ ~~
; hmm, werkt niet

Je moet altijd de linkjes van Imgur hebben die op .jpg eindigen :smiley:
Edit: Oh sorry MAS zei het ook al.

Als eerste bedankt voor de reacties.

#Jantje, idd een goed idee twee programmaatjes erbij maken voor een flauwe en scherpe bocht.

#nicoverduin, dit is mijn eerste keer programmeren met een stukje regeltechniek erin. De auto werkt wel, maar hij weigert af en toe een bocht en rijd hij gelijk de baan uit. Ik ben al uren lang bezig geweest met waardes veranderen.

#MAS3, je hebt helemaal gelijk het autotjes ziet er rommelig uit, ik had eerst alles bij elkaar getyript. Maar, omdat er wat verkeerd was aangesloten heb ik het weer doorgeknipt, alles is nu goed aangesloten. Ik wacht tot de auto softwarematig goed werkt en dan werk ik alles weer keurig weg. Inclusief die loshangende adereindhuls :wink:

akatchi:
Je moet altijd de linkjes van Imgur hebben die op .jpg eindigen :smiley:
Edit: Oh sorry MAS zei het ook al.

Ja klopt de volgende keer zal ik het plaatje beter opsturen.

Maar voor de duidelijkheid, de auto doet het gewoon, hij maakt bochten. Maar geregeld vliegt hij uit een bocht terwijl ik zie dat de sensor wel een bocht naar links herkend. Het commentaar van Jantje neem ik zeker mee. Ook moet er een counter inzitten dat hij het parcour 2x rijd, ik zou eigenlijk niet weten hoe ik on counter moet programmeren.
Is er niet een mogelijkheid om de software slimmer te maken, of denken jullie dat het een kwestie van afstellen is?? (hierbij te denken aan motorsnelheid, programma’s voor een scherpe en flauwe bocht, verschuiven van ir sensoren)

Groetjes, Bart

Heb je mijn hele reply gelezen (en begrepen) ?

Een counter doet dit (pseudo code):

if (event){
  lap ++;
  Blink headlights;
  Hit brake for a small amount of time;
  }

En dan kun je dus daarna het volgende doen:

if lap == 2{
  Do donut;
  Hit brake;
  }

Das niet zo heel erg ingewikkeld toch ?

nicoverduin:
Dit heeft niets met negatiefs te maken. Maar als wij het huiswerk gaan maken van een toekomstige generatie engineering zijn we verkeerd bezig...... maar als jij dit negatief vindt... so be it....

Ik zie nergens dat dit om een school opdracht gaat, vandaar mijn originele commentaar. Misschien hen ik het gemist.

Bedankt voor de tips, ik ga het verwerken in mijn project.

groetjes Bart