Bonjour,
Dans le cadre du tpe nous avons choisi de créer une voiture autonome cependant nous sommes parti d'une voiture télécommandée et nous ne savons donc pas quelle est la fréquence du servo moteur. Y a t-il une fréquence donc un moyen de connaitre la fréquence de ce servo moteur ou alors est qu'il y a une norme commune a tous les servos moteurs ?
De plus le but de notre voiture autonome est de contourner les obstacles or un probleme se pose alors imaginons qu'il y est deux obstacles : ex un devant un sur la gauche comment faire
L'idéal serait que la voiture tourne a droite puis lorsqu'elle trouve une voie libre s'engage dans celle ci
Or le programme de la voiture lorsque l'obstacle se trouve devant le fait tourner a gauche puis a droite cependant si il reste un obstacle devant la voiture ne s'engage pas dans la voie libre et tourne a droite de nouveau a droite
Précision nous sommes sur arduino et que nos capteurs sont les HC SR04
(schéma fait sur paint pour expliquer le but de la voiture) y a t-il un code spécial pour ca, sachant qu'il y a 3 capteurs (pas a l'arrière) ou doit-on coder avec une triple conditions if (condition & condition2 & condition3)
ici le programme pas encore terminé
Merci d'avance a tout ceux qui peuvent nous aider et en esperant avoir ete compréhensible
Bonne journée
Code:#define trigPin 13 // capteur 1= capteur de devant #define echoPin 12 // capteur 1 #define trigPin2 11// capteur 2= capteur de derrière #define trigPin3 9// capteur 3 #define echoPin2 10 // capteur 2 #define echoPin3 8 // capteur 3 = gauche //capteur gauche int pinServo=8; int periode=20000; void setup() { Serial.begin (9600); // initialise la connexion pinMode(trigPin, OUTPUT);//mise en place des capteur pinMode(echoPin, INPUT); pinMode(trigPin2, OUTPUT); pinMode(echoPin2, INPUT); pinMode(trigPin3, OUTPUT); pinMode(echoPin3, INPUT); digitalWrite(pinServo,LOW) ; } void loop() { long duration, distance; digitalWrite(trigPin, LOW); // Added this line delayMicroseconds(2); // Added this line digitalWrite(trigPin, HIGH); // delayMicroseconds(1000); - Removed this line delayMicroseconds(10); // Added this line digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; // capteur 2 = capteur de droite long duration2, distance2; digitalWrite(trigPin2, LOW); // Added this line delayMicroseconds(2); // Added this line digitalWrite(trigPin2, HIGH); // delayMicroseconds(1000); - Removed this line delayMicroseconds(10); // Added this line digitalWrite(trigPin2, LOW); duration2 = pulseIn(echoPin2, HIGH); distance2 = (duration2/2) / 29.1; // capteur 3 capteur arriere long duration3, distance3; digitalWrite(trigPin3, LOW); // Added this line delayMicroseconds(2); // Added this line digitalWrite(trigPin3, HIGH); delayMicroseconds(10); // Added this line digitalWrite(trigPin3, LOW); duration3 = pulseIn(echoPin, HIGH); distance3 = (duration3/2) / 29.1; //capteur 4 capteur de gauche long duration4, distance4; digitalWrite(trigPin4, LOW); // Added this line delayMicroseconds(2); // Added this line digitalWrite(trigPin4, HIGH); // delayMicroseconds(1000); - Removed this line delayMicroseconds(10); // Added this line digitalWrite(trigPin4, LOW); duration4 = pulseIn(echoPin4, HIGH); distance4 = (duration4/2) / 29.1; if (distance < 7) { digitalWrite(pinServo,HIGH); setangle(180) ; // tourne a droite digitalWrite (pinServo,LOW) ; do{ delay(5000); }while (distance2<7) //jusqu’a que la voie soit libre //ensuite remettre droit digitalWrite(pinServo,HIGH); setangle(90) ; digitalWrite (pinServo,LOW) ; } if (distance2<7){ digitalWrite(pinServo,HIGH) ; setangle(45) ; //decaler a gauche digitalWrite(pinServo,LOW) ; delay(5000); digitalWrite(pinServo,HIGH); setangle(90) ; //remettre droit digitalWrite (pinServo,LOW) ; if(distance3<7){ digitalWrite(pinServo,HIGH) ; setangle(135) ; //decaler a gauche digitalWrite(pinServo,LOW) ; delay(5000); digitalWrite(pinServo,HIGH); setangle(90) ; //remettre droit digitalWrite (pinServo,LOW) } void setAngle(int a){ int duree=map(a,0,179,1000,2000);// on transforme l'angle en microsecondes et on stocke dans la variable duree digitalWrite(pinServo,LOW);//on met le pin à l'état bas for (int t=0;t<300;t++){ digitalWrite(pinServo,HIGH);// on envoie l'impulsion delayMicroseconds(duree); // pendant la bonne durée digitalWrite(pinServo,LOW); // on stoppe l'impulsion delayMicroseconds(duree); // on attend le temps restant pour atteindre la période } }
-----