Exploiter le télémètre pour simuler le fonctionnement d'un radar de recul
Objectif
On utilise la mesure de la distance qui sépare le dispositif d'un obstacle pour moduler l'émission d'un signal sonore : plus l'obstacle est proche, plus les bips sont émis de façon rapprochée.
Il est possible de proposer une variante avec avertissement lumineux : une DEL clignotant de plus en plus rapidement, une échelle de DEL vert, jaune et rouge s'allumant progressivement, etc...
Méthode : Montage et programme proposé
Le montage regroupe le capteur de distance et un buzzer du même type que celui utilisé dans la section Produire un son avec une carte Arduino. Pour des raisons pratiques, on exploitera ici la fonction tone
qui permet de générer simplement un son de fréquence et durée choisie.
Dans le programme ci-dessous, on a défini une fonction beep
prenant deux paramètres : la fréquence du son joué et la durée entre chaque bip (qui est la même que la durée du son).
float distance, temps;//Variables distance et temps
int TRIG = 3, ECHO = 4, Buzz = 8;//Définition des bornes E/S numériques
void setup() {
// put your setup code here, to run once:
pinMode(TRIG, OUTPUT);//Borne de déclenchement de l'émission des US
pinMode(ECHO, INPUT);//Borne de réception de l'echo
digitalWrite(TRIG, 0);//Réglage initial de la borne de déclenchement
noTone(Buzz);//On coupe le son
}
void beep(unsigned int freq, unsigned long duree) {
/*Cette fonction génère un bip régulier dont on peut choisir la
fréquence et le rythme : duree en millisecondes
*/
tone(Buzz, freq, duree);
delay(duree);
noTone(Buzz);
delay(duree);
}
void loop() {
// put your main code here, to run repeatedly:
//Déclenchement mesure
digitalWrite(TRIG, 1);
delayMicroseconds(10);
digitalWrite(TRIG, 0);
//Mesure et calcul de la distance en mètres.
temps = pulseIn(ECHO, 1, 30000);//Durée de l'aller-retour en µs
distance = 0.5 * 340.0 * temps / 1000000.0;
/*On génère des bips différents selon la distance mesurée
On peut affiner les intervalles si besoin.
*/
if (temps == 0) {
//temps vaut 0 si on ne détecte pas d'obstacle. Dans ce cas, on ne joue pas de son
noTone(Buzz);
}
else if (distance <= 0.10) {
tone(Buzz, 440); //Son émis en continu.
}
else if (distance <= 0.15) {
beep(440, 50);
}
else if (distance <= 0.20) {
beep(440, 100);
}
else if (distance <= 0.30) {
beep(440, 200);
}
else if (distance <= 0.40) {
beep(440, 400);
}
else {
noTone(Buzz);//Si la distance est supérieure à 40cm, on ne fait rien.
}
}
Exemple : Ce qui pourrait être proposé aux élèves
Dans ce cas, encore on peut proposer aux élèves de compléter le calcul de la distance capteur-obstacle. Ce programme permet d'introduire les structures conditionnelles if
, else if
, else
.
Après avoir donné la syntaxe, on peut fournir un "cahier des charges" indiquant le lien entre les intervalles de distances et le rythme du signal sonore à produire.
Complément : Définir une fonction dans un programme
Une fonction regroupe un ensemble d'instructions qui peuvent être appelées en une seule ligne quand c'est nécessaire. Les programmes gagnent en lisibilité.
Pour déclarer une fonction, on doit indiquer le type de valeur renvoyée, ainsi que le type des paramètres qu'elle exploite.
Si une fonction ne renvoie aucune valeur, mais ne fait qu'exécuter une suite d'instructions, on la déclare par void ma_fonction(paramètres)
.
Si une fonction doit renvoyer une valeur, elle se termine nécessairement par l'instruction return valeur_renvoyée
.
Plus de précisions sur la page consacrée à la déclaration de fonctions.