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 MicroPython avec le capteur ultrason HC-SR04 avec une Pi Pico

(Mis à jour le 13/02/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 en général d’un émetteur et récepteur ultrason ainsi que d’une puce qui s’occupe de les piloter.

Astuce

Vérifiez que le module que vous avez est bien un HC-SR04. Il existe plusieurs modules ultrasons qui se ressemblent visuellement mais qui n’utilisent pas la même puce. Le HC-SR04 (généralement en bleu) fonctionne uniquement en 5V alors que par exemple le RCWL-1601 (généralement en vert) fonctionne également en 3.3V. Heureusement, ils se pilotent en général de la même manière.

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.

  • Angle de mesure : < 15°.

    Avertissement

    La surface de l’obstacle doit être bien plane pour avoir des mesures fiables.

  • 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

Rasperry Pi Pico

ECHO

GPIO14

TRIG

GPIO15

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

Circuit avec le module HC-SR04

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

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 un script MicroPython

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 RPi 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 :

\[d_{obstacle}(cm) = \frac{T_{ultrason}(µs)\times v_{son}(m/s)\times 10^{-4}}{2}\]

Note

L’obtention de cette formule est détaillée dans l’article sur le fonctionnement d’un capteur ultrason .

from machine import Pin, time_pulse_us
import time

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

trig_pin = Pin(15, Pin.OUT) # Broche GP15 de la Pico
echo_pin = Pin(14, Pin.IN)  # Broche GP14 de la Pico

while True:
    # Prepare le signal
    trig_pin.value(0)
    time.sleep_us(5)
    # Créer une impulsion de 10 µs
    trig_pin.value(1)
    time.sleep_us(TRIG_PULSE_DURATION_US)
    trig_pin.value(0)

    ultrason_duration = time_pulse_us(echo_pin, 1, 30000) # Renvoie le temps de propagation de l'onde (en µs)
    distance_cm = SOUND_SPEED * ultrason_duration / 20000

    print(f"Distance : {distance_cm} cm")
    time.sleep_ms(500)

Le programme génère une impulsion de 10µs que l’on envoie sur le GPIO15 de la Raspberry Pi Pico.

La fonction time_pulse_us() bloque le programme tant qu’elle reçoit l’impulsion de réponse du HC-SR04 depuis la broche 14 . 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 ( ici ma main🙂) dans le moniteur série.

distance ultrason hcsr04 µpython pico

Note

Si vous obtenez des valeurs négatives proches de 0 (ex: Distance : -0.017 cm ), c’est que le module ultrason n’a pas reçu l’onde ultrasonore envoyée et que le timeout de la fonction time_pulse_us() a été atteint. La surface de l’obstacle doit être plane pour avoir de bonnes mesures.

Les librairies MicroPython pour le HC-SR04 et la Pico

Une libraire devient pratique surtout lorsqu’on veut gérer plusieurs capteurs ultrasons.

Librairie basique, avec des mesures bloquantes

Voici le code d’une librairie très simple pour piloter le capteur ultrason. Vous pouvez soit l’enregistrer dans un fichier séparé sur la Pico (avec comme nom hcsr04.py ), ou bien l’inclure directement dans votre script principal :

distance ultrason hcsr04 µpython pico

On peut voir les scripts et les librairies Python enregistrées sur la Pico via View → Files

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

Devenir membre premium

Déjà abonné ? Connectez-vous