Saturday, March 21, 2015

16DOF Spider Robot Veyron Servo Driver



 Como dije en en anterior post nada se pierde todo se transforma y en esto se a transformado el Robot 17DOF del post anterior ya que dejo de ser para mi un proyecto que funcionara correctamente por las razonas anteriormente explicadas en el post. 


Ahora a tocado el turno de tomar el mismo kit y transformarlo en algo mas y este es el resultado una araña de 4 patas la cual si debo decir que funciona perfectamente, incluso usando los mismo servos del proyecto anterior los MG996R y MG995.

Y como una imagen vale mas que mil pasalabras aquí les dejo
el armado.







Finalmente también hemos realizado el armado de un pequeño control remoto para tener todo de manera mas organizada, usamos una caja cualquiera de electricidad hecha de PVC



Aqui también les dejo el código que tengo desarrollado hasta el momento para que la araña avance, retroceda y gire en su primo eje.







  int UD = 0;  //read from U/D axis of Joystick
  int LR = 0;  //read from L/R axis of Joystick
int a=0;
int b=0;

void setup()
{
  Serial.begin(9600);//Set the baudrate to 115200 A:1  B:1

}
void loop()

  
  UD = analogRead(A0);  //read u/d from stick
  LR = analogRead(A1);  //read l/r from stick
  
/* Serial.print(analogRead(A0));   // reference displays
 Serial.print(" ");
 Serial.print(analogRead(A1)); // reference displays
 Serial.println();
 delay(50);*/
  

  if(UD < 400 && UD >= 0 && LR > 250 && LR < 800)  // send ldown to display if stick is in lower left quadrant
  { 
   
   
 Serial.println("#13 P2000 #14 P1000 T300");
   delay(150);
     Serial.println("#12 P1400 #2 P1250 #3 P1250 T300");
       delay(150);
         Serial.println("#13 P1500 #14 P1500 T300");
           delay(150);
           
           
     Serial.println("#1 P1000 #2 P2000 #3 P1500 T300"); 
   delay(150);
     Serial.println("#0 P2000 T300");
       delay(150);
         Serial.println("#1 P1500 #2 P1500 T300");
            delay(150); 
     
 Serial.println("#0 P1700 #12 P1700 T300");
  delay(150);
  
Serial.println("#10 P1000 #9 P2000 #21 P1750 #20 P1750 T300");
   delay(150);
     Serial.println("#11 P1600 T300");
       delay(150);
         Serial.println("#10 P1500 #9 P1500 T300");
            delay(150);

 Serial.println("#22 P1000 #21 P1000 #20 P1500 T300");
   delay(150);                   
     Serial.println("#23 P1000 T300");
       delay(150);
         Serial.println("#22 P1500 #21 P1500 T300");
            delay(150); 
            
  Serial.println("#23 P1300 #11 P1300 T300");
  delay(150);
     
    
  }
  if(UD > 600 && UD < 1100 && LR < 800 && LR > 200)  
  {
    
   Serial.println("#1 P1000 #2 P2000 T300");
   delay(150);
     Serial.println("#0 P1300 #14 P1750 #15 P1750 T300"); 
       delay(150);
         Serial.println("#1 P1500 #2 P1500 T300");
            delay(150); 
     
   Serial.println("#13 P2000 #14 P1000 #15 P1500 T300"); 
   delay(150);
     Serial.println("#12 P2200 T300");
       delay(150);
         Serial.println("#13 P1500 #14 P1500 T300");
           delay(150);
           
 Serial.println("#0 P1700 #12 P1700 T300");
  delay(150);

 Serial.println("#22 P1000 #21 P1000 T300");
   delay(150);                   
     Serial.println("#23 P1700 #9 P1200 #8 P1250 T300");
       delay(150);
         Serial.println("#22 P1500 #21 P1500 T300");
            delay(150); 
      
     
 Serial.println("#10 P1000 #9 P2000 #8 P1500 T300");
   delay(150);
     Serial.println("#11 P800 T300");
       delay(150);
         Serial.println("#10 P1500 #9 P1500 T300");
            delay(150);
            
  Serial.println("#23 P1300 #11 P1300 T300");
  delay(150);
  
              
  }
  if(LR < 400 && LR >= 0 && UD > 250 && UD < 800)  // send ldown to display if stick is in lower right quadrant
  {
   Serial.println("#10 P1600 T1000");
  delay(1000);
  //Serial.println("#10 P1500 T1000");
  delay(1000);
   Serial.println("#10 P800 T800");
  delay(1000);
   // Serial.print("a");
   //delay(10);  //ldown();
  }
  if(LR > 600 && LR < 1100 && UD > 300 && UD < 800)  // send ldown to display if stick is in upper right quadrant
  {
      Serial.println("#1 P1000 #2 P2000 T300");// Channel 5 will move to 750us within 500ms
   delay(150);
     Serial.println("#0 P2100 T300");// Channel 5 will move to 750us within 500ms
       delay(150);
         Serial.println("#1 P1500 #2 P1500 T300");// Channel 5 will move to 750us within 500ms
            delay(150); 
     
   Serial.println("#13 P2000 #14 P1000 T300");// Channel 5 will move to 750us within 500ms
   delay(150);
     Serial.println("#12 P2200 T300");
       delay(150);
         Serial.println("#13 P1500 #14 P1500 T300");
           delay(150);
           
 Serial.println("#0 P1700 #12 P1700 T300");
  delay(150);

 Serial.println("#22 P1000 #21 P1000 T300");
   delay(150);                   
     Serial.println("#23 P1700 T300");
       delay(150);
         Serial.println("#22 P1500 #21 P1500 T300");
            delay(150); 
      
     
 Serial.println("#10 P1000 #9 P2000 T300");
   delay(150);
     Serial.println("#11 P1800 T300");
       delay(150);
         Serial.println("#10 P1500 #9 P1500 T300");
            delay(150);
            
  Serial.println("#23 P1300 #11 P1300 T300");
  delay(150);
   
  
   
  }  
  if(LR < 600 && LR > 400 && UD > 400 && UD < 600)
  {  a=0;

    Serial.println("#23 P1300 #22 P1500 #21 P1500 #20 P1500 T900"); //pata 1
    delay(250);
    Serial.println("#0 P1700 #1 P1500 #2 P1500 #3 P1500 T900"); //pata 2
    delay(250);
    Serial.println("#11 P1300 #10 P1500 #9 P1500 #8 P1500 T900"); //pata 3
    delay(250);
    Serial.println("#12 P1700 #13 P1500 #14 P1500 #15 P1500 T900"); //pata 4
    delay(250);
  } 
  
  
}



