le composant que vous référencez est un HC-SR04 et vous pouvez le piloter par la libraire NewPing mais elle sera à un niveau d'abstraction trop élevé si vous voulez avoir 2 capteurs en face à face.
Je pense que c'est jouable cependant - faudrait essayer:
Le principe général est le suivant: le module émet une ultrason qui se déplace dans l'air et s'il y a un objet ou un obstacle sur son chemin Il va rebondir et revenir au module où il sera détecté. Compte tenu du temps de vol (le temps entre l'envoi de l'onde et son retour), de la vitesse connue du son dans l'air (340 m/s) et du fait que le son fait un aller-retour vous pouvez calculer la distance entre l'émetteur et l'obstacle avec assez de précision (à partir de 2 à 3 cm de distance jusqu'à 4m en conditions normales avec une précision de quelques mm dans de bonnes conditions).
Ces composants ont 4 pins l'alimentation et la masse, et ensuite une pin pour déclencher un train d'onde (Trigger que vous connectez sur un pin de votre arduino, disons à
trigPin
) et une pin pour écouter le retour (Echo) que vous connectez à une autre pin, disons
echoPin
En pratique Il faut s'assurer que le module soit au repos, puis envoyer une impulsion niveau haut (+ 5v) pendant au moins 10 µs sur la broche
trigPin
; le capteur émet alors une série de 8 impulsions ultrasoniques à 40 kHz, puis il attend le signal réfléchi Lorsque celui-ci est détecté, il envoie un signal "high" sur la sortie echoPin, dont la durée est proportionnelle à la distance mesurée si le module détecte un objet. Il suffit donc d'attendre un front montant sur cette pin et de mesurer sa durée.
La distance parcourue par un son se calcule en multipliant la vitesse du son, environ 340 m/s par le temps de propagation, soit : d = v · t (distance = vitesse · temps) et on sait aussi que le son a fait un aller-retour.
donc 2 x distance = 340m/s x TEMPS_MESURE (µs)
distance = (TEMPS_MESURE x (34000 cm / 1 000 000 μs) ) / 2 (en cm)
distance = TEMPS_MESURE x 17000 / 1 000 000 (en cm)
distance = TEMPS_MESURE x 17 / 1000 (en cm)
Si vous lisez les doc on voit souvent la formule distance = durée / 58 pour l'obtenir en cm
Cela s'explique parce que multiplier par 17/1000 revient à diviser par 1000/17 qui vaut 58.8235.
Je préfère donc t x 17/1000 parce que c'est plus précis
Le mode de fonctionnement standard est alors le suivant
digitalWrite([color=blue][tt]trigPin
[/color], LOW); delayMicroseconds(2); // LOW pour 2 micro secondes
digitalWrite(
trigPin
, HIGH); delayMicroseconds(10); // HIGH pour 10 micro secondes
digitalWrite(
trigPin
, LOW); // on éteint[/tt]
et ensuite on écoute le train d'onde qui revient:
unsigned long tempo;
tempo = pulseIn([color=green][tt]echoPin
[/color], HIGH);
float distance = tempo * 17.0 / 1000.0; // en cm[/tt]
Une fois qu'on comprend cela, si vous avez 2 modules face à face et que vous voulez mesurer la distance entre les 2, la même méthode s'applique sauf que vous allez envoyer le train d'onde des 2 côté (parce que ça déclenche aussi au niveau du composant l'attende de la lecture) et lire le pulseIn() sur l'autre composant. Attention il faudra tenir compte du fait qu'il n'y a pas d'aller retour, donc dans la formule ce sera
float distance = tempo * 34.0 / 1000.0; // en cm
Bien sûr comme vous déclenchez des 2 côtés, il vaudrait mieux le faire vraiment simultanément, chaque micro second compte, donc utiliser les PORT pour mettre les 2 pins de trigger en bas/haut en même temps et bien sûr bidouiller le récepteur pour qu'il n'envoie pas vraiment d'ondes qui viendraient créer des perturbations.
Pour cela voir si vous pouvez simplement couper la patte d'alimentation du second émetteur ou le couvrir pour qu'il n'émette rien.