InicioTarjetas de DesarrolloArduinoMantén una Temperatura Constante por Medio del Control PID

Mantén una Temperatura Constante por Medio del Control PID

¿Eres estudiante de alguna ingeniería? ¿Llevas materias como control, robótica o electrónica? Si es así, esta publicación te va a interesar, ya que se hablará acerca de como mantener una temperatura constante por medio del control PID, se analizará como se puede realizar a través de la programación con Arduino, y componentes básicos de electrónica, siendo alimentado por un cargador desarrollado por nosotros.

Introducción

Un controlador PID o controlador proporcional, integral y derivativo, es un mecanismo de control que a través de un lazo de retroalimentación permite regular la velocidad, temperatura, presión y flujo entre otras variables de un proceso en general. El controlador PID calcula la diferencia entre nuestra variable real contra la variable deseada.

¿Cómo se compone el Control PID?

El algoritmo del control PID consta de tres parámetros distintos: el proporcional, el integral y el derivativo. El valor proporcional depende del error actual, el integral depende de los errores pasados y el derivativo es una predicción de los errores futuros. La suma de estas tres acciones es usada para ajustar el proceso por medio de un elemento de control, como la posición de una válvula de control o la potencia suministrada a un calentador.

El error es la desviación existente entre el valor de la variable de proceso y el valor consigna, o “Set Point“. Se expresa matemáticamente como una función en el tiempo:

Imagen 1. Fórmula Error.

Donde SP es el set point y PV(t) es la variable del proceso.

Funcionamiento.

Para el correcto funcionamiento de un controlador PID que regule un proceso o sistema se necesita, al menos:

  1. Un sensor, que determine el estado del sistema (termómetro, caudalímetro, manómetro, etc).
  2. Un controlador, que genere la señal que gobierna al actuador.
  3. Un actuador, que modifique al sistema de manera controlada (resistencia eléctrica, motor, válvula, bomba, etc).

Las tres componentes de un controlador PID son: parte Proporcional, acción Integral y acción Derivativa. El peso de la influencia que cada una de estas partes tiene en la suma final viene dado por la constante proporcional, el tiempo integral y el tiempo derivativo, respectivamente. Se pretenderá lograr que el bucle de control corrija eficazmente y en el mínimo tiempo posible los efectos de las perturbaciones.

Proporcional.

La parte proporcional consiste en el producto entre la señal de error y la constante proporcional para lograr que el error en estado estacionario se aproxime a cero, pero en la mayoría de los casos, estos valores solo serán óptimos en una determinada porción del rango total de control, siendo distintos los valores óptimos para cada porción del rango.

La fórmula del proporcional está dada por:

Imagen 2. Fórmula Variable Proporcional.

Donde Kp es la ganancia proporcional, y e(t) es la fórmula del error.

Integral.

El modo de control Integral tiene como propósito disminuir y eliminar el error en estado estacionario, provocado por perturbaciones exteriores y los cuales no pueden ser corregidos por el control proporcional. El control integral actúa cuando hay una desviación entre la variable y el punto de consigna, integrando esta desviación en el tiempo y sumándola a la acción proporcional.

La fórmula del integral está dada por:

Imagen 3. Fórmula Variable Integral.

Donde Ki es la ganancia integral, y τ es la variable de integración (toma en cuenta el valor desde el instante 0 hasta el instante actual t).

Derivativo.

La acción derivativa es proporcional a la velocidad de cambio del error, es decir, tiene en cuenta la inercia de la variable medida. Esto dota a la acción derivativa de un carácter previsor, permitiendo evitar oscilaciones del error y proporcionando al controlador la capacidad de adaptarse a cambios imprevistos en las características del sistema (por ejemplo, cambios en la temperatura ambiente o el material trabajado en un controlador de temperatura).

La fórmula del derivativo está dada por:

Imagen 4. Fórmula Variable Derivativo.

Donde Kd es la ganancia derivativa, es decir un parámetro de ajuste.

Control PID.

  • Kp constante de proporcionalidad: se puede ajustar como el valor de la ganancia del controlador o el porcentaje de banda proporcional.

  • Ki constante de integración: indica la velocidad con la que se repite la acción proporcional.
  • Kd constante de derivación: hace presente la respuesta de la acción proporcional duplicándola, sin esperar a que el error se duplique.

