Tutorial Control Temperatura

Cualquier duda sobre Arduino.

Moderador: Alvaro31

Responder
$Pedro

28 Jun 2016 12:27

TUTORIAL CONTROLAR TEMPERATURA


Quiero empezar esta serie de tutoriales escribiendo que programar no es fácil y requiere tiempo y dedicacion. Un error muy comun en los recien iniciados es intentar empezar la casa por el tejado y cuando la teja no coincide con la pared, bajamos hasta los cimientos y volvemos a empezar. Me refiero con esto a que si queremos comenzar teniendo un supercontrolador empezando de 0 y en 2 meses, lo mas probable es que perdamos los 2 meses y necesitemos otros tantos para empezar desde la base y poco a poco.

TUTORIAL I: CONTROLAR LA TEMPERATURA
Vamos a empezar nuestros tutoriales con una de las cosas mas basicas que podemos hacer con nuestro arduino, controlar la temperatura de nuestro acuario. Para ello, vamos a desarrollar un programita muy basico (quien despues quiera seguir ampliando conocimientos y la complejidad añadiendo menus y tft o lcd es totalmente libre, yo solo aporto la base). Los materiales que usaremos seran:
- Arduino MEGA o UNO, tendremos en cuenta que si queremos seguir desarrollando nuestro controlador, el UNO se quedara corto a largo plazo, pero si queremos controlar temperatura, nivel y poco mas es la mejor opcion.
- Sonda de temperatura DALLAS DS18b20, muy importante que la compremos en formato con encapsulado WATERPROOF.
- Resistencia de 4K7.
- Modulo de reles para usar en arduino de 5v de activacion y que admita 230V 10A. Minimo 1 por cada canal que vayamos a usar, es decir si queremos calentar y enfriar la temperatura compraremos uno con dos reles.
- Enchufes de superficie o regletas que seran donde conectemos nuestro calentador o enfriador.
- Un pc con puerto USB y donde instalaremos el IDE de arduino o consola de programacion. Podeis descargar desde su pagina oficial.
- Las librerias para instalar en el IDE y poder controlar nuestra sonda de temperatura de manera muy sencilla y sin conocimientos complejos de hexadecimal y direcciones. Las librerias que usaremos seran la DALLAS TEMPERATURE CONTROL y la ONE WIRE. Deciros que la primera la podemos descargar desde internet (buscar con google) y la segunda en los IDE actuales viene ya precargada.
- De manera opcional se puede instalar un led RGB para que visualmente veamos si la temperatura esta dentro de nuestros margenes (esto lo podeis omitir si en el futuro vais a meter un lcd donde nos muestre la temperatura real). Para eso necesitaremos un LED RGB de 5mm con negativo comun y una resistencia de 220.

Pues con todos nuestros materiales, vamos a empezar por la electronica. Lo primero que debemos hacer es identificar en los cables de nuestra sonda + (rojo), - (negro) y DATA (amarillo, verde ...). Estos colores son estandar, si vuestra sonda trae otros colores, debeis preguntar a quien os la vendio. Nosotros vamos a alimentar nuestra sonda de modo parasitario, es decir el cable rojo y negro los vamos a unir y lo alimentamos desde el GND de arduino. Al cable DATA, le vamos a soldar nuestra resistencia de 4K7 y esta a su vez la alimentamos desde el 5V de arduino.


Una vez preparada nuestra sonda, vamos a preparar los reles que seran los que den corriente al calentador o al enfriador.

En esta imagen se ve de forma sencilla como se conecta el rele. El rele es el que hace de interruptor para dejar pasar la corriente o no. Los cables verde y azul que en el esquema van a los electrodomesticos, serian los que conectariamos a nuestro enchufe de superficie o regleta y a este el calentador o enfriador.

Pues ya tenemos toda nuestra electronica preparada de forma muy sencilla. Faltaria preparar el LED RGB que lo pondre en un APENDICE para quien quiera desarrollar esa via. Empezamos ahora con la parte mas compleja del proyecto, la programacion.

