KY-050 Capteur à ultrasons

De SensorKit X40 Wiki

Aller à : navigation, rechercher

Photo

KY-0050.png

Données techniques / Description sommaire

Une mesure de distance est déclenchée par un signal sur l'entrée Trigger. Un signal en retour PWM-TTL est reçu sur écho correspondant à la distance.

Plage de mesure: 2 à 300cm - Résolution: 3mm

Intervalle mini entre 2 mesures: 50µs

Brochage

KY-050.png

Principe de fonctionnement

Le principe de fonctionnement est basé sur la vitesse du son qui reste à peu près constante à 343,2 m/s dans l'air à une température de 20°C. Le module est composé de deux capsules ultrasoniques (émetteur + récepteur). L'émetteur va envoyer une salve d'ondes ultrasonores qui vont se réfléchir sur l'obstacle. Les ondes renvoyées en écho sont réceptionnées par le récepteur. 


Le calcul de la distance peut se faire par un microcontroleur en fonction du temps de réponse entre l'émission et la réception du signal.

KY-050em-re.jpg

Les capsules ultrasoniques fonctionnent à la fréquence de 40 kHz et sont donc largement en-dehors du spectre audible (20 Hz à 20 kHz). 

L'envoi du signal ultrasonore est déclenché par un signal de démarrage de 10 µs (ActiveHigh) sur la "broche d'entrée de déclenchement". Après l'envoi du signal, la "broche de réception de l'écho" est activée (ActiveHigh). Si le récepteur a reçu le signal, la "broche de réception de l'écho" est désactivée.

Le temps entre l'activation et la désactivation de la "broche de réception de l'écho" peut être mesuré et converti en distance, car cela correspond également à la durée pendant laquelle le signal ultrasonore parcourt la distance entre l'émetteur et la paroi réfléchissante et ensuite le retour vers le récepteur.

La conversion est alors réalisée sur l'approximation d'une vitesse des ondes constante. La distance correspond par conséquent à la moitié de la distance parcourue.


KY-050-US.jpg

Exemple de code pour Arduino

En utilisant le principe de fonctionnement décrit ci-dessus, cet exemple de code mesure la durée de temps nécessaire pour que le signal effectue son parcours complet (émetteur --> obstacle --> récepteur) à l'aide de la fonction pulseIn.

Cette durée est utilisée pour calculer la distance jusqu'à l'obstacle. La distance est ensuite envoyée à la sortie série.

En cas de dépassement de la portée du capteur, un signal d'erreur est émis.

#define Echo_EingangsPin 7 // Broche d'entrée Echo
#define Trigger_AusgangsPin 8 // Broche de sortie Trigger

// Définition des variables nécessaires
int maximumRange = 300; 
int minimumRange = 2; 
long Distance;
long Duree;

void setup() {
 pinMode(Trigger_AusgangsPin, OUTPUT);
 pinMode(Echo_EingangsPin, INPUT);
 Serial.begin (9600);
}

void loop() {

 // Le début de la mesure est lancé par un signal de 10µs sur Trigger
 digitalWrite(Trigger_AusgangsPin, HIGH);
 delayMicroseconds(10); 
 digitalWrite(Trigger_AusgangsPin, LOW);
 
 // Attente à l'entrée Echo jusqu'à ce que le signal soit activé
 // et mesure de la durée
 Duree = pulseIn(Echo_EingangsPin, HIGH);
 
 // Calcul de la distance en fonction du temps enregistré
 Distance = Duree/58.2;
 
 // On vérifie si le signal se trouve dans la plage de mesure du capteur
 if (Distance >= maximumRange || Distance <= minimumRange)
 {
    // Si ce n'est pas le cas, affichage d'un signal d'erreur
      Serial.println("Distance en-dehors de la portee");
      Serial.println("-----------------------------------");
 }  
 
 else 
 {
    // La distance calculée est envoyée vers la sortie série
      Serial.print("La distance est de: ");
      Serial.print(Distance);
      Serial.println("cm");
      Serial.println("-----------------------------------");
 }
  // Pause entre les mesures
 delay(500);
}

Affectation des broches Arduino:

VCC = [Pin 5V]
Echo = [Pin 7]
Trigger = [Pin 8]
GND capteur = [Pin GND]

