lunes, 10 de octubre de 2016

ROBOT BIPEDO - KURIBOT

Kuribot es un robot bípedo que camina gracias a la sincronización de cuatro servos con tecnología Arduino.
El gobierno del robot se realiza mediante una aplicación Android gratuita creada por mí: Bluetooth Control, al final de la entrada está el enlace.





En esta entrada se publican:

1.- La relación de todos los elementos mecánicos y electrónicos.
2.- Los planos del robot para realizar su construcción. El proyecto se ha realizado en madera contrachapada de 0,5 mm.
3.- Las conexiones entre los diferentes elementos
4.- El programa que gobierna el robot

Solo se han utilizado programas libres y gratuitos.
Para el diseño gráfico: FreeCAd
Para el diseño electrónico: Fritzing
Para crear la aplicación Android: App-Inventor del MIT
Para la placa: Arduino 






















1.- Relación de los elementos mecánicos y electrónicos


Cuatro servos (Amazon)





Cuatro adaptadores (Amazon)




Dos soportes para los servos en forma de U (Amazon)








Tuercas y tornillos de 3 y 4 mm. 






Cables de conexión





Una placa Arduino UNO



Un escudo (Protoshield)





Un modulo bluetooth LH-05




2.- Planos del robot






Todo el conjunto lo he realizado con madera contrachapada de 0,5 mm. 


Travesaños superiores:

Sirven para anclar con tornillos la placa Arduino. Sus medidas son 1,5 cm.x 4,5 cm.






Travesaños inferiores: 

Sirven como separación entre el soporte de los servos y el soporte de la electrónica.

Soporte de la electrónica:





Soporte de los servos:




Pies del robot:








3.- Conexiones






4.- Programa

Copia y pega este código en la Ide de Arduino, al final del texto está el archivo comprimido.

/*

KURIBOT
Robot bípedo
@GERMAN ALONSO
Kuritre Game 2016

UTILIZAR LA APP : BLUETOOTH CONTROL

Se utilizan los códigos de control de esta aplicación 
Ver en :  http://webdegerman.blogspot.com.es/2015/12/senales-bluetooth-control.html

BLUETOOTH

Conexion de cables
         MODULO   ARDUINO
Verde     VCC     5V
Azul      GND     GND
Morado    TXD     RX
Gris      RXD     TX

SERVOS

Conexiones Servo 180º 55: 
Marron en el pin GND
Rojo en el pin 5v
Amarillo en el pin de control 

     -----------------

     -    0     0    -
     -               -
 1   -----------------  2
        -         -
        -         -        -         -
      ---         ---
       3           4 
Notas:
La libreria VarSpeedServo asigna a cada servo tres valores: 
1: Giro valores entre 0 y 180. 
2: Velocidad, valores entre 1 y 255 velocidad.  
3: Esperar a completar las instrucciones anteriores, valores de verdadero (true) o falso (false)

*/
//////////SERVOS
#include <VarSpeedServo.h> 

//////////Crear objeto servo para controlar un servo

//////////Se pueden crear un máximo de ocho objetos servo
VarSpeedServo myservo1;                          
VarSpeedServo myservo2;
VarSpeedServo myservo3;
VarSpeedServo myservo4;

/////////Se declaran los pin digitales que utilizará cada servo

const  int servoPin1 = 6 ;                      
const  int servoPin2 = 10 ;           
const  int servoPin3 = 9 ; 
const  int servoPin4 = 11 ; 

//////////COMUNICACION SERIAL

//////////Variable en la que se asignara la señal recibida
int estado;     

//////////Velocidad inicial del movimiento de los servos

int vel=30; 
int pausa=500;

///////Contador, mediante este contador se comprueba la conexión 

int contador=10;