La estructura de un sketch o programa para arduino es muy sencilla y podeis buscar mucha informacion por internet (os animo a leer antes de continuar quien no lo tenga muy claro). Lo primero que vamos a decirle a nuestro arduino es que queremos basar nuestra programacion (o enfocar) en las librerias que mencionamos antes, para eso pondremos nuestras 2 primeras lineas de codigo:
#include <OneWire.h>
#include <DallasTemperature.h>
Con esto le decimos que incluya "las funciones que nos brindan la libreria ONE WIRE y DALLAS TEMPERATURE".
Arduino se basa en c++ (en sus inicios, ahora el lenguaje c++ ha evolucionado bastante, aun asi podeis leer manuales de c++ y vereis que tiene bastante similitud con arduino), por lo que es un lenguaje orientado a objetos, quiere decir que acabamos de decirle que nos incluya las librerias, pero necesitamos darle nombre, para decirle a arduino que cuando llamemos a X sepa que nos referimos a la libreria (esto es una explicacion de manera muy basica, como siempre quien quiera ampliar GOOGLE). Entonces vamos a bautizar:
OneWire pepito(5);
DallasTemperature juanito(&pepito);
DeviceAddress sonda;
Lo he puesto asi para que sea facil de entender esta parte del codigo. Aqui le decimos que cuando queramos usar la libreria ONE WIRE, la llamaremos como pepito y ademas esta conectada al PIN 5 de arduino. Entonces la siguiente linea es facil de entender, decimos que cuando llamemos a juanito, estaremos aplicando las propiedades de la libreria DALLAS TEMPERATURE al cable que esta conectado al PIN 5. Y la siguiente linea le asigna la direccion hexadecimal a nuestra sonda, de manera que cuando queramos comunicar con ella juanito sepa donde esta la sonda.
Vamos a seguir avanzando, ahora vamos a definir unas variables que seran la temperatura que queremos mantener en nuestro acuario y el margen que queremos para evitar que el calentador caliente en exceso y salte el enfriador, y este baje demasiado y tenga que volver a encender el calentador... Para evitar ese bucle infinito.
float mitemperatura = 25.2;
float mimargen = 0.5;
Dentro del bloque SETUP, vamos a definir unas cosas:
Serial.begin(9600);
juanito.begin();
if (!juanito.getAddress(sonda,0)) Serial.println("No encuentro la sonda");
pinMode(5, INPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
En esta parte definimos que inicie nuestro monitor serial, para ver en nuestro pc que todo trabaja correctamente, le decimos que inicie nuestra libreria DALLAS, y que si juanito no encuentra respuesta de la sonda, nos lo muestre en el monitor serial. Por ultimo declaramos que el PIN 5, es una entrada de datos y los PINS 6 y 7 salidas para activar los reles de calentador y enfriador.
Y ahora vamos a decirle a nuestro arduino lo que queremos de el, dentro del bloque LOOP:
juanito.requestTemperatures();
float tempC = juanito.getTempC(sonda);
if (tempC < mitemperatura){
digitalWrite(6, HIGH);
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.println(" enciendo el calentador");
}
if (tempC > mitemperatura+mimargen){
digitalWrite(7, HIGH);
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.println(" enciendo el enfriador");
}

if ((tempC >= mitemperatura) && (tempC <= mitemperatura+mimargen)){
if (digitalRead(6, HIGH)) digitalWrite(6, LOW);
if (digitalRead(7, HIGH)) digitalWrite(7, LOW);
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.println(" OK, todo desconectado");
}
Como veis un codigo muy sencillito y facil. Lo primero que hace es leer la temperatura de la sonda. Esta la comprueba con la que tenemos definida por nuestras variables, si es menor activa el rele del PIN 6 para que deje pasar la corriente a nuestro calentador. Si es mayor de la definida mas el margen, activa el rele del enfriador. Y si esta dentro del margen definido, comprueba que no esten encendidos los reles, y si lo estan, los apaga.
La unica pega que tiene este codigo es que comprueba varias veces por segundo las temperaturas, lo que es sobrecargar mucho, lo podeis definir para que compruebe cada 5 o 10 segundos, para eso hay varias formas, pero eso ya os lo quedo para que os estrujeis el coco que todo no lo voy a dar hecho :p.
En el proximo tutorial intentare abordar el tema de 1 rellenador automatico, leer mucho y tomar estas lineas como base para que veais que puede ser muy sencillo e ir ampliando la dificultad.


[telegram=document]amp;id=BQADBAADAQADaPY6C4XLfuOkI6DNAg&mt=application%2Fvnd.openxmlformats-officedocument.wordprocessingml.document&rf=TUTORIAL+I.docx[/telegram]

$Pedro

28 Jun 2016 12:27

No puedo ponerlo por el wassap. Hay tenéis mi aporte

$Antonio

28 Jun 2016 13:02

Gracias Pedro!!


$Sr. Rodrigo

28 Jun 2016 13:13

Oleee pedro

Responder