La salida de estos tres términos, el proporcional, el integral, y el derivativo son sumados para calcular la salida del controlador PID. Definiendo y (t) como la salida del controlador, la forma final del algoritmo del PID es:

Imagen 5. Fórmula Control PID.

Ajuste de Parámetros del PID.

El objetivo de los ajustes de los parámetros PID es lograr que el bucle de control corrija eficazmente y en el mínimo tiempo los efectos de las perturbaciones; se tiene que lograr la mínima integral de error. Si los parámetros del controlador PID (la ganancia del proporcional, integral y derivativo) se eligen incorrectamente, el proceso a controlar puede ser inestable, por ejemplo, que la salida de este varíe, con o sin oscilación, y está limitada solo por saturación o rotura mecánica. Ajustar un lazo de control significa ajustar los parámetros del sistema de control a los valores óptimos para la respuesta del sistema de control deseada.

Ajuste Manual.

Si el sistema debe mantenerse online, un método de ajuste consiste en establecer primero los valores de I y D a cero. A continuación, incremente P hasta que la salida del lazo oscile. Luego establezca P a aproximadamente la mitad del valor configurado previamente. Después incremente I hasta que el proceso se ajuste en el tiempo requerido (aunque subir mucho I puede causar inestabilidad). Finalmente, incremente D, si se necesita, hasta que el lazo sea lo suficientemente rápido para alcanzar su referencia tras una variación brusca de la carga.De esta manera se logrará tener un control PID funcionando correctamente y de forma estable, la representación por bloques ser vería de la siguiente manera:

Imagen 6. Diagrama de Bloques PID.

Materiales

Diagrama de Conexión

A continuación, se puede ver el diagrama para el control PID:

Imagen 7. Diagrama de Conexión.

Requerimientos Previos

Instalar Arduino IDE.

Para la instalación de Arduino IDE se puede hacer desde su página oficial, dando solo click en “Descargar”, verificando que sea su sistema operativo el seleccionado, se ejecuta como administrador, y se dará en siguiente a todas las ventanas.

La otra opción más sencilla es abrir la “Microsoft Store” y buscar Arduino IDE, se tendrá la siguiente imagen:

Imagen 8. Arduino IDE.

Se dará click en “Obtener” y listo se tendrá instalado, cualquiera de las dos formas funcionará.

Instalación de Librería I2C.

Para usar la pantalla 16×2 I2C, es necesario instalar una librería adicional, para ello en el IDE de Arduino se dará click en “Library Manager”:

Imagen 9. Library Manager.

Se buscará “LCD-I2C”, saldrán varias opciones, se recomendaría instalar la siguiente librería:

Imagen 10. Instalación Librería.

Se dará click en el botón “Install” y el programa hará el resto; una vez que se tenga la librería se podrá pasar al código.

Códigos

Código Arduino.

 /*
========================================================================================================================
Nombre del archivo:     PID_CONTROL_TEM.ino
Proyecto:               UNIT Electronics Blog - Mantén una Temperatura Constante por Medio del Control PID UNIT Electronics Blog
Área:                   Desarrollo
Autor:                  Gonzalo González
Fecha:                  08/10/2025
========================================================================================================================
Descripción:

Este código recibe datos del termopar para que sea una entrada del control PID esté a su vez regula la salida a través de la fórmula matemática correspondiente, y la convierte en una señal PWM para la resistencia cerámica, manteniendo la temperatura estable.
========================================================================================================================
Conexión de Hardware

MAX6675 Módulo.
CS - D10
S0 - D12
SCK - D13
VCC - 5V
GND - GND

Pantalla LCD 16x2
SCL - A5
SDA - A4
VCC - 5V
GND - GND

D3 - Terminal Resistencia Cerámica

========================================================================================================================
Desarrollado para UNIT Electronics / Desarrollo / Blog UNIT Electronics
========================================================================================================================
*/


// Librerías Usadas
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);  //Si no funciona con la dirección 0x3f intenta con 0x27.
#include <SPI.h>

// Pines Declarados
#define MAX6675_CS   10
#define MAX6675_SO   12
#define MAX6675_SCK  13
int PWM_pin = 3; // Salida de Resistencia Cerámica.


// Variables
float previous_error = 0; 
float elapsedTime, Time, timePrev;
int PID_value = 0;
float temperature_read = 0.0;
float set_temperature = 35;
float PID_error = 0;


