Capteur de portée ultrasonique HC-SR04 sur le Raspberry Pi

Dans les didacticiels précédents, nous avons décrit la détection de température, les contrôleurs de mouvement PIR et les boutons et commutateurs, qui peuvent tous se connecter directement aux ports GPIO du Raspberry Pi. Le télémètre à ultrasons HC-SR04 est très simple à utiliser, mais le signal qu’il émet doit être converti de 5V à 3,3V pour ne pas endommager notre Raspberry Pi! Nous allons introduire un peu de physique avec l’électronique dans ce tutoriel afin d’expliquer chaque étape!

Ce dont vous aurez besoin:

HC-SR04

1kΩ Résistance

2kΩ Résistance

Fils de cavalier

Capteurs de distance à ultrasons

Le son se compose d’ondes oscillantes à travers un milieu (comme l’air), la hauteur étant déterminée par la proximité de ces ondes les unes aux autres, définie comme la fréquence. Seule une partie du spectre sonore (la plage de fréquences des ondes sonores) est audible pour l’oreille humaine, définie comme la plage «acoustique». Le son à très basse fréquence en dessous de l’acoustique est défini comme «infrasons», avec des sons à haute fréquence au-dessus, appelés «ultrasons». Les capteurs à ultrasons sont conçus pour détecter la proximité ou la portée d’un objet à l’aide d’une réflexion par ultrasons, similaire au radar, pour calculer le temps nécessaire pour réfléchir les ondes ultrasonores entre le capteur et un objet solide. L’échographie est principalement utilisée car elle est inaudible pour l’oreille humaine et est relativement précise sur de courtes distances. Vous pouvez bien sûr utiliser le son acoustique à cet effet, mais vous auriez un robot bruyant, émettant un bip toutes les quelques secondes. . . .

Un capteur à ultrasons de base se compose d’un ou plusieurs émetteurs à ultrasons (essentiellement des haut-parleurs), un récepteur et un circuit de commande. Les émetteurs émettent un son ultrasonique à haute fréquence, qui rebondit sur les objets solides à proximité. Une partie de ce bruit ultrasonore est réfléchie et détectée par le récepteur sur le capteur. Ce signal de retour est ensuite traité par le circuit de commande pour calculer la différence de temps entre le signal transmis et reçu. Ce temps peut ensuite être utilisé, avec quelques calculs intelligents, pour calculer la distance entre le capteur et l’objet réfléchissant.

blank

Le capteur à ultrasons HC-SR04 que nous utiliserons dans ce didacticiel pour le Raspberry Pi a quatre broches: masse (GND), sortie d’impulsion d’écho (ECHO), entrée d’impulsion de déclenchement (TRIG) et alimentation 5 V (Vcc). Nous alimentons le module à l’aide de Vcc, le mettons à la terre à l’aide de GND et utilisons notre Raspberry Pi pour envoyer un signal d’entrée à TRIG, ce qui déclenche l’envoi par le capteur d’une impulsion ultrasonique. Les ondes de pouls rebondissent sur les objets à proximité et certains sont réfléchis vers le capteur. Le capteur détecte ces ondes de retour et mesure le temps entre le déclenchement et l’impulsion renvoyée, puis envoie un signal de 5 V sur la broche ECHO.

ECHO sera «faible» (0 V) jusqu’à ce que le capteur se déclenche lorsqu’il reçoit l’impulsion d’écho. Une fois qu’une impulsion de retour a été localisée, ECHO est réglé sur «haut» (5 V) pour la durée de cette impulsion. La durée d’impulsion est le temps complet entre la sortie d’une impulsion ultrasonique par le capteur et la détection de l’impulsion de retour par le récepteur du capteur. Notre script Python doit donc mesurer la durée d’impulsion puis calculer la distance à partir de celle-ci.

IMPORTANT. Le signal de sortie du capteur (ECHO) sur le HC-SR04 est évalué à 5V. Cependant, la broche d’entrée du Raspberry Pi GPIO est évaluée à 3,3 V. L’envoi d’un signal 5V dans ce port d’entrée 3,3V non protégé pourrait endommager vos broches GPIO, ce que nous voulons éviter! Nous devrons utiliser un petit circuit diviseur de tension, composé de deux résistances, pour abaisser la tension de sortie du capteur à quelque chose que notre Raspberry Pi peut gérer.

Diviseurs de tension

