Projet de robot évitant le obstacles (TPE) arduino uno

Bonjour à tous,
Je fais mon TPE sur l'intelligence artificielle, et je construis donc un robot qui évite les obstacles, avec une carte arduino uno, un sonar arduino et des servos...
Le problème vient pour la programation de la carte. Etant novice en la matiere, Je n'arrives pas à programmer la carte, de telle sorte que le sonar, placé sur un servo tourne pour detecter la presence d'obstacles avant de tourner.

Si quelqu'un peut m'aider pour le programme je suis preneur :wink:

Dans les exemples de code intégrés à l'IDE, il y a pourtant des exemples avec un servo

enfaite si j'ai bien compris, tu as une tourette qui tourne qui a dessus un sonar.

pourquoi mettre sur une tourette? car ton robot il se deplace normalement tout droit

avec un sonar si tu as la doc, tu as une grande plage de detection de 30° en general, sur3 3cm jusqu'a 4 metres en general.

voila un exemple pour le sonar
pour le servo, tu as plein d'exemple sur le net ou dans l'IDE

#include "Ultrasonic.h"

Ultrasonic ultrasonic(7);
void setup()
{
	Serial.begin(9600);
}
void loop()
{
	long RangeInInches;
	long RangeInCentimeters;
	RangeInInches = ultrasonic.MeasureInInches();
	RangeInCentimeters = ultrasonic.MeasureInCentimeters();
	Serial.println("The distance to obstacles in front is: ");
	Serial.print(RangeInInches);//0~157 inches
	Serial.println(" inch");
	Serial.print(RangeInCentimeters);//0~400cm
	Serial.println(" cm");
	delay(100);
}

Bonsoir,
Ton problème se situe où ?
La détection de l'obstacle ou le traitement logique floue?
@+

Merci pour vos reponses,
En fait le problème c'est que le sonar se trouve sur un servo, qui tourne. Je sais pas si c'est necessaire, et il me pose problème pour la programmation... pour le programme sinon j'essayes de le faire sans servo, avec le sonar fixer sur le robot. Est-ce qu'un d'entre vous pourrait me donner le programme complet ?
Merci @+

donner non, mais j'ai mis un exemple au dessus, a toi de t'aider avec cela..

SI j'ai bien compris, ce que tu veux faire, si ton sonar tourne a gauche, si il y a un obstacle, il ne reste tout droit ou tourne a droite.
et si il n'y a pas d'obstacle Alors ton robot tourne a gauche.

Avant de faire un test sur ton robot, deja fait le test de ton sonar a part,
et met ta main ou objet devant le sonar pour simuler un obstacle. Ensuite si tu sais faire ca, ajoute le a ton robot.

Bonsoir, Merci de ton aide, c'est exactement ça pour le servo.
Je vais faire un programme en m'aidant de ton programme merci :wink:

c'est un robot autonome style, aspirateur robot? ou un robot telecommandé?

comme je te dis test ton sonar a part, ensuite teste ton sonar sur ton robot sans le faire tourner, mais rien n'empeche d'equiper le robot, et quand tu sera a l'aise tu fais tourner ton sonar.

Mais perso, je ne vois pas l'interet de faire tourner le sonar, mais ca reste mon avis, mais si c'est pour realiser un niveau de dificulter, lance toi

en cherchant un peu, ca m'a pris moins d'1minutes

c'est pas le meme genre de projet, mais a toi de t'en inspirer

Merci pour vos réponses. J'ai avancé dans mon projet, mais j'ai un problème pour le code, car je ne sais pas comment brancher un sonar HC SR04, avec ce programme (où je dois brancher la borne echo, et la trigg). Si quelqu'un peut m'aider je suis preneur :wink:

#include <Servo.h>

/* This is the Third version of the obstacle avoidance robot.
Improvements over version 2:
1)Scans while moving and makes small corrections vs. stoping to scan and making large corrections.
Issues:

*/
//Robot speed is 8.875 in/s
//rotation spedd is 120°/s