Exemple de programme à télécharger

KY-050.zip

Exemple de code pour Raspberry Pi

!! Attention !!  Tension 5 Vcc  !! Attention !!

La carte Raspberry Pi fonctionne en 3,3Vcc tandis que le capteur nécessite 5 Vcc pour fonctionner. Si on raccorde directement ce capteur à la Raspberry Pi, celle-ci pourrait être endommagée de façon permanente.

Pour palier à ce problème, il est nécessaire d'utiliser un convertisseur de niveau de tension tel que le KY-051, à placer entre la Raspberry et le capteur. 

Plus d'informations disponibles à la page KY-051 Voltage Translator / Level Shifter

!! Attention !! Tension 5 Vcc  !! Attention !!


En utilisant le principe de fonctionnement décrit ci-dessus, cet exemple de code mesure la durée de temps nécessaire pour que le signal effectue son parcours complet (émetteur --> obstacle --> récepteur). On utilise une sorte de chronomètre et la fonction time.time()

Cette durée est utilisée pour calculer la distance jusqu'à l'obstacle. La distance est ensuite envoyée à la console.

En cas de dépassement de la portée du capteur, un signal d'erreur est émis.


#!/usr/bin/python
# coding=utf-8
 
# Les modules nécessaires sont importés et mis en place
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
 
# Sélection des broches d'entrée/sortie respectifs
Output_Trigger = 17
Input_Echo    = 27
 
# Réglage de la pause entre les mesures
sleeptime = 0.8
 
# Configuration des broches d'entrée/sortie
GPIO.setup(Output_Trigger, GPIO.OUT)
GPIO.setup(Input_Echo, GPIO.IN)
GPIO.output(Output_Trigger, False)
 
# Boucle de programme principale
try:
    while True:
        # Le début de la mesure est lancé par un signal de 10µs sur Trigger
        GPIO.output(Output_Trigger, True)
        time.sleep(0.00001)
        GPIO.output(Output_Trigger, False)
 
        # Démarrage du chronomètre
        HeureActive = time.time()
        while GPIO.input(Input_Echo) == 0:
            HeureActive = time.time() # L'heure actuelle est enregistrée jusqu'à ce que le signal soit activé
 
        while GPIO.input(Input_Echo) == 1:
            HeureInactive = time.time() # Enregistrement de l'heure au moment où le signal est encore actif
 
        # La différence en les deux heures donne la durée recherchée
        Duree = HeureInactive - HeureActive
        # Calcul de la distance en fonction de la durée enregistrée
        Distance = (Duree * 34300) / 2
 
        # On vérifie si le signal se trouve dans la plage de mesure du capteur
        if Distance < 2 or (round(Distance) > 300):
            # Si ce n'est pas le cas, affichage d'un signal d'erreur
            print("Distance en-dehors de la portée")
            print("------------------------------")
        else:
            # La distance est formatée à 2 décimales
            Distance = format((Duree * 34300) / 2, '.2f')
            # La distance calculée est envoyée vers la console
            print("La distance mesure:"), Distance,("cm")
            print("------------------------------")
 
        # Pause entre les mesures
        time.sleep(sleeptime)
 
# réinitialisation de tous les GPIO en entrées
except KeyboardInterrupt:
    GPIO.cleanup()


Brochage Raspberry Pi:

Capteur KY-050:

VCC = 5V [Pin 2 (RPi)]
Trigger = Pin B1 [convertisseur KY-051]
Echo = Pin B2 [convertisseur KY-051]
GND = Masse [Pin 6 (RPi)]

Convertisseur KY-051:

VCCb = 5V [Pin 04(RPi)]
Pin B1 = Trigger [Capteur KY-050]
Pin B2 = Echo [Capteur KY-050]
VCCa = 3,3V [Pin 01(RPi)]
Pin A1 = GPIO17 [Pin 11(RPi)]
Pin A2 = GPIO27 [Pin 13(RPi)]
GND = Masse [Pin 06(RPi)]
  • Les autres broches du convertisseur KY-051 ne doivent pas être raccordées (OE,B3,B4,A3,A4).


Exemple de programme à télécharger

KY-050_RPi_UltraSon.zip

Commande pour lancer le programme:

sudo python KY-050_RPi_UltraSon.py