Bonjour,
Je fais appel a vous car j'ai un souci avec un programme. je suis en train de mettre au point un robot éviteur d'obstacle en utilisant 1 carte Mega 2560, un L298N et un capteur HC SR-04.
- Lorsque ma carte est raccordé à l'ordinateur, tout se passe bien :
Il avance, lorsqu'il detecte un obstacle, recule, tourne sur lui-même(robot a chenilles) puis repart. - Lorsque ma carte n'est pas raccordé à l'ordinateur, le programme n'est pas exécuté de la même façon : Il recule, Il tourne, il recule, il tourne,...
Voici mon programme :
//-- MOTEUR A --
int ENA=5; //Connecté à Arduino pin 5(sortie pwm)
int IN1=6; //Connecté à Arduino pin 6
int IN2=7; //Connecté à Arduino pin z
//-- MOTEUR B --
int ENB=8; //Connecté à Arduino pin 8(Sortie pwm)
int IN3=9; //Connecté à Arduino pin 9
int IN4=10; //Connecté à Arduino pin 10
//--HC-SR04--
#define trigPin 3
#define echoPin 2
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT); //Trig est une sortie
pinMode(echoPin, INPUT);
pinMode(ENA,OUTPUT);//Configurer les broches comme sortie
pinMode(ENB,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
digitalWrite(ENA,LOW);// Moteur A - Ne pas tourner (désactivation moteur)
digitalWrite(ENB,LOW);// Moteur B - Ne pas tourner (désactivation moteur)
// Direction du Moteur A
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
// Direction du Moteur B
// NB: en sens inverse du moteur A
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //Trig déclenché 10ms sur HIGH
digitalWrite(trigPin, LOW);
// Calcul de l'écho
duration = pulseIn(echoPin, HIGH);
// Distance proportionnelle à la durée de sortie
distance = duration*340/(2*10000); //Vitesse du son théorique
// Moteur A - Plein régime
analogWrite(ENA,255);
// Moteur B - Plein régime
analogWrite(ENB,255);
if (distance < 15)
{
analogWrite(ENA,0);
analogWrite(ENB,0);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENA,255);
analogWrite(ENB,255);
delay(1500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
delay(1500);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENA,255);
analogWrite(ENB,255);
}
else
{
// Moteur A - Plein régime
analogWrite(ENA,255);
// Moteur B - Plein Régime
analogWrite(ENB,255);
}
}
Si quelqu'un pourrait m'aider, cela m'aiderait beaucoup.
Je vous remercie d'avance
Bonne soirée