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

Rele + 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();
}
}

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en www.enriquegomez.me
Suscribete
Notificame
guest
4 Comments
Nuevos
Antiguos Más votados
Inline Feedbacks
View all comments
pedro
pedro
1 año hace tiempo

hola pero realmente, no se en que estado se encuantra el rele, si en on o off, si accedo a la pagina, no?

Dasgath
Dasgath
4 años hace tiempo

Y otra cosa que me parecio importante, aunque en realidad no corrige nada de este codigo pero queria mencionarlo igual porque me parecio util. Si son como yo que quieren que el router maneje y asigne a tus dispositivos con DHCP: Cambiar Ethernet.begin(mac,ip) por: Ethernet.begin(mac); Pueden dejar «IPAddress ip(192,168,1, 177);» ya que si DHCP falla en algun momento, va a caer en esa IP. Al principo de «Void loop()» agregen Ethernet.maintain(); Esto va a estar constantemente resfrescando la IP asignada por DHCP, so no estubiera la perderian enseguida. Talvez seguirian teniendo conexion, pero si el router asigna por DHCP esa… Leer más »

Dasgath
Dasgath
4 años hace tiempo

Agustin Normand tenia razon! Porfavor corregir, gracias por hacerla tan simple!