9/20/2016

Tentáculo 2

Saludos,


continuamos en este mes de septiembre que poco tiempo me ha dejado para rolear y mucho para desarrollar e montar. En este publicación continuare con el hilo “El tentáculo que quería reptar”. Si como de un Chthonian  se tratase he hecho dos tentáculos que tenían que participar en una performance, emulando a “creepy worm”, pero de la performance ya hablare cuando tenga el vídeo de la misma.






Como ya más o menos explique el sistema iba a estar controlado con dos motores, cada motor controla de forma inversa dos tendones, cuando uno se estira el otro se encoje. A diferencia de sistemas determinista, como un brazo realizado con servos, con los tentáculos no podemos determinar la posición final pues el sistema tiene juego. Es decir, con la misma posición de motores puede adoptar diferentes formas.


Mecanismo de los motores



Detalle en los motores sin moverse, diferentes posiciones que puede tomar el tentáculo.



Esto lo hace un sistema difícil de controlar y más de simular, pero también resulta interesante, pues quizá no podemos predecir la posición final que tomara, pero si determinar cómo quedara por los movimientos que haya hecho. Ya sé que suena extraño, pero cuando lo controlas llega un momento que eres capaz de llevarlo donde quieres. Ahora bien, lo difícil será hacer que un algoritmo controle eso. Eso se verá en el futuro.




La placa de control que hemos empleado es “homemade”, utilizamos el microcontrolador Teensy 3.2 y los drivers L272M para controlar los motores. Los motores que he empleado son  Micro metal DC con reductora 298:1, son unos motores con muy bajo consuno y un alto par, para el tamaño que tienen, eso sí son muy lentos. El primer test que hice con el tentáculo fue con motores 75:1 y la velocidad de movimientos era considerable.


Planca Teensy 3.2 con Bluetooth, I2c, Motor Driver y RGB control. 

El bus “control switch” era para instalar unos finales de carrera en el tentáculo para evitar que el motor se sobrecargue, que finalmente no he instalado pues no hubieran resultado útiles, dado la manera de moverse del tentáculo. Lo mejor sería un sensor de corriente  para controlar el consumo de los motores y protegerlos de quemarse.

El i2c es para ponerle una IMU en la cabeza del tentáculo que proporciona información sobre la orientación, aceleración y brújula.


El “RGB” iba a emplear leds rgb, pero finalmente emplee tira de leds rgb a 12v que teníamos disponible, El tentáculo se mueve sin problemas con la tensión de alimentación que le proporciona el usb, pero para encender los leds necesitábamos de una fuente externa.


Esquema del circuito


Para controlar el sistema mediante bluetooth definimos la trama de mensaje que íbamos a enviar:


Head
M
M1*
M2*
Time
Tail

Head y Tail son elementos que empleo de control dándoles un valor conocido 0x01
M  Indica que vamos a hablar de los motores 0x6D o 109 en decimal
M1, M2  Determina el estado de los motores que viene a ser: 

            0: parado
            1: sentido horario
            2: sentido anti horario

*Nota: si empleamos motores con una reducción menor podemos jugar con la velocidad de los motores enviando la información en un byte.

            0: parado
            1-127: sentido horario
            128-255: sentido anti horario

D à determina la duración del movimiento:

0: 50ms, 1:100ms, 2:200ms, 3:300ms, 4:400ms, 5:500ms, 6:1s, 7:1.5s, 8:2s, 9:3s

El Color se enviaba en una trama similar

Head
C
R(0..255)
G(0..255)
B(0..255)
Tail

Donde la única diferencia es en la palabra de control, que en este caso es C ,0x43 o 67 en decimal. Y el mensaje de los colores son tres bytes.

En definitiva, la placa que habíamos montado simplemente está montada para controlar el tentáculo, y recibir instrucciones del exterior. Finalmente, quien controlaría el tentáculo sería un sistema que correría en un ordenador, o similar. Para la performance, se optó por realizar un control en Python, un simple control remoto. También se realizó una aplicación para Android con Mit App inventor 2.

Aplicación de Python para conectar serie o bluetooth desde Windows.
  
Para procesar esta información desde el teensy o Arduino yo empleo este tipo de programa

void loop() {
                aux=0;
                n_bytes=0;
while (Serial1.available() > 0) {
                               input[aux] = Serial1.read();
                               //Serial1.print(input[aux], HEX);
                                aux++;
                               n_bytes = aux;
               }
               if ((input[0] == 0x01) && (input[n_bytes - 1] == 0x01)) {//mensaje correcto
                               Serial1.println("ok");
                               switch(input[1]){
                               case 0x6D:
                                              dirM1=int(input[2]);
                                              dirM2=int(input[3]);
                                              timeDelay=int(input[4]);
                                              Motores(dirM1,dirM2,timeDelay);
                                              break;
                               case 0x43:
                                              Cred=int(input[2]);
                                              Cgreen=int(input[3]);
                                              Cblue=int(input[4]);
                                              led(Cred,Cgreen,Cblue);
                                              break;
     
                                }
Clean_input();
} else Serial1.flush();

}


Si empleáis la placa Arduino y usáis la librería SoftwareSerial funciona igual.

Y ahora os dejo uno vídeos de los tentáculos.



Jugando con la aplicación de Python



Previo a la performance, con sus primos Dynamixel, aquí controlados con el móvil.



Anakleto.