“Brazo-robótico” controlado por Internet con Arduino Ethernet Shield | Tutorial paso a paso

Con este prototipo de Arduino/Genuino vamos a controlar un sencillo «brazo robótico«, compuesto por dos servomotores, a través de Internet con el módulo Arduino Ethernet Shield. Diseñaremos una página web en HTML, que nos va a permitir controlar el movimiento de los servomotores a través de la red.






La placa Arduino/Genuino hará de «Servidor de Internet«, y a la vez que nos va a permitir controlar los servomotores a través de un panel en una pagina web de un navegador.

La placa transmite un texto HTML que es interpretado por el navegador de internet. Al actuar sobre los botones de la pagina web transmitimos una orden que hará moverse a los servomotores.

La pagina web mostrará un panel de control con cuatro botones, cada pareja va a controlar el movimiento de un servomotor en cada sentido. También se muestra la posición relativa de cada servomotor, así podemos conocer sus posiciones en cada momento.

Para accede a la pagina web introduciremos en el navegador la dirección IP asignada en el código, en nuestro caso 169.254.172.86

//Declaración de la direcciones MAC e IP. También del puerto 80

  byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
  IPAddress ip(169,254,172,86); //IP
  EthernetServer servidor(80);

Como conectar el Arduino Shield Ethernet a la placa Arduino

El escudo de Ethernet se conecta a una placa Arduino usando largas cabeceras wire-wrap que se extienden a través de él.

El módulo Arduino Shield Ethernet conecta la placa Arduino a Internet rapidamente, con un cable RJ45.

Hay que utilizar la biblioteca de Ethernet para escribir códigos que se conectan a Internet la placa.

Este módulo utiliza los pines digitales 10, 11, 12, y 13 en las placas Arduino/Genuino Uno y los pines 50, 51 y 52 en la Mega. En ambas placas, el pin 10 se utiliza para seleccionar el chip W5100 y el pin 4 para la tarjeta SD. Estos pines no se pueden utilizar para otra entradas o salidas.

Para usar los servomotores vamos a utilizar los pines 3 PWM y 5 PWM de una placa Arduino/Genuino Uno.

Como conectar los servomotores con Arduino/Genuino

Un servomotor, también llamado servo, es un dispositivo similar a un motor de corriente continua que tiene la capacidad de ubicarse en cualquier posición dentro de su rango de operación, y mantenerse estable en dicha posición.

Los servomotores tienen tres cables: VCC, GND y Señal. El cable de alimentación VCCes típicamente rojo, y debe ser conectado al pin 5V de la placa Arduino. El cable de tierra, GND, suele ser negro o marrón y debe estar conectado a un conector de tierra de la placa Arduino. El cable de señal es normalmente de color amarillo, naranja o blanco y debe ser conectado a un pin digital en la placa Arduino. Tenga en cuenta que algunos servos pueden tener un consumo de energia considerable, por lo que si tienes que utilizar más de uno o dos, es recomendable una fuente de alimentación independiente, es decir, no conectados al pin + 5V en la placa Arduino. Asegúrese de conectar los GND del Arduino y de la fuente de alimentación externa juntos.




Los servomotores hacen uso de la modulación por ancho de pulsos (PWM) para controlar la dirección o posición de los motores de corriente continua.

Para controlar los servomotores con Arduino disponemos de la Biblioteca “Servo”, que deberemos incluir en nuestros códigos. Esta biblioteca permite a una placa Arduino controlar servomotores.

Video paso a paso

Componentes y materiales

  • Placa Arduino/Genuino
  • 2 Micro-servomotores
  • Módulo Arduino Shield Ethernet
  • Protoboard
  • Cables de conexión

Esquema y montaje

Lo primero que haremos será colocar el  módulo Arduino Shield Ethernet  sobre la placa Arduino. Y como podemos ver en el esquema, conectamos los servos a +5V, a GND, los pines 3 PWM y 5 PWM respectivamente.

Por último conectamos el módulo al ordenador por medio de un cable RJ45.

Los servos los colocamos uno encima de otro, uno va a generar el movimiento horizontal, y el otro colocado perpendicularmente, va a generar el movimiento vertical.

Después de cargar el código en la placa, abrimos el navegador e introducimos la dirección IP 169.254.172.86

Código Arduino

Este es código completo para nuestro “Brazo robótico“ controlado por Internet con Arduino Ethernet Shield, copia, pega y modifica el código según tus necesidades.

