Robot suiveur de ligne (avec 2 infra-rouge) rajouter un capteur ultrason

Voici mon programme qui sert a faire avancer un robot et grâce a une ligne noir au sol et avance selon les 2 infra-rouge et je n'arrive pas a ajouter le programme pour faire fonctionné le capteur ultrason car de
-une je ne sais pas ou le placer sur la carte Arduino
-deux je ne sais pas comment ajouter le programme
-J'ai des matériaux limité pour faire ce projet
Merci a vous de m'aidez ( ça fais 6H que je fais ce programme et que j'essaye de installé sur l'Arduino)

int IN1 = 7;
int IN4 = 6;
int GA = 12, GB = 3, DA = 13, DB = 11;

void setup()
{
  Serial.begin(9550);
  pinMode(IN1, INPUT);
  pinMode(IN4, INPUT);
  pinMode(DA, OUTPUT);
  pinMode(DB, OUTPUT);
  pinMode(GA, OUTPUT);
  pinMode(GB, OUTPUT);
}

void droite()
{
  digitalWrite(DA, LOW);
  analogWrite (DB, 1000);
  analogWrite (GA, 1000);
  digitalWrite(GB, LOW);
}

void gauche()
{
  analogWrite(DA, 1000);
  digitalWrite(DB, LOW);
  digitalWrite(GA, LOW);
  analogWrite(GB, 1000);

}


void avancer()
{
  digitalWrite(DA, LOW);
  analogWrite(DB, 1000);
  digitalWrite(GA, LOW);
  analogWrite(GB, 1000);

}

void loop()
{
  int in1_val = digitalRead(IN1);
  int in4_val = digitalRead(IN4);

  if ((in1_val) && ( ! in4_val))
  {
    Serial.print("Tourner a gauche");
    gauche();
  }
  else if (( ! in1_val) && (in4_val))

  {
    Serial.print("Tourner a droite");
    droite();
  }

  else
  {
    Serial.print("tout droit");
    avancer();
  }

}

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Désolé

Quel capteur (un lien vers le capteur par exemple) pour faire quoi?

HC-SR04 pour pouvoir que il détecte les obstacle et freine via les moteur

Bonjour,
Peux tu mettre les liens vers les documentations (data ou site du vendeur) des composants utilisés (capteur ultrason, capteur de ligne, carte driver moteurs...).

bien sur donc j'utilise :

-Arduino Uno
-Arduino motor Shield
-2 capteur infrarouge Line Finder
-2 moteur
-5 pille AA
-capteur Ultrason HC-SR04

Dans le lien que tu donnes pour le HC-SR04 il y a un programme de démonstration assez simple.
Donc tu prends dans le setup() de ce programme les lignes qui concernent la configuration des I/Os nécessaires à la gestion du HC-SR04. Et tu les colles dans le setup() du programme de ton robot.

Dans loop tu repères les lignes qui permettent de faire une mesure:

  • génération du top de déclenchement de la mesure
  • mesure de l'impulsion renvoyée par le capteur
  • calcul de la distance

Tu les colles dans le loop() de ton programme ou mieux tu en fais une fonction que tu appelleras dans loop().

Ensuite tu utilises l'information de distance pour ce que tu as prévu d'en faire

Suite du sujet Robot suiveur de ligne (avec 2 infra-rouge) rajouter un capteur ultrason :

Merci je vais essayer sa

j'ai rajouté sa sur le programme mais je n'arrive pas a faire la fonction permettant d'arrêter les moteur quand le capteur perçois un obstacle

int IN1 = 7;
int IN4 = 6;
int GA = 12, GB = 3, DA = 13, DB = 11;
int trig = 12;
int echo =11;
long lecture_echo;
long cm;


void setup()
{
  Serial.begin(9550);
  pinMode(IN1, INPUT);
  pinMode(IN4, INPUT);
  pinMode(DA, OUTPUT);
  pinMode(DB, OUTPUT);
  pinMode(GA, OUTPUT);
  pinMode(GB, OUTPUT);
   pinMode(trig, OUTPUT); 
  digitalWrite(trig, LOW); 
  pinMode(echo, INPUT); 
  



}

void droite()
{
  digitalWrite(DA, LOW);
  analogWrite (DB, 1000);
  analogWrite (GA, 1000);
  digitalWrite(GB, LOW);
}

void gauche()
{
  analogWrite(DA, 1000);
  digitalWrite(DB, LOW);
  digitalWrite(GA, LOW);
  analogWrite(GB, 1000);

}


void avancer()
{
  digitalWrite(DA, LOW);
  analogWrite(DB, 1000);
  digitalWrite(GA, LOW);
  analogWrite(GB, 1000);

}

