En este tutorial voy a explicar como obtener datos con arduino de pines digitales y analogico, y controlar pines digitales desde el navegador web. Utilizaremos el módulo W5100 Ethernet y HTML.
Materiales:
- Arduino UNO.
- Módulo Ethernet W5100.
- 2 Potenciómetros (Resistencias variables) de 1Kohm.
- Cables varios.
- Buzzer.
- Led Rojo.
- Resistencia de 330 ohms.
- Cable USB.
- Pulsador con retención.
- Módulo relé.
- Cable USB (de un mouse viejo que no funcione, lo cortaremos).
- Cable con toma macho de 220VCA tambien funciona para conexiones de 110VCA.
- Toma de pared o de tablero.
- Un sensor mágnetico de puerta/ventana (los que se utilizan en alarmas).
Esquema de conexiones:
El módulo W5100 es un Shield de arduino. Lo que significa que este se coloca sobre el arduino UNO y replica todos sus pines en su superficie, por lo que es igual el funcionamiento de cada uno de los pines digitales y analogicos.
En la primer imagen observamos el módulo Ethernet Shield W5100 y en la segunda imagen lo obsrvamos colocado en el arduino UNO.
Entradas Analógicas:
Conectamos los dos potenciómetros a los pines analógico 0 y 1 respectivamente, al cual llamaremos Temperatura (0) y Humedad (1). Obviamente estas son entradas las cuales veremos en el navegador como valores entre 0 y 1023 de acuerdo a la posición del potenciómetro.
Aclaración: El nombre temperatura y humedad se dá como ejemplo de lo que podría representar en una casa o proyecto de adquisición de datos. Con el sensor adecuado tener en cuenta la conversión y utilización de los mismos.
Entradas Digitales:
El pin digital 4 lo conectamos al botón con retención.
El pin digital 5 lo conectamos al sensor magnético de puerta.
Salidas Digitales:
El pin digital 2 lo conectamos al módulo relé.
El pin digital 3 lo conectamos al buzzer y al led con la resistencia.
1. Código para el Arduino:
Este código hace que el Arduino envíe y reciba los datos al navegador por HTML.
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//Ponemos la dirección MAC de la Ethernet Shield IPAddress ip(192,168,0,177); //Asignamos la IP al Arduino EthernetServer server(80); //Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto int LED1=2; //Pin del LED 1 int LED2=3; //Pin del LED 2 String estado1="OFF"; //Estado del Led 1 inicialmente "OFF" String estado2="OFF"; //Estado del Led 2 inicialmente "OFF" void setup() { Serial.begin(9600); // Inicializamos la comunicación Ethernet y el servidor Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(4,INPUT); pinMode(5,INPUT); digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); } void loop() { EthernetClient client = server.available(); //Creamos un cliente Web //Verificamos si se 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 cadena=""; //Creamos una cadena de caracteres vacía while (client.connected()) { if (client.available()) { char c = client.read();//Leemos la petición HTTP carácter por carácter Serial.write(c);//Visualizamos la petición HTTP por el Monitor Serial if(cadena.length()<50) { cadena.concat(c);//concatenmos el String 'cadena' con la petición HTTP (c). De esta manera convertimos la petición HTTP a un String //Ya que hemos convertido la petición HTTP a una cadena de caracteres, ahora podremos buscar partes del texto. int posicion=cadena.indexOf("Data="); //Guardamos la posición de la Palabra "Data=" a la variable 'posicion' if(cadena.substring(posicion)=="Data=1")//Si en la posición hay "Data=1" { digitalWrite(LED1,LOW); estado1="ON"; } else if(cadena.substring(posicion)=="Data=2")//Si en posición hay "Data=2" { digitalWrite(LED1,HIGH); estado1="OFF"; } else if(cadena.substring(posicion)=="Data=3")//Si en la posición hay "Data=3" { digitalWrite(LED2,LOW); estado2="ON"; } else if(cadena.substring(posicion)=="Data=4")//Si en la posición hay "Data=4" { digitalWrite(LED2,HIGH); estado2="OFF"; } } //Cuando reciba una línea en blanco, quiere decir que la petición HTTP ha acabado y el servidor Web está listo para enviar una respuesta if (c == 'n' && currentLineIsBlank) { // Enviamos al cliente una respuesta HTTP client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); //Página web en formato HTML client.println("<html>"); client.println("<head><title>Arduino Webserver Control</title>"); client.println("</head>"); client.println("<body>"); client.println("<div style='text-align:center;'>"); client.println("<h1>Arduino Webserver Control</h1>"); client.println("<h2>Entradas Analogicas</h2>"); client.print("Temperatura="); client.println(analogRead(0)); client.print("<br />Humedad=");client.println(analogRead(1)); client.println("<h2>Entradas Digitales</h2>"); client.print("Boton Emergencia=");client.println(digitalRead(4)); client.println("<br />Puerta=");client.print(digitalRead(5)); client.println("<br /><br />"); client.println("<a href='http://192.168.0.177'>Actualizar entradas</a>"); client.println("<h2>Salidas Digitales </h2>"); client.println("Estado del Luz = ");client.print(estado1); client.println("<br />"); client.print("<button onClick=location.href='./?Data=1'>ON</button>"); client.print("<button onClick=location.href='./?Data=2'>OFF</button>"); client.println("<br /><br />"); client.println("Estado del Alarma = ");client.print(estado2); client.println("<br />"); client.print("<button onClick=location.href='./?Data=3'>ON</button>"); client.print("<button onClick=location.href='./?Data=4'>OFF</button>"); client.println("<br /><br />"); client.println("<a href='https://elprofealegria.com/'>elprofealegria.com</a>"); client.println("<br /><br />"); client.println("</b></body>"); client.println("</html>"); break; } if (c == 'n') { currentLineIsBlank = true; } else if (c != 'r') { currentLineIsBlank = false; } } } //Dar tiempo al navegador para recibir los datos delay(1); client.stop();// Cierra la conexión } }
Este código se leerá en el navegador web pulsando generalmente F12 se abre el visor de código..
2. Prueba del sistema:
En el navegador escribimos la direccion IP que tiene establecida el código de arduino. En nuestro caso 192.168.0.177.
Y ya tendremos acceso al servidor web de arduino y poder realizar las pruebas.
Notas adicionales:
Este es un ejemplo el cual puede variar y modificarse de acuerdo a tus necesidades o proyecto que quieras realizar.
Espero te sirva de guía para realizar tu proyecto.