Accueil > NodeMCU > MicroPython et le capteur de distance Ultrason HC-SR04

MicroPython et le capteur de distance Ultrason HC-SR04

Il y a quelques années, j’avais testé le fonctionnement du capteur de distance à Ultrason HC-SR04 avec une carte Arduino. Les explications sont sur la page suivante :  https://itechnofrance.wordpress.com/2013/03/12/utilisation-du-module-ultrason-hc-sr04-avec-larduino/

Aujourd’hui, j’ai décidé d’écrire une librairie en Micropython pour gérer ce capteur. Les essais ont été effectués avec une carte Wemos D1 mini dont le câblage utilisé sera le suivant :

Le contenu de la librairie est le suivant et peut être téléchargé à l’adresse : https://github.com/itechnofrance/micropython/tree/master/librairies/hc-sr04
#
# Librairie permettant d’utiliser le capteur de distance ultrason HC-SR04
# Tester sur NodeMCU Lolin et Wemos D1 mini
#
# Auteur iTechnoFrance
#
# pin_trig : pin pour envoyer les impulsions
# pin_echo : pin pour mesurer la distance
#
# Mesure la distance entre 2 cm et 4 m
#
from machine import Pin, PWM
import machine, time
class HCSR04():
    def __init__(self, pin_echo, pin_trig):
        self.pin_echo = pin_echo
        self.pin_trig = Pin(pin_trig, Pin.OUT)  # definit la broche TRIGGER en sortie
        self.pin_echo = Pin(pin_echo, Pin.IN)  # definit la broche ECHO en entree
        self.pin_trig.off()  # broche TRIGGER niveau bas au repos
        # on definit un Timeout si le retour echo depasse 23.8 ms
        self.echo_timeout_us = 23862  # 410 cm  * 2 (aller/retour) * 29.1 (vitesse du son 1cm = 29.1us)
    def lecture_distance(self):
        self.pin_trig.off()  # broche TRIGGER niveau bas au repos
        time.sleep_us(20)  # on attend 20us
        self.pin_trig.on()  # broche TRIGGER niveau haut
        time.sleep_us(10)  # pendant 10us
        self.pin_trig.off()
        self.temps_distance = machine.time_pulse_us(self.pin_echo, 1, self.echo_timeout_us)
        if (self.temps_distance == -1):
            # Timeout, mesure distance > 4m
            self.calcul_distance_cm = -1
        else:
            # le temps que met l’echo est a diviser par 2 (aller-retour)
            # la vitesse du son est de 0.034320 cm/us (343.2 m/s)
            # pour 1 cm donc on obtient 29.1 us
            self.calcul_distance_cm = (self.temps_distance / 2) / 29.1
        return(self.calcul_distance_cm)
Rien de bien compliqué, tout est documenté dans la librairie.
Le premier programme qui est présenté pour utiliser la librairie permet de calculer la distance :
#
#                   Mesure de distance
#
# Programme permettant d’utiliser la librairie qui gere le capteur de
# distance ultrason HC-SR04
# Tester sur NodeMCU Lolin et Wemos D1 mini
#
# Auteur iTechnoFrance
#
import hcsr04, time
# pin_echo : pin pour mesurer la distance
# pin_trig : pin pour envoyer les impulsions
pin_echo = 4  # sortie D2 –> GPIO04
pin_trigger = 5  # sortie D1 –> GPIO05
# initialisation librairie HC-SR04
hc_sr04 = hcsr04.HCSR04(pin_echo, pin_trigger)
while True:
    distance = hc_sr04.lecture_distance()
    if (distance == -1):
        print (« Mesure supérieure à 4 mètres »)
    else:
        print ((distance), « cm »)
    time.sleep(5)
Un second programme permet de détecter le nombre de passages devant le capteur :
#
#                   Compteur de passages
#
# Programme permettant d’utiliser la librairie qui gere le capteur de
# distance ultrason HC-SR04
#
# Tester sur NodeMCU Lolin et Wemos D1 mini
#
# Auteur iTechnoFrance
#
import hcsr04, time
# pin_echo : pin pour mesurer la distance
# pin_trig : pin pour envoyer les impulsions
pin_echo = 4  # sortie D2 –> GPIO04
pin_trigger = 5  # sortie D1 –> GPIO05
# initialisation librairie HC-SR04
hc_sr04 = hcsr04.HCSR04(pin_echo, pin_trigger)
nbr_passage = 0  # comptabilise le nombre de passage devant le capteur
distance_1 = 0
distance_2 = 0
while True:
    passage = abs(distance_1 – distance_2)
    distance_1 = hc_sr04.lecture_distance()
    time.sleep(0.500)  # delai de 0.5s entre 2 mesures
    distance_2 = hc_sr04.lecture_distance()
    if (passage > 20):  # 20 cm pour prendre en compte une erreur de mesure de distance
        nbr_passage += 1
        # quand un objet passe devant le capteur on le comptabilise 2 fois
        if ((nbr_passage % 2) == 0):
            print (int(nbr_passage / 2), « détection(s) de passage »)
Voilà pour l’utilisation de ce capteur en Micropython…
Catégories :NodeMCU Étiquettes : , , ,
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :