Nota
¡Hola, bienvenidos a la Comunidad de Entusiastas de Raspberry Pi, Arduino y ESP32 de SunFounder en Facebook! Profundiza más en Raspberry Pi, Arduino y ESP32 junto 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 nuevos.
Promociones festivas y sorteos: Participa en sorteos y promociones de temporada.
👉 ¿Estás listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy mismo!
Lección 07: Módulo Sensor de Velocidad Infrarrojo
En esta lección, aprenderás a medir la velocidad de rotación utilizando una Raspberry Pi y un sensor simple. Conectaremos un sensor de entrada digital al pin GPIO 17 y utilizaremos Python para monitorear los cambios de estado. El enfoque estará en calcular las revoluciones por segundo contando las activaciones del sensor durante un período de tiempo específico. Escribirás una función en Python para capturar con precisión estos datos y convertirlos en una velocidad medible. Este proyecto práctico es una introducción directa y útil a la recolección de datos del mundo real y el análisis con Raspberry Pi, ideal para principiantes interesados en la programación aplicada en Python e interacción con hardware.
Componentes requeridos
En este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí tienes el enlace:
Nombre |
ELEMENTOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit de Sensor Universal Maker |
94 |
También puedes comprarlos por separado en los enlaces a continuación.
Introducción al componente |
Enlace de compra |
|---|---|
Raspberry Pi 5 |
|
- |
|
Conexión
Código
from gpiozero import DigitalInputDevice
from time import time
# Inicializar el sensor
sensor = DigitalInputDevice(17) # Suponiendo que el sensor está conectado al GPIO17
def calculate_rps(sample_time=1, steps_per_revolution=20):
"""
Calculate Revolutions Per Second (RPS)
:param sample_time: Sampling time in seconds
:param steps_per_revolution: Number of steps in each complete revolution
:return: Revolutions per second
"""
start_time = time()
end_time = start_time + sample_time
steps = 0
last_state = False
while time() < end_time:
current_state = sensor.is_active
if current_state and not last_state:
# Detect a transition from inactive to active state
steps += 1
last_state = current_state
# Calculate RPS
rps = steps / steps_per_revolution
return rps
# Example usage
print("Measuring RPS...")
try:
while True:
rps = calculate_rps() # Default sampling for 1 second
print(f"RPS: {rps}")
except KeyboardInterrupt:
# Salir de manera segura cuando se detecta una interrupción por teclado
pass
Análisis del código
Importación de bibliotecas
El script comienza importando
DigitalInputDevicede gpiozero para interactuar con el sensor ytimepara la gestión del tiempo.from gpiozero import DigitalInputDevice from time import time
Inicialización del sensor
Se crea un objeto
DigitalInputDevicellamadosensor, conectado al pin GPIO 17. Esta configuración asume que el sensor digital está conectado a GPIO17.sensor = DigitalInputDevice(17)
Definición de la función
calculate_rpsEsta función calcula las Revoluciones Por Segundo (RPS) de un objeto en rotación.
sample_timees la duración en segundos durante la cual se muestrea la salida del sensor.steps_per_revolutionrepresenta el número de activaciones del sensor por cada revolución completa.La función utiliza un bucle while para contar el número de pasos (activaciones del sensor) dentro del tiempo de muestreo.
Detecta las transiciones de estado inactivo a activo e incrementa el contador de
stepsen consecuencia.El RPS se calcula como el número de pasos dividido entre
steps_per_revolution.
def calculate_rps(sample_time=1, steps_per_revolution=20): """ Calculate Revolutions Per Second (RPS) :param sample_time: Sampling time in seconds :param steps_per_revolution: Number of steps in each complete revolution :return: Revolutions per second """ start_time = time() end_time = start_time + sample_time steps = 0 last_state = False while time() < end_time: current_state = sensor.is_active if current_state and not last_state: # Detect a transition from inactive to active state steps += 1 last_state = current_state # Calculate RPS rps = steps / steps_per_revolution return rps
Ejecutando el bucle principal:
El script entra en un bucle continuo donde llama a
calcular_rpspara calcular e imprimir el RPS.El bucle se ejecuta indefinidamente hasta que se detecta una interrupción por teclado (Ctrl+C).
Se utiliza un bloque
try-exceptpara manejar la interrupción de manera adecuada, permitiendo una salida segura.
try: while True: rps = calcular_rps() # Muestreo por defecto durante 1 segundo print(f"RPS: {rps}") except KeyboardInterrupt: pass