Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

2.2.6 Geschwindigkeitssensormodul

Einführung

In diesem Projekt werden wir den Einsatz des Geschwindigkeitssensormoduls kennenlernen. Ein Geschwindigkeitssensormodul ist eine Art Tachometer, der zur Messung der Geschwindigkeit eines rotierenden Objekts wie eines Motors verwendet wird.

Benötigte Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

../_images/2.2.6_photo_interrrupter_list.png

Es ist definitiv praktisch, ein ganzes Set zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM SET

LINK

Raphael Kit

337

Raphael Kit

Sie können diese auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Widerstand

KAUFEN

LED

KAUFEN

Geschwindigkeitssensormodul

-

Schaltplan

../_images/2.2.6_photo_interrrupter_schematic.png

Experimentelle Verfahren

Schritt 1: Baue die Schaltung.

../_images/2.2.6_photo_interrrupter_circuit.png

Schritt 2: Wechsle das Verzeichnis.

cd ~/raphael-kit/python-pi5

Schritt 3: Ausführen.

sudo python3 2.2.6_speed_sensor_module_zero.py

Nachdem der Code ausgeführt wurde, leuchtet die grüne LED. Wenn Sie ein Hindernis in die Lücke des Geschwindigkeitssensormoduls platzieren, wird „Light was blocked“ auf dem Bildschirm gedruckt und die rote LED leuchtet auf. Entfernen Sie das Hindernis und die grüne LED leuchtet wieder auf.

Warnung

Wenn die Fehlermeldung RuntimeError: Cannot determine SOC peripheral base address angezeigt wird, lesen Sie bitte If gpiozero doesn’t work.

Code

Bemerkung

Sie können den untenstehenden Code modifizieren/zurücksetzen/kopieren/ausführen/stoppen. Bevor Sie das tun, müssen Sie jedoch zum Quellcodepfad wie raphael-kit/python-pi5 wechseln. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.

#!/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

Code-Erklärung

  1. Die gpiozero Bibliothek wird importiert, um ihre LED und Button Klassen für die Interaktion mit den GPIO-Pins zu nutzen. Die signal Bibliothek wird für die pause Funktion importiert, die verwendet wird, um das Skript am Laufen zu halten.

    #!/usr/bin/env python3
    from gpiozero import LED, Button
    from signal import pause
    
  2. speed_sensor wird als Button an GPIO Pin 17 gesetzt. Der Parameter pull_up=False gibt an, dass der interne Pull-up-Widerstand nicht verwendet wird. green_led und red_led werden als LED Objekte initialisiert, die mit den GPIO Pins 27 und 22 verbunden sind.

    # 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. Die Funktion update_leds überprüft den Zustand des Geschwindigkeitssensors. Wenn der Sensor ausgelöst wird (aktiviert), schaltet sie die grüne LED aus, die rote LED ein und gibt eine Nachricht aus. Wenn der Sensor freigegeben wird, macht sie das Gegenteil.

    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. Die Hauptschleife überprüft kontinuierlich den Zustand des Geschwindigkeitssensors. Die Attribute when_pressed und when_released sind Ereignishandler, die die Funktion update_leds aufrufen, wenn sich der Sensorzustand ändert. Der try-except-Block dient zur Behandlung eines KeyboardInterrupt für einen eleganten Ausstieg.

    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