.. note:: ¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder para 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 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 mismo. .. _3.1.9_c: 3.1.9 Timbre de Alarma =========================== Introducción ---------------- En este proyecto, haremos un dispositivo de alarma manual. Puedes reemplazar el interruptor de palanca con un termistor o un sensor fotosensible para crear una alarma de temperatura o de luz. Componentes Necesarios ------------------------------ En este proyecto, necesitamos los siguientes componentes. .. image:: ../img/list_Alarm_Bell.png :align: center Es definitivamente conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - COMPONENTES EN ESTE KIT - ENLACE * - Kit Raphael - 337 - |link_Raphael_kit| También puedes comprarlos por separado en los siguientes enlaces. .. 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_buzzer` - |link_passive_buzzer_buy| * - :ref:`cpn_slide_switch` - |link_slide_switch_buy| * - :ref:`cpn_transistor` - |link_transistor_buy| * - :ref:`cpn_capacitor` - |link_capacitor_buy| Diagrama Esquemático ----------------------- ============== ======== ======== === Nombre T-Board físico wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 GPIO22 Pin 15 3 22 ============== ======== ======== === .. image:: ../img/Schematic_three_one10.png :align: center Procedimientos Experimentales --------------------------------- **Paso 1**: Construye el circuito. .. image:: ../img/image266.png **Paso 2**: Cambia de directorio. .. raw:: html .. code-block:: cd ~/raphael-kit/c/3.1.9/ **Paso 3**: Compila el código. .. raw:: html .. code-block:: gcc 3.1.9_AlarmBell.c -lwiringPi -lpthread **Paso 4**: Ejecuta el programa. .. raw:: html .. code-block:: sudo ./a.out Después de iniciar el programa, coloca el interruptor de palanca a la derecha y el zumbador emitirá sonidos de alarma. Al mismo tiempo, los LED rojos y verdes parpadearán a una cierta frecuencia. .. note:: Si no funciona después de ejecutar el programa, o aparece un mensaje de error: \"wiringPi.h: No such file or directory\", consulta :ref:`install_wiringpi`. **Explicación del Código** .. code-block:: c #include En este código, utilizaremos una nueva biblioteca, ``pthread.h``, que es un conjunto de bibliotecas comunes de hilos y puede realizar multihilos. Añadimos el parámetro ``-lpthread`` en el momento de la compilación para el trabajo independiente del LED y el zumbador. .. code-block:: c void *ledWork(void *arg){        while(1) { if(flag==0){ pthread_exit(NULL); } digitalWrite(ALedPin,HIGH); delay(500); digitalWrite(ALedPin,LOW); digitalWrite(BLedPin,HIGH); delay(500); digitalWrite(BLedPin,LOW); } } La función ``ledWork()`` ayuda a establecer el estado de funcionamiento de estos 2 LEDs: mantiene el LED verde encendido durante 0,5s y luego se apaga; de manera similar, mantiene el LED rojo encendido durante 0,5s y luego se apaga. .. code-block:: c void *buzzWork(void *arg){ while(1) { if(flag==0){ pthread_exit(NULL); } if((note>=800)||(note<=130)){             pitch = -pitch; } note=note+pitch; softToneWrite(BeepPin,note); delay(10); } } La función ``buzzWork()`` se utiliza para establecer el estado de funcionamiento del zumbador. Aquí establecemos la frecuencia entre 130 y 800, para acumular o disminuir en un intervalo de 20. .. code-block:: c void on(){     flag = 1;     if(softToneCreate(BeepPin) == -1){         printf("setup softTone failed !"); return; }     pthread_t tLed;      pthread_create(&tLed,NULL,ledWork,NULL);     pthread_t tBuzz;   pthread_create(&tBuzz,NULL,buzzWork,NULL); } En la función on(): 1) Define la marca ``flag=1``, indicando el final del hilo de control. 2) Crea un pin de tono controlado por software ``BeepPin``. 3) Crea dos hilos separados para que el LED y el zumbador puedan funcionar al mismo tiempo. * ``pthread_t tLed``: Declara un hilo ``tLed``. * ``pthread_create(&tLed,NULL,ledWork,NULL)``: Crea el hilo y su prototipo es el siguiente: .. code-block:: int pthread_create(pthread_t *restrict tidp,const pthread_attr_t*restrict_attr,void*(*start_rtn)(void*),void *restrict arg); Si tiene éxito, devuelve 0; de lo contrario, devuelve el número de error -1. * El primer parámetro es un puntero al identificador del hilo. * El segundo se utiliza para configurar el atributo del hilo. * El tercero es la dirección de inicio de la función de ejecución del hilo. * El último es el argumento que se pasa a la función de ejecución. .. code-block:: c void off(){     flag = 0; softToneStop(BeepPin); digitalWrite(ALedPin,LOW); digitalWrite(BLedPin,LOW); } La función ``Off()`` define “flag=0” para salir de los hilos **ledWork** y **buzzWork** y luego apaga el zumbador y el LED. .. code-block:: c int main(){        setup();     int lastState = 0; while(1){         int currentState = digitalRead(switchPin);         if ((currentState == 1)&&(lastState==0)){ on(); }         else if((currentState == 0)&&(lastState==1)){ off(); } lastState=currentState; }     return 0; } Main() contiene todo el proceso del programa: primero lee el valor del interruptor deslizante; si el interruptor deslizante se mueve hacia la derecha (la lectura es 1), se llama a la función ``on()``, se activa el zumbador para emitir sonidos y los LEDs rojo y verde parpadean. De lo contrario, el zumbador y el LED no funcionan. Imagen del Fenómeno ------------------------ .. image:: ../img/image267.jpeg :align: center