// Esto es de lo más importante, aquí podemos hacer el ajuste de nuestras constantes, de acuerdo a los resultados que tengamos.
int kp = 8.5;   int ki = 0.3;   int kd = 1.5;
int PID_p = 0;    int PID_i = 0;    int PID_d = 0;



void setup() {
  pinMode(PWM_pin,OUTPUT); // Se declara como salida el PIN 3
  TCCR2B = TCCR2B & B11111000 | 0x03;    // El PIN 3 ira a una frecuencia de 980.3 Hz
  Time = millis(); 
  lcd.init();
  lcd.backlight();
}


void loop() {
  temperature_read = readThermocouple(); // Lo que hacemos primero es leer la temperatura actual
  PID_error = set_temperature - temperature_read; // Se calcula el error entre el set point y el valor real
  PID_p = kp * PID_error; // Se calcula el valor de P
  if(-3 < PID_error <3)
  {
    PID_i = PID_i + (ki * PID_error); // Se calculará el valor de I en un rango de +-3
  }

  // Para la derivada se necesita el calculo en tiempo real 
  timePrev = Time;                            // El anterior tiempo se convierte al tiempo actual
  Time = millis();                           
  elapsedTime = (Time - timePrev) / 1000; 
  PID_d = kd*((PID_error - previous_error)/elapsedTime); // Calculamos el valor de D
  PID_value = PID_p + PID_i + PID_d; // Sumamos el valor de PID

  // Definimos el rango de PWM entre o a 255
  if(PID_value < 0)
  {    PID_value = 0;    }
  if(PID_value > 255)  
  {    PID_value = 255;  }
  analogWrite(PWM_pin,255-PID_value); // Escribimos el valor de PWM hacia el PIN D3
  previous_error = PID_error;     //Se cambia el nombre al error previo

  delay(300);
  // Se configura la visualización de los datos
  lcd.setCursor(0,0);
  lcd.print("Control PID Tem");
  lcd.setCursor(0,1);
  lcd.print("Se:");
  lcd.setCursor(3,1);
  lcd.print(set_temperature,1);
  lcd.setCursor(9,1);
  lcd.print("Re:");
  lcd.setCursor(12,1);
  lcd.print(temperature_read,1);
}

double readThermocouple() {

  uint16_t v;
  pinMode(MAX6675_CS, OUTPUT);
  pinMode(MAX6675_SO, INPUT);
  pinMode(MAX6675_SCK, OUTPUT);
  
  digitalWrite(MAX6675_CS, LOW);
  delay(1);
  
  v = shiftIn(MAX6675_SO, MAX6675_SCK, MSBFIRST);
  v <<= 8;
  v |= shiftIn(MAX6675_SO, MAX6675_SCK, MSBFIRST);
  
  digitalWrite(MAX6675_CS, HIGH);
  if (v & 0x4) 
  {    
    // Bit 2 indicada si el termopar está desconectado
    return NAN;     
  }
  v >>= 3;
  return v*0.25;
}

Funcionamiento.

Preparación de Componentes.

El primer paso será soldar todos los componentes necesarios, se empezará por el plug macho, para ello se necesitará cortar unos cables y pelarlos, posteriormente se deben soldarlos a las terminales:

Imagen 11. Jack Macho.

Recuerda que la terminal corta es positivo, y la larga negativa.

Una vez soldado el Jack, se unirá al cargador de batería LiPo Boost, para ello se deben ubicar los agujeros del step:

Imagen 12. Step Up.

Se soldarán los cables de acuerdo a la polaridad, quedando de la siguiente manera:

Imagen 13. Soldadura de Step Up.

Ahora que se tiene soldado el Jack, se conectará la batería, posteriormente se puede poner el voltaje que se requiere (12 V), para ello solo se gira el potenciómetro que se tiene en la placa, y para visualizar el valor se usará un multímetro en la escala de VDC:

Imagen 14. Modificación de Voltaje

Ya con los componentes soldados, y con la fuente de alimentación en el voltaje adecuado, se puede cargar la batería con un cable USB tipo C, teniendo la protección de voltaje, sin duda es una gran herramienta. Cabe mencionar que el step up se puede apagar a través del switch lateral. El siguiente paso será armar todo el circuito de acuerdo al diagrama de conexión presentado anteriormente, una vez que se haya terminado, se cargará el código.