//Declare Servos
Servo leftservo; //Left wheel servo
Servo rightservo; //Right wheel servo
Servo scanservo; //Ping Sensor Servo
const int pingPin = 7; //Pin that the Ping sensor is attached to.
const int leftservopin = 9; //Pin number for left servo
const int rightservopin = 10; // Pin number for right servo
const int scanservopin = 6; // Pin number for scan servo
const int distancelimit = 20; //If something gets this many inched from
// the robot it stops and looks for where fo go.

int scantime = 0;
int lastscantime = 0;
char sensorpos = 'L';
long oldtime = 0;
long timesinceturnedleft = 0;
long timesinceturnedright = 0;

//Setup function. Runs once when Arduino is turned on or restarted
void setup()
{
leftservo.attach(leftservopin); //Attach left servo to its pin.
rightservo.attach(rightservopin); // Attch the right servo
scanservo.attach(scanservopin); // Attach the scan servo
Serial.begin(9600);
delay(2000); // wait two seconds
}

void loop(){
int leftdistance = 90;
int rightdistance = 90;
go(); // if nothing is wrong the go forward using go() function below.
if(millis()>oldtime+300){
if(sensorpos == 'L'){
leftdistance = ping();
sensorpos = 'R';
}
else{
rightdistance = ping();
sensorpos = 'L';
}
oldtime = millis();
}
switch (sensorpos){
case 'L':
scanservo.write(70);
break;
case 'R':
scanservo.write(110);
break;
}
if(leftdistance<distancelimit){
if (millis()<timesinceturnedleft + 500){
goback(500);
turnright(120);
}
else{
turnright(25);
}
timesinceturnedright = millis();
}
if(rightdistance<distancelimit){
if(millis()<timesinceturnedright + 500){
goback(500);
turnleft(120);
}
else{
turnleft(25);
}
timesinceturnedleft = millis();
}
}

int ping(){
long duration, inches;
//Send Pulse
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
//Read Echo
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

// convert the time into a distance
inches = microsecondsToInches(duration);
Serial.print("Ping: ");
Serial.println(inches);
return round(inches);
}

void go(){
leftservo.write(30);
rightservo.write(150);
}

void turnleft(float t){
leftservo.write(150);
rightservo.write(150);
t=(t/120)*1000;

Serial.print("Turning left for this many seconds: ");
Serial.println(t);
delay(t);
}

void turnright(float t){
leftservo.write(30);
rightservo.write(30);
t=(t/120)*1000;

Serial.print("Turning right for this many seconds: ");
Serial.println(t);
delay(t);
}

void goforward(int t){
leftservo.write(30);
rightservo.write(150);
delay(t);
}

void goback(int t){
leftservo.write(150);
rightservo.write(30);
delay(t);
}

void stopmotors(){
leftservo.write(90);
rightservo.write(90);
}

char scan(){
int lval, lcval, cval, rcval, rval;
int maximum = 0;
int choice;

scanservo.write(25); //Look left
delay(300);
lval = ping();
if(lval>maximum){
maximum = lval;
choice = 1;
}

scanservo.write(45); //Look left center
delay(300);
lcval = ping();
if(lcval>maximum){
maximum = lcval;
choice = 2;
}

scanservo.write(90); //Look center
delay(300);
cval = ping();
if(cval>maximum){
maximum = cval;
choice = 3;
}

scanservo.write(135); //Look right center
delay(300);
rcval = ping();
if(rcval>maximum){
maximum = rcval;
choice = 4;
}

scanservo.write(155); //Look right
delay(300);
rval = ping();
if(rval>maximum){
maximum = rval;
choice = 5;
}

if(maximum<=distancelimit){choice = 6;}

scanservo.write(88); //center scan servo
delay(300);

Serial.print("Choice: ");
Serial.println(choice);
return choice;
}

long microsecondsToInches(long microseconds){
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds){
return microseconds / 29 / 2;
}