Note

Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.

  • Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.

👉 Prêt à explorer et à créer avec nous ? Cliquez [Ici] et rejoignez-nous aujourd’hui !

2.2.6 Module de capteur de vitesse

Introduction

Dans ce projet, nous allons apprendre à utiliser le module de capteur de vitesse. Un module de capteur de vitesse est un type de tachymètre utilisé pour mesurer la vitesse d’un objet en rotation, comme un moteur.

Composants nécessaires

Dans ce projet, nous avons besoin des composants suivants.

../_images/2.2.6_photo_interrrupter_list.png

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ARTICLES DANS CE KIT

LIEN

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DU COMPOSANT

LIEN D’ACHAT

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Résistance

ACHETER

LED

ACHETER

Module de capteur de vitesse

-

Schéma

../_images/2.2.6_photo_interrrupter_schematic.png

Procédures expérimentales

Étape 1 : Construisez le circuit.

../_images/2.2.6_photo_interrrupter_circuit.png

Étape 2 : Changez de répertoire.

cd ~/raphael-kit/python-pi5

Étape 3 : Exécutez.

sudo python3 2.2.6_speed_sensor_module_zero.py

Après l’exécution du code, la LED verte s’allumera. Si vous placez un obstacle dans l’espace du module de capteur de vitesse, « light blocked » sera imprimé à l’écran et la LED rouge s’allumera. Retirez l’obstacle et la LED verte s’allumera de nouveau.

Avertissement

Si vous recevez le message d’erreur RuntimeError: Cannot determine SOC peripheral base address, veuillez consulter Si « gpiozero » ne fonctionne pas.

Code

Note

Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez vous rendre au chemin du code source comme raphael-kit/python-pi5. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet.

#!/usr/bin/env python3
from gpiozero import LED, Button
from signal import pause

# Initialize GPIO pins for the speed sensor and LEDs using GPIO Zero library
speed_sensor = Button(17, pull_up=False)  # Speed sensor connected to GPIO pin 17 without pull-up
green_led = LED(27)                      # Green LED connected to GPIO pin 27
red_led = LED(22)                        # Red LED connected to GPIO pin 22

def update_leds():
    """
    Update the state of LEDs based on the speed sensor.
    - If the sensor is pressed (triggered), the red LED is turned on and a message is printed.
    - If the sensor is released (not triggered), the green LED is turned on.
    """
    if speed_sensor.is_pressed:
        green_led.off()  # Turn off green LED
        red_led.on()     # Turn on red LED
        print('Light was blocked')  # Print message indicating sensor is triggered
    else:
        green_led.on()   # Turn on green LED
        red_led.off()    # Turn off red LED

try:
    # Main loop to continuously check sensor state
    while True:
        # Update LEDs based on sensor state changes
        speed_sensor.when_pressed = update_leds   # Update LEDs when sensor is pressed
        speed_sensor.when_released = update_leds  # Update LEDs when sensor is released

except KeyboardInterrupt:
    # Handle KeyboardInterrupt (Ctrl+C) for a graceful script termination
    pass

Explication du code

  1. La bibliothèque gpiozero est importée pour utiliser ses classes LED et Button afin d’interagir avec les broches GPIO. La bibliothèque signal est importée pour la fonction pause, qui est utilisée pour maintenir le script en cours d’exécution.

    #!/usr/bin/env python3
    from gpiozero import LED, Button
    from signal import pause
    
  2. speed_sensor est défini comme un Button sur la broche GPIO 17. Le paramètre pull_up=False indique que la résistance pull-up interne n’est pas utilisée. green_led et red_led sont initialisés comme des objets LED connectés respectivement aux broches GPIO 27 et 22.

    # Initialize GPIO pins for the speed sensor and LEDs using GPIO Zero library
    speed_sensor = Button(17, pull_up=False)  # Speed sensor connected to GPIO pin 17 without pull-up
    green_led = LED(27)                      # Green LED connected to GPIO pin 27
    red_led = LED(22)                        # Red LED connected to GPIO pin 22
    
  3. La fonction update_leds vérifie l’état du capteur de vitesse. Si le capteur est pressé (activé), elle éteint la LED verte, allume la LED rouge et imprime un message. Si le capteur est relâché, elle fait l’inverse.

    def update_leds():
        """
        Update the state of LEDs based on the speed sensor.
        - If the sensor is pressed (triggered), the red LED is turned on and a message is printed.
        - If the sensor is released (not triggered), the green LED is turned on.
        """
        if speed_sensor.is_pressed:
            green_led.off()  # Turn off green LED
            red_led.on()     # Turn on red LED
            print('Light was blocked')  # Print message indicating sensor is triggered
        else:
            green_led.on()   # Turn on green LED
            red_led.off()    # Turn off red LED
    
  4. La boucle principale vérifie continuellement l’état du capteur de vitesse. Les attributs when_pressed et when_released sont des gestionnaires d’événements qui appellent la fonction update_leds lorsque l’état du capteur change. Le bloc try-except est utilisé pour gérer une interruption clavier (KeyboardInterrupt) pour une sortie propre.

    try:
        # Main loop to continuously check sensor state
        while True:
            # Update LEDs based on sensor state changes
            speed_sensor.when_pressed = update_leds   # Update LEDs when sensor is pressed
            speed_sensor.when_released = update_leds  # Update LEDs when sensor is released
    
    except KeyboardInterrupt:
        # Handle KeyboardInterrupt (Ctrl+C) for a graceful script termination
        pass