Puntos Importantes del Código.

Existen algunas líneas de código que resaltan por su importancia, para empezar, tenemos la declaración de dirección para la pantalla LCD:

Imagen 15. LCD.

En la línea 41 se debe cambiar la dirección por si no funciona con 0x3f, y aunque aparezca el tamaño 20,4, no afecta en nada la LCD 16×2 ya que solo se usarán las primeras dos filas.

Imagen 16. Valor Temperatura.

En la imagen de arriba se tiene el valor de set_temperature (set point) el cuál podemos cambiar a otro valor, este será la temperatura a la cual se desea llegar a través del control PID.

En la siguiente imagen, se observa la línea 61, en donde se encuentran los valores de Kp, Ki, Kd:

Imagen 17. Línea 61.

Es importante recordar que estos valores son variables y se deben ir buscando de forma manual, para ello se recomienda que se empiece con P = 1, D e I = 0, e ir subiendo poco a poco los valores para encontrar el mejor resultado, que en este caso funciona con valores 8.5, 0.3, 1.5, respectivamente.

De la línea 76 a 97 se tendra el cálculo de las variables para el control PID:

Imagen 18. Cálculos.

En la línea 89 se tendrá la suma de P, I, D, lo que conforma el control final, por último, se hace una conversión para el pin D3 (PWM), ya que este controlará la resistencia térmica.

Imagen 19. Compilación y Carga del Código.

Se compilará el código y se subirá a la placa Arduino (se debe seleccionar bien la tarjeta y el COM en el cual está conectado > Tools)

Imagen 20. Selección de Tarjeta y Puerto COM.

Resultado.

Con el circuito armado y el código cargado, como en la siguiente imagen:

Imagen 21. Circuito.

Se pueden hacer las pruebas de resultado, anteriormente se debió de hacer las pruebas de calibración para las constantes (P, I, D) y así encontrar los valores más funcionales.

Para la comprobación del funcionamiento se usará una fuente de alimentación de 12 V que permitirá visualizar el cambio de CC para ver como al acercarse a la temperatura deseada (set point) baja para que concuerde con la temperatura real, en este caso se colocó en 35°.

Imagen 22. Primer Instancia.

En la imagen superior, se puede observar que la resistencia y termopar están unidos para una transferencia de calor aceptable, la temperatura se encuentra en 29.7° y el valor de CC en 0.317 A.

Imagen 23. Segunda Instancia.

Ahora el valor de la temperatura está en 32.5° y el valor de CC se encuentra en 0.165 A, más bajo debido a que casi se llegará a la temperatura set point.

Imagen 24. Tercera Instancia.

En esta última imagen ya se llegó al set point deseado con una corriente de 0.015 A solo para mantener la temperatura, se observa una diferencia de 0.7 que es mínima, sin embargo, es un resultado aceptable.

En el siguiente vídeo se puede observar el aumento de temperatura para llegar al set point y como va disminuyendo el consumo de CC:

Vídeo 1. Resultados

Conclusiones

Como se pudo analizar en esta publicación, el control PID (Proporcional, Integral y Derivativo) es una de las estrategias de control más utilizadas en sistemas automáticos debido a su simplicidad, estabilidad y eficacia para mantener variables dentro de un rango deseado. Su funcionamiento se basa en ajustar la salida del sistema a partir del error entre la señal medida y el valor de referencia, utilizando tres acciones: la proporcional que responde al error actual, la integral que corrige errores acumulados en el tiempo y la derivativa que anticipa cambios futuros.

En aplicaciones de control de temperatura, el PID resulta especialmente útil porque permite mantener una temperatura constante, compensando de forma automática las variaciones causadas por el entorno o la carga térmica. Gracias a su capacidad de ajuste se logra un control estable y eficiente en sistemas como hornos, incubadoras, impresoras 3D, sistemas HVAC o procesos industriales. En conclusión, el control PID es una herramienta esencial para obtener un control preciso, adaptable y confiable, especialmente en aplicaciones donde la estabilidad térmica es crítica.

Glosario.

  • I: Integral.
  • D: Derivada.
  • P: Proporcional.
  • PID: Controlador Proporcional, Integral y Derivativo.

TUTORIALES RELACIONADOS