Sunday, March 15, 2015

17DOF Robot Veyron servo driver

 

  Empece a trabajar en este proyecto hace aproximadamente una semana a pesar que ya contaba con todos los componentes electrónicos la falta de tiempo para trabajar en el es algo que llevo a dilatar el mismo. 

Se trata de un robot bípedo 17DOF el cual me causaba mucha ilusión cuando compre el KIT, la que a lo largo de esta semana se ha esfumado, dado que las piezas de electronica mas específicamente los servos recomendados para el proyecto dejan mucho que desear esto por su pobre centro el cual tiene mucho juego, lo cual hace una tarea difícil (mas no imposible) lograr una programación adecuada o al menos cercana a eso. 

Bueno son servos de unos pocos dólares tampoco puedo hablar mal de ellos, por el precio ofrecen un buen rendimiento de entre 9 y 12 kg. solo digo que para este tipo de robot bípedos yo optaría a futuro por unos servos de mas alta gama, mas costosos claro eso si.

Esto me llevo a realizar muchas variaciones en el diseño del robot diferentes a la original y aunque obtuve buenos resultados después de ellas, no me termina de convencer su funcionamiento. Aquí les dejo una foto comparativa de los modelos armados de forma original y con las modificaciones.


Básicamente trate mover algunos servos de su posición original haciendo que las piernas quedaran mas cortas bajando el centro de gravedad del robot y invirtiendo otros para que las piernas quedaran un poco mas juntas, ademas agregue algunos resortes de baja presión para tratar de combatir el efecto que genera el antes comentado problema de sobre juego en el centro de los servos, estos contribuyeron bastante, mejorando un poco el problema.

A pesar de esto continuo pensando en que los servos  al menos los de las piernas deben ser reemplazados por unos de mejor calidad para que el robot pueda moverse de forma correcta. 

Aquí les dejo un video con algunas pruebas de movimientos que fueron realizadas durante su programación. 

Aqui les dejo una lista detallada de las partes usadas:


1) 10 servos MG996R.

2) 7 servos MG995.

3) 6 Extencion de cable de servo 

3) 1 Placa Arduino Uno.

4) 1 Joystick 

5) 1 Par de APC220 V3.0

6) BEC reductor de 12 amp

7) Fuente de poder o Batería 12V

7) Veyron Servo Driver (24 Channel) V1.0

9) Cable micro USB 



