TP de bac pro sur les capteurs à ultrasons (+ CAP)

Nouveautés dans certains programmes, les capteurs sont désormais tout une partie des compétences de certains bac pros et CAP. Omniprésent autour de nous, Parti’Prof vous propose un TP de bac pro sur les capteurs.

Capteur à US pour TP de bac pro

Le TP a pour objectif d’utiliser une carte Arduino, un capteur HC-SR04 à ultrasons et des LED pour mesurer la distance entre le capteur et un obstacle.

TP de bac pro sur les capteurs (capteur à ultrasons)

Matériel (par groupe)

  • une carte Arduino
  • un capteur HC-SR04
  • 3 LED de différentes couleurs et leurs résistances associées
  • un ordinateur
  • un mètre
  • un obstacle quelconque (carton, …)

Objectifs du TP

Les objectifs du TP sont d’une part de se favoriser avec l’IDE Arduino, de comprendre le fonctionnement d’un capteur spécifique, puis de l’utiliser pour mesurer des distances.

Consignes du TP sur les capteurs

Introduction : le capteur HC-SR04

Ce capteur se compose d’un émetteur d’ultrasons de fréquence 40 kHz (fréquence de l’onde : 40 kHz).

1/ Quelle est la signification du symbole « kHz » ?

 

2/ Quelle est la période du signal de l’onde émise (en millisecondes) ?

 

 

 

Première partie : temps de parcours des ultrasons (notés US par la suite)

======= Remarques pour les enseignant(e)s ========

Suivant le niveau des élèves, on peut leur demander de réaliser le branchement du capteur ou leur fournir le circuit déjà connecté :

Mesure du distance avec un capteur en bac pro

Voici le code à fournir pour cette première partie :

#define PIN_TRIG  2
#define PIN_ECHO  3

float temps_parcours_US;

void setup() {
  Serial.begin (9600);
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
}

void loop() {

  mesureDistance();

}

void mesureDistance(){
  digitalWrite(PIN_TRIG, LOW);  
  delayMicroseconds(2); 
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);
  
  temps_parcours_US = pulseIn(PIN_ECHO, HIGH);
  Serial.print("Temps de parcours des US : ");
  Serial.println(temps_parcours_US);

  delay(1000);
}

On peut expliquer que le programme renvoie le temps de parcours des US. Le programme peut être étudié plus en détails suivant les filières et le niveau des élèves.

======== Fin des remarques pour les enseignant(e)s =======

3/ On va placer des obstacles à différentes distances du capteur. Le programme adapté va nous donner un temps de parcours des US. Compléter le tableau ci-dessous :

Distance capteur-obstacle (cm) Temps de parcours US (unité à définir, voir question 5)
10
50
100

 

4/ La distance capteur-obstacle et le temps de parcours sont-ils approximativement proportionnels ?

 

 

5/ Au vu des temps de parcours et de vos connaissances, en quelle unité est exprimée le temps de parcours retourné par le programme (secondes, milliseconde, microsecondes) ?

Rappels : 1 ms = 0,001s et 1 microseconde = 1 µs = 0,000001 s.

 

======= Remarques pour les enseignant(e)s ========

Le temps renvoyé par défaut par le programme est en microsecondes.

======== Fin des remarques pour les enseignant(e)s =======

 

Seconde partie : mesures de distance et programme adéquat

6/ Dans l’air à environ 20°C, le son se déplace à environ 343,4 m/s. Pour faciliter le calcul de la distance capteur-obstacle, il faudrait donc que la variable qui stocke le temps de parcours soit exprimée en secondes.

Par combien faut-il multiplier ou diviser la variable de départ (exprimée en l’unité trouvée à la question 5) pour que le temps soit exprimé en secondes ? (On appelle temps_parcours_US_sec cette nouvelle variable).

 

 

7/ Avec la variable temps de la question précédente et connaissant la vitesse des US (343,4 m/s), quel calcul faut-il faire pour obtenir la distance en mètres entre l’obstacle et le capteur ?

 

 

8/ Travail de groupe pour proposer le programme adéquat, le programmer puis le charger sur la carte. Vérifier les résultats obtenus.

 

Troisième partie : utilisation des LED

Pour la partie finale, suivant le niveau des élèves, on peut aborder les conditions. On va allumer des LED en fonction de la distance capteur – obstacle.

Pour le branchement, comme précédemment, soit on leur demande de le faire (veiller aux branchements des résistances et aux sens des LED), soit on leur donne le branchement déjà fait ou le schéma ci-dessous (site Rétro&Geek) :

TP de bac pro capteurs

Source : https://retroetgeek.com/arduino/arduino-tuto-capteur-ultrason-hc-sr04/

 

Et pour le code, il faut tout d’abord leur donner la syntaxe pour le « if » et leur indiquer que les conditions doivent être dans le void loop().

Voici un exemple de code final possible :

#define PIN_TRIG  7
#define PIN_ECHO  6
#define PIN_LED_BLEUE  5
#define PIN_LED_VERTE  4
#define PIN_LED_ROUGE  3

float temps_parcours_US, temps_parcours_US_sec, distance_obstacle;

void setup() {
  Serial.begin (9600);
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  
  pinMode(PIN_LED_BLEUE, OUTPUT);
  pinMode(PIN_LED_VERTE, OUTPUT);
  pinMode(PIN_LED_ROUGE, OUTPUT);
}

void loop() {

  mesureDistance();
  Serial.print("Distance entre le capteur et l'obstacle : ");
  Serial.print(distance_obstacle);
  Serial.println(" m ");

  if(distance_obstacle > 50){
    // Toutes les LED allumées
    digitalWrite(PIN_LED_BLEUE,HIGH);
    digitalWrite(PIN_LED_VERTE,HIGH);
    digitalWrite(PIN_LED_ROUGE,HIGH);
  }
  else if(distance_obstacle > 30){
    // LED rouge allumée
    digitalWrite(PIN_LED_BLEUE,LOW);
    digitalWrite(PIN_LED_VERTE,LOW);
    digitalWrite(PIN_LED_ROUGE,HIGH);
  }
  else if(distance_obstacle > 20){
    // LED verte allumée
    digitalWrite(PIN_LED_BLEUE,LOW);
    digitalWrite(PIN_LED_VERTE,HIGH);
    digitalWrite(PIN_LED_ROUGE,LOW);
  }
  else if(distance_obstacle > 5){
    //LED bleue allumée
    digitalWrite(PIN_LED_BLEUE,HIGH);
    digitalWrite(PIN_LED_VERTE,LOW);
    digitalWrite(PIN_LED_ROUGE,LOW);
  }
  else{
    digitalWrite(PIN_LED_BLEUE,LOW);
    digitalWrite(PIN_LED_VERTE,LOW);
    digitalWrite(PIN_LED_ROUGE,LOW);
  }

}

void mesureDistance(){
  digitalWrite(PIN_TRIG, LOW);  
  delayMicroseconds(2); 
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10); 
  digitalWrite(PIN_TRIG, LOW);
  
  temps_parcours_US = pulseIn(PIN_ECHO, HIGH);
  temps_parcours_US_sec = temps_parcours_US/1000000;
  
  distance_obstacle = temps_parcours_US_sec * 343.4 / 2;

  delay(1000);
}

Commentez pour toute question ou remarque sur ce TP de bac pro sur les capteurs !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.