conflit de capteurs ultrasons sur Arduino

Bonjour

J'ai un soucis de simulation SOUS tinkercad en faite c'est quAND je simule 2 capteurs ultrasons :

un marche et un autre ne marche pas ( il affiche tout le temps 0cm) et pourtant un mis un delayMicroseconds(100); ( pour éviter les conflits des capteurs )

entre la partie du programme des émissions des slaves ultrasonores des 2 capteurs ultrasons .

digitalWrite(trigPin_droit, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin_droit, LOW);

delayMicroseconds(100);

digitalWrite(trigPin_gauche, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin_gauche, LOW);

Bonjour

Quelle carte ? Reetse du programme ,en particulier l'initialisation des sorties ?

  • sans schéma il n'est pas facile de répondre

(prendre le temps de lire les règles du Forum et en particulier l'ensemble des informations ç fournir dans une deamnde d'aide)

Par ailleurs la simulation , en particulier sous Tinkercad , n'a pas beaucoup d'adeptes parmi les aidants de ce forum.....

c'est plutôt 60 ms (millisecondes) qu'il faut attendre entre 2 pings et il faut bien sûr lire la réponse du premier AVANT de déclencher le second....

VOICI LE CODE EN ENTIER :

const int trigPin_droit = A3; // Trigger (emission)
const int echoPin_droit = A4; // Echo (réception)
const int trigPin_gauche = 5; // Trigger (emission)
const int echoPin_gauche = 6; // Echo (réception)

// Variables
long duree_droit; // durée de l'echo
int distance_droit; // distance
long duree_gauche; // durée de l'echo
int distance_gauche; // distance

void setup() {

pinMode(trigPin_droit, OUTPUT); // Configuration du port du Trigger comme une SORTIE
pinMode(echoPin_droit, INPUT); // Configuration du port de l'Echo comme une ENTREE
digitalWrite(trigPin_droit, LOW);
digitalWrite(trigPin_gauche, LOW);
pinMode(trigPin_gauche, OUTPUT); // Configuration du port du Trigger comme une SORTIE
pinMode(echoPin_gauche, INPUT); // Configuration du port de l'Echo comme une ENTREE

Serial.begin(9600); // Démarrage de la communication série
}

void loop() {

//Émission d'une slave ultrasonor pendant une période de 10 ps
digitalWrite(trigPin_droit, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin_droit, LOW);
delayMicroseconds(100);
digitalWrite(trigPin_gauche, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin_gauche, LOW);

// Écoute de l'écho
duree_droit = pulseIn(echoPin_droit, HIGH);
duree_gauche = pulseIn(echoPin_gauche, HIGH);

// Calcul de la distance
distance_droit = duree_droit/58;
distance_gauche = duree_gauche/58;
// Affichage de la distance dans le Moniteur Série

Serial.print("Distance_droit : ");
Serial.print(distance_droit);
Serial.println("cm");

Serial.print("Distance_gauche : ");
Serial.print(distance_gauche);
Serial.println("cm");

}

  1. Quelle est la vitesse du son dans l'air ?
    v = 330 m/s à 20°C
  2. Quel temps correspond à un trajet de 1 m ?
    Une distance de 1m correspond à un temps de trajet de 1/330 = 3 ms, soit 6 ms avec l'aller et le retour.

Je ne sais pas si c'est la seule cause du non fonctionnement mais des délais de 0,01 ms (10 µs) et 0,1 ms (100 µs) ne me semblent pas appropriés.

Les deux capteurs (où se trouve la référence ? ) sont déclenchés en même temps et se perturbent mutuellement.

1 s = 1000 ms (milli seconde)
1 ms = 1000 µs (micro seconde)

Lecture obligatoire du message "Règle du forum francophone".
Double ou triple lecture du paragraphe "Quels les renseignements dont nous avons besoin pour répondre".

Il ne faut pas piocher des exemple n'importe où ! Surtout pas chez les auto proclamés experts qui en connaissent moins que toi.

Il faut commencer par prendre les bibliothèques de composants à partir de l'IDE arduino. Elles sont vérifiées.
Les bibliothèques sont accompagnées d'exemple garantis fonctionnels. Il faut commencer par faire les exemples. Cela permet de s'assurer que le câblage est correct.
Puis s'en inspirer pour écrire son propre code.

