14

Domótica con Arduino: climatizador automático

Publicado por el .

Símbolo de frío calor

Una casa domotizada nos facilita la vida y nos aporta confort. Ahora podemos crear un sistema automatizado barato con Arduino, sin necesidad de un caro PLC y aparatos domóticos. El sistema se puede instalar en una vivienda o en un área de trabajo, para garantizar que siempre estemos a una temperatura agradable.

El experimento consiste en crear un sistema que mida la temperatura ambiental y pueda conectar una estufa o un sistema de refrigeración, según la temperatura detectada. Así mantendrá constantemente una temperatura idónea en invierno y en verano sin que tengamos que mover un dedo.

Materiales necesarios

  • Placa Arduino UNO. (Disponible en nuestra tienda)
  • Sensor de temperatura LM35. El LM35 puede operar con tensiones de entre 4 y 30v, así que funcionará a la perfección en nuestro Arduino (5v). Además puede medir temperaturas en un rango de entre 150ºC a -55ºC, más que suficiente para medir temperaturas ambientales normales.
  • Estufa o calefactor eléctrico.
  • Ventilador o sistema de refrigeración.
  • 2 relés con sistema de control a 5v y salida para 220v (5v-220v).
  • Cable unifilar para las conexiones a la placa de Arduino.
  • Cable eléctrico de 4mm para las conexiones de 220v.
  • Interruptor (220v).
  • Fichas de conexión.
  • 2 Enchufes hembra y uno macho (220v).

Procedimiento

Primero me gustaría explicar el funcionamiento del sensor que vamos a emplear en la práctica. El LM35 aporta tensiones de salida proporcionales a la temperatura detectada. 150ºC equivalen a 1.5v de salida y -55ºC a 0.55v. Así que podemos hacer una regla de tres simple para calcular las temperaturas detectadas en función de la tensión. La salida es lineal, así que cada grado centígrado equivale a 10mV de incremento en la salida (10mV/ºC). Para el cálculo podemos usar la siguiente fórmula:

ºC = (5 * analogRead(PIN_SENSOR) * 100) / 1024

Siendo analogRead(PIN_SENSOR) la tensión expresada en mV de la salida del sensor LM35 que obtenemos por el pin analógico de Arduino. Recuerda que las entradas analógicas de Arduino, a pesar de ser analógicas son tratadas por el microcontrolador como digitales, representándolas con valores de 10 bits.

Como podremos apreciar, si miramos el sensor de temperatura LM35 podemos ver tres patillas, una que debemos conectar a los +5v de Arduino, la central a la salida donde se recogerán los voltajes correspondientes a las temperaturas medidas y la derecha para tierra (GND).

Pines del LM35

Ahora que ya sabemos como trabaja el sensor, vamos a empezar con el montaje. Simplemente conectaremos el pin izquierdo al terminal de +5v de la placa Arduino, el central a la entrada analógica A4 (por ejemplo) y el derecho a tierra (GND).

LM35 conectado a Arduino

Después vamos a colocar los relés correspondientes para la estufa y para el refrigerador. Los relés también disponen de distintos pines para el control. El relé actuará como un interruptor automático que enviará corriente al aparato en cuestión. Al disponer de dos circuitos no conectados, el relé puede ser controlado por tensiones de unos cuantos voltios (5v en nuestro caso) de corriente continua y actuar como switch para corrientes alternas de 220v, suficientes para alimentar aparatos domésticos. Al ser un relé normalmente abierto, solo cuando Arduino envie una tensión al relé, éste dejará paso a la corriente que alimentará el aparato eléctrico conectado a él.

El conexionado del relé será el siguiente. Por un lado deberemos conectar los bornes A y B a la placa Arduino. Uno al GND o tierra y el otro a una de las salidas digitales, por ejemplo la 3 para un relé y la 2 para el otro.

Pines del relé

Por otro lado, tomando las precauciones oportunas, debemos conectar los cables a un enchufe macho para poderlo conectar a un enchufe cualquiera y obtener la energía necesaria.

Montar un enchufe

Uno de los cables (fase o neutro) de los empleados para el enchufe macho anteriormente montado, lo cortaremos e interpondremos un interruptor para conectar y desconectar la tensión cuando queramos.

Montar un interruptor

Luego los otros extremos los conectaremos a dos fichas de empalme, una para cada polo, y de cada terminal sacaremos dos nuevos cables. Es decir, para que haya dos nuevos cables de fase y dos nuevos cables neutros. Los dos nuevos fase o los neutros, vale cualquiera, los conectaremos al borne marcado como C en la imagen del relé.

Tras eso, seguiremos haciendo las conexiones oportunas con los cables salientes de los relés y montaremos dos enchufes hembra. Así dispondremos de dos enchufes para conectar el ventilador en uno y la estufa en el otro.