La Veyron es una tarjeta muy sencilla se usa como el código abajo lo explica en su pagina web tiene mas detalle del mismo. se trata de enviar el código por SERIAL.PRINTLN a travez del APC220 mediante código ya establecido indicando #(Numero de canal que se va a mover) P(Cantidad de moviendo a ejecutar en un rango entre 500 y 2500) T(La rapidez del movimiento que viene dada por una formula (The initial position is 750us, the finial position is 2250us, the speed is 1000us/s The running time;) todo tanto el modulo Veyron como el arduino y el APC220 debe estar configurado con los mismos Baudios en mi caso 9600 ya que el APC220 viene configurado así de fabrica y no tenia que configurarlos yo, en la tarjeta es simple solo se trata de mover unos interruptores de 1 a 0 para que trabaje en los baudios deseados, ella incluye una tabla dibujada en la misma. 


T=(2250-750)/1000=1.5s

Este es el código que finalmente desarrolle para que el robot caminara, y aunque camina era muy inestable quizás los primero dos paso los realizaba de manera correcta pero luego aunque el código era una secuencia de repetición exacta el robot ya no hacia los pasos de manera correcta.

Creo que finalmente este proyecto se va a convertir en algo mas.....nada se pierde todo se transforma.




int UD = 0;  //read from U/D axis of Joystick
  int LR = 0;  //read from L/R axis of Joystick
int a=0;
int b=0;


void setup()
{
  Serial.begin(9600);//Set the baudrate to 115200 A:1  B:1
}
void loop()
 
  
    UD = analogRead(A0);  //read u/d from stick
  LR = analogRead(A1);  //read l/r from stick
  

  if(UD < 400 && UD >= 0 && LR > 250 && LR < 800)  // send ldown to display if stick is in lower left quadrant
  {
     
    Serial.println("#10 P1600 T1000");// Channel 5 will move to 750us within 500ms
  delay(1000);
   Serial.println("#10 P800 T800");// Channel 5 will move to 750us within 500ms
  delay(1000);
 
  }
  if(UD > 600 && UD < 1100 && LR < 800 && LR > 200)  // send ldown to display if stick is in upper left quadrant
  {  
 
    
    Serial.println("#6 P1050 #9 P1400 #5 P1800 #8 P1650 #7 P1900 #4 P1200 T600"); // pos inicial caminata 
    delay(2000);
    
    
      Serial.println("#11 P1650 T800 #10 P1600 T800");// inclinacion de lado cintura
     delay(500);
    Serial.println("#2 P1540 #3 P1600 T800");         // inclinacion pies DERECHA
     delay(1000);
    Serial.println("#9 P1000 #7 P2300 #5 P1620 T800");// priemr paso hacia adelante PIE IZQUIERDO
     delay(500);
     Serial.println("#10 P1470 T800 #11 P1520 T800");// inclinacion cintura
     delay(500);
    Serial.println("#17 P1700 #18 P1700 T800");
    delay(500);
    Serial.println("#6 P1400 #8 P1300 #4 P1000 T800");// impulso hacia adelante PIE DERECHO 
     delay(500); 
    Serial.println("#3 P1450 #2 P1320 T800");         // inclinacion pies INZQUIERDA
     delay(1000); 
     Serial.println("#6 P1100 #9 P1400 #5 P1800 #8 P1650 #7 P1900 #4 P1650 T900"); // pos inicial caminata 
     delay(500);
      Serial.println("#6 P1600 #8 P1700 #4 P1650 T800");// priemr paso hacia adelante PIE IZQUIERDo
    delay(1000); 
      Serial.println("#8 P2100 #6 P700 #4 P1500 T800");// pirmer paso hacia adelante PIE DERECHO 
     delay(1000); 
     Serial.println("#17 P1700 #18 P1700 T800");
    delay(500);
    Serial.println("#11 P1650 T800 #10 P1580 T800");// inclinacion de lado cintura
     delay(500);
    Serial.println("#9 P1750 #7 P1900 #5 P2000 T800");// priemr paso hacia adelante PIE IZQUIERDO
    delay(1000);
    Serial.println("#2 P1450 #3 P1620 T1000");         // inclinacion pies DERECHA
     delay(500);
      Serial.println("#6 P1100 #8 P1650 #4 P1200 T800");// impulso hacia adelante PIE DERECHO 
     delay(500);
    Serial.println("#9 P1000 #7 P2300 #5 P1620 T800");// priemr paso hacia adelante PIE IZQUIERDO
     delay(1000);
    Serial.println("#17 P1700 #18 P1700 T800");
    delay(500);
      Serial.println("#10 P1450 T800 #11 P1490 T800");// inclinacion cintura
     delay(500);
    Serial.println("#6 P1400 #8 P1300 #4 P1000 T800");// impulso hacia adelante PIE DERECHO 
     delay(500); 
    Serial.println("#3 P1400 #2 P1320 T800");         // inclinacion pies INZQUIERDA
     delay(1000); 

  }
  if(LR < 400 && LR >= 0 && UD > 250 && UD < 800)  // send ldown to display if stick is in lower right quadrant
  {
    Serial.println("#23 P900 T500");
    delay(800);
    Serial.println("#23 P2000 T500");
    delay(800);
    
  }
  if(LR > 600 && LR < 1100 && UD > 300 && UD < 800)  
  {
    Serial.println("#19 P1000 #20 P1200 T800"); 
    delay(500);
  }  
  if(LR < 600 && LR > 400 && UD > 400 && UD < 600)
  {  a=0;
    Serial.println("#2 P1420 #4 P1450 #6 P1500 #8 P1550 #10 P1470 T1000"); 
    delay(500);
    Serial.println("#3 P1490 #5 P1550 #7 P1500 #9 P1500 #11 P1550 T1000");
    delay(500);
    Serial.println("#17 P1500 #18 P1500 #19 P1700 #20 P500 #21 P1500 #22 P1400 #23 P1500 T1500"); 
    delay(250);
    a=0;
    b=0;
    
  } 
  
  
}










