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.
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.
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.
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 .
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.
Como puedes comprobar esta libre ya que no lo encuentra.
Esta ip es la que introduciremos en nuestro programa como veremos más tarde.
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.
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é a travé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.
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.
Cuando pinchemos en el radio button se encenderá la lámpara y quedara a la espera para apagar mostrándose la siguiente imagen.
/?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.
excelente, muy util y oportuno.
Muchas gracias ivan, saludos