.. note:: ¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook. Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas. **¿Por qué unirse?** - **Soporte de expertos**: 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. - **Vistas previas exclusivas**: Obtén acceso anticipado a anuncios de nuevos productos y adelantos. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **Promociones festivas y sorteos**: Participa en sorteos y promociones de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _3.1.7_c: 3.1.7 Monitor de Sobrecalentamiento ===================================== .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left Dependiendo de la versión de su kit, identifique si tiene **ADC0834** o **MCP3008** y continúe con la sección correspondiente. Introducción ------------------- Tal vez desees crear un dispositivo de monitoreo de sobrecalentamiento aplicable a diversas situaciones, por ejemplo, en una fábrica, si queremos tener una alarma y el apagado automático de la máquina cuando hay un sobrecalentamiento en el circuito. En este proyecto, utilizaremos un termistor, un joystick, un zumbador, un LED y una pantalla LCD para crear un dispositivo inteligente de monitoreo de temperatura cuyo umbral es ajustable. Componentes Necesarios ------------------------------ En este proyecto, necesitamos los siguientes componentes. .. image:: ../img/list_Overheat_Monitor.png :align: center 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 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_joystick` - \- * - :ref:`cpn_adc0834` - \- * - :ref:`cpn_transistor` - |link_transistor_buy| * - :ref:`cpn_i2c_lcd` - |link_i2clcd1602_buy| * - :ref:`cpn_thermistor` - |link_thermistor_buy| * - :ref:`cpn_buzzer` - \- Diagrama Esquemático -------------------------- ============== ========== ======== === Nombre T-Board Pin físico wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 GPIO22 Pin15 3 22 GPIO23 Pin16 4 23 GPIO24 Pin18 5 24 SDA1 Pin 3 SCL1 Pin 5 ============== ========== ======== === .. image:: ../img/Schematic_three_one8.png :align: center Procedimientos Experimentales ---------------------------------- **Paso 1:** Construye el circuito. .. image:: ../img/image258.png **Paso 2**: Ve a la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/c/3.1.7/ **Paso 3**: Compila el código. .. raw:: html .. code-block:: gcc 3.1.7_OverheatMonitor.c -lm -lwiringPi **Paso 4**: Ejecuta el archivo compilado. .. raw:: html .. code-block:: sudo ./a.out Cuando el código se ejecuta, la temperatura actual y el umbral de alta temperatura de **40** se muestran en el **I2C LCD1602**. Si la temperatura actual es mayor que el umbral, el zumbador y el LED se activarán para alertarte. El **joystick** aquí se utiliza para ajustar el umbral de alta temperatura. Mover el **joystick** en la dirección de los ejes X e Y puede ajustar (subir o bajar) el umbral de alta temperatura. Presiona el **joystick** nuevamente para restablecer el umbral al valor inicial. .. note:: * Si aparece el mensaje de error ``wiringPi.h: No such file or directory``, por favor consulta :ref:`install_wiringpi`. * Si obtienes el error ``Unable to open I2C device: No such file or directory``, necesitas consultar :ref:`i2c_config` para habilitar I2C y verificar si el cableado es correcto. * Si el código y el cableado están bien, pero el LCD aún no muestra contenido, puedes girar el potenciómetro en la parte posterior para aumentar el contraste. **Explicación del Código** .. code-block:: c int get_joystick_value(){     uchar x_val;     uchar y_val;     x_val = get_ADC_Result(1);     y_val = get_ADC_Result(2);     if (x_val > 200){         return 1;     }     else if(x_val < 50){         return -1;     }     else if(y_val > 200){         return -10;     }     else if(y_val < 50){         return 10;     }     else{         return 0;     } } Esta función lee los valores de X e Y. Si ``X>200``, devolverá ``1``; si ``X<50``, devolverá ``-1``; si ``y>200``, devolverá ``-10``; y si ``y<50``, devolverá ``10``. .. code-block:: c void upper_tem_setting(){     write(0, 0, "Upper Adjust:");     int change = get_joystick_value();     upperTem = upperTem + change;     char str[6];     snprintf(str,3,"%d",upperTem);     write(0,1,str);     int len;     len = strlen(str);     write(len,1,"             ");     delay(100); } Esta función se utiliza para ajustar el umbral y mostrarlo en el I2C LCD1602. .. code-block:: c double temperature(){     unsigned char temp_value;     double Vr, Rt, temp, cel, Fah;     temp_value = get_ADC_Result(0);     Vr = 5 * (double)(temp_value) / 255;     Rt = 10000 * (double)(Vr) / (5 - (double)(Vr));     temp = 1 / (((log(Rt/10000)) / 3950)+(1 / (273.15 + 25)));     cel = temp - 273.15;     Fah = cel * 1.8 +32;     return cel; } Lee el valor analógico del **CH0** (termistor) de **ADC0834** y luego lo convierte en valor de temperatura. .. code-block:: c void monitoring_temp(){     char str[6];     double cel = temperature();     snprintf(str,6,"%.2f",cel);     write(0, 0, "Temp: ");     write(6, 0, str);     snprintf(str,3,"%d",upperTem);     write(0, 1, "Upper: ");     write(7, 1, str);     delay(100);     if(cel >= upperTem){         digitalWrite(buzzPin, HIGH);         digitalWrite(LedPin, HIGH);     }     else if(cel < upperTem){         digitalWrite(buzzPin, LOW);         digitalWrite(LedPin, LOW);     } } Cuando el código se ejecuta, la temperatura actual y el umbral de alta temperatura **40** se muestran en **I2C LCD1602**. Si la temperatura actual es mayor que el umbral, el zumbador y el LED se activarán para alertarte. .. code-block:: c int main(void) {     setup();     int lastState =1;     int stage=0;     while (1)     {         int currentState = digitalRead(Joy_BtnPin);         if(currentState==1 && lastState == 0){             stage=(stage+1)%2;             delay(100);             lcd_clear();         }         lastState=currentState;         if (stage==1){             upper_tem_setting();         }         else{             monitoring_temp();         }     }     return 0; } La función ``main()`` contiene todo el proceso del programa como se muestra: 1) Cuando el programa comienza, el valor inicial de **stage** es **0**, y la temperatura actual y el umbral de alta temperatura **40** se muestran en **I2C LCD1602**. Si la temperatura actual es mayor que el umbral, el zumbador y el LED se activarán para alertarte. 2) Presiona el joystick y **stage** será **1** y podrás ajustar el umbral de alta temperatura. Mover el joystick en la dirección de los ejes X e Y puede ajustar (subir o bajar) el umbral actual. Presiona el joystick una vez más para restablecer el umbral al valor inicial. Imagen del Fenómeno ------------------------- .. image:: ../img/image259.jpeg :align: center