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