En este post Control de relé por internet mediante Arduino y Ethernet Shield. vas a aprender algo que mola muchisimo, que me dirías si pudieras activar un relé a través de internet para activar en tu casa, luces, calefacción, riego, depuradora o lo que quieras.

Que vamos a usar?

Para ello vamos a usar la placa Arduino uno y un shield o escudo llamado Ethernet Shield.

El Escudo o Ethernet Shield le da la capacidad a Arduino de conectarse a Internet, es una placa que se acopla a modo de sandwhich (“de hay lo de escudo”) mediante unos pines o conectores que encajan a la perfección en nuestra placa Arduino Uno o Arduino Mega.

Ethernet Shield Arduino
Ethernet Shield

Este escudo o Ethernet Shield es en concreto está basada en el chip Ethernet wiznet W5100, y usa el protocolo TCP/IP también soporta UDP.

Aquí tienes en formato vídeo este post

Para el uso de este escudo deberemos de incluir dos librerías en el sketch:

-Ethernet

-SPI

Descripción la placa Ethernet Shield w5100

Usa el protocolo de comunicaciones SPI para comunicarse entre la placa Arduino y la placa Ethernet Shield w5100.

Ethernet Shield descripción
Ethernet Shield descripción

1.100M este Led nos indica que hay presente una conexión de red de 100Mb/s.

2. Conector RJ45 para conectar el cable de red al router o al ordenador.

3.Link este led nos indica que hay un enlace de red que parpadea cuando Ethernet Shield w5100 envía o recibe datos, tiene un buffer de 16k.

4.ON led , se enciende cuando Ethernet Shield w5100 tiene alimentación de 5 voltios.

Tx led este se enciende cuando Ethernet Shield w5100 transmite datos

Rx led este se enciende cuando Ethernet Shield W5100 recibe datos

5. Los pines 10,11,12,13 se usan para comunicarse por lo que no podremos usar estos pines.

6.Botón de reset al oprimir este botón se resetea tanto Ethernet Shield wiznet 5100 como la placa Arduino.

7. Pines de conexión ICSP para comunicación con Arduino

8. Emplazamiento tarjeta micro-SD para almacenar datos para usar por ejemplo en nuestra web server para ello deberemos de incluir la librería sd.

Aplicación de Ethernet Shield w5100.

En esta ocasión vamos a usar el escudo Ethernet shield w5100 como servidor web para controlar la domótica de nuestra casa, como ejemplo encenderemos una lámpara de 220v, desde cualquier punto del planeta que tengamos conexión a internet.

¿A que mola ;)?, pues vamos a ello.

Pasos a seguir:

En primer lugar tendremos que averiguar una ip para asignársela a nuestro Ethernet Shield w5100, para ello en la línea de comandos de Windows 10 en este caso ingresamos la palabra cmd y pulsamos enter.

 cmd windows 10
cmd windows 10

Y una vez nos salga el entorno de ms-dos pantalla negra tecleamos IP-config y nos saltra una pantalla como se muestra en la imagen que sigue .

cmd dos ipconfig
cmd dos ipconfig

Nos fijamos en la línea que pone IPv4, marcada en rojo en la imagen, este número en mi caso 192.168.0.155 tu tendrás que buscar el tuyo propio ya que este no te servirá .

Ese número nos indica que a partir de esos tres últimos números “155”  comienza a asignar ips a cada dispositivo por lo tanto escogeré un número lo suficientemente alejado para no usar un número que este en uso por ejemplo en mi caso voy a probar, con 192.168.0.180 para comprobar que está libre, voy a escribir la palabra ping 192.168.0.180 en el “comand com” es decir la pantallita negra de ms dos de antes.

ping dos
ping dos

Como puedes comprobar esta libre ya que no lo encuentra.

Esta ip es la que introduciremos en nuestro programa como veremos más tarde.

curso arduino
Curso Arduino

Si quieres convertirte en un experto en Arduino pincha en el siguiente enlace

Consideraciones

Llegado a este punto tenemos que hacer una consideración bastante importante.

1-Con esta ip podremos acceder a nuestro Ethernet Shield w5100 de forma local, por lo que para acceder de forma remota desde el móvil o desde otro ordenador fuera de nuestra red local, deberemos acceder introduciendo en el navegador nuestra ip pública que podremos averiguar en cualquier buscador poniendo cual es mi ip, hay un montón de páginas que te la dicen.

2-Otra cosa que deberás hacer es abrir el puerto 80 en la configuración de tu router que es por donde se comunican las web protocolo HTTP, la forma de hacer esto variará en función del modelo de tu router con lo que deberás buscar la información concreta de tu router.

Ejemplo

Como ejemplo de esta aplicación vamos a usar como base el programa de ejemplo que viene en los ejemplos del ide de Arduino, que se llama web server y lo vamos a modificar para que en lugar de leer las entradas analógicas y las muestre por el monitor serie, vamos a poner un radio button para encender y apagar una lámpara a 220 voltios, en principio nos aparecerá el radio button y una leyenda que pone Encender y cuando pulsemos el radio button encenderá la lámpara y la leyenda cambiará a Apagar si volvemos a pulsar se apagará la lámpara y la leyenda volverá a mostrar Encender.

web para encender relé a través de internet
web para encender relé a través de internet
web apagar relé a través de internet
web apagar relé a través de internet

Para realizar la página web en html puedes usar un editor de html que te permite poner botones radio button etc.

