Capteur Ultrasonore Arduino [PROJET SCOLAIRE]

Bonjour,
Désolé de vous déranger, je suis encore un débutant donc si ça trouve j’ai fait une erreur bête.

Bref, je souhaite réaliser un projet Arduino où on doit lire une distance à l’aide de capteurs ultrasonores (le classique HC-SRO4). J’ai réussi à faire ce projet avec un seul Arduino, mais le problème est avec deux capteurs…

Le premier capteur me renverra toujours comme valeur 0cm et le deuxième fonctionne parfaitement, j’ai testé les deux capteurs individuellement, ils fonctionnent bien mais il y en aura toujours un sur 2 qui ne fonctionnera pas.

Je vous envois mon code

int trigger=10;
int echo=9;
int echo2=5;
int trigger2=7;
int piezo=4;
int led=13;
int i=0;
float Temps,distance;
int mode;
int potentiometre=A0;
void setup() {
Serial.begin (9600);
pinMode(trigger,OUTPUT);
pinMode(trigger2,OUTPUT);
pinMode(led,OUTPUT);
pinMode(echo,INPUT);
pinMode(echo2,INPUT);
}

void loop() {
int select=0;
digitalWrite(led,LOW);
mode=analogRead(potentiometre);
delay(30); 
Serial.print(mode);
Serial.print("\n");
//if(mode>511)
//{
   if(i % 2) {
    select = echo;
    digitalWrite(trigger, LOW);
    delayMicroseconds(2);  
    digitalWrite(trigger, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(trigger, LOW);
    Serial.print("1");
    Serial.print("\n");
  } else {
    select = echo2;
    digitalWrite(trigger2, LOW);
    delayMicroseconds(2);  
    digitalWrite(trigger2, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(trigger2, LOW);
    Serial.print("2"); 
    Serial.print("\n");
  }
  Temps= pulseIn(select,HIGH);
  distance=Temps/ 58;
  Serial.print(distance);
  Serial.print("\n");
     if((distance<=30)&&(distance!=0))
    {
    digitalWrite(led,HIGH);
    tone(piezo,1000,500);
    }
    else
    {
    digitalWrite(led,LOW);
    }
    i++;
  //}
  delay(20);
    
}

celui qui a pour pin trigger et echo ne fonctionne pas et celui avec trigger2 et echo2 fonctionne bien, la variable mode sert pour le potentiomètres (afin d’activer ou non les capteurs). Les branchements sont aussi corrects… J’arrive vraiment pas à voir mon erreur, c’est ultra urgent, je dois rendre ce projet bientôt…

Merci d’avance :slight_smile:

Bonjour

si c'est ultra urgent , il est ultra urgent de prendre connaissance des règles du forum francophone et corriger le message pour lui donner quelques chances de survie.......

Merci, j'ai effectué les modifications :)

peut être pas toutes

c’est ultra urgent, je dois rendre ce projet bientôt…

probable projet scolaire à annoncer explicitement
A cette période de l’année ‘projet ultra urgent à rendre’ est la plupart du temps interprété comme ‘glandeur à la bourre

D’autre part il faut prendre le temps d’interroger le forum (moteur de recherche sur le site = içône Loupe)…le thème a sans doute déjà été traité… peut être même dans un passé récent…

Tu peux suivre le sujet en cours qui est très similaire

Effectivement, ça fait actuellement 2 semaines que j'essaie de régler ce problème, donc j'ai perdu pas mal de temps pour mon projet pour pas grand chose...

Pour ce qui est de la recherche, effectivement une autre personne avait le même problème mais parce qu'il avait codé les deux capteurs à la suite, ce qui provoquait des interactions entre les ondes émises. Ce que je ne pense pas faire avec mon code, en alternant les deux capteurs... Donc c'est pourquoi je me suis permis de créer un nouveau topic, je n'ai pas trouvé ma solution (que ce soit sur ce forum, mais aussi sur StackOverflow,Youtube, livres ect...) Même mes professeurs n'ont pas trouvé de solutions, donc c'est pour cela que j'ose créer ce topic...

Ps: J'ai aussi vu ce topic, mais je n'ose pas prendre réup un topic qui n'est pas à moi (et j'ai essayé tout ce qui est demandé dedans mais merci lesept)

Tu vois bien l'alternance des deux capteurs (alternance de 1 puis 2)?

Quel est ton modèle d'Arduino ? Vérifie si les pins utilisées pour le capteur 1 et le capteur 2 sont similaires. Genre l'un utilise une broche PWM et pas l'autre, etc. Puis harmonise en prenant comme exemple le capteur qui fonctionne (change les broches de l'autre)

