J'ai trouvé ma solution, mon robot est autonome mais il cogne quand meme les obstacle, certains non, il les évites à 10 cm de distance alors que d'autre non, il leur rentre dedans.
Je me suis servi de votre programme pour en créer un qui utiliserai 2 capteurs:
#include <Servo.h>
int vitesse1 = 6;
int vitesse2 = 5;
int direction1 = 7;
int direction2 = 4;
int capteurD = 0; // broche analogique utilisé pour connecter le capteur
int capteurG = 0; // broche analogique utilisé pour connecter le capteur
int valD; // variable pour lire la valeur de la broche analogique
int valG; // variable pour lire la valeur de la broche analogique
Servo myservo; // créer un objet de servo pour contrôler un servomoteur
void setup()
{
myservo.attach(2); // attache le servo sur la broche 2 à l'objet servo
int i;
for(i=4;i<=8;i++)
pinMode(i, OUTPUT); //met les pin 4,5,6,7 en mode sortie
}
void loop()
{
valD = analogRead(0); // lit la valeur du capteur (valeur comprise entre 0 et 115)
valD = map(valD, 0, 115, 0, 300); // l'échelle pour l'utiliser avec le servo (valeur entre 0 et 300)
myservo.write(valD); // définit la position d'asservissement en fonction de la valeur à l'échelle
delay(1000); // attend que le servo pour y arriver
valG = analogRead(2); // lit la valeur du capteur (valeur comprise entre 0 et 115)
valG = map(valG, 0, 115, 0, 300); // l'échelle pour l'utiliser avec le servo (valeur entre 0 et 300)
myservo.write(valG); // définit la position d'asservissement en fonction de la valeur à l'échelle
delay(1000); // attend que le servo pour y arriver
if (valD > 200) // si on est à moins de quelque cm d'un obstacle
{
Moteur1(0,true); //j’arrête le moteur 1
Moteur2(0,true); // j’arrête le moteur 2
delay(300); //j’attends quelque secondes
Moteur1(255,true); //j'avance le moteur 1 a fond
Moteur2(0,true); // j’arrête le moteur 2
delay(400); //j’attends quelque secondes
Moteur1(255,true); //J'avance tout droit en mettant les 1 moteurs à fond
Moteur2(255,true); //J'avance tout droit en mettant les 2 moteurs à fond
}
else
{
Moteur1(255,true);
Moteur2(255,false);
}
if (valG > 200) // si on est à moins de quelque cm d'un obstacle
{
Moteur1(0,true); //j’arrête le moteur 1
Moteur2(0,true); // j’arrête le moteur 2
delay(300); //j’attends quelque secondes
Moteur1(0,true); //j'avance le moteur 1 a fond
Moteur2(255,true); // j’arrête le moteur 2
delay(400); //j’attends quelque secondes
Moteur1(255,true); //J'avance tout droit en mettant les 1 moteurs à fond
Moteur2(255,true); //J'avance tout droit en mettant les 2 moteurs à fond
}
else
{
Moteur1(255,true);
Moteur2(255,false);
}
}
void Moteur1(int valeur_vitesse, boolean sens_avant)
{
analogWrite(vitesse1,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
if(sens_avant)
{
digitalWrite(direction1,HIGH);
}
else
{
digitalWrite(direction1,LOW);
}
}
void Moteur2(int valeur_vitesse, boolean sens_avant)
{
analogWrite(vitesse2,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
if(sens_avant)
{
digitalWrite(direction2,HIGH);
}
else
{
digitalWrite(direction2,LOW);
}
}
Cependant, j'aimerais traduire le signal reçu des http://www.zartronic.fr/capteur-de-distance-ir-sharp-gp2y0a21-1080cm-p-288.html
en distance, pour que je puisse le faire s'arreter dès qu'il détecte un objet à 10 cm.
Dite moi si mon programme ne va pas et encore merci pour votre aide !
