.. note::
¡Hola! Bienvenidos 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 nuevos anuncios de productos y adelantos.
- **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
- **Promociones y sorteos festivos**: Participa en sorteos y promociones durante las festividades.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo.
.. _2.2.6_py:
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, necesitaremos los siguientes componentes.
.. image:: ../img/2.2.6component.png
:width: 700
:align: center
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ARTÍCULOS EN ESTE KIT
- ENLACE
* - Raphael Kit
- 337
- |link_Raphael_kit|
También puedes comprarlos por separado en los enlaces a continuación.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCCIÓN DEL COMPONENTE
- ENLACE DE COMPRA
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_led`
- |link_led_buy|
* - :ref:`cpn_speed_sensor`
- \-
Diagrama Esquemático
-------------------------
.. image:: ../img/2.2.6circuit.png
:width: 400
:align: center
Procedimientos Experimentales
----------------------------------
**Paso 1:** Construye el circuito.
.. image:: ../img/2.2.6fritzing.png
:width: 700
:align: center
**Paso 2:** Cambia de directorio.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python
**Paso 3:** Ejecuta.
.. raw:: html
.. code-block::
sudo python3 2.2.6_speed_sensor_module.py
Después de ejecutar el código, el LED verde se encenderá.
Si colocas un obstáculo en la ranura del módulo sensor de velocidad,
se imprimirá "luz bloqueada" en la pantalla y se encenderá el LED rojo.
Retira el obstáculo y el LED verde se encenderá nuevamente.
**Código**
.. note::
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``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
import RPi.GPIO as GPIO
speedPin = 17
Gpin = 27
Rpin = 22
def setup():
GPIO.setmode(GPIO.BCM) #
GPIO.setup(Gpin, GPIO.OUT) # Configura el modo del pin del LED verde como salida
GPIO.setup(Rpin, GPIO.OUT) # Configura el modo del pin del LED rojo como salida
GPIO.setup(speedPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Configura el modo del pin de velocidad como entrada y conéctalo a un nivel alto (3.3V)
GPIO.add_event_detect(speedPin, GPIO.BOTH, callback=detect, bouncetime=200)
def Led(x):
if x == 0:
GPIO.output(Rpin, 0)
GPIO.output(Gpin, 1)
if x == 1:
GPIO.output(Rpin, 1)
GPIO.output(Gpin, 0)
print ('Light was blocked')
def detect(chn):
Led(GPIO.input(speedPin))
def loop():
while True:
pass
def destroy():
GPIO.output(Gpin, GPIO.LOW) # Apaga el LED verde
GPIO.output(Rpin, GPIO.LOW) # Apaga el LED rojo
GPIO.cleanup() # Libera recursos
if __name__ == '__main__': # El programa empieza aquí
setup()
try:
loop()
except KeyboardInterrupt: # Cuando se presiona 'Ctrl+C', el programa hijo ejecutará destroy().
destroy()
**Explicación del Código**
.. code-block:: python
GPIO.add_event_detect(speedPin, GPIO.BOTH, callback=detect, bouncetime=200)
Añade un evento aquí, activado por un cambio en el nivel de ``speedPin`` y llama a ``detect()`` para controlar el encendido y apagado de los 2 LEDs.
.. code-block:: python
def Led(x):
if x == 0:
GPIO.output(Rpin, 0)
GPIO.output(Gpin, 1)
if x == 1:
GPIO.output(Rpin, 1)
GPIO.output(Gpin, 0)
print ('Light was blocked')
Define una función ``Led()`` que enciende el LED rojo e imprime ``La luz fue bloqueada`` cuando el parámetro es 1; enciende el LED verde cuando el parámetro es 0.
.. code-block:: python
def detect(chn):
Led(GPIO.input(speedPin))
Define una función de callback donde el valor de ``speedPin`` controlará el encendido o apagado de los 2 LEDs.
**Imagen del Fenómeno**
-------------------------------
.. image:: ../img/2.2.6photo_interrrupter.JPG
:width: 500
:align: center