.. note:: ¡Hola! Bienvenidos a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas. **¿Por qué unirse?** - **Soporte experto**: Resuelve problemas postventa 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 recientes. - **Promociones festivas y sorteos**: Participa en sorteos y promociones especiales. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _3.1.2_c_pi5: 3.1.2 Bienvenida =============================== Introducción ---------------- En este proyecto, usaremos un sensor PIR para detectar el movimiento de los peatones, y utilizaremos servos, LED y un zumbador para simular el funcionamiento de la puerta automática de una tienda de conveniencia. Cuando el peatón aparezca dentro del rango de detección del PIR, la luz indicadora se encenderá, la puerta se abrirá y el zumbador reproducirá el sonido de apertura. Componentes necesarios ------------------------------ En este proyecto, necesitamos los siguientes componentes. .. image:: ../img/list_Welcome.png :align: center Es definitivamente conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - ITEMS IN THIS KIT - LINK * - Raphael Kit - 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 DEL 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_pir` - \- * - :ref:`cpn_servo` - |link_servo_buy| * - :ref:`cpn_buzzer` - |link_passive_buzzer_buy| * - :ref:`cpn_transistor` - |link_transistor_buy| Diagrama Esquemático -------------------------- ============== ======== ======== === Nombre T-Board Físico wiringPi BCM GPIO18 Pin 12 1 18 GPIO17 Pin 11 0 17 GPIO27 Pin 13 2 27 GPIO22 Pin 15 3 22 ============== ======== ======== === .. image:: ../img/Schematic_three_one2.png :align: center Procedimientos Experimentales ---------------------------------- **Paso 1:** Construir el circuito. .. image:: ../img/image239.png :align: center **Paso 2:** Cambiar directorio. .. raw:: html .. code-block:: cd ~/raphael-kit/c/3.1.2/ **Paso 3:** Compilar. .. raw:: html .. code-block:: gcc 3.1.2_Welcome.c -lwiringPi **Paso 4:** Ejecutar. .. raw:: html .. code-block:: sudo ./a.out Después de ejecutar el código, si el sensor PIR detecta a alguien pasando, la puerta se abrirá automáticamente (simulada por el servo), encenderá el indicador y reproducirá la música del timbre. Después de que la música del timbre se reproduzca, el sistema cerrará automáticamente la puerta y apagará el indicador, esperando la próxima vez que alguien pase. Hay dos potenciómetros en el módulo PIR: uno para ajustar la sensibilidad y el otro para ajustar la distancia de detección. Para que el módulo PIR funcione mejor, necesitas girar ambos en sentido contrario a las agujas del reloj hasta el final. .. image:: ../img/PIR_TTE.png :width: 400 :align: center .. note:: Si no funciona después de ejecutarlo, o aparece un mensaje de error: \"wiringPi.h: No such file or directory\", consulta :ref:`install_wiringpi_pi5`. **Explicación del Código** .. code-block:: c void setAngle(int pin, int angle){ //Create a funtion to control the angle of the servo. if(angle < 0) angle = 0; if(angle > 180) angle = 180; softPwmWrite(pin,Map(angle, 0, 180, 5, 25)); } Crear una función, setAngle, para escribir el ángulo en el servo que es de 0-180. .. code-block:: c void doorbell(){ for(int i=0;i-1;i--){ //make servo rotate from maximum angle to minimum angle setAngle(servoPin,i); delay(1); } } Crear una función closedoor para simular el cierre de la puerta, apagar el LED y hacer que el servo gire de 180 grados a 0 grados. .. code-block:: c void opendoor(){ digitalWrite(ledPin, HIGH); //led on for(int i=0;i<181;i++){ //make servo rotate from minimum angle to maximum angle setAngle(servoPin,i); delay(1); } doorbell(); closedoor(); } La función opendoor() incluye varias partes: encender la luz indicadora, girar el servo (simular la acción de abrir la puerta), reproducir la música del timbre de la tienda de conveniencia y llamar a la función closedoor() después de reproducir la música. .. code-block:: c int main(void) { if(wiringPiSetup() == -1){ //when initialize wiring failed,print message to screen printf("setup wiringPi failed !"); return 1; } if(softToneCreate(BuzPin) == -1){ printf("setup softTone failed !"); return 1; ...... En la función main(), inicializar la biblioteca wiringPi y configurar softTone, luego establecer ledPin en estado de salida y pirPin en estado de entrada. Si el sensor PIR detecta que alguien pasa, se llamará a la función opendoor para simular la apertura de la puerta. Imagen del Fenómeno ------------------------ .. image:: ../img/image240.jpeg :align: center