.. 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