Controlar un relé con Arduino ethernet puede salvar vidas y también controlar el riego de tus plantas cuando estas de vacaciones.
Cuando pensamos en telemetría de sensores, parece genial la idea de poder controlar la lectura de un sensor a distancia, sin estar delante del sensor. Dos ejemplos extremos pueden ser medir la radiación en el reactor de una central nuclear o la temperatura y presión en el interior de una autoclave. Seguro que a nadie le apetece comprobar estas medidas in situ.
Además de medir, hay muchas ocasiones en las que esto se queda corto, porque además, necesitamos poder controlar la electroválvula que controla la salida del fluido de refrigeración del reactor.
Seguro que tu reto de hoy no consiste en controlar la refrigeración de un reactor. Pero aún así, esto lo puedes aplicar a controlar algo más realista. Por esto vamos a aprender como controlar un relé a distancia con Arduino y Arduino Ethernet.
Con Arduino podemos hacer esto, podemos controlar reles, LEDs, transistores, triacs, y un largo etc. desde cualquier parte usando Internet.
Antes de seguir te recomiendo que eches un vistazo al artículo en el que explico como monitorizar el valor que devuelve un sensor a través de una página web usando el sensor TMP35 y Arduino ethernet
Partiendo del código del ejemplo del sensor TMP35 vamos a realizar unas simples modificaciones: cambiar el puerto a través del cual accedemos a la placa e introducir unos enlace con los cuales podremos encender y apagar el relé.
Además tendremos que analizar el código que el cliente, es decir, el navegador web, manda a Arduino. Este análisis lo realizamos para saber si tenemos que encender o apagar el relé.
Aprende a controlar un relé con Arduino Ethernet
Analizando el código para Arduino
El proceso se basa en enviar peticiones HTTP hacia Arduino y enviar en ella parámetros GET. Estos parámetros, que los podemos considerar como variables, indican a Arduino si debe encender o apagar el relé.
Al recibir la petición HTTP, Arduino analiza el contenido y busca en el texto palabras concretas.
Si en el análisis encuentra el texto «?encender» se debe activar la salida del relé. Si por el contrario encuentra el texto «?apagar» debe desactivar la salida.
La interacción con el usuario se realiza por medio de una página web escrita en código HTML, en ella se encuentran dos enlaces que envían los parámetros.
Para activar el relé usaremos el parámetro «encender», por tanto enviaremos este parámetro a través del enlace. Cuando Arduino recibe la petición, la almacena y busca en ella la palabra «encender», si la encuentra activa la salida digital.
De manera similar, el enlace de apagado envía el parámetro apagado y esta palabra será la que desactive la salida digital.
/* Ejemplo sobre uso de libreria ethernet para controlar un rele desde página web. */ #include <SPI.h> #include <Ethernet.h> //Ponemos la dirección MAC e IP que queremos que use nuestro Arduino para conectarse al Router byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1, 177); String readString; //Definimos que el puerto HTTP sera el 81 EthernetServer server2(81); //Variables de control int rele = 7; void setup() { //Iniciar la conexión de red y serie Ethernet.begin(mac, ip); server2.begin(); Serial.begin(9600); pinMode(rele,OUTPUT); } void loop() { // Esperamos que venga algún cliente web al puerto 81 EthernetClient cliente = server2.available(); if (cliente) { boolean currentLineIsBlank = true; while (cliente.connected()) { if (cliente.available()) { char c = cliente.read(); if (readString.length() < 100) { //Almacenar caracteres en un string readString += c; } //Si ha terminado la petición del cliente if (c == '\n') { if(readString.indexOf("?encender") >0) { digitalWrite(rele,HIGH); } if(readString.indexOf("?apagar") >0) { digitalWrite(rele,LOW); } //Enviamos la cabecera web cliente.println("HTTP/1.1 200 OK"); cliente.println("Content-Type: text/html"); cliente.println(); //Mostrqamos la web de control cliente.println("<center> <h2>Bienvenido al control de reles</h2> "); cliente.println("<br> Clic en los enlace para encender o apagar:"); cliente.println("<br> <a href='./?encender'>Encender</a> - <a href='./?apagar'>Apagar</a>"); cliente.println(" </center>"); cliente.println("<br />"); break; } } } // Darle un respiro al navegador web para recibir los datos delay(1); //Limpiar String para proxima etición HTTP readString=""; //Cerrar conexión cliente.stop(); } }