Ignorer et passer au contenu

Livraison offerte à partir de 50€ d'achats, livrée sous 48h !

Livraison à partir de seulement 2.50€ !

Contents Menu Expand Light mode Dark mode Auto light/dark mode

Mesurer des distances en code Arduino avec le capteur ultrason HC-SR04 avec une Pi Pico

(Mis à jour le 04/01/2023)

../_images/hcsr04-rpi-pico-upesy-rp2040-boards-preview.jpg

Le capteur HC-SR04 permet de mesurer des distances par rapport à un obstacle en se basant sur des ondes ultrasons. Les modules disponibles sont constitués d’un émetteur et récepteur ultrason ainsi que d’une puce qui s’occupe de les piloter.

Prendre en main le module HC-SR04

Fonctionnement d’un capteur ultrason

fonctionnement physique ultrason

Si vous voulez comprendre comment fonctionne en lui-même le module, je vous conseille de consulter l’article qui explique le fonctionnement physique détaillé du HC-SR04 .

Caractéristiques techniques du HC-SR04

  • Alimentation : 5V . Le module est prévu pour être alimenté en 5V.

  • Consommation : Le capteur consomme autour de 20mA en fonctionnement.

  • Portée : Le module peut mesurer une distance comprise entre 3cm et 4m en théorie. En pratique, une distance comprise entre 10cm et 2.5m vous donnera les meilleurs résultats.

    Avertissement

    La surface de l’obstacle doit être bien plane pour que les ondes sonores se réfléchissent bien et ainsi avoir des mesures fiables.

  • Angle de mesure : < 15°.

  • Fréquence ultrasons : 40 kHz (inaudible à l’oreille)

Branchements du capteur HC-SR04

En plus des broches d’alimentation, 2 broches sont utilisées pour contrôler le module. On peut même en utiliser qu’une seule, si l’on manque de broches disponibles sur sa Raspberry Pi Pico. C’est tout de même plus pratique avec 2 broches.

Module HC SR04

Raspberry Pi Pico

TRIG

GPIO15

ECHO

GPIO14

GND

GND

VCC

5V

Note

Pour cet exemple, les broches 14 et 15 ont été choisies, mais vous pouvez prendre d’autres broches de la Pi Pico compatible.

Schéma électrique pour utiliser le module HC-SR04 avec une RPi Pi Pico

ultrason hcsr04 microptyhon rpi picot

Circuit électrique à réaliser

ultrason hcsr04 microptyhon rp2040 devkit

Circuit électrique à réaliser

L’alimentation du module : 5V ou 3.3V ?

