.. 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. - **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 festivas. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo! .. _2.2.7_py: 2.2.7 PIR =========== Introducción --------------- En este proyecto, vamos a crear un dispositivo utilizando sensores piroeléctricos de infrarrojos del cuerpo humano. Cuando alguien se acerque al LED, este se encenderá automáticamente. Si no hay movimiento, la luz se apagará. Este sensor de movimiento por infrarrojos es un tipo de sensor que puede detectar el infrarrojo emitido por humanos y animales. Componentes necesarios ------------------------------ En este proyecto, necesitamos los siguientes componentes. .. image:: ../img/list_2.2.4_pir2.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 en 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_rgb_led` - |link_rgb_led_buy| * - :ref:`cpn_pir` - \- Diagrama Esquemático ---------------------------- .. image:: ../img/image327.png Procedimientos Experimentales ------------------------------------ **Paso 1:** Construye el circuito. .. image:: ../img/image214.png **Paso 2:** Ve a la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Paso 3:** Ejecuta el archivo ejecutable. .. raw:: html .. code-block:: sudo python3 2.2.7_PIR.py Después de ejecutar el código, el PIR detecta los alrededores y hace que el LED RGB brille en amarillo si detecta a alguien pasando. Hay dos potenciómetros en el módulo PIR: uno para ajustar la sensibilidad y otro para ajustar la distancia de detección. Para que el módulo PIR funcione mejor, debes girar ambos en sentido antihorario hasta el final. .. image:: ../img/PIR_TTE.png :width: 400 :align: center **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 import time rgbPins = {'Red':18, 'Green':27, 'Blue':22} pirPin = 17 # el pir está conectado al pin17 def setup(): global p_R, p_G, p_B GPIO.setmode(GPIO.BCM) # Configura los modos GPIO a numeración BCM GPIO.setup(pirPin, GPIO.IN) # Configura pirPin como entrada # Configura el modo de todos los pines Led como salida y el nivel inicial a Alto (3.3v) for i in rgbPins: GPIO.setup(rgbPins[i], GPIO.OUT, initial=GPIO.HIGH) # Configura todos los led como canal pwm y frecuencia a 2KHz p_R = GPIO.PWM(rgbPins['Red'], 2000) p_G = GPIO.PWM(rgbPins['Green'], 2000) p_B = GPIO.PWM(rgbPins['Blue'], 2000) # Configura todos los valores iniciales a 0 p_R.start(0) p_G.start(0) p_B.start(0) # Define una función MAP para mapear valores, como de 0~255 a 0~100 def MAP(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min # Define una función para configurar colores def setColor(color): # configura la luminancia de los tres LEDs con el valor de color introducido. # Divide los colores de la variable 'color' R_val = (color & 0xFF0000) >> 16 G_val = (color & 0x00FF00) >> 8 B_val = (color & 0x0000FF) >> 0 # Mapea el valor del color de 0~255 a 0~100 R_val = MAP(R_val, 0, 255, 0, 100) G_val = MAP(G_val, 0, 255, 0, 100) B_val = MAP(B_val, 0, 255, 0, 100) # Asigna el valor del ciclo de trabajo mapeado al canal PWM correspondiente para cambiar la luminancia. p_R.ChangeDutyCycle(R_val) p_G.ChangeDutyCycle(G_val) p_B.ChangeDutyCycle(B_val) #print ("color_msg: R_val = %s, G_val = %s, B_val = %s"%(R_val, G_val, B_val)) def loop(): while True: pir_val = GPIO.input(pirPin) if pir_val==GPIO.HIGH: setColor(0xFFFF00) else : setColor(0x0000FF) def destroy(): p_R.stop() p_G.stop() p_B.stop() GPIO.cleanup() # Libera recursos if __name__ == '__main__': # El programa comienza aquí setup() try: loop() except KeyboardInterrupt: # Cuando se presiona 'Ctrl+C', el programa destroy() se ejecutará. destroy() **Explicación del Código** .. code-block:: python rgbPins = {'Red':18, 'Green':27, 'Blue':22} def setup(): global p_R, p_G, p_B GPIO.setmode(GPIO.BCM) # …… for i in rgbPins: GPIO.setup(rgbPins[i], GPIO.OUT, initial=GPIO.HIGH) p_R = GPIO.PWM(rgbPins['Red'], 2000) p_G = GPIO.PWM(rgbPins['Green'], 2000) p_B = GPIO.PWM(rgbPins['Blue'], 2000) p_R.start(0) p_G.start(0) p_B.start(0) def MAP(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min def setColor(color): ... Estos códigos se utilizan para configurar el color del LED RGB, por favor, consulta :ref:`1.1.2_py` para más detalles. .. code-block:: python def loop(): while True: pir_val = GPIO.input(pirPin) if pir_val==GPIO.HIGH: setColor(0xFFFF00) else : setColor(0x0000FF) Cuando el PIR detecta el espectro infrarrojo humano, el LED RGB emite luz amarilla; si no, emite luz azul. Imagen del Fenómeno ----------------------------- .. image:: ../img/image215.jpeg