.. note:: ¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza 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**: Accede anticipadamente a anuncios de nuevos productos y adelantos exclusivos. - **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **Promociones Festivas y Sorteos**: Participa en sorteos y promociones festivas. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo! .. _2.1.5_py_pi5: 2.1.5 Interruptor de Inclinación ===================================== Introducción ------------------- Este es un interruptor de inclinación de bola con una bola de metal en su interior. Se utiliza para detectar inclinaciones de un pequeño ángulo. Componentes Necesarios ----------------------------- En este proyecto, necesitamos los siguientes componentes. .. image:: ../python_pi5/img/2.1.5_tilt_switch_list.png 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 desde los enlaces a continuación. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCCIÓN DE COMPONENTES - 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_tilt_switch` - \- Diagrama Esquemático ----------------------- .. image:: ../python_pi5/img/2.1.5_tilt_switch_schematic_1.png .. image:: ../python_pi5/img/2.1.5_tilt_switch_schematic_2.png Procedimientos Experimentales --------------------------------- **Paso 1:** Construir el circuito. .. image:: ../python_pi5/img/2.1.5_tilt_switch_circuit.png **Paso 2:** Cambiar directorio. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Paso 3:** Ejecutar. .. raw:: html .. code-block:: sudo python3 2.1.5_Tilt_zero.py Coloca el interruptor de inclinación verticalmente, y el LED verde se encenderá. Si lo inclinas, se imprimirá "¡Inclinación!" en la pantalla y el LED rojo se encenderá. Colócalo nuevamente en posición vertical, y el LED verde se encenderá. .. 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 # Inicializar el botón para el sensor de inclinación y los LEDs usando GPIO Zero TiltPin = Button(17, pull_up=False) # Sensor de inclinación conectado al pin GPIO 17, resistor pull-up deshabilitado green_led = LED(27) # LED verde conectado al pin GPIO 27 red_led = LED(22) # LED rojo conectado al pin GPIO 22 def detect(): """ Detect the tilt sensor state and control the LEDs. Turns on the red LED and turns off the green LED when tilted. Turns off the red LED and turns on the green LED when not tilted. """ if TiltPin.is_pressed: # Verificar si el sensor está inclinado print(' *************') print(' * Tilt! *') print(' *************') red_led.on() # Encender LED rojo green_led.off() # Apagar LED verde else: # Si el sensor no está inclinado red_led.off() # Apagar LED rojo green_led.on() # Encender LED verde try: while True: # Verificar continuamente el estado del sensor de inclinación y actualizar los LEDs TiltPin.when_pressed = detect TiltPin.when_released = detect except KeyboardInterrupt: # Manejar KeyboardInterrupt (Ctrl+C) para salir del bucle de manera ordenada pass **Explicación del Código** #. Esta línea configura el script para ejecutarse con Python 3 e importa ``LED`` y ``Button`` de ``gpiozero`` para controlar dispositivos GPIO. .. code-block:: python #!/usr/bin/env python3 from gpiozero import LED, Button #. Inicializa el sensor de inclinación conectado al pin GPIO 17 (con el resistor pull-up deshabilitado) y dos LEDs conectados a los pines GPIO 27 y 22. .. code-block:: python # Inicializar el botón para el sensor de inclinación y los LEDs usando GPIO Zero TiltPin = Button(17, pull_up=False) # Sensor de inclinación conectado al pin GPIO 17, resistor pull-up deshabilitado 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 ``detect``, que verifica el estado del sensor de inclinación. Si está inclinado, enciende el LED rojo y apaga el LED verde. Si no está inclinado, hace lo contrario. .. code-block:: python def detect(): """ Detectar el estado del sensor de inclinación y controlar los LEDs. Enciende el LED rojo y apaga el LED verde cuando está inclinado. Apaga el LED rojo y enciende el LED verde cuando no está inclinado. """ if TiltPin.is_pressed: # Verificar si el sensor está inclinado print(' *************') print(' * ¡Inclinación! *') print(' *************') red_led.on() # Encender LED rojo green_led.off() # Apagar LED verde else: # Si el sensor no está inclinado red_led.off() # Apagar LED rojo green_led.on() # Encender LED verde #. El bucle principal asigna la función ``detect`` a los eventos ``when_pressed`` y ``when_released`` del sensor de inclinación. El bloque ``try-except`` maneja un KeyboardInterrupt para una terminación ordenada. .. code-block:: python try: while True: # Verificar continuamente el estado del sensor de inclinación y actualizar los LEDs TiltPin.when_pressed = detect TiltPin.when_released = detect except KeyboardInterrupt: # Manejar KeyboardInterrupt (Ctrl+C) para salir del bucle de manera ordenada pass