.. 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 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 de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _3.1.7_c_mcp3008: 3.1.7 Monitor de Sobrecalentamiento (MCP3008) ================================================== .. note:: .. image:: ../img/mcp3008_and_adc0834.jpg :width: 25% :align: left Dependiendo de la versión de tu kit, identifica si tienes **ADC0834** o **MCP3008** y procede con la sección correspondiente. Introducción ------------ Puede que quieras hacer un dispositivo de monitoreo de sobrecalentamiento aplicable a diversas situaciones, por ejemplo, en una fábrica si queremos que haya una alarma y el apagado automático de la máquina cuando haya un circuito sobrecalentado. En este proyecto utilizaremos un termistor, un joystick, un zumbador (buzzer), un LED y un LCD para hacer un dispositivo inteligente de monitoreo de temperatura con un umbral ajustable. Componentes requeridos ---------------------- En este proyecto necesitamos los siguientes componentes. .. image:: ../img/list2_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 - ARTÍCULOS 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 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_joystick` - \- * - :ref:`cpn_mcp3008` - \- * - :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 -------------------- .. list-table:: :header-rows: 1 * - Nombre - T-Board - wiringPi - BCM * - SPICE0 - Pin 24 - 10 - 8 * - SPIMOSI - Pin 19 - 12 - 10 * - SPIMISO - Pin 21 - 13 - 9 * - SPISCLK - Pin 23 - 14 - 11 * - GPIO22 - Pin 15 - 3 - 22 * - GPIO23 - Pin 16 - 4 - 23 * - GPIO24 - Pin 18 - 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/july24_3.1.8_overheat_monitor_mcp3008.png **Paso 2:** Ve a la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/c/3.1.7-2/ **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 Al ejecutar el código, la temperatura actual y el umbral de alta temperatura **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 advertirte. El **Joystick** se utiliza para ajustar el umbral de alta temperatura. Moviendo el **Joystick** en la dirección del eje X y eje Y se puede ajustar (aumentar o disminuir) el umbral actual. Presionando el **Joystick** nuevamente se restablece el umbral al valor inicial. .. note:: * Si hay un error ``wiringPi.h: No such file or directory``, consulta :ref:`install_wiringpi`. * Si aparece el error ``Unable to open I2C device: No such file or directory``, consulta :ref:`i2c_config` para habilitar I2C y verificar el cableado. * Si el código y el cableado están correctos, pero el LCD aún no muestra contenido, ajusta el potenciómetro en la parte posterior para aumentar el contraste. Explicación del código ---------------------- .. code-block:: c int read_ADC(int channel) { ... } Lee un valor analógico de 10 bits del canal MCP3008 (CH0–CH7) usando SPI y devuelve un valor entre 0 y 1023. .. code-block:: c int get_joystick_value() { ... } Lee los valores analógicos del joystick desde CH1 y CH2. Devuelve un entero que indica la dirección del movimiento basado en umbrales. .. code-block:: c void upper_tem_setting() { ... } Permite al usuario ajustar el umbral de temperatura superior utilizando el joystick. Evita cambios repetidos si la dirección se mantiene. .. code-block:: c double temperature() { ... } Lee el valor analógico desde CH0 conectado al termistor. Utiliza la ecuación de Steinhart–Hart para calcular la temperatura en grados Celsius. .. code-block:: c void monitoring_temp() { ... } Lee continuamente la temperatura actual y la muestra junto con el umbral. Si la temperatura excede el umbral, el zumbador y el LED se activan. .. code-block:: c void setup_all() { ... } Inicializa el LCD, SPI y los pines GPIO para el botón del joystick, el zumbador y el LED. También configura la resistencia pull-up para el botón del joystick. .. code-block:: c int main(void) { ... } El bucle principal alterna entre dos modos: 1. Monitoreo de temperatura. 2. Ajuste del límite superior usando el joystick. El modo cambia cuando se suelta el botón del joystick (disparo por flanco ascendente). .. Imagen del fenómeno .. ------------------- .. .. image:: ../img/image259.jpeg :align: center