/*  “Brazo-robótico” controlado por Internet con Arduino Ethernet Shield    http://Web-Robotica.com    Este ejemplo es de domonio público. */
 // Incluimos las bibliotecas

#include <SPI.h>      // Incluimos la biblioteca SPI
#include <Ethernet.h> // Incluimos la biblioteca Ethernet
#include <Servo.h>    // Incluimos la biblioteca Servo

  Servo servo_inferior;  // Definimos los servos que vamos a utilizar
  Servo servo_superior;  
  int posicion_servo_inferior; // Estas variables definirán
  int posicion_servo_superior; // las posiciónes de los servos en cada momento
  int incremento_de_angulo = 5;

//Declaración de la direcciones MAC e IP. También del puerto 80

  byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
  IPAddress ip(169,254,172,86); //IP
  EthernetServer servidor(80);

  String readString=String(30);
  String state=String(4);

void setup()
{
  Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
  servidor.begin();

  servo_inferior.attach(3) ; // Difinimos los pines de salida para cada servo
  servo_superior.attach(5); 

}

void loop()
{
  EthernetClient cliente= servidor.available();
 
  if(cliente)
  {
    boolean lineaenblanco=true;
    while(cliente.connected())//Cliente conectado
    {
      if(cliente.available())
      {
        char c=cliente.read();
        if(readString.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString.concat(c); //Almacenar los caracteres en la variable readString
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int SER = readString.indexOf("SER=");
         
          
          if(readString.substring(SER,SER+5)=="SER=I")
          {
              posicion_servo_inferior = posicion_servo_inferior + incremento_de_angulo;
              servo_inferior.write(posicion_servo_inferior);                             
              delay(100); 
              if (posicion_servo_inferior >= 180) {
              posicion_servo_inferior = 180 ;}
       
          } 
          else if (readString.substring(SER,SER+5)=="SER=D")
          {  
            posicion_servo_inferior = posicion_servo_inferior - incremento_de_angulo;
            servo_inferior.write(posicion_servo_inferior);
            delay(100);
            if (posicion_servo_inferior <= 0) {
            posicion_servo_inferior = 0 ;}

       
          }
        
         else if (readString.substring(SER,SER+5)=="SER=S")
          {  
            posicion_servo_superior = posicion_servo_superior + incremento_de_angulo;
            servo_superior.write(posicion_servo_superior);
            delay(100);
            if (posicion_servo_superior >= 180) {
            posicion_servo_superior = 1800 ;}

       
          }
          else if (readString.substring(SER,SER+5)=="SER=B")
          {  
            posicion_servo_superior = posicion_servo_superior - incremento_de_angulo;
            servo_superior.write(posicion_servo_superior);
            delay(100);
            if (posicion_servo_superior <= 0) {
            posicion_servo_superior = 0 ;}

       
          }

          //Cabecera HTTP estándar
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html;charset=utf-8");
          cliente.println();        
          //Página Web en HTML
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>PANEL DE CONTROL BRAZO ROBÓTICO</title>");
          cliente.println("</head>");
          cliente.println("<body width=100% height=100%>");
          cliente.println("<center>");
          cliente.println("<h1>Web-Robótica.com</h1>");
          cliente.println("<h1>PANEL DE CONTROL BRAZO ROBÓTICO</h1>");
          cliente.print("<br><br>");
          cliente.print("Posición Horizontal: ");
          cliente.print(posicion_servo_inferior);         
          cliente.print("<br><br>");
          cliente.println("<input type=submit value=← style=width:200px;height:75px onClick=location.href='./?SER=I\'>");
          cliente.println("<input type=submit value=→ style=width:200px;height:75px onClick=location.href='./?SER=D\'>");
          cliente.print("<br><br>");
           cliente.print("Posición Vertical: ");
          cliente.print(posicion_servo_superior); 
          cliente.print("<br><br>");
          cliente.println("<input type=submit value=↑ style=width:200px;height:75px onClick=location.href='./?SER=S\'>");
          cliente.println("<input type=submit value=↓ style=width:200px;height:75px onClick=location.href='./?SER=B\'>");
          cliente.println("</center>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
          readString="";
        }
      }
    }
  }
}

.

1 comentario en ““Brazo-robótico” controlado por Internet con Arduino Ethernet Shield | Tutorial paso a paso

  1. una pregunta por que se usa if(readString.substring(SER,SER+5)==»SER=I») el (SER,SER+5) que significa esa linea no entiendo me podrias explicar gracias de antemano

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.