Veyron Servo Driver (24-Channel) (SKU:DRI0029)



 Comienzo con este primera entrega con una pieza de electronica de la gente de  DFRobot se trata de una tarjeta controlador para multiples servos, en este caso 24 canales de movilidad independiente fácil de programar pero relativamente nueva en el mercado por lo que no he podido encontrar grandes  reseñas acerca de ella, mas allá de una pocos tester a los cuales según veo se les envío la tarjeta de forma gratuita pero a mi forma de ver no hicieron un gran trabajo en aportar un martial real que ayudara. En su pagina de internet se puede encontrar todo el código necesario para trabajar con la plataforma arduino. 

 Ademas ofrecen de forma gratuita un programa para computadora para controlar en forma de mapa los canales, lo cual veo muy util al menos para empezar a ver su funcionamiento o para programar por completo tu proyecto pero como dije  anteriormente soy fanático de controlar de forma remota por lo que este programa no es para mi ya que funciona solo con el cable atado a la tarjeta. 

Puntos por lo cual elegí esta tarjeta para mi proyecto es que tiene la opción ya integrada para trabajar con APC220 o XBEE lo cual la hace muy versátil. también la puede controlar mediante una placa arduino de forma directa a la tarjeta.

Necesitas un par de descargas y instalaciones en tu PC para poner a funcionar la tarjeta con sus contralores y hacer funcionar el programa gráfico para computadora. ademas en mi caso yo solo la he probado con APC220 ya que el es un poco mas sencillo que trabajar con Xbee y aunque use el programa gráfico fue solo para pruebas menores. 

Mas adelante estaré profundizando un poco mas en ella cuando hable del proyecto en el cual estoy trabajando lo cual ya en practica pienso que ayudara mucho mas que solo estar hablando de la tarjeta controlador. 


Muchas gracias a todos por leer mis post 
Cualquier duda háganmela saber. 










El INICIO




  Permítanme  primero  que  nada preséntame mi nombre es Andres Ciarpaglini me 
considero un apasionado del  DIY  Arduino  y  electronica,  aunque  considero  mis 
conocimientos en electronica algo básicos, Arduino es un herramienta muy versátil 
que  va  a permitir como me permitió a mi ampliar un poco ese conocimiento, claro 
esta  hasta  ciertos  limites  ya  que ademas  no  es  necesario  tener  demasiados 
conocimientos en esa area para trabajar con el. 

Mas alla de conocimientos electrónicos las personas que se adentran dentro del 
mundo  Arduino  necesitaran  una  aunque  sea  pequeña base en programación,
esto  les  ayudara  mucho  si es la primera vez que van a iniciar un proyecto, pero
tampoco es algo 100% necesario veras que en este fabuloso mundo del internet 
podrás  encontrar  miles  de  personas  con  un  código  que  quizás  con algunas 
pequeñas  modificaciones  se  puede  adaptar  a  tu  proyecto  y  esto te dará las 
primeras piezas del rompecabezas para aprender a programar.

Esta es la primera vez que me dedico a armar un blog y soy sincero cuando digo
que  aun  no  estoy seguro si este pueda ayudar a la gente que quiere empezar o 
que necesiten un pequeño empujón para sus proyectos, pero bueno aquí estaremos
intentando aportar un grano de arena.  

Debo  declararme  amante  de  los proyectos a radio control ya que tengo mucha
experiencia  con  ellos,  tuve  durante  muchos  años tiendas de radio control, de  
hobbies  RC  para  adultos, helicópteros,  drones,  Carros,  Aviones. Ya  sea  con 
Xbee, APC220, incluso  módulos  FM  que  son  los mas económicos que pueden 
encontrar  en  el  mercado hacer remoto tu proyecto es una de las mejores cosas 
que puede lograr.