Edit :
Je n'avais pas vu :
boucle void () {

Tu nous a balancé un code qui ne compile pas !
void est mot clé ce n'est pas un nom de fonction !
Ça c'est très mal vu ici, on peut le faire mais il faut le dire.

J'ajoute : lecture obligatoire du tuto d'eskimon :
https://eskimon.fr/
Il n'y a pas mieux pour apprendre la programation avec l'IDE arduino et l'utilisation des composants.

Bonjour,

Sur ton schéma

  • le GND des capteurs n'est pas connecté au GND de l'arduino
  • le capteur du haut est alimenté à l'nvers et en 9V
  • pourquoi alimenter un capteur avec la carte arduino et l'autre en 9v?

Bonjour camomille.

Comment as-tu fait pour changer ton pseudo ?

moi je dis que mon code est bon en plus j'ai bien mis les fonctions void().
je l'avoue mon montage je l'ai fais à la va vite mais le problème ne viens pas de là vu que j'ai déjà essayé ce montage là

et le problème persiste

Il faut attendre la réponse avant du premier capteur avant de lancer la mesure sur le deuxième capteur

void loop() {
  //Émission d’une slave ultrasonor pendant une période de 10 ps
  digitalWrite(trigPin_droit, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin_droit, LOW);
  duree_droit = pulseIn(echoPin_droit, HIGH);

  digitalWrite(trigPin_gauche, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin_gauche, LOW);
  duree_gauche = pulseIn(echoPin_gauche, HIGH);

  // Calcul de la distance
  distance_droit = duree_droit / 58;
  distance_gauche = duree_gauche / 58;

  // Affichage de la distance dans le Moniteur Série
  Serial.print("Distance_droit : ");
  Serial.print(distance_droit);
  Serial.println("cm");

  Serial.print("Distance_gauche : ");
  Serial.print(distance_gauche);
  Serial.println("cm");
}

J'ai essayer votre code qui me semble bon mais j'ai toujours le même problème.
Je pense que c'est vraiment un problème de tinkercad après il faut essayer en vrai c'est mieux !!!

Le :
boucle void () {
je ne l'ai pas inventé je l'ai copié.

Donc tu as modifié ton message entre temps pour cacher ton erreur.
Où alors c'est l'intervention des petits hommes verts.
C'est vraiment petit.

Regarde encore ça depuis 37 min pour mon message et toi moins

image

et j'ai pas l'habitude de mentir si tu vois ce que je veux dire

ça ressemble à la traduction automatique de google de void loop()
vous n'auriez pas ça activé dans votre navigateur? (et comme il n'y a pas les balises ...)

PS:pour moi vous n'essayer pas de résoudre le problème sauf " kamill"

parce que vous n'avez pas fait l'effort de lire les règles et poster correctement le code... ça ne motive pas...

Les balises c'est normal j'ai juste fait un coupé collé.

Pour le reste J-M-L tu as raison.
A la réflexion kamill qui se transforme en camomille ....

jusqu'à présent la traduction automatique ne se met en marche que sur des pages qui s'annoncent en anglais et une pop-up s'affiche.
Le forum n'annonce pas sa langue, il faut que je lance la traduction en manuel en clic droit puis sur traduction.

Ce que je n'ai pas eu l'impression de faire, mais ... -> j'ai probablement fait quelque chose, mais quoi ?

Je suis désolé pour arduino123456 et je lui présente mes excuses.

Pour l'aider plus efficacement, bon j'ai quand même soulevé le problème des délais incompatibles avec un trajet d'ultra-son donc j'espère avoir été "un peu" utile, je signale que ce sujet a déjà été traité à plusieurs reprises sur le forum francophone.

Une recherche avec le moteur de recherche du forum avec comme mots clés "plusieurs HC-SR04" donne plus d'une dizaine de réponses en français dont celui --ci https://forum.arduino.cc/t/probleme-lors-de-l-utilisation-du-deuxieme-hc-sr04/663526 de juillet 2020 qui me parait être pas trop mal et dont les explications sont très proches de celle de Kamill parce que c'est la solution.

J'ai essayé sur tinkercad, ça fonctionne sans problème. Vérifies ton câblage.