.. note::
¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
**¿Por qué unirse?**
- **Soporte experto**: Resuelve problemas post-venta 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 nuevos.
- **Promociones y sorteos festivos**: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy.
.. _2.2.4_py_pi5:
2.2.4 Módulo de Interruptor de Láminas
=========================================
Introducción
---------------
En este proyecto, aprenderemos sobre el interruptor de láminas, que es un interruptor eléctrico que opera mediante un campo magnético aplicado.
Componentes Necesarios
--------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../python_pi5/img/2.2.4_reed_switch_list.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
* - Kit Raphael
- 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 AL 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_reed_switch`
- |link_reed_switch_buy|
Diagrama Esquemático
---------------------------
============== ====== ======== ===
Nombre T-Board física wiringPi BCM
GPIO17 Pin 11 0 17
GPIO27 Pin 13 2 27
GPIO22 Pin 15 3 22
============== ====== ======== ===
.. image:: ../python_pi5/img/2.2.4_reed_switch_schematic_1.png
:width: 400
:align: center
.. image:: ../python_pi5/img/2.2.4_reed_switch_schematic_2.png
:width: 400
:align: center
Procedimientos Experimentales
-----------------------------------
**Paso 1:** Construye el circuito.
.. image:: ../python_pi5/img/2.2.4_reed_switch_circuit.png
:width: 700
:align: center
**Paso 2:** Cambia de directorio.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Paso 3:** Ejecuta.
.. raw:: html
.. code-block::
sudo python3 2.2.4_ReedSwitch_zero.py
El LED verde se encenderá cuando se ejecute el código. Si se coloca un imán cerca del módulo del interruptor de láminas, el LED rojo se encenderá; al retirar el imán, el LED verde se encenderá nuevamente.
.. warning::
Si recibe el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulte :ref:`faq_soc`
**Código**
.. note::
Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, debes 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.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED, Button
# Inicializa el interruptor de láminas y los LEDs usando GPIO Zero
reed_switch = Button(17, pull_up=True) # Interruptor de láminas en GPIO 17, usando una resistencia pull-up interna
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 the LEDs based on the reed switch.
Turns the red LED on and green LED off when the reed switch is pressed, and vice versa.
"""
if reed_switch.is_pressed:
green_led.off() # Apaga el LED verde
red_led.on() # Enciende el LED rojo
else:
green_led.on() # Enciende el LED verde
red_led.off() # Apaga el LED rojo
try:
green_led.on() # Enciende el LED verde al inicio
while True:
# Establece las funciones de callback para los cambios de estado del interruptor de láminas
reed_switch.when_pressed = update_leds # Callback cuando se presiona el interruptor
reed_switch.when_released = update_leds # Callback cuando se suelta el interruptor
except KeyboardInterrupt:
# Limpia recursos y sale con Ctrl+C
green_led.off()
red_led.off()
pass
**Explicación del Código**
#. Esta línea especifica que el script se debe ejecutar usando Python 3. Importa ``LED`` y ``Button`` (usado para el interruptor de láminas) de la biblioteca gpiozero.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED, Button
#. Inicializa el interruptor de láminas en el pin GPIO 17 con una resistencia pull-up interna. También inicializa dos LEDs conectados a los pines GPIO 27 y 22.
.. code-block:: python
# Inicializa el interruptor de láminas y los LEDs usando GPIO Zero
reed_switch = Button(17, pull_up=True) # Interruptor de láminas en GPIO 17, usando una resistencia pull-up interna
green_led = LED(27) # LED verde conectado al pin GPIO 27
red_led = LED(22) # LED rojo conectado al pin GPIO 22
#. Define la función ``update_leds``, que actualiza los estados de los LEDs basándose en el estado del interruptor de láminas. El LED rojo se enciende y el LED verde se apaga cuando se presiona el interruptor, y lo contrario cuando se suelta.
.. code-block:: python
def update_leds():
if reed_switch.is_pressed:
green_led.off() # Apaga el LED verde
red_led.on() # Enciende el LED rojo
else:
green_led.on() # Enciende el LED verde
red_led.off() # Apaga el LED rojo
#. Establece el estado inicial del LED verde a encendido. El bucle principal asigna la función ``update_leds`` como callbacks para los eventos ``when_pressed`` y ``when_released`` del interruptor de láminas. Incluye manejo de excepciones para KeyboardInterrupt para limpiar y salir del programa de manera ordenada.
.. code-block:: python
try:
green_led.on() # Enciende el LED verde al inicio
while True:
# Establece las funciones de callback para los cambios de estado del interruptor de láminas
reed_switch.when_pressed = update_leds # Callback cuando se presiona el interruptor
reed_switch.when_released = update_leds # Callback cuando se suelta el interruptor
except KeyboardInterrupt:
# Limpia recursos y sale con Ctrl+C
green_led.off()
red_led.off()
pass