conexiones-electricas

Ya tenemos listo el montaje eléctrico de nuestro experimento. Ahora toca programar el sketch, que será tan simple como el de la siguiente imagen:

//Climatizador

const int amb=25; //Declaracion de la constante de temperatura
const int vent=3; //Declarar pin ventilador
const int estu=2; //Declarar pin estufa
int AN4=A4; //Declara entrada analogica en pin 4

void setup(){
 pinMode(vent, OUTPUT);
 pinMode(estu, OUTPUT);
 pinMode(AN4, INPUT);
}
void loop()
{
 AN4=analogRead(A4); //Conexion analogica del LM35
 AN4=(AN4*500.0)/1024.0; //Calcula la temperatura en ºC
 Serial.println(AN4);
 if(AN4<amb) //Si la temperatura es menor a 25ºC  {  digitalWrite(estu, HIGH); //Activa el rele de la estufa  digitalWrite(vent, LOW); //Desactiva el del ventilador  }  else  if(AN4>amb) //Si la temperatura es mayor a 25ºC
 {
 digitalWrite(vent, HIGH); //Activa el rele del ventilador
 digitalWrite(estu, LOW); //Desactiva el rele de la estufa
 }
 else //En cualquier otro caso, ambos estan desactivados
 {
 digitalWrite(vent, LOW);
 digitalWrite(estu, LOW);
 }
 delay(180000); //Retardo entre medicion y medicion de 3min
}

Finalmente, podemos conectar el aparato de aire acondicionado/ventilador y la estufa/calefactor a los enchufes y probar que todo funcione correctamente. Podemos enfriar el sensor o calentarlo nosotros mismos para ver su funcionamiento y que los relés se activan correctamente. Gracias a la inclusión de la instrucción Serial.println en el código fuente, podemos visualizar los valores en grados Celcius en la pantalla de nuestro PC mientras tengamos Arduino conectado. Para que el circuito sea autónomo, deberemos conectar la placa Arduino a una fuente de alimentación adecuada o pilas de 5v.

Comprar – Arduino UNO rev.3

Más información – Control de Arduino desde la Raspberry Pi