pas d'oscilloscope à l'école pour obtenir une trace de signaux trigger, trigger2, echo et echo2 ?

Tout d'abord merci lesept, le serial print me montre bien l'alternance entre le premier et le deuxième capteur. J'ai aussi bien vérifié pour les broches, il n'y a pas de problème avec le datasheet du capteur, les pins sont bien branchées... Par contre, chose étonnante, pour l'harmonisation, c'est toujours le premier capteur qui marche quelque soit ses pins(trigger1/2 et echo1/2)... Donc l'erreur viendrait-il plus du montage?

Pour Al1fch, les oscilloscopes sont réservés pour ceux qui sont en année supérieur, je n'ai pas pensé à en demander à en utiliser un...

Pulsein renvoie un unsigned long pas un float. Temps est déclaré comme un float, c'est peut-être la cause de l'erreur.

Et tu fais distance = Temps / 58.0;

Merci encore lesept pour ta réponse rapide, j'avais effectivement vu cette réponse pour l'autre topic, j'ai essayé, mais je viens de tester à nouveau et j'ai toujours le même soucis, juste la mesure qui n'est pas un relatif maintenant... J'ai vu que le pulsein peut avoir aussi un timeout, j'ai essayé d'y toucher, mais quand je créer un timeout de 10ms, les deux capteurs me renvoient zéro...

voilà un screenshot de mes serial print, le nombre (1 ou 2) indique le capteur, et la valeur qui la suit indique la distance mesurée par le capteur https://image.noelshack.com/fichiers/2018/20/4/1526561261-screen.png

Un de mes profs m'a aussi parlé de "décharger les ports de l'Arduino Uno entre l'émission du signal entre chaque capteur", par contre j'ai beau chercher je n'ai rien trouvé... Il y a t'il une fonction qui permette celà?

Merci encore :)

Essaye la bibliothèque newping qui propose un exemple avec plusieurs capteurs

Merci lesept, mais je n'ai pas le droit d'utiliser d'autres bibliothèques que celle de bases...

Quelle est l’urgence ? Quand dois tu rendre ton projet ?

Je dois le rendre le plus tôt possible, ce serait déjà bien si j'arrive à trouver cette erreur aujourd'hui, comme ça j'aurai tout fini, il ne me manque qu'à comprendre pourquoi le prototype ne fonctionne pas... Je dois le rendre au plus tard le 20. Toute l'équipe attende mes résultats, donc j'aimerai pas les décevoir...

Désolé je prends l'avion, je ne peux plus t'aider avant demain. Bon courage

Merci quand même, bon voyage !

Mon dernier conseil avant le décollage : essaye d'ajouter après tes deux Serial.print("\n"); un delay(500); Ce chiffre peut être modifié selon les résultats...

Bon. je vais essayer de prendre le relai, mais j'ai pas le niveau du koala. Ni sa patience, mais on va voir.

déjà: int potentiometre=A0; ????? soit tu as voulu déclarer un pin, soit une variable, mais là, les deux en même temps, c'est fichu. j'ai jeté un oeil au reste, je trouve que ça manque atrocement de commentaires. Moi qui suis une faignasse immonde, quand ya pas de commentaires, mes yeux se ferment.

Si je comprends, un capteur renvoie ce que tu veux, tu le sais parce que tu l'imprimes sur ton écran. Il se trouve que tu as deux codes similaires, normalement: -un pour le premier capteur -un autre pour le second.

SI le premier marche, normalement, en changeant les variables, tu n'as qu'à copier.

Mais avant ça, quand le premier capteur marche, que tu le vires et que tu mets le second au même emplacement, avec les mêmes câbles, les mêmes pins, est-ce que ça marche?

Ensuite, par expérience, ces bidules aiment bien qu'on leur laisse le temps de faire leur boulot. Ne cherche pas à gratter des centièmes entre deux relevés, laisse le temps.

kammo: soit tu as voulu déclarer un pin, soit une variable, mais là, les deux en même temps, c'est fichu.

Ce qui n'est pas vrai, d'ailleurs, mais je voulais te recommander de faire ça avec define, c'est plus propre.