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...

Montage simulant le fonctionnement d'un radar de reculInformations[1]

MéthodeMontage 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.

Simuler le fonctionnement d'un radar de recul avec l'émetteur/récepteur à ultrasonsInformations[2]

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).

1
float distance, temps;//Variables distance et temps
2
int TRIG = 3, ECHO = 4, Buzz = 8;//Définition des bornes E/S numériques
3
void setup() {
4
  // put your setup code here, to run once:
5
  pinMode(TRIG, OUTPUT);//Borne de déclenchement de l'émission des US
6
  pinMode(ECHO, INPUT);//Borne de réception de l'echo
7
  digitalWrite(TRIG, 0);//Réglage initial de la borne de déclenchement
8
  noTone(Buzz);//On coupe le son
9
}
10
void beep(unsigned int freq, unsigned long duree) {
11
  /*Cette fonction génère un bip régulier dont on peut choisir la
12
     fréquence et le rythme : duree en millisecondes
13
  */
14
  tone(Buzz, freq, duree);
15
  delay(duree);
16
  noTone(Buzz);
17
  delay(duree);
18
}
19
void loop() {
20
  // put your main code here, to run repeatedly:
21
  //Déclenchement mesure
22
  digitalWrite(TRIG, 1);
23
  delayMicroseconds(10);
24
  digitalWrite(TRIG, 0);
25
  //Mesure et calcul de la distance en mètres.
26
  temps = pulseIn(ECHO, 1, 30000);//Durée de l'aller-retour en µs
27
  distance = 0.5 * 340.0 * temps / 1000000.0;
28
  /*On génère des bips différents selon la distance mesurée
29
     On peut affiner les intervalles si besoin.
30
  */
31
  if (temps == 0) {
32
    //temps vaut 0 si on ne détecte pas d'obstacle. Dans ce cas, on ne joue pas de son
33
    noTone(Buzz);
34
  }
35
  else if (distance <= 0.10) {
36
    tone(Buzz, 440); //Son émis en continu.
37
  }
38
  else if (distance <= 0.15) {
39
    beep(440, 50);
40
  }
41
  else if (distance <= 0.20) {
42
    beep(440, 100);
43
  }
44
  else if (distance <= 0.30) {
45
    beep(440, 200);
46
  }
47
  else if (distance <= 0.40) {
48
    beep(440, 400);
49
  }
50
  else {
51
    noTone(Buzz);//Si la distance est supérieure à 40cm, on ne fait rien.
52
  }
53
}

ExempleCe 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émentDé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.