Control de 2 Motores con Arduino Uno, L298N, a través de WEB

No hay comentarios

Hace tiempo que no escribo pero al estar acercándose las vacaciones me di este pequeño tiempo para hacerlo, la idea es controlar la velocidad del 2 motores con una placa Arduino Uno y un puente H (L298N), pero hacerlo a través de un navegador web con la ayuda del modulo Ethernet Shield, claro conectando esta interfaz hacia algún dispositivo que nos de señal por ejemplo un routeador TP-LINK  modelo TL-MR3040 que dentro de sus funciones tiene la capacidad de funcionar con batería.

Para esto se requerirá de:

  • Arduino Uno
  • Ethernet Shield
  • 2 Motores D.C.
  • L298N
  • Cables Dupont para las conexiones.

Lo primero será realizar las conexiones pertinentes para lo cual me he dado a la tarea de hacer un pequeño esquema. Hay que tener en cuenta que en el esquema no esta la Ethernet Shield a lo cual asumo que deben colocarla sobre la placa Arduino Uno antes de hacer sus conexiones.

Arduino Web.fw

Para este proyecto nos apoyaremos de una librería para el control de motores la cual pueden descargar de aquí.

Veamos la primera parte del código:

#include<LEANTEC_ControlMotor.h>
#include<Ethernet.h>
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
byte ip[]={192,168,0,100};
EthernetServer server(80);

ControlMotor control(2,3,7,4,5,6);
int velocidad=0;

char caracter;
void setup() {
 Serial.begin(9600);
 Ethernet.begin(mac,ip);
 server.begin();
 Serial.print("Servidor Iniciado en: ");
 Serial.println(Ethernet.localIP());
 
}

Como podemos observar utilizamos la librería LEANTEC_ControlMotor para el manejo de los motores, ademas debemos utilizar la librería Ethernet para el manejo de los comando de red utilizados por el Ethernet Shield de Arduino.

Primero configuramos la dirección física de la red Ethernet por medio de una direccion MAC, aquí podemos utilizar la dirección que queramos.  Luego configuramos la dirección IP que tendra nuestra Ethernet Shield, asi como el puerto que estará escuchando las peticiones, en este caso asignamos el puerto 80 que es puerto default que manejan los navegadores.

Después asignamos la direcciones que utilizaremos en la arduino y el puente H. Inicializamos lo parámetros de configuración en el Setup.

En el Loop asignaremos algunas conexiones al puerto serie para poder realizar puebras (debugger) y saber si existe alguna falla en sistema. La pantalla del navegador constará de 2 botones uno para aumentar y otro para disminuir la velocidad en 10 puntos porcentuales al dar clic y nos mostrara la velocidad en la que estamos.

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("Nuevo Cliente");
    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
        cadena.concat(c);//Unimos 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("Vel="); //Guardamos la posición de la instancia "Vel=" a la variable 'velocidad'
          if(cadena.substring(posicion)=="Vel=SUBE")//Si a la velocidad 'velocidad' hay "Vel=SUBE"
          {
            velocidad=velocidad+10;
             control.Motor(velocidad,1);
            
          }
          if(cadena.substring(posicion)=="Vel=BAJA")//Si a la velocidad'velocidad' hay "Vel=BAJA"
          {
            velocidad=velocidad-10;
            control.Motor(velocidad,1);
            
          }
 
        //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>");
            client.println("</head>");
            client.println("<body>");
            client.println("<h1 align='center'>El Blog de Mota</h1><h3 align='center'>Motores controlados por Servidor Web con Arduino</h3>");
            //Creamos los botones. Para enviar parametres a través de HTML se utiliza el metodo URL encode. Los parámetros se envian a través del símbolo '?'
            client.println("<div style='text-align:center;'>");
            client.println("<button onClick=location.href='./?Vel=SUBE\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("SUBE");
            client.println("</button>");
            client.println("<button onClick=location.href='./?Vel=BAJA\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("BAJA");
            client.println("</button>");
            client.println("<br /><br />");
            client.println("<b>Velocidad = ");
            client.print(velocidad);
            client.println("</b><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
  }
}

Y hasta aquí si todo sale bien lo único que faltaría sería iniciar un navegador y conectarnos a la misma red en la que se encuentra el Ethernet Shield, por ejemplo si utilizaron el router TP-Link pueden conectarse a esta red y teclear la dirección en el navegador.

WebArduino

Saludos.