Un diviseur de tension se compose de deux résistances (R1 et R2) connectées en série à une tension d’entrée (Vin), qui doit être réduite à notre tension de sortie (Vout). Dans notre circuit, Vin sera ECHO, qui doit être réduit de 5V à notre Vout de 3,3V.

blank

Le circuit suivant et l’équation simple peuvent être appliqués à de nombreuses applications où une tension doit être réduite. Si vous ne voulez pas apprendre le bit technique, prenez simplement 1 x 1kΩ et 1 x 2kΩ résistance.

blank

Sans aller trop loin dans le côté mathématique, nous n’avons en fait besoin que de calculer une valeur de résistance, car c’est le rapport de division qui est important. Nous connaissons notre tension d’entrée (5 V) et notre tension de sortie requise (3,3 V), et nous pouvons utiliser n’importe quelle combinaison de résistances pour réaliser la réduction. Il se trouve que j’ai un tas de 1k supplémentaireΩ résistances, j’ai donc décidé d’utiliser l’un d’eux dans le circuit comme R1.

Brancher nos valeurs, ce serait le suivant:

blank

Nous allons donc utiliser un 1kΩ pour R1 et 2kΩ résistance comme R2!

Assembler le circuit

Nous utiliserons quatre broches sur le Raspberry Pi pour ce projet: GPIO 5V [Pin 2]; Vcc (alimentation 5 V), GPIO GND [Pin 6]; GND (masse 0 V), GPIO 23 [Pin 16]; TRIG (sortie GPIO) et GPIO 24 [Pin 18]; ECHO (entrée GPIO)

blank

1. Branchez quatre de vos cavaliers mâle à femelle dans les broches du HC-SR04 comme suit: Rouge; Vcc, bleu; TRIG, jaune; ECHO et noir; GND.

blank

2. Branchez Vcc dans le rail positif de votre planche à pain et branchez GND dans votre rail négatif.

3. Branchez GPIO 5V [Pin 2] dans le rail positif, et GPIO GND [Pin 6] dans le rail négatif.

blank

4. Branchez TRIG sur un rail vierge et branchez ce rail sur GPIO 23 [Pin 16]. (Vous pouvez brancher TRIG directement sur GPIO 23 si vous le souhaitez). Personnellement, j’aime tout faire sur une planche à pain!

blank

5. Branchez ECHO dans un rail vierge, reliez un autre rail vierge à l’aide de R1 (1kΩ résistance)

6. Reliez votre rail R1 au rail GND à l’aide de R2 (2kΩ résistance). Laissez un espace entre les deux résistances.

blank

7. Ajoutez GPIO 24 [Pin 18] au rail avec votre R1 (1kΩ résistance). Cette broche GPIO doit se situer entre R1 et R2

blank

C’est tout! Notre capteur HC-SR04 est connecté à notre Raspberry Pi!

blank

Détection avec Python

Maintenant que nous avons connecté notre capteur à ultrasons à notre Pi, nous devons programmer un script Python pour détecter la distance!

La sortie du capteur à ultrasons (ECHO) restera toujours faible (0 V), sauf si elle a été déclenchée, auquel cas elle produira 5 V (3,3 V avec notre diviseur de tension!). Nous devons donc définir une broche GPIO en sortie, pour déclencher le capteur, et une en entrée pour détecter le changement de tension ECHO.

Tout d’abord, importez la bibliothèque Python GPIO, importez notre bibliothèque de temps (nous faisons donc attendre notre Pi entre les étapes) et définissez notre numérotation des broches GPIO.

importer RPi.GPIO en tant que GPIO

temps d’importation

GPIO.setmode (GPIO.BCM)

Ensuite, nous devons nommer nos broches d’entrée et de sortie, afin de pouvoir y faire référence plus tard dans notre code Python. Nous nommerons notre broche de sortie (qui déclenche le capteur) GPIO 23 [Pin 16] comme TRIG, et notre broche d’entrée (qui lit le signal de retour du capteur) GPIO 24 [Pin 18] comme ECHO.

TRIG = 23

ECHO = 24

Nous imprimerons ensuite un message pour informer l’utilisateur que la mesure de distance est en cours. . . .

imprimer “Mesure de distance en cours”

Ensuite, définissez vos deux ports GPIO en tant qu’entrées ou sorties comme défini précédemment.

GPIO.setup (TRIG, GPIO.OUT)

GPIO.setup (ECHO, GPIO.IN)

