Go Down

Topic: Ardino n'execute pas le même prgm lorsqu'elle est branchée au COM/débranchée (Read 801 times) previous topic - next topic

simon_rapp1

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 :
Code: [Select]

//-- 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

infobarquee

bonjour,
demande à un modo de supprimer ton premier post.

pourquoi mettre

 
Code: [Select]
// Moteur A - Plein régime
  analogWrite(ENA,255);
 // Moteur B - Plein régime
  analogWrite(ENB,255);


si tu remets la même chose plus bas dans un else

Code: [Select]
else
{
  // Moteur A - Plein régime
  analogWrite(ENA,255);
 // Moteur B - Plein Régime
  analogWrite(ENB,255);
}



tu es certain que la distance n'est pas <15 plus souvent que prévu?
vérifie tes branchements
alimentation?
AUCUNE AIDE PAR MP

simon_rapp1

J'ai modifié mon code :
Code: [Select]
//-- 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);
}

  }

Mais le problème reste le même. Mes branchement mon l'air OK. Du coté de l'alimentation de la carte, j'utilise pour commander mes moteurs un L298N (shield non-officiel) qui dispose d'une sortie 5v sur laquelle est branchée ma carte MEGA 2560.

simon_rapp1


infobarquee

Quote
Mais le problème reste le même. Mes branchement mon l'air OK. Du coté de l'alimentation de la carte, j'utilise pour commander mes moteurs un L298N (shield non-officiel) qui dispose d'une sortie 5v sur laquelle est branchée ma carte MEGA 2560.
tu n'as rien changé dans le code
2 fois les même lignes avant ton if et dans le else

Quote
tu es certain que la distance n'est pas <15 plus souvent que prévu?
ou que l'alim est suffisante?
AUCUNE AIDE PAR MP

infobarquee

PS : comment demander au modo de supprimer mon 1er post ?
Merci
d'aller sur ce 1er post et de clicker sur report to moderator
AUCUNE AIDE PAR MP

simon_rapp1

Excusez-moi, je l'ai bien modifié, mais j'ai fais un mauvais Ctrl+C.

simon_rapp1

Bonjour,
Apres quelques recherches, j'aui entendu parler de la mémoire EEPROM. Est-ce la solution au problème ?

kamill

Apres quelques recherches, j'aui entendu parler de la mémoire EEPROM. Est-ce la solution au problème ?
Bonjour,

Non, ça n'a rien avoir

Je n'ai pas compris comment sont alimentés la carte mega et le shield L298N. Est ce que l'alimentation est suffisante?

simon_rapp1

Bonjour,
La carte L298N est alimenté sur un transformateur 12V branché sur un prise électrique. Le robot est donc filaire mais c'est du provisoire; il possèdera bientôt un batterie 12V. LA carte Mega est reliée sue une sortie 5V présente sur la carte L298N.
Bonne Journée

Go Up