14 comentarios

  1.   adeluna100 dijo

    Perdón pero yo soy nuevo en la electrónica y veo que en los esquemas suponen muchas instalaciones que yo no se hacer, por ejemplo, la forma de insertar el sensor de temperatura entre el arduino y la conexión completa, ¿Dónde va el arduino entre estufa, el ventilador y los apagadores

    1.    Isaac P.E. dijo

      Hola. Fíjate en la foto que hay justo bajo la ilustración del LM35 en el artículo. Justo ahí aparece el esquema de conexionado del sensor en la placa de Arduino (el pin de entrada de voltaje 1 y el de tierra o GND 3 van conectados a las conexiones de 5v y GND de la placa Arduino, mientras que el pin central va conectado a una de las entradas analógicas de Arduino, concretamente lo hemos insertado en el A4).
      Eso en cuanto al sensor de temperatura. La placa Arduino puedes colocarla en cualquier punto de la habitación, igual que la estufa y el ventilador, que puedes situarlos donde sea ayudándote de un cable más o menos largo.
      Espero haber respondido a tus dudas. Si tienes más consultas, no dudes en preguntarnos.
      Saludos y gracias por tu interés.

  2.   Félix Pérez dijo

    La mayoría de las lavadoras fallan por el programador que suele ser caro o difícil de encontrar. Yo reparé la mía hace un año con un nuevo programador (~90€) y ha vuelto a fallar. Puesto que los procesos de una lavadora son bastante sencillos, creo que tal vez con una placa Arduino y varios relés (que se pueden sacar de la difunta placa controladora) se podría solucionar. Luego sería cuestión de sofisticar más o menos la programación para que haga uno o varios programas de lavado. Nosotros en casa usamos básicamente dos: normal (más bien corto, media hora, para ropa poco sucia) e intensivo (hora y media o más).
    Os lanzo la idea por si os animáis a desarrollar algo de esto. Si una placa de Arduino cuesta ~30€ con los portes, ya es más barata que la del fabricante. Y si falla, igual es posible aislar el componente dañado y reemplazarlo a un coste menor que una placa nueva. Creo que esta es la filosofía Arduino.

    Espero vuestras noticias.

    1.    Isaac P.E. dijo

      Hola, buena idea. Sería cuestión de encontrar los componentes electrónicos adecuados y escribir el sketch idóneo para programar la placa Arduino. Lo tendremos en cuenta.
      Gracias y saludos.

  3.   Daniel Ayosa dijo

    Excelente proyecto, en realidad buscaba otra cosa y en este scketch adaptado a mi necesidad,quiero hacer un sistema que encienda el eletroventilador de un automóvil sin depender del bulbo,que suele fallar:

    //Scketch para controlar eletroventilador de vehiculo en funcion de la temperatura del motor.
    //usando un sensor temperatura y rele.

    const int amb=95; //Declaracion de la constante de temperatura
    const int vent=3; //Declarar pin ventilador
    int AN4=A4; //Declara entrada analogica en pin 4

    void setup(){
    pinMode(vent, OUTPUT);
    pinMode(AN4, INPUT);
    }
    void loop()
    {
    AN4=analogRead(A4); //Conexion analogica del LM35
    AN4=(AN4*500.0)/1024.0; //Calcula la temperatura en ºC
    Serial.println(AN4);
    if(AN4>amb) //Si la temperatura es mayor a 95ºC
    {
    digitalWrite(vent, HIGH); //Activa el rele del electroventilador
    }
    else //Si es menor desactivarlo
    {
    digitalWrite(vent, LOW);
    }
    delay(180000); //Retardo entre medicion y medicion de 3min
    }

  4.   Gabriel Aguilera Urrutia dijo

    El pin de arduino al que conectas el relé es Digital o Analogico? gracias

    1.    Isaac PE dijo

      Hola,

      Digitales.

      Saludos!!!

  5.   Gabriel Aguilera Urrutia dijo

    Una ultima pregunta, tengo un sensor que es el LM335Z que entrega temperatura en kelvin, que puedo hacer? estoy realmente perdido con esto. Ayuda por favor

    1.    Isaac PE dijo

      Hola,

      Fíjate en la línea 16 del código del sketch. Verás que esa línea del programa está dedicada a convertir a grados ºC, ya que el sensor que utilizamos en nuestro ejemplo tampoco da los grados ºC…

      Mira que en el apartado Procedimiento, en los primeros párrafos explico también lo de la temperatura.

      Saludos y gracias por tu interés.

  6. Mi ultima duda (perdón por molestar tanto, pero tu eres el único que me ha respondido)
    AN4=((AN4*500.0)/1024.0) – 272.15;
    al restar los 272,15 se pasa de Kelvin a Celsius.
    El sensor lm335 al usarlo con un programa básico para LM35 me marca valores elevados.
    Con ese arreglín debería quedar bien?
    Gracias por ayudarme 🙂

    1.    Isaac PE dijo

      Si. Tienes razón. Fallo mío al repasar el código para contestarte no me fijé en que simplemente transformaba el voltaje a grados y no lo convertía de una unidad a otra.

      Restando, como bien dices, funcionará.

      Saludos y disculpa el error.

  7.   kNo linsms dijo

    Hola,
    Perdona que escriba en un hilo tan viejo, pero estoy buscando información para leer datos del LM35 y lo que haces tú me cuadra mucho.
    Mi gran duda es que si el LM35 puede leer temperaturas de entre -55º y 150º (0.55v y 1.5v) y arduino ofrece valores entre 0 y 1024 para la lectura analogRead, con la fórmula que pones aquí (que es la misma que he visto en otros sitios) no cuadra. Por ejemplo, es imposible leer un valor negativo.

    Mientras escribía esta pregunta he buscado el datasheet del LM35 (http://www.ti.com/lit/ds/symlink/lm35.pdf) y creo que he dado con la respuesta, si me la puedes confirmar te lo agradecería:
    Parece ser que el LM35 tiene dos modos de funcionamiento, uno en el que mide de -55º a 150º y otro (el que solemos usar) que solo mide valores positivos de 0º a 150º y que ofrece salidas de voltaje de 0V a 1.5V con incrementos de 10mV por cada grado centígrado.

    Por cierto, en mi experimento estoy usando nodemcu cuya entrada analógica solo lee valores de 0V a 1V lo cual hace que también me cambie la fórmula (y que acabe loco)

    Gracias por el artículo

    1.    Roi dijo

      Hola
      Hice un proyecto con el lm35 y para poder leer el rango completo de temperaturas use la configuracion con los dos diodos que sale encima de “Figure 18. Temperature Sensor, Single Supply (−55° to +150°C)” en la pagina 16 de el datasheet que has puesto. Leia los dos valores analogicos (el + y – del vout del diagrama). Despues, restamos Vout+ menos Vout-.Si el resultado es positivo significa que la temperatura es positiva y el resultado de la resta ya nos vale para hacer la conversion a Cº como pone en el post. Si el resultado es negativo (Vout- era mayor que Vout+), tenemos que invertir la resta: Vout- menos Vout+. El resultado es el valor absoluto de la temperatura, es decir, despues de hacer la conversion a Cº el resultado son los grados de temperatura negativa. No se si me he explicado…

  8.   ale dijo

    Exelente como se le puede agregar un lcd para q marque temperatura.

A inventar!