4/20/2015

Maestro servo control 2/2

Saludos.

Hoy trato de retomar mi primer mensaje, si aquel del hexápodo bien como os comente las primeras pruebas fueron un desastre entre otras cosas que la fuente de alimentación no me funcionaba con la araña.



Como la placa resultante fue algo más simple os paso a comentar mi experiencia programándola. Para ello emplee el programa “Maestro control Center”, que tiene la particularidad que solo te deja trabar si está conectado a la placa.



 Lo interesante del programa principalmente es que te puede generar secuencias, en Status veremos que servos están activos  y en qué posición.  En Channel settings podemos limitar el rango de los servos, según especificaciones y si queremos emplear una entrada como input u output. En la foto de ejemplo tenemos la entrada 19 es una entrada analógica.




Lo único que tenéis que tener en cuenta es que las entradas analógicas no se aprecian en el status, no varían de valor pero sí que lo hacen físicamente, con los servos no obstantes podréis ver la posición en cada frame de secuencia.
En serial settings podemos configurar la comunicación del módulo mediante el uso del USB o de los pines serial, en nuestro proyecto no era necesario pero para proyectos más ambiciosos seria la forma más sencilla de conectarlo a otro controlador que actuara de maestro, un arduino por ejemplo.





En el apartado de sequence  es donde definiremos la secuencia de movimientos, el proceso es tedioso sino tienes claros los movimientos, para un hexápodo no es nada obvio si queremos que se desplace con fluidez.  En mi caso emplee las secuencias que tenían otros robots semejantes y modifique en función de cada frame. Aconsejo crear cada frame en una secuencia diferente, para poder ir llamándolos en función de lo que necesitemos, el sistema automático te genera mucho código y es algo a tener en cuenta pues contamos con una memoria limitada en nuestro caso 8 KB.




El orden de crear una secuencia es, New sequence, vas a Status pones/activas  los servos en posición y en la secuencia que has creado das a save frame,  en frame properties puedes definir la duración en milisegundos, este tiempo es el que tardara en ejecutar.

Ahora un poco de teoría el script de Maestro mini, funciona con un lenguaje propio empleando el stack de la placa y de una forma curiosa. Por ejemplo si queremos que el servo 0 se situé en la posición 8000 se indicaría de este modo:


código
stack
explicación
Begin
8000  0  servo
repeat
0:8000
1:0
La organización  interna hace que se almacene 8000 en el stack , luego añade 0. Al llamar a la función servo esta mira en la última posición del stack (1) para saber que servo es el 0. Y el siguiente valor es la posición 8000

*Nota: Normalmente cuando hablamos de servos las posiciones se pueden dar en ángulos o en tiempo, para las placas de micro maestro se da el valor de tiempo x4. (los tiempos pueden variar según los servos que se empleen).


0 grados
90 grados
180 grados
800 microsegundos
1500 microsegundos
2000 microsegundos
3200
6000
8000
   

Al generar un script de una secuencia nos da un código tal que así con el nombre de la secuencia en mi caso empleo el nombre frame_x, porque como he dicho antes solo pongo un frame por secuencia.


# frame 0
sub frame_0

  250 6072 6140 6000 6000 6188 6000
  6000 6000 6000 6000 6000 6000
  6000 6000 6000 6000 6000 6000
  all_frames # Frame 0
  return

Donde el orden de lectura es Duración, servo 0, servo 1, servo 2… La subrutina all_frames es la que se encarga de accionar todos los servos.


Subrutina maestra
Subrutinas secuencia
sub all_frames
  17 servo
  16 servo
  15 servo
  14 servo
  13 servo
  12 servo
  11 servo
  10 servo
  9 servo
  8 servo
  7 servo
  6 servo
  5 servo
  4 servo
  3 servo
  2 servo
  1 servo
  0 servo
  delay
  return

# backward
sub backward
  frame_4
  frame_3
  frame_2
  frame_1
  return

# turn left
sub turn_left
  frame_5
  frame_6
  frame_7
  frame_8
  frame_5
  frame_6
  frame_7
  frame_8
  frame_5
  frame_6
  frame_7
  frame_8
  return



De este modo defino las secuencias en el propio código mediante una subrutina que llama a los frames específicos y esta llama a la subrutina de accionamiento. Esta dentro del límite de concatenar subrutinas y para el proyecto en cuestión es más sencillo de interpretar.  Mi hexápodo tenía que hacer una secuencia una y otra vez, como input tiene una LDR que en función se hay luz o no hace la secuencia o no. Por ello no necesitaba de un programa más complejo o el apoyo de otro microcontrolador.

En el caso que quisiéramos controlar el hexápodo desde un móvil o desde un ordenador, podríamos colocarle o bien un módulo bluetooth al micro maestro o lo más sencillo seria conectar a un arduino y que el gestione la comunicación con el exterior.


 Aquí os dejo un test de la secuencia.



 Anakleto