Nota

¡Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprender y compartir: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Avances exclusivos: Obtén acceso anticipado a anuncios de nuevos productos y adelantos.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones y sorteos festivos: Participa en sorteos y promociones de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo!

2.2.6 Módulo Sensor de Velocidad

Introducción

En este proyecto, aprenderemos el uso del módulo sensor de velocidad. Un módulo sensor de velocidad es un tipo de tacómetro que se utiliza para medir la velocidad de un objeto rotativo como un motor.

Componentes Necesarios

En este proyecto, necesitamos los siguientes componentes.

../_images/2.2.6_photo_interrrupter_list.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ARTÍCULOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

LED

COMPRAR

Módulo Sensor de Velocidad

-

Diagrama Esquemático

../_images/2.2.6_photo_interrrupter_schematic.png

Procedimientos Experimentales

Paso 1: Construir el circuito.

../_images/2.2.6_photo_interrrupter_circuit.png

Paso 2: Cambiar de directorio.

cd ~/raphael-kit/python-pi5

Paso 3: Ejecutar.

sudo python3 2.2.6_speed_sensor_module_zero.py

Después de ejecutar el código, el LED verde se encenderá. Si colocas un obstáculo en el hueco del módulo sensor de velocidad, se imprimirá «luz bloqueada» en la pantalla y el LED rojo se encenderá. Retira el obstáculo y el LED verde se encenderá de nuevo.

Advertencia

Si recibe el mensaje de error RuntimeError: Cannot determine SOC peripheral base address, consulte Si «gpiozero» no funciona.

Código

Nota

Puedes Modificar/Restablecer/Copiar/Ejecutar/Detener el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como raphael-kit/python-pi5. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.

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

# Inicializar pines GPIO para el sensor de velocidad y los LEDs utilizando la biblioteca GPIO Zero
speed_sensor = Button(17, pull_up=False)  # Sensor de velocidad conectado al pin GPIO 17 sin pull-up
green_led = LED(27)                      # LED verde conectado al pin GPIO 27
red_led = LED(22)                        # LED rojo conectado al pin GPIO 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()   # Encender LED verde
        red_led.off()    # Apagar LED rojo

try:
    # Bucle principal para verificar continuamente el estado del sensor
    while True:
        # Actualizar LEDs basado en cambios en el estado del sensor
        speed_sensor.when_pressed = update_leds   # Actualizar LEDs cuando el sensor está presionado
        speed_sensor.when_released = update_leds  # Actualizar LEDs cuando el sensor está liberado

except KeyboardInterrupt:
    # Manejar KeyboardInterrupt (Ctrl+C) para una terminación segura del script
    pass

Explicación del Código

  1. Se importa la biblioteca gpiozero para usar sus clases LED y Button para interactuar con los pines GPIO. Se importa la biblioteca signal para usar la función pause, que se utiliza para mantener el script en ejecución.

    #!/usr/bin/env python3
    from gpiozero import LED, Button
    from signal import pause
    
  2. El sensor de velocidad se configura como un Button en el pin GPIO 17. El parámetro pull_up=False indica que no se utiliza la resistencia pull-up interna. green_led y red_led se inicializan como objetos LED conectados a los pines GPIO 27 y 22, respectivamente.

    # Inicializar pines GPIO para el sensor de velocidad y los LEDs utilizando la biblioteca GPIO Zero
    speed_sensor = Button(17, pull_up=False)  # Sensor de velocidad conectado al pin GPIO 17 sin pull-up
    green_led = LED(27)                      # LED verde conectado al pin GPIO 27
    red_led = LED(22)                        # LED rojo conectado al pin GPIO 22
    
  3. La función update_leds verifica el estado del sensor de velocidad. Si el sensor está presionado (activado), apaga el LED verde, enciende el LED rojo e imprime un mensaje. Si el sensor está liberado, hace lo contrario.

    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()   # Encender LED verde
            red_led.off()    # Apagar LED rojo
    
  4. El bucle principal verifica continuamente el estado del sensor de velocidad. Los atributos when_pressed y when_released son manejadores de eventos que llaman a la función update_leds cuando el estado del sensor cambia. El bloque try-except se utiliza para manejar una excepción KeyboardInterrupt para una salida limpia.

    try:
        # Bucle principal para verificar continuamente el estado del sensor
        while True:
            # Actualizar LEDs basado en cambios en el estado del sensor
            speed_sensor.when_pressed = update_leds   # Actualizar LEDs cuando el sensor está presionado
            speed_sensor.when_released = update_leds  # Actualizar LEDs cuando el sensor está liberado
    
    except KeyboardInterrupt:
        # Manejar KeyboardInterrupt (Ctrl+C) para una terminación segura del script
        pass