void moteureteint()
{
  digitalWrite(DA, LOW);
  analogWrite(DB, LOW);
  digitalWrite(GA, LOW);
  analogWrite(GB, LOW);

}





void loop()
{





  
  int in1_val = digitalRead(IN1);
  int in4_val = digitalRead(IN4);

  if ((in1_val) && ( ! in4_val))
  {
    Serial.print("Tourner a gauche");
    gauche();
  }
  else if (( ! in1_val) && (in4_val))

  {
    Serial.print("Tourner a droite");
    droite();
  }

  else if (( ! in1_val) && ( ! in4_val))
  {
    Serial.print("avancer");
    avancer();
  }

  else
  {
    Serial.print("stop");
    moteureteint();
  }

  digitalWrite(trig, HIGH); 
  delayMicroseconds(10); // envoi d'une impulsion sur trig de 10 microsecondes
  digitalWrite(trig, LOW); 
  lecture_echo = pulseIn(echo, HIGH); 
  cm = lecture_echo / 58; // lecture_echo*340/(2*10000)
  Serial.print("Distance en cm : "); 
  Serial.println(cm); 
  delay(1000); 

Et bien tu fais un test sur la distance et si le résultat du test est vrai tu fais couper les moteurs.
Il serait préférable de faire la mesure et le test au début de loop() car le résultat va conditionner l'exécution du code à l'intérieur de loop().

Au passage, on ne sait pas trop ce que tu veux faire au final mais si tu arrêtes les moteurs, le robot ne fera plus rien puisque la distance sera toujours trop faible et il ne bougera plus. Il vaudrait peut-être mieux le faire reculer et tourner.

donc j'ai fais cela mais le capteur ne fonctionne pas

int IN1 = 7;
int IN4 = 6;
int GA = 12, GB = 3, DA = 13, DB = 11;
int trig = 12;
int echo = 11;
long lecture_echo;
long cm;
int  distance = cm;

void setup()
{
  Serial.begin(9550);
  pinMode(IN1, INPUT);
  pinMode(IN4, INPUT);
  pinMode(DA, OUTPUT);
  pinMode(DB, OUTPUT);
  pinMode(GA, OUTPUT);
  pinMode(GB, OUTPUT);
  pinMode(trig, OUTPUT);
  digitalWrite(trig, LOW);
  pinMode(echo, INPUT);




}

void droite()
{
  digitalWrite(DA, LOW);
  analogWrite (DB, 1000);
  analogWrite (GA, 1000);
  digitalWrite(GB, LOW);
}

void gauche()
{
  analogWrite(DA, 1000);
  digitalWrite(DB, LOW);
  digitalWrite(GA, LOW);
  analogWrite(GB, 1000);

}


void avancer()
{
  digitalWrite(DA, LOW);
  analogWrite(DB, 1000);
  digitalWrite(GA, LOW);
  analogWrite(GB, 1000);

}

void moteureteint()
{
  digitalWrite(DA, LOW);
  analogWrite(DB, LOW);
  digitalWrite(GA, LOW);
  analogWrite(GB, LOW);

}


void reculer()
{
  digitalWrite(DA, -1000);
  analogWrite(DB, -1000);
  digitalWrite(GA, -1000);
  analogWrite(GB, -1000);
}




void loop()
{


  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  lecture_echo = pulseIn(echo, HIGH);
  cm = lecture_echo / 58; // lecture_echo*340/(2*10000)
 
  
  if (distance <= 30)
  {
   
  }
    else 
    {
      Serial.print("Obstacle");
      moteureteint();
    }

   

  



  int in1_val = digitalRead(IN1);
  int in4_val = digitalRead(IN4);

  if ((in1_val) && ( ! in4_val))
  {
    Serial.print("Tourner a gauche");
    gauche();
  }
  else if (( ! in1_val) && (in4_val))

  {
    Serial.print("Tourner a droite");
    droite();
  }

  else if (( ! in1_val) && ( ! in4_val))
  {
    Serial.print("avancer");
    avancer();
  }

  else
  {
    Serial.print("stop");
    moteureteint();
  }

image
et il ne s'arrete quand la distance est de 30

Pas surprenant puisque tu ne fais rien.
Si la distance est inférieure à 30cm aucune action si elle est supérieure à 30cm tu affiches un message "Obstacle"
Il faudrait faire

  if (distance <= 30)
  {
      // Il y a un obstacle en vue
      // mettre ici le code qui assure l'évitement
  }
  else 
  {
      // on est à plus de 30cm d'un obstacle
      // mettre ici le code qui gère le déplacement
  }

enfaite j'ai trouvé le problème je le mettais sur 3.3V donc il ne voyait rien et je ne peux pas le placer sur du 5V

j'ai trouver une plaque a essai pour pourvoir ajouter les pin 5V

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.