Pincha aquí para ir a la página

Programa Arduino para controlar relé a través de ethernet Shield

Este programa puedes descargarlo en la zona de descargas

/*AUTOR: JOSE ANTONIO RIVERA MORALES
 *FECHA: 21-8-2019
 *www.pasionelectronica.com
 * Este programa es un web server al que accedemos a traves de internet para activar una lampara a 220v mediante radio button
 * a traves de internet
 */
#include <SPI.h>  //Importamos librería comunicación SPI 
#include <Ethernet.h>  //Importamos librería Ethernet ambas necesarias para realizar la comunicacion con el shield
 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x47, 0x31 };//dirección MAC de la Ethernet Shield que está con una etiqueta debajo la placa
IPAddress ip(192,168,0,180); //Asignamos la IP privada al ethernet shield
EthernetServer server(80); //Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto
 
int lampara=8; //Pin de la lámpara// seleccionamos el pin donde conectaremos el rele que activara la lampara
int estado;// creamos una variable para ver si la lampara actualmente está activada o no
 
void setup()
{
  Serial.begin(9600);//Inicializamos el monitor serie 
 
  
  Ethernet.begin(mac, ip);// Inicializamos la comunicación Ethernet y el servidor
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());//Mostramos en el monitor serie la ip del ethernet shield
 
  pinMode(lampara,OUTPUT);//configuramos el pin 8 como salida para activar o desactivar la lampara
  digitalWrite(8,HIGH);//inicialmente a nivel alto ya que el relé es activo a nivel bajo
}
 
void loop()
{
  EthernetClient client = server.available(); //Creamos un cliente Web
  //Cuando detecte un cliente a través de una petición HTTP
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true; //Una petición HTTP acaba con una línea en blanco
    String comando=""; //cadena de caracteres vacía para guardar el estado del la lampara
    while (client.connected()) {//mientras el cliente este conectado y disponible
      if (client.available()) {
        char c = client.read();//Leemos la petición HTTP cada caracter individualmente
        Serial.write(c);
        comando.concat(c);//vamos agregando cada caracter de cada peticion para obtener la orden completa
 
         
         int poscomando=comando.indexOf("LAM="); //buscamos en el texto donde empieza el comando a ejecutar palabra LAM
         if(comando.substring(poscomando)=="LAM=ON")//Si en la posicion poscomando hay "LAM=ON"
          {
            digitalWrite(lampara,LOW);//encendemos la bombilla rele activo a nivel bajo
            
          }
          if(comando.substring(poscomando)=="LAM=OFF")//Si en la posicion poscomando hay "LAM=OFF"
          {
            digitalWrite(lampara,HIGH);//apagamos bombilla rele desactivo a nivel alto
        
          }        
        if (c == '\n' && currentLineIsBlank) {//comprobamos que ha acabado la petición con una linea en blanco
                     
            client.println("HTTP/1.1 200 OK");//Enviamos la respuesta de la peticion al cliente
            client.println("Content-Type: text/html");
            client.println();
            estado=digitalRead(lampara);//comprobamos si la lampara esta encendida o no
            client.println("<html>");//servimos la web a mostrar en HTML
            client.println("<head>");
            client.println("</head>");
            client.println("<body>");
            client.println("<h1>www.pasionelectronica.com</h1>");//titulo de nuestra web           
            client.println("<h2>Control de rel&eacute; a trav&eacute;s de internet</h2>");//las tildes usando &_acute
            //con estos dos if de acontinuacion hacemos el juego de que se muestre junto al elemento radio button 
            //la opcion contraria al estado actual de la lampara 
            if (estado==1){//si la lampara esta apagada
            client.println("<radio onClick=location.href='./?LAM=ON\'>");//cuando se pinche envia el comando lam=on
            client.print("<P><input type=\"radio\"name=\"status\"value=\"1\">ENCENDER");//muestra el texto encender
            
            }
            if(estado==0){//si esta encendida muestra texto apagar
            client.println("<radio onClick=location.href='./?LAM=OFF\'>");//cuando se pinche da orden de apagar
            client.print("<P><input type=\"radio\"name=\"status\"value=\"1\">APAGAR");//muestra texto apagar
            
            }
            client.println("</html>");
            break;
        }
        //final de respuesta
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    
    delay(1);//Esperamos a que reciba la respuesta
    client.stop();//Termina la conexión
  }
}

Una vez tengamos el programa cargado en nuestro Arduino acoplaremos el Ethernet Shield w5100 y haremos las conexiones según la imagen siguiente.

Esquema de conexión Ethernet Shield Arduino relé y bombilla
Esquema de conexión Ethernet Shield Arduino relé y bombilla

 Por ultimo lo que nos queda es ingresar la ip privada en caso de estar en nuestra red local o la ip publica en caso de estar fuera de ella y pulsar enter, esto nos llevará a la web que hemos programado anteriormente en el programa de Arduino.

web pasionelectronica encender
web pasionelectronica encender

Cuando pinchemos en el radio button se encenderá la lámpara y quedara a la espera para apagar mostrándose la siguiente imagen.

web pasionelectrónica apagar relé
web pasionelectrónica apagar relé

/?LAM=ON Y /?LAM=OFF no lo escribimos nosotros sino que el programa adjunta a la url el comando que queremos ejecutar.

Si te ha gustado este post sucríbete y tendrás acceso a este programa en la zona de descargas y no olvides compartir en las redes sociales con los botones que tienes a continuación.