Ensuite, assurez-vous que la goupille de déclenchement est réglée à un niveau bas et laissez le capteur se reposer une seconde.

GPIO.output (TRIG, False)

imprimer “En attendant que le capteur s’installe”

time.sleep (2)

Le capteur HC-SR04 nécessite une courte impulsion de 10uS pour déclencher le module, ce qui amènera le capteur à démarrer le programme de télémétrie (8 salves ultrasonores à 40 kHz) afin d’obtenir une réponse d’écho. Donc, pour créer notre impulsion de déclenchement, nous avons défini la broche de déclenchement à 10 µS, puis à nouveau à son niveau bas.

GPIO.output (TRIG, True)

time.sleep (0.00001)

GPIO.output (TRIG, False)

Maintenant que nous avons envoyé notre signal d’impulsion, nous devons écouter notre broche d’entrée, qui est connectée à ECHO. Le capteur définit ECHO sur élevé pour le temps nécessaire à l’impulsion pour aller et revenir, donc notre code doit donc mesurer la durée pendant laquelle la broche ECHO reste élevée. Nous utilisons la chaîne «while» pour nous assurer que chaque horodatage du signal est enregistré dans le bon ordre.

La fonction time.time () enregistre le dernier horodatage pour une condition donnée. Par exemple, si une broche passe de faible à élevée et que nous enregistrons la condition faible à l’aide de la fonction time.time (), l’horodatage enregistré sera la dernière heure à laquelle cette broche était faible.

Notre première étape doit donc être d’enregistrer le dernier horodatage bas pour ECHO (pulse_start), par exemple juste avant la réception du signal de retour et la broche passe à l’état haut.

tandis que GPIO.input (ECHO) == 0:

pulse_start = time.time ()

Une fois qu’un signal est reçu, la valeur passe de faible (0) à élevée (1), et le signal restera élevé pendant la durée de l’impulsion d’écho. Nous avons donc également besoin du dernier horodatage élevé pour ECHO (pulse_end).

tandis que GPIO.input (ECHO) == 1:

pulse_end = time.time ()

Nous pouvons maintenant calculer la différence entre les deux horodatages enregistrés, et donc la durée de l’impulsion (pulse_duration).

pulse_duration = pulse_end – pulse_start

Avec le temps qu’il faut pour que le signal se déplace vers un objet et vice-versa, nous pouvons calculer la distance en utilisant la formule suivante.

blank

La vitesse du son est variable, en fonction du support traversé, en plus de la température de ce support. Cependant, certains physiciens intelligents ont calculé la vitesse du son au niveau de la mer, nous allons donc prendre notre ligne de base à 343 m / s. Si vous essayez de mesurer la distance dans l’eau, c’est là que vous tombez – assurez-vous d’utiliser la bonne vitesse du son!

Nous devons également diviser notre temps par deux, car ce que nous avons calculé ci-dessus est en fait le temps nécessaire à l’impulsion ultrasonore pour parcourir la distance jusqu’à l’objet et vice-versa. Nous voulons simplement la distance à l’objet! Nous pouvons simplifier le calcul à effectuer dans notre script Python comme suit:

blank

Nous pouvons brancher ce calcul dans notre script Python:

distance = impulsion_duration x 17150

Maintenant, nous devons arrondir notre distance à 2 décimales (pour la netteté!)

distance = ronde (distance, 2)

Ensuite, nous imprimons la distance. La commande ci-dessous imprime le mot «Distance:» suivi de la variable distance, suivi de l’unité «cm»

imprimer “Distance:”, distance, “cm”

Enfin, nous nettoyons nos broches GPIO pour nous assurer que toutes les entrées / sorties sont réinitialisées

GPIO.cleanup ()

blank

Enregistrez votre script python, j’ai appelé le nôtre “range_sensor.py”, et exécutez-le en utilisant la commande suivante. L’exécution d’une racine (sudo) est importante avec ce script:

blank

Le capteur se déposera pendant quelques secondes, puis enregistrera votre distance!

Téléchargements

Vous pouvez télécharger l’exemple ci-dessus HC-SR04 Script Python Raspberry Pi ici

Dimensions du HC-SR04

Diagramme de synchronisation HC-SR04

Sources

Merci pour les sources suivantes pour des informations sur ce tutoriel:

Raspberry Pi Spy – Partie 1

Raspberry Pi Spy – Partie 2

Création d’octets

Articles similaires

Bouton retour en haut de la page
Fermer