Project begeleiding robot project

Hallo allemaal.

Ik ben nu al een tijdje bezig met het maken van een robot. De robot zit nu al ver in mekaar alleen toch kom ik niet verder. Mijn kennis van C++ is wat beperkt en hierdoor kom ik er dan ook niet aan uit.

Wat ik wil maken is een robot die tussen objecten door kan rijden terwijl hij zijn omgeving scaned met een ultrasonic range finder afstandssensor. De robot moet zich dan vervolgens een weg tussen de objecten weten te banen.
De ultra sonic range finder zal hierbij via een servo naar links en rechts bewegen tijdens het rijden.

Los van mekaar kan ik alles programeren. Dat is relatief eenvoudig. Alleen van hoe ik er een werkent geheel van moet maken heb ik nog even geen weet .

Nu wil ik dus de code van rijden met de range finder combineren met de code van servo sweep example.

Hoe zou ik dit het beste kunnen doen?
Hoe zou ik het beste de benodigde kenis kunnen verkrijgen?
Wat voor oefen materiaal of tutorials zou ik kunnen gebruiken om verder te komen?

Bij voorbaat bedankt voor de respons. Elk antwoord is welkom en zal worden gewardeert.

code rijden en draaien bij opstakel met een range finder:

////////////////////////////////////

const int pingPin = 4;   // puls pin range finder
const int signal =  3;   // singal pin range finder
int links       =  10;   // int links rechts is de pwm aansturing op de linker en rechter motor via een L293d ic
 int rechts      =  9;   //
int duration =0;         // 
int cm =0;
int rechtsVoltage=6;     // motor voltage rechts
int linksVoltage =5;     // motor voltage links
float rechtsv;           // motor voltage rechts
float linksv;            // motor voltage links
float correctie =1;
void setup() {
 
  pinMode(linksVoltage,INPUT);
  pinMode(rechtsVoltage,INPUT);
  pinMode(pingPin, OUTPUT);
  pinMode(signal, INPUT);
  pinMode(links,OUTPUT);
  pinMode(rechts,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(13,OUTPUT);
  digitalWrite(8,HIGH);
  digitalWrite(13,HIGH);
  Serial.begin(9600);

  ////////////////////////////////////////
}





void loop()
{
 afstandsensor();
 motors();

}
void afstandsensor(){        ///////////////////////////////  de code van de afstandsensor //////////////////////////
  // establish variables for duration of the ping, 
  // and the distance result in inches and centimeters:
  

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  
  digitalWrite(pingPin, LOW);
  delayMicroseconds(5);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
 
  duration = pulseIn(signal, HIGH);
  cm = duration/29;      /////////// afstand gemeten door de sensor //////////////
  delay(50);
 

}
void motors(){                ///////////////////////// de code van de motors ////////////////////////////////
  if(cm>80){
   analogWrite(links,200*correctie);
  analogWrite(rechts,200);
  delay(1000);
  
    linksv =analogRead(linksVoltage);             ///////// dit blok code bevat alleen het stukje corectie dat er voor zorgt dat de motors ongeveer even snel draaien/////
    delay(10);
    Serial.print("linksv");
    Serial.println(linksv);
    rechtsv=analogRead(rechtsVoltage);
    Serial.print("rechtsv");
    Serial.println(rechtsv);
    delay(10);
    correctie = rechtsv/linksv;
    Serial.print("correctie");
    Serial.println(correctie);
 
  /*Serial.println("links");
  Serial.print(linksv);
  Serial.println("rechts");
  Serial.print(rechtsv);
  Serial.println("correctie");
  Serial.print(correctie);
  delay(10);*/                                                     ///////////// einde corectie 
    
}
  else{                                                                  /////////////// else, er is een obstakel en de robot zal draaien om het te ontwijken
 analogWrite(links,0);
 analogWrite(rechts,150);
 delay(725);
}
}

code servo sweep example:

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  myservo.attach(11);  // attaches the servo on pin 9 to the servo object 
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
} 

\\\\\\\\\\\\\\\\\\\\\\\\\\\

EDIT by Jantje:added code tags

Het is net als een taal leren...... doen... doen....doen Met andere woorden, leer de basis, ga er mee oefenen, probeer een tutorial eens anders te maken en los je problemen op die je ongetwijfeld tegenkomt. Niet gelijk naar een forum rennen voor de kant en klare oplossing. De meeste vaklui hier hebben allemaal hun eigen historie waarbij zij de kennis ook zelf eigen hebben moeten maken. En dat doe je door te oefenen.... oefenen... en oefenen. De wat ouderen onder ons hebben geen toegang gehad tot het internet en moesten zelfstudie doen uit bibliotheken, een cursus (als je mazzel had) en tijdschriften. Het voordeel is wel dat je leert leren... En fenomeen dat tegenwoordig erg snel lijkt te verdampen... Tot en met "googelen" an toe. Van week was er iemand die vroeg over I2C op de Arduino.... Geen moment dat het bij die persoon opkwam om beide woorden ff in te tikken.... En als je het hebt over oefen materiaal...... wederom google eens..... met 4 woorden vind je dit : http://forum.arduino.cc/index.php?topic=56205.0 Wat toch een vrij hoog gehalte van overeenkomstigheid heeft.

Je bent al een goed stuk op weg.

De loop kan echter een stuk eenvoudiger en zal je de mogelijkheid geven te reageren op obstakels. Je hoeft echt geen loop in de loop te maken.

int step = 1;
int position = 0;
int distance = 0;
void loop()
{
  position = position + step;
  //set the servo to the new position
  myservo.write(pos);
  //read the distance sensor - create this method yourself
  distance = ReadTheSensor();
  //move the robot depending on the distance and the direction we measured it  - create this method yourself
  DoSomethingWithTheMotorsSoWeMove(distance, pos);
  delay(10);
  //switch directions on extremes
  if (position == 180) step = -1;
  if (position == 0) step = 1;  
}

HTH

Edit by jantje: added code tags

@robotmaker123 en @Bert Gelieve de code tags te gebruiken (het spoorweg teken) want dat leest een stuk makkelijker.

Met vriendelijke groet Jantje