void  setup () {
//////////Parametros del puerto serie
Serial.begin(9600);

  


//////////Se aplica cada objeto servo a un pin   

myservo1. attach (servoPin1);   
myservo2. attach (servoPin2);  
myservo3. attach (servoPin3);
myservo4. attach (servoPin4);


void  loop () {


///////SE ENVIA EL VALOR DE LA VARIABLE A LA APLICACION MOVIL 

///////En la aplicación del móvil se recibirá la variable a modo de control de la comunicación
///////Si la variable va incrementando el valor se puede dar como valida la conexión
///////Se empiza el contador desde el número 10 para evitar interferencias con las ordenes de control
Serial.print("Contador de la conexión:  ");
Serial.println(contador);
contador++;
delay(1000);
  
//////////Recepción y asignación de la señal
if(Serial.available()>0) 
  {                      
  estado = Serial.read(); 
  } 

//////////Definición de tres Velocidades distintas


//////////Velocidad muy lenta

if  (estado=='1')
  {
vel = 30; 
  }
  
//////////Velocidad lenta
if  (estado=='2')
  {
vel = 50; 
  }

//////////Velocidad media

if  (estado=='3')
  {
vel = 100;
  }

//////////Velocidad rápida

if  (estado=='4')
  {
vel = 150; 
  }


/////////////////////////////////MOVIMIENTOS/////////////////////////////   


///////STOP Alineación de todos los servos s 90 grados

if(estado=='c')
    { 
myservo1.write ( 90 , 50 , true ); 
delay (pausa);              
myservo2.write ( 90 , 50 , true );  
delay (pausa);             
myservo3.write ( 90 , 150 , true );   
delay (pausa);          
myservo4.write ( 90 , 150 , true ); 
estado=0;    
     }

//////////CAMINAR AL FRENTE

if(estado=='a')
    { 

myservo4.write ( 135 , vel , false );

myservo3.write ( 135 , vel , true );
myservo1.write ( 55 , vel , false );
myservo2.write ( 55 , vel , true ); 
myservo4.write ( 90 , 150 , false );

myservo3.write ( 45 , vel , false );

myservo4.write ( 45 , vel , true );
myservo2.write ( 90 , vel , false );
myservo1.write ( 90 , vel , true);
myservo3.write ( 90 , 150 , false );
myservo4.write ( 90 , vel , true);    

     }

////////CAMINAR HACIA ATRAS
if(estado=='e')
    { 
//Rutina medio paso derecho
myservo4.write ( 135 , vel , false );
myservo3.write ( 135 , vel , true );
myservo1.write ( 125 , vel , false ); 
myservo2.write ( 125 , vel , true );  
myservo4.write ( 90 , vel , false );
       
myservo3.write ( 45 , vel , true );
myservo4.write ( 45 , vel , true );
myservo1.write ( 90 , vel , false);
myservo2.write ( 90 , vel , true );
myservo3.write ( 90 , vel , false ); 
myservo4.write ( 90 , vel , false );
    }

//////////GIRO SOBRE LA IZQUIERDA

if(estado=='b')
    { 
vel = 50; 
myservo4.write ( 135 , vel , false );
myservo3.write ( 135 , vel , true );
myservo1.write ( 55 , vel , true );
myservo4.write ( 90 , vel , true );
myservo3.write ( 90 , vel , true ); 
myservo1.write ( 90 , vel , true );
vel = 30; 
    }


//////////GIRO SOBRE LA DERECHA

if(estado=='d')
    { 
vel = 50; 
myservo3.write ( 45 , vel , true );
myservo4.write ( 45 , vel , true );
myservo2.write ( 135 , vel , true );
myservo3.write ( 90 , vel , true );
myservo4.write ( 90 , vel , true );
myservo2.write ( 90 , vel , true );
vel = 30; 
    }


///BAILE

if(estado=='h')
    {           
myservo4.write ( 115 , vel , true );
myservo3.write ( 55 , vel , true );
myservo4.write ( 90 , vel , true );
myservo3.write ( 90 , vel , true );

myservo3.write ( 55 , vel , true );

myservo4.write ( 115 , vel , true );
myservo3.write ( 90 , vel , true );
myservo4.write ( 90 , vel , true );
    
    }
    

//////////ZIGZAG

if(estado=='j')
    { 
myservo1.write ( 65 , vel , false ); 
myservo2.write ( 65 , vel , true ); 
myservo1.write ( 115 , vel , false ); 
myservo2.write ( 115 , vel , true ); 
myservo1.write ( 90 , vel , false ); 
myservo2.write ( 90 , vel , true );  

    }

//////////PUNTERAS

if(estado=='l')
    { 
myservo3.write ( 55 , vel , true ); 
myservo4.write ( 125 , vel , true ); 

    } 


//...............FIN VOID LOOP


}



ENLACES Y DESCARGAS


Código Arduino
Archivo comprimido 
(Enlace a Google Drive)





Enlace a la aplicación Bluetooth Control 
(Enlace Google Play)


Descarga directamente en tu 
móvil leyendo este QR
(Enlace Google Play)









¿Te ha gustado este tutorial?
Colabora con nosotros y haz una donación: