.. 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_pi5_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_pi5`.
* 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