Los materiales a ocupar son:
- Un Arduino Uno o Mega2560
- Un Ethernet Shield w5100
- Cables Macho-Macho y Macho-Hembra
- Cable Ethernet
- 1 servomotor
- Relevadores de 1, 2 o 4 canales
Una vez obtenido los materiales procederemos al código:
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
Estas son las librerías que se van a utilizar para el IDE de Arduino
Servo microservo;
int pos = 0;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Direccion Fisica MAC
byte ip[] = { 192, 168, 1, 91 }; // IP Local que usted debe configurar
byte gateway[] = { 192, 168, 1, 254 }; // Puerta de enlace
byte subnet[] = { 255, 255, 255, 0 }; //Mascara de Sub Red
EthernetServer server(80); //Se usa el puerto 80 del servidor
String readString;
En este caso todo lo dejaremos igual excepto el byte gateway, ese debemos de cambiarlos a una red a la cual no este ocupado, nos vamos al buscador de Windows y escribimos "cmd" y nos aparecerá la siguiente ventana
y para identificar nuestra red debemos escribir "ipconfig" y nos aparecerá lo siguiente
Y debemos verificar lo que es el adaptador de LAN inalámbrica Wifi y nos brinda una serie de números pero el que más nos interesa es la Dirección IPv4, tomamos los tres primeros números y el ultimo lo cambiamos verificando que se utilizado por las demás computadoras o aparatos conectados a Wifi
void setup() {
Serial.begin(9600); // Inicializa el puerto serial
while (!Serial) { // Espera a que el puerto serial sea conectado, Solo necesario para el Leonardo
;
}
pinMode(2,OUTPUT); // Se configura como salidas los puertos del 2 al 6
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
microservo.attach(7); // Se configura como Servo el Puerto 7
Ethernet.begin(mac, ip, gateway, subnet); // Inicializa la conexion Ethernet y el servidor
server.begin();
Serial.print("El Servidor es: ");
Serial.println(Ethernet.localIP()); // Imprime la direccion IP Local
}
void loop() {
// Crea una conexion Cliente
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//Lee caracter por caracter HTTP
if (readString.length() < 100) {
//Almacena los caracteres a un String
readString += c;
}
// si el requerimiento HTTP fue finalizado
if (c == '\n') {
Serial.println(readString); //Imprime en el monitor serial
client.println("HTTP/1.1 200 OK"); //envia una nueva pagina en codigo HTML
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<TITLE>Ethernet Arduino</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<hr />");
client.println("<H1>Arduino Ethernet Shield</H1>");
client.println("<br />");
client.println("<H2>Control on/off 2-6 Servo 7</H2>");
client.println("<br />");
client.println("<a href=\"/?button2on\"\"> Apagar Pin2</a> "); // construye en la pagina cada uno de los botones
client.println(" | | | ");
client.println("<a href=\"/?button2off\"\"> Encender Pin2</a><br /> ");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?button3on\"\"> Apagar Pin3</a> ");
client.println(" | | | ");
client.println("<a href=\"/?button3off\"\"> Encender Pin3</a><br /> ");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?button4on\"\"> Apagar Pin4</a> ");
client.println(" | | | ");
client.println("<a href=\"/?button4off\"\"> Encender Pin4</a><br /> ");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?button5on\"\"> Apagar Pin5</a>");
client.println(" | | | ");
client.println("<a href=\"/?button5off\"\"> Encender Pin5</a><br />");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?button6on\"\"> Apagar Pin6</a> ");
client.println(" | | | ");
client.println("<a href=\"/?button6off\"\"> Encender Pin6</a><br /> ");
client.println("<br />");
client.println("<br />");
client.println("<a href=\"/?left\"\">Girar Izq Pin7</a>");
client.println(" | | | ");
client.println("<a href=\"/?right\"\">Girar Der Pin7</a><br />");
client.println("<hr />");
client.println("<p>Pagina Ethernet</p>");
client.println("<br />");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//detiene el cliente servidor
client.stop();
//control del arduino si un boton es presionado
if (readString.indexOf("?button2on") >0){
digitalWrite(2, HIGH);
}
if (readString.indexOf("?button2off") >0){
digitalWrite(2, LOW);
}
if (readString.indexOf("?button3on") >0){
digitalWrite(3, HIGH);
}
if (readString.indexOf("?button3off") >0){
digitalWrite(3, LOW);
}
if (readString.indexOf("?button4on") >0){
digitalWrite(4, HIGH);
}
if (readString.indexOf("?button4off") >0){
digitalWrite(4, LOW);
}
if (readString.indexOf("?button5on") >0){
digitalWrite(5, HIGH);
}
if (readString.indexOf("?button5off") >0){
digitalWrite(5, LOW);
}
if (readString.indexOf("?button6on") >0){
digitalWrite(6, HIGH);
}
if (readString.indexOf("?button6off") >0){
digitalWrite(6, LOW);
}
if (readString.indexOf("?left") >0){
for(pos = 0; pos < 180; pos += 3) // Giro de 0 a 180 grados
{
microservo.write(pos);
delay(15); // Espera 15 ms para que el servo llege a la posicion
}
}
if (readString.indexOf("?right") >0){
for(pos = 180; pos>=1; pos-=3) //Giro de 180 a 0 grados
{
microservo.write(pos);
delay(15); // Espera 15 ms para que el servo llege a la posicion
}
}
// Limpia el String(Cadena de Caracteres para una nueva lectura
readString="";
}
}
}
}
}
En el caso del Ethernet Shield los pines 10, 11, 12 y 13 no los podremos utilizar como pines de salida porque esos pines son ocupados por el arduino.
Estas son las partes del arduino:
- ON: indica que la placa y la shield están alimentadas
- LINK: indica la presencia de un enlace de red y parpadea cuando la shield envía o recibe datos
- 100M: indica la presencia de una conexión de red de 100 Mb/s (de forma opuesta a una de 10Mb/s)
- RX: parpadea cuando el shield recibe datos
- TX: parpadea cuando el shield envía datos