.. note::
¡Hola, bienvenido a la comunidad de entusiastas de SunFounder 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.
- **Aprende y comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Previews 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 festivas.
👉 ¿Listo para explorar y crear con nosotros? ¡Haz clic en [|link_sf_facebook|] y únete hoy!
.. _2.1.5_py:
2.1.5 Interruptor de Inclinación
======================================
Introducción
----------------
Este es un interruptor de inclinación de bola con una bola metálica
en su interior. Se utiliza para detectar inclinaciones de un pequeño ángulo.
Componentes Necesarios
------------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../img/list_2.1.3_tilt_switch.png
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ELEMENTOS 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_tilt_switch`
- \-
Diagrama Esquemático
-------------------------
.. image:: ../img/image307.png
.. image:: ../img/image308.png
Procedimientos Experimentales
-----------------------------------
**Paso 1:** Construir el circuito.
.. image:: ../img/image169.png
**Paso 2:** Cambiar el directorio.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python/
**Paso 3:** Ejecutar.
.. raw:: html
.. code-block::
sudo python3 2.1.5_Tilt.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á.
Vuelve a colocarlo verticalmente y el LED verde se encenderá de nuevo.
**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
import RPi.GPIO as GPIO
TiltPin = 17
Gpin = 27
Rpin = 22
def setup():
GPIO.setmode(GPIO.BCM) # Numerar GPIOs por ubicación física
GPIO.setup(Gpin, GPIO.OUT) # Establecer el modo del pin del LED verde como salida
GPIO.setup(Rpin, GPIO.OUT) # Establecer el modo del pin del LED rojo como salida
GPIO.setup(TiltPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Establecer el modo del pin de inclinación como entrada y activar resistencia pull-up
GPIO.add_event_detect(TiltPin, GPIO.BOTH, callback=detect, bouncetime=200)
def Led(x):
if x == 0:
GPIO.output(Rpin, 1)
GPIO.output(Gpin, 0)
if x == 1:
GPIO.output(Rpin, 0)
GPIO.output(Gpin, 1)
def Print(x):
if x == 0:
print (' *************')
print (' * Tilt! *')
print (' *************')
def detect(chn):
Led(GPIO.input(TiltPin))
Print(GPIO.input(TiltPin))
def loop():
while True:
pass
def destroy():
GPIO.output(Gpin, GPIO.HIGH) # Apagar LED verde
GPIO.output(Rpin, GPIO.HIGH) # Apagar LED rojo
GPIO.cleanup() # Liberar recursos
if __name__ == '__main__': # El programa empieza aquí
setup()
try:
loop()
except KeyboardInterrupt: # Cuando se presiona 'Ctrl+C', se ejecutará la función destroy()
destroy()
**Explicación del Código**
.. code-block:: python
GPIO.add_event_detect(TiltPin, GPIO.BOTH, callback=detect, bouncetime=200)
Configurar la detección en TiltPin, y la función de callback detect.
.. code-block:: python
def Led(x):
if x == 0:
GPIO.output(Rpin, 1)
GPIO.output(Gpin, 0)
if x == 1:
GPIO.output(Rpin, 0)
GPIO.output(Gpin, 1)
Definir una función Led() para encender o apagar los dos LEDs. Si x=0, el LED rojo se enciende; de lo contrario, el LED verde se encenderá.
.. code-block:: python
def Print(x):
if x == 0:
print (' *************')
print (' * Tilt! *')
print (' *************')
Crear una función Print() para imprimir los caracteres en la pantalla.
.. code-block:: python
def detect(chn):
Led(GPIO.input(TiltPin))
Print(GPIO.input(TiltPin))
Definir una función de callback para la inclinación.
Obtener el valor leído del interruptor de inclinación,
luego la función Led() controla el encendido o apagado
de los dos LEDs dependiendo del valor leído del interruptor
de inclinación.
Imagen del Fenómeno
----------------------
.. image:: ../img/image170.jpeg