Cómo Regular temperatura con ventilador y Arduino
La regulación de la temperatura en diversos entornos, desde sistemas electrónicos hasta invernaderos caseros, es una tarea crucial que puede automatizarse eficientemente utilizando Arduino. Este microcontrolador, junto con un sensor de temperatura y un ventilador, permite crear un sistema inteligente capaz de mantener un ambiente dentro de un rango térmico deseado. Este proyecto no solo es fundamental para la protección de componentes sensibles, sino que también ofrece un excelente punto de partida para adentrarse en el mundo de la electrónica y la programación.
A lo largo de esta guía, exploraremos los componentes esenciales, las conexiones necesarias, las diferentes estrategias de programación y las consideraciones avanzadas para construir un sistema robusto y eficiente. Desde un simple encendido/apagado hasta un control proporcional de la velocidad del ventilador, aprenderás a adaptar el sistema a tus necesidades específicas.
Puntos Clave para tu Sistema de Control de Temperatura con Arduino
- Selección de Componentes: La elección adecuada del sensor de temperatura (LM35, DHT11, DS18B20) y del componente de control del ventilador (transistor o relé) es fundamental para la precisión y eficiencia del sistema.
- Estrategias de Control: Implementa desde un simple control ON/OFF con histéresis para evitar oscilaciones, hasta un control PWM proporcional para ajustar la velocidad del ventilador de forma gradual y precisa, o incluso algoritmos PID para aplicaciones más exigentes.
- Consideraciones Prácticas: Presta atención a la alimentación del ventilador (especialmente para modelos de 12V), la supresión de ruido (diodo flyback, capacitores) y la ubicación del sensor para garantizar lecturas exactas y un funcionamiento óptimo.
Componentes Esenciales para tu Proyecto
Para construir un sistema de control de temperatura con Arduino y un ventilador, necesitarás una serie de componentes electrónicos. La elección de estos dependerá en gran medida de la precisión deseada y del tipo de ventilador a utilizar.
Placa Arduino: El Cerebro del Sistema
Cualquier placa compatible con Arduino puede ser utilizada, siendo las más comunes el Arduino Uno, Arduino Nano o Arduino Mega 2560. Estas placas proporcionan la capacidad de procesamiento y las interfaces necesarias para leer el sensor y controlar el ventilador.
Sensores de Temperatura: Los Ojos del Sistema
El sensor es crucial para obtener la lectura ambiental. Existen diversas opciones, cada una con sus propias características:
LM35 o TMP36
Estos son sensores analógicos muy populares por su facilidad de uso. Proporcionan una salida lineal de 10mV por cada grado Celsius, lo que simplifica la conversión de la lectura analógica a temperatura. Son ideales para proyectos básicos.
DHT11 o DHT22
Estos sensores digitales no solo miden la temperatura, sino también la humedad. Son ligeramente más complejos de usar que los LM35, ya que requieren una librería específica en Arduino para leer sus datos, pero ofrecen una funcionalidad dual. El DHT22 es más preciso que el DHT11.
DS18B20
Este sensor digital destaca por su alta precisión y la posibilidad de ser resistente al agua en algunas versiones, lo que lo hace adecuado para mediciones en líquidos o ambientes húmedos. Utiliza el protocolo OneWire y requiere una resistencia pull-up.
Termistor NTC 10k
Es una opción económica, pero requiere cálculos más complejos para convertir la resistencia medida a temperatura, ya que su variación no es lineal.
Ventiladores DC: El Elemento Actuador
Los ventiladores de corriente continua (DC), típicamente de 5V o 12V (como los de PC), son los más comunes. Es importante considerar su voltaje de operación y consumo de corriente, ya que esto determinará el método de control. Algunos ventiladores de PC de 4 pines ofrecen control PWM dedicado, lo que permite una regulación de velocidad más sofisticada.
Componentes de Control para el Ventilador: Protegiendo tu Arduino
El Arduino no puede suministrar directamente la corriente o el voltaje que la mayoría de los ventiladores requieren, por lo que es necesario un componente intermedio:
Transistor o MOSFET
Un transistor NPN (ej. 2N2222, TIP120) o un MOSFET (ej. IRLZ44N, IRFZ44N) actúan como interruptores electrónicos. Son ideales para controlar ventiladores de DC y, si se utilizan con pines PWM de Arduino, permiten variar la velocidad del ventilador. Los MOSFETs son preferibles para cargas de mayor corriente y control PWM.
Módulo de Relé
Un módulo de relé es un interruptor electromecánico que permite controlar cargas de alta potencia o ventiladores de corriente alterna con las señales de bajo voltaje del Arduino. Son adecuados para un control simple de encendido/apagado.
Otros Materiales Necesarios
- Protoboard y Cables Jumper: Para ensamblar el circuito sin necesidad de soldar.
- Resistencias: Específicas para el sensor (ej. pull-up para DS18B20 o DHT11) y para la base del transistor.
- Fuente de Alimentación Externa: Es crucial si el ventilador es de 12V o si se utilizan múltiples ventiladores, ya que el Arduino no puede suministrar suficiente corriente. La GND de la fuente externa debe estar conectada a la GND del Arduino.
- Diodo Flyback (1N5819/1N4007): Esencial para proteger el transistor/MOSFET de picos de tensión generados por la bobina del ventilador cuando se apaga.
- Capacitores de Desacoplo: (ej. 100 µF – 470 µF) Cerca del motor para reducir el ruido eléctrico.
- Opcional: Pantalla LCD: Para visualizar la temperatura actual y el estado del ventilador.
Conexión del Circuito: Pasos Detallados
La correcta conexión de los componentes es fundamental para el funcionamiento del sistema. A continuación, se detalla un esquema general, priorizando el uso de un MOSFET para control de velocidad, que es una de las configuraciones más versátiles.
Conexión del Sensor de Temperatura
Independientemente del sensor elegido, la conexión básica es similar:
- LM35:
- Pin VCC del LM35 a 5V de Arduino.
- Pin GND del LM35 a GND de Arduino.
- Pin de señal (VOUT) del LM35 a un pin analógico de Arduino (ej. A0).
- DS18B20:
- Pin VCC del DS18B20 a 5V de Arduino.
- Pin GND del DS18B20 a GND de Arduino.
- Pin DATA del DS18B20 a un pin digital de Arduino (ej. D2). Es necesaria una resistencia pull-up de 4.7kΩ entre el pin DATA y 5V.
- DHT11/DHT22:
- Pin VCC del DHTxx a 5V de Arduino.
- Pin GND del DHTxx a GND de Arduino.
- Pin DATA del DHTxx a un pin digital de Arduino (ej. D2). A veces requiere una resistencia pull-up de 10kΩ.

Configuración para el sensor TMP36 con Arduino.
Control del Ventilador con MOSFET
Esta configuración es ideal para ventiladores DC y permite el control de velocidad mediante PWM. Si tu ventilador es de 12V, necesitarás una fuente externa de 12V.
- Conecta el positivo (+) de la fuente de alimentación del ventilador (o 5V de Arduino si el ventilador es de bajo consumo) al polo positivo (+) del ventilador.
- Conecta el polo negativo (-) del ventilador al pin Drain (D) del MOSFET.
- Conecta el pin Source (S) del MOSFET a la GND común (GND de Arduino y GND de la fuente del ventilador).
- Conecta el pin Gate (G) del MOSFET a un pin PWM de Arduino (ej. D9) a través de una resistencia de 100-220 Ω.
- Añade una resistencia pulldown de 10kΩ (o 100kΩ) entre el pin Gate y GND para asegurar que el MOSFET esté apagado cuando el Arduino no lo controle.
- Instala un diodo flyback (cátodo al positivo del ventilador, ánodo al negativo del ventilador) en paralelo con el ventilador para proteger el circuito de picos de voltaje inductivos.
Control del Ventilador con Módulo de Relé
Para un control simple de encendido/apagado, un módulo de relé es una opción sencilla.
- Conecta VCC del módulo de relé a 5V de Arduino.
- Conecta GND del módulo de relé a GND de Arduino.
- Conecta el pin de control (IN) del relé a un pin digital de Arduino (ej. D9).
- Para el ventilador, conecta un cable de la fuente de alimentación (positivo o fase si es AC) al terminal COM (común) del relé.
- Conecta el terminal NO (normalmente abierto) del relé al positivo del ventilador.
- Conecta el otro polo del ventilador (negativo o neutro) directamente a la fuente.
Estrategias de Programación en Arduino
El código de Arduino es el encargado de leer los datos del sensor y tomar decisiones para controlar el ventilador. Existen varias estrategias, desde las más sencillas hasta las más avanzadas.
Lectura de Datos del Sensor de Temperatura
La lectura del sensor es el primer paso. Para un sensor analógico como el LM35, se utiliza analogRead()
:
const int sensorPin = A0; // Pin del sensor de temperatura
void setup() {
Serial.begin(9600);
}
void loop() {
int lectura = analogRead(sensorPin);
float voltaje = lectura * (5.0 / 1024.0); // Convertir a voltaje
float temperatura = voltaje * 100; // LM35: 10mV/°C
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
delay(1000);
}
Para sensores digitales como el DHT11 o DS18B20, se necesitan librerías específicas.
Control ON/OFF con Histéresis
Esta es la estrategia más básica y robusta para evitar que el ventilador se encienda y apague constantemente (chattering) alrededor del umbral de temperatura. Se define una temperatura de encendido (T_on) y una de apagado (T_off), donde T_off es menor que T_on.
const int sensorPin = A0;
const int fanPin = 9; // Pin digital para el control ON/OFF
const float T_on = 30.0; // Temperatura de encendido en °C
const float T_off = 28.0; // Temperatura de apagado en °C
void setup() {
pinMode(fanPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int lectura = analogRead(sensorPin);
float voltaje = lectura * (5.0 / 1024.0);
float temperatura = voltaje * 100;
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
static bool fanOn = false; // Estado actual del ventilador
if (temperatura >= T_on && !fanOn) {
digitalWrite(fanPin, HIGH); // Enciende el ventilador
fanOn = true;
Serial.println("Ventilador ENCENDIDO");
} else if (temperatura <= T_off && fanOn) {
digitalWrite(fanPin, LOW); // Apaga el ventilador
fanOn = false;
Serial.println("Ventilador APAGADO");
}
delay(2000); // Espera 2 segundos antes de la siguiente lectura
}
Control Proporcional con PWM
Para un control más suave y eficiente de la velocidad del ventilador, se utiliza la Modulación por Ancho de Pulso (PWM). Esto permite ajustar la velocidad del ventilador proporcionalmente a la diferencia entre la temperatura actual y la deseada.
const int sensorPin = A0;
const int fanPin = 9; // Pin PWM para el ventilador (usar pines ~)
const float T_min = 25.0; // Temperatura mínima para empezar a funcionar
const float T_max = 35.0; // Temperatura para velocidad máxima
const int duty_min = 70; // Valor PWM mínimo para que el ventilador arranque (0-255)
void setup() {
pinMode(fanPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int lectura = analogRead(sensorPin);
float voltaje = lectura * (5.0 / 1024.0);
float temperatura = voltaje * 100;
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
int pwmValue;
if (temperatura < T_min) {
pwmValue = 0; // Ventilador apagado
} else if (temperatura > T_max) {
pwmValue = 255; // Velocidad máxima
} else {
// Mapear la temperatura al rango PWM
pwmValue = map(temperatura * 10, T_min * 10, T_max * 10, duty_min, 255);
// Asegurarse de que el valor PWM no sea menor que duty_min si está en el rango activo
pwmValue = constrain(pwmValue, duty_min, 255);
}
analogWrite(fanPin, pwmValue); // Aplica el valor PWM al ventilador
Serial.print("PWM Value: ");
Serial.println(pwmValue);
delay(1000);
}
Nota: El uso de map
y constrain
es crucial para este tipo de control. map()
escala un valor de un rango a otro, y constrain()
limita un valor dentro de un rango.
Control PID (Proporcional-Integral-Derivativo)
Para aplicaciones que requieren una regulación de temperatura extremadamente precisa y estable, el control PID es la opción más avanzada. Este algoritmo ajusta la salida del ventilador basándose en la diferencia actual (proporcional), la acumulación de errores pasados (integral) y la tasa de cambio del error (derivativo). Aunque es más complejo de implementar y requiere un «tuning» cuidadoso de los parámetros (Kp, Ki, Kd), ofrece un rendimiento superior en sistemas con inercia térmica.
Este video tutorial profundiza en la implementación de un control PID de temperatura con Arduino, mostrando el código paso a paso y su aplicación práctica. Es altamente relevante para aquellos que buscan una regulación precisa y estable de la temperatura, más allá del control ON/OFF o PWM básico.
Consideraciones Avanzadas y Buenas Prácticas
Para optimizar el rendimiento y la durabilidad de tu sistema, es importante tener en cuenta algunos detalles adicionales.
Gestión de la Alimentación
Nunca intentes alimentar un ventilador de 12V directamente desde el pin VIN de Arduino, ya que este pin no está diseñado para suministrar la corriente necesaria y podrías dañar la placa. Siempre utiliza una fuente de alimentación externa dedicada para el ventilador, asegurándote de que la línea GND de esta fuente esté conectada a la GND del Arduino para establecer una referencia común.
Supresión de Ruido y Protección
- Diodo Flyback: Como se mencionó, un diodo en paralelo con el ventilador es crucial para disipar la energía inductiva cuando se apaga, protegiendo el transistor o MOSFET.
- Capacitores de Desacoplo: Colocar capacitores (ej. 100 µF–470 µF) en la alimentación del motor ayuda a filtrar el ruido eléctrico y suavizar los picos de corriente.
- Frecuencia PWM: La frecuencia PWM por defecto de Arduino (~490 Hz) puede causar un zumbido audible en algunos ventiladores. Para evitarlo, puedes:
- Mover el control PWM a pines o temporizadores que permitan frecuencias más altas (ej. 980 Hz o hasta 20-25 kHz, fuera del rango audible).
- Utilizar ventiladores de PC de 4 pines, que están diseñados para recibir una señal PWM de 25 kHz.
Ubicación del Sensor y «Debounce Térmico»
- Ubicación: Coloca el sensor de temperatura lejos del flujo directo del ventilador y de cualquier fuente de calor o frío que no sea representativa del ambiente que deseas medir. Si necesitas medir la temperatura ambiente, considera encapsular el sensor o usar una sonda con cable (como el DS18B20) para mayor precisión.
- Debounce Térmico: Para evitar activaciones y desactivaciones erráticas debido a fluctuaciones mínimas de temperatura, implementa un «debounce térmico». Esto implica que la condición de temperatura debe mantenerse durante un cierto período (ej. unos segundos) antes de que el sistema cambie el estado del ventilador.
Monitorización y Expansión
- Pantalla LCD: Integrar una pantalla LCD permite visualizar la temperatura actual, el estado del ventilador y otros parámetros relevantes sin necesidad de un ordenador.
- Múltiples Ventiladores: Si necesitas controlar varios ventiladores de 12V, utiliza un MOSFET por cada ventilador o un driver de potencia adecuado, junto con una fuente de alimentación externa con suficiente margen de corriente.
- Control por Tacómetro: Algunos ventiladores de PC tienen un cable de tacómetro (generalmente amarillo) que permite leer sus RPM. Esto se puede conectar a una entrada con interrupción de Arduino para monitorizar y, si se desea, cerrar un lazo de control basado en la velocidad real del ventilador.
Tabla Comparativa de Sensores de Temperatura
Para ayudarte a elegir el sensor de temperatura más adecuado para tu proyecto, la siguiente tabla resume las características clave de los modelos más comunes:
Sensor | Tipo | Rango de Temperatura | Precisión Típica | Ventajas | Desventajas |
---|---|---|---|---|---|
LM35 / TMP36 | Analógico | -55°C a 150°C (LM35) | ±0.5°C a 25°C | Fácil de usar, lectura lineal, económico. | Solo temperatura. |
DHT11 | Digital | 0°C a 50°C | ±2°C | Mide temperatura y humedad, económico. | Menos preciso, rango limitado. |
DHT22 | Digital | -40°C a 80°C | ±0.5°C | Mide temperatura y humedad, más preciso que DHT11. | Más caro que DHT11. |
DS18B20 | Digital | -55°C a 125°C | ±0.5°C | Alta precisión, OneWire (varios sensores en un pin), versiones impermeables. | Requiere librería y resistencia pull-up. |
Termistor NTC 10k | Analógico | Variable | Variable | Muy económico. | Requiere calibración y cálculos más complejos para linealidad. |
Preguntas Frecuentes
¿Puedo conectar el ventilador directamente a Arduino?
No, generalmente no es recomendable. La mayoría de los ventiladores, incluso los de 5V, consumen más corriente de la que los pines de Arduino pueden suministrar de forma segura (normalmente 20-40 mA por pin, hasta 200 mA en total). Conectar un ventilador directamente puede dañar el Arduino. Siempre utiliza un transistor, MOSFET o módulo de relé para controlarlo.
¿Qué sensor de temperatura debo elegir?
Depende de tus necesidades:
- LM35 o TMP36: Si buscas simplicidad y solo necesitas temperatura.
- DHT11/DHT22: Si necesitas medir temperatura y humedad. El DHT22 es más preciso.
- DS18B20: Si requieres alta precisión, versiones resistentes al agua o múltiples sensores en un solo pin.
- Termistor: Si el costo es el factor más importante y estás dispuesto a realizar cálculos más complejos.
Mi ventilador hace un zumbido cuando uso PWM, ¿qué puedo hacer?
El zumbido es común cuando la frecuencia PWM por defecto de Arduino (~490 Hz) es audible para el oído humano. Puedes probar:
- Utilizar pines PWM que operen a frecuencias más altas (algunos pines de Arduino pueden configurarse para 980 Hz o más).
- Modificar los registros del temporizador de Arduino para generar frecuencias PWM de 20-25 kHz, que están fuera del rango audible.
- Usar ventiladores de PC de 4 pines, diseñados para recibir señales PWM de alta frecuencia.
- Asegurarte de que el valor PWM mínimo (
duty_min
) no sea demasiado bajo, ya que algunos ventiladores pueden tener dificultades para operar a velocidades muy bajas.
¿Necesito una fuente de alimentación externa?
Sí, en la mayoría de los casos. Si tu ventilador es de 12V (como la mayoría de los ventiladores de PC) o si el ventilador de 5V consume una corriente considerable (más de 200 mA), necesitarás una fuente de alimentación externa. El Arduino no puede suministrar 12V y tiene límites estrictos de corriente para sus pines y para la placa en general. Es fundamental conectar la GND de la fuente externa a la GND del Arduino para un funcionamiento correcto y seguro.
¿Qué es la histéresis y por qué es importante?
La histéresis es la diferencia entre la temperatura de encendido y la de apagado del ventilador. Es importante para evitar el «chattering», que es cuando el ventilador se enciende y apaga rápidamente si la temperatura oscila justo alrededor de un único umbral. Al tener dos umbrales (ej. encender a 30°C y apagar a 28°C), el sistema se vuelve más estable y evita el desgaste prematuro del ventilador y el componente de control.
Conclusión
La capacidad de regular la temperatura con un ventilador y Arduino es un proyecto fundamental en el ámbito de la electrónica y la domótica. Hemos cubierto desde la selección de componentes clave, como los diversos sensores de temperatura y los métodos de control del ventilador (transistores, MOSFETs, relés), hasta la implementación de diferentes estrategias de programación, incluyendo el control ON/OFF con histéresis y el control proporcional mediante PWM. Las consideraciones avanzadas, como la gestión de la alimentación, la supresión de ruido y la ubicación estratégica de los sensores, son cruciales para construir un sistema robusto, eficiente y duradero.
Al dominar estos principios, no solo serás capaz de crear un sistema de enfriamiento automático adaptado a tus necesidades, sino que también adquirirás una base sólida para proyectos más complejos en el futuro. Ya sea para proteger componentes electrónicos, optimizar el ambiente de un invernadero o simplemente experimentar con la automatización, el control de temperatura con Arduino es una habilidad invaluable.