En fait, le module HC-SR04 n’est pas le plus adapté pour les cartes Raspberry Pi Pico (et ses variantes comme l’uPesy RP2040 DevKit, car elles fonctionnent en 3.3V alors que le module fonctionne en 5V (niveaux logiques de 5V). Il faut donc l’alimenter en 5V, et rajouter soit des levels shifters, soit des ponts diviseurs de tensions sur la broche ECHO . De cette manière, la broche de la Pico GPIO14 recevra du 3.3V au lieu du 5V original. Mais cela complexifie un peu le circuit. Sur la broche de sortie, le HC-SR04 détectera un niveau logique de 3.3V comme un niveau haut, donc pas d’adaptation à faire à ce niveau-là.

Astuce

En pratique, si c’est pour une utilisation temporaire, les broches de la Pico peuvent supporter une tension de 5V. C’est sur le long terme, qu’elles risquent d’être abîmées et de ne plus fonctionner. C’est pourquoi dans ce tutoriel, par simplicité, ces précautions ont été omises.

Note

Certains internautes disent qu’ils réussissent à alimenter le module HCSR04 en 3.3V, et obtenir des mesures fiables en augmentant la durée de l’impulsion envoyée. Cependant, je n’ai pas réussi à faire fonctionner ceux que j’avais en ma possession avec une tension de 3.3V. Il doit y avoir des variantes avec le même nom qui sont compatibles 3.3V

Si vous utilisez beaucoup de cartes qui fonctionnent en 3.3V (ESP8266, ESP32, Raspberry Pi Pico, je vous conseille d’utiliser un modèle équivalent qui est prévu pour fonctionner à cette tension : par exemple le module RCWL-1601.

Mesurer facilement une distance avec le HC-SR04 et les fonctions Arduino basiques

Pour l’utiliser, il n’est pas nécessaire d’utiliser des librairies externes, car le fonctionnement est très simple. En fait, quand la carte Pi Pico envoie une impulsion sur la broche TRIG , le module renvoie une impulsion sur la broche ECHO dont sa largeur est proportionnelle à la distance de l’obstacle.

Il suffit d’implémenter le déclenchement d’une mesure, récupérer la valeur et appliquer la formule suivante (l’obtention de cette formule est détaillée dans l’article sur le fonctionnement d’un capteur ultrason ) :

\[d_{obstacle}(cm) = \frac{T_{ultrason}(µs)\times v_{son}(m/s)\times 10^{-4}}{2}\]
const int trig_pin = 15;
const int echo_pin = 14;

// Vitesse du son dans l'air
#define SOUND_SPEED 340
#define TRIG_PULSE_DURATION_US 10


long ultrason_duration;
float distance_cm;

void setup() {
  Serial.begin(115200);
  pinMode(trig_pin, OUTPUT); // On configure le trig en output
  pinMode(echo_pin, INPUT); // On configure l'echo en input
}

void loop() {
  // Prepare le signal
  digitalWrite(trig_pin, LOW);
  delayMicroseconds(2);
  // Créer une impulsion de 10 µs
  digitalWrite(trig_pin, HIGH);
  delayMicroseconds(TRIG_PULSE_DURATION_US);
  digitalWrite(trig_pin, LOW);

  // Renvoie le temps de propagation de l'onde (en µs)
  ultrason_duration = pulseIn(echo_pin, HIGH);

  // Calcul de la distance
  distance_cm = ultrason_duration * SOUND_SPEED/2 * 0.0001;

  // On affiche la distance sur le port série
  Serial.print("Distance (cm): ");
  Serial.println(distance_cm);

  delay(250);
}

Le programme construit une impulsion de 10µs qui est envoyée sur le GPIO15 de la Pico.

La fonction pulseIn() bloque le programme tant qu’elle reçoit l’impulsion de réponse du HC-SR04 depuis la broche 18 . Ensuite le code calcule la distance à partir de la durée de l’onde ultrason. Le programme affiche la distance entre le module et un obstacle (ma main en l’occurrence 🙂) dans le moniteur série.

mesure distance ultrason hc sr04

On peut diminuer le délai delay(250) pour avoir des mesures plus régulièrement. (Jusqu’à ce que le module ultrason ait le temps de faire la mesure)

Cette approche est très bien pour comprendre le fonctionnement du module HC-SR04. Néanmoins tel quel, il ne sera pas très pratique dans des programmes plus complexes, car il bloque l’exécution d’autres tâches via la fonction pulseIn() . La solution est d’utiliser des interruptions pour avoir des lectures de mesures asynchrones.

Librairies en code Arduino pour le HC-SR04 compatible avec la Pico

L’utilisation de librairies externes dédiées au HC-SR04 est pertinente dans un plus gros projet, lorsqu’on veut avoir plus de fonctionnalités :

  • Gérer facilement plusieurs modules ultrasons

  • Avoir des lectures de distances asynchrones (avec des interruptions et des timers)

  • Gérer les erreurs de mesures

Avertissement

Si vous utilisez déjà des librairies pour le HC-SR04 avec une carte Arduino, il est probable que la libraire ne fonctionne pas correctement avec une Pico. Par exemple, la librairie NewPing, qui est spécialisée dans les capteurs ultrasons, ne supporte pas la Pico.

Cette section est réservée aux abonnés. Il vous reste 75% à découvrir.

Devenir membre premium

Déjà abonné ? Connectez-vous