controlar-un-ventilador-con-arduino

Regular temperatura con ventilador y Arduino

¿Qué es un ventilador?

Un ventilador es una máquina hidráulica que incrementa la energía cinética de un gas, normalmente aire. Los ventiladores son objetos comunes en nuestra vida cotidiana y, al igual que otros muchos dispositivos, podemos controlarlos desde un procesador como Arduino.

Un ventilador dispone de un rotor con alabes (o aspas) accionado, habitualmente, por un motor eléctrico. Al rotar, los alabes impulsan las moléculas de aire aumentando su energía cinética sin apenas variación de volumen, motivo por el cuál se consideran máquinas hidráulicas en lugar de turbo máquinas.

En el campo de la electrónica casera es frecuente emplear ventiladores como los utilizados en informática para disipación de calor en ordenadores. Estos ventiladores se encuentran disponibles en una gran variedad de tamaños, siendo frecuentes 40x40mm, 80x80mm y 120x120mm. La tensión de alimentación normalmente es 12V.

Industrialmente los ventiladores se emplean en todo tipo de aplicaciones, como control de temperatura, instalaciones de climatización, homogenización de gases, evacuación de humos, refrescamiento de maquinaria, o disipación de calor en sistemas de refrigeración.

En nuestros proyectos de electrónica caseros podemos emplear ventiladores, por ejemplo, para controlar la temperatura de un dispositivo en combinación con un sensor de temperatura, refrigerar junto con una placa peltier o evacuación de gases en combinación con un sensor de gases.

Precio

Existen ventiladores en un gran rango de precios en función de sus características técnicas, principalmente del caudal que proporcionan, que a su vez dependen de su potencia, velocidad, y tamaño. Estos factores influyen en el nivel sonoro producido.

Dentro del campo doméstico, por ejemplo, podemos encontrar ventiladores de tipo ordenador de 40x40mm por 1€, de 80x80mm por 1.5€ y de 120x120mm por 2.5€, buscando en vendedores internacionales en eBay y AliExpress.

arduino-ventilador-componente

Esquema de montaje

El esquema de montaje es sencillo, simplemente vamos a usar un MOSFET como el IRF520N como interruptor para controlar el encendido del ventilador.

Por un lado, alimentamos el módulo con la tensión nominal del ventilador, mediante GND y Vin.

Por otro lado, conectamos la carga mediante la clema de conexión. Un ventilador, salvo que esté internamente compensado, es una carga inductiva. Por tanto, deberemos añadir un diodo de protección flyback, como vimos en la entrada sobre MOSFET.

Finalmente, alimentamos la electrónica del módulo conectando Vcc y GND a 5V y GND en Arduino, y conectamos el Pin SIG a cualquiera de las salidas digitales de Arduino.

arduino-ventilador-esquema

La conexión, vista desde Arduino, sería la siguiente.

arduino-ventilador-conexion

Debemos tener en cuenta la tensión de alimentación y la corriente nominal del ventilador. En caso de consumir más de 1A, deberemos añadir un disipador de calor al IRF520N, o usar otro modelo de MOSFET o incluso una salida por relé.

Ejemplo de código

El código necesario es sencillo, ya que para a controlar el ventilador únicamente necesitamos emplear una salida digital, tal y como vimos en la entrada salidas digitales.

Por ejemplo, el siguiente código simplemente encendería y apagaría el eletroimán cada 10 segundos.

const int pin = 9;

void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  digitalWrite(pin, HIGH);   // poner el Pin en HIGH
  delay(10000);               // esperar 10 segundos
  digitalWrite(pin, LOW);    // poner el Pin en LOW
  delay(10000);               // esperar 10 segundos

}

Podemos combinarlo con uno de los múltiples sensores de temperatura que hemos visto (termistor, LM35, DS18B20, DHT11/DHT22) para encender el ventilador según la medición del sensor, manteniendo la temperatura constante.

Asumamos que tenemos una cierta función GetTemperature() que nos proporciona la medición del sensor. Deberemos sustituir esta función por el cálculo adecuado, en función del sensor que estemos empleando.

Ahora definimos una cierta histéresis mediante dos umbrales. Cuando la temperatura sobrepase el umbral superior provocará el encendido del ventilador. Este permanecerá encendido hasta que llegue a un umbral inferior, y finalmente se apagará al alcanzarlo.

Si definiéramos un único umbral para la activación y desactivación tendríamos múltiples encendidos y apagados, y el sensor sería muy sensible al ruido. Al final terminaríamos dañando el relé.

const int pin = 9;

const float thresholdLOW = 20.0;
const float thresholdHIGH= 30.0;

bool state = false; /// ventilador activo o inactivo

float GetTemperature()
{
  return 20.0;  //sustituir en función del sensor empleado
}

void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  float currentTemperature = GetTemperature();

  if(state == false && currentTemperature > thresholdHIGH)
  {
      state = true;
      digitalWrite(pin, HIGH);   // encender ventilador
  }
  if(state == true && currentTemperature < thresholdLOW)
  {
      state = false;
      digitalWrite(pin, LOW);   // apagar ventilador
  }

   delay(5000);  // esperar 5 segundos entre mediciones
 }

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full