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.
No hay comentarios:
Publicar un comentario