Moviendo un servo en BASIC
Este trabajo es extremadamente sencillo de realizar en este lenguaje.
Bastará con escribir la instrucción SERVO Pin, Posición y el sistema se
posicionará de manera automática con la orientación indicada. Pin
corresponderá a la I/O digital del microcontrolador donde conectaremos
la señal de control requerida por el servomotor, mientras que Posición
corresponderá a una variable del tipo WORD, siendo valores habituales
para esta variable los siguientes: 1500 para el centro, 500 para el
extremo de inicio y 2500 para el extremo de final de carrera del
actuador.
Por ejemplo, un listado muy sencillo sería el siguiente:
Listado de programa orientativo para
manejar un servomotor
Microcontroladores - PIC
No te pierdas este nuevo espacio donde hablamos de ... más Electrónica.
A partir de un simple listado como el anterior, podemos controlar
cámaras de vigilancia, llaves de paso de fluidos, cambios de vías en
ferromodelismo y un sinfín de aplicaciones. Incrementando o
decrementando la variable POS, según el pulsador que actuemos,
lograremos un movimiento hacia un lado o hacia el otro, manteniendo los
límites expresados en el párrafo anterior. Por último, tenemos un tercer
pulsador que nos permite reiniciar rápidamente el movimiento recuperando
la posición central del actuador.
En los videos de demostración veremos en acción la instrucción SERVO. La
primer reforma que se nos viene a la mente es la de acelerar el
movimiento, reemplazando las instrucciones INC y DEC, que varían de a
una unidad, por otras variantes más rápidas como POS = POS + 5, por
citar un ejemplo. Tu sistema de vigilancia comienza aquí
Movilizar dos servomotores nos permitirá lograr una prestación de
movimientos muy importante, ya que sabiendo combinar mecánicamente los
dos dispositivos intervinientes, el recorrido pasará de una trayectoria
lineal a otra 2D (dos dimensiones), con las grandes ventajas que ello
significa.
Detalle del montaje y
movimientos de los dos servomotores utilizados
En la imagen puedes apreciar que el servo inferior (o de azimut) está
fijo y asentado a una base y que moviliza un pequeño trozo de aluminio
en forma de “L”. Este primer servo nos dará la movilidad en el eje
cartesiano “x”, entregándonos un paneo de 180° a izquierda y derecha.
Luego continúa hacia arriba una sección en forma de “U” recta a la que
se asegura el brazo de palanca del segundo servo, el cual, gracias a
esta disposición, nos dará el movimiento sobre el eje cartesiano “y”,
aportando al sistema el ajuste de altura, también conocido como
elevación o tilt. El detalle a destacar en este desarrollo constructivo
lo ofrece este segundo servo que, en lugar de movilizar su brazo de
palanca para accionar los desplazamientos, es el propio cuerpo del servo
el que se moviliza mientras el brazo actuador permanece fijamente
atornillado a la estructura inferior.
Para comprender mejor la complejidad de movimiento que posee el sistema
y el alcance que puede tener dentro de un sistema de cámaras de
vigilancia o de simple observación, te recomendamos ver el siguiente
video donde podrás comprender el sistema móvil empleado y, a su vez,
podrás imaginar y desarrollar tus propios arreglos mecánicos:
Combinando de forma
apropiada los movimientos de los actuadotes de los servos, seguramente
podrás lograr un mejor sistema del que te mostramos o, tal vez, otros
diseños más complejos como pueden ser brazos robóticos, articulaciones
para hacer caminar un androide bípedo o algún hexápodo, que siempre son
tan interesantes de desarrollar por el gran desafío que significa
programar una rutina que logre coordinar el movimiento de patas, las que
seguramente involucrarán a varios servos y ninguna de ellas se deberá
tropezar con la otra para lograr que nuestro “insecto” camine, es decir,
se traslade de un lugar a otro como si fuera un insecto real.
Un hexápodo siempre es
un desafío para cualquier diseñador
Programando servos con BASIC
En el desarrollo de este artículo utilizaremos un tema que ya hemos
visto: el uso de los módulos de radio de UHF que nos permitirán utilizar
el sistema de manera remota o a distancia. Sin duda alguna, esta
posibilidad expande notablemente las aplicaciones potenciales que puede
tener esta rama de la electrónica llamada también “mecatrónica”.
Manejar y operar sistemas electromecánicos a distancia como el que aquí
veremos son el preludio de aplicaciones más complejas, como puede ser la
manipulación de material radioactivo dentro de un reactor nuclear. Es
decir, en todos aquellos lugares donde las manos del ser humano no
puedan acceder, allí estarán los servomecanismos operados de manera
inalámbrica. Obviamente, la complejidad de los mecanismos y la precisión
en los movimientos serán muy superiores a las expuestas aquí, pero no te
quepan dudas que los principios elementales son exactamente los que
verás en este artículo.
Como siempre, en el encabezado del programa definiremos el dispositivo a
utilizar y la frecuencia del reloj o “clock” del sistema. Para este
ejemplo hemos seleccionado el 16F628A a una frecuencia de 20 Mhz, que
son valores aptos para el programa compilador BASIC que utilizamos en la
programación de los microcontroladores (Proton Lite). También en la
parte inicial definiremos las variables que indicarán la posición que
adopte cada servomotor que, para hacerlo bien comprensible, hemos
seleccionado las palabras GIRO y ALTO.
Es decir, la variable GIRO determinará la posición del servo inferior
que brinda el movimiento en el eje “x”, mientras que ALTO lo hará con el
encargado del movimiento de elevación, movilizando la webcam por el eje
de las ordenadas (eje “y”). Una vez comprendido esto, pasamos a definir
los pines del microcontrolador que manejarán los servomotores, es decir,
los pines que llevarán los impulsos de ancho variable a cada servomotor,
los que de manera muy original hemos bautizado como AZIMUT y ALTURA,
para facilitarte la comprensión.
Le indicamos al microcontrolador que trabajaremos en modo digital con la
instrucción ALL_DIGITAL, con la que anulamos el funcionamiento de los
comparadores del 16F628A. Esto es lo mismo que colocar CMCON = 7,
sintaxis a la que muchos están más acostumbrados pero que significa lo
mismo y causa el mismo efecto sobre el microcontrolador.
Encabezado del
programa para manejar dos servomotores
A partir de este punto definimos los valores iniciales de las variables
y las condiciones de los pines de cada puerto del microcontrolador. Como
dijimos anteriormente, un valor de 1500 equivale a un posicionamiento en
el centro del recorrido del actuador del servomotor. De aquí surge que
al conectar el sistema a la fuente de alimentación, ambos actuadores
adoptan la posición central de su recorrido. Con las instrucciones TRIS
definimos los pines que serán entradas y los que serán salidas. Podemos
ver que en ambos puertos tenemos los tres primeros pines como entradas y
el resto como salidas.
Luego viene el lazo principal (MAIN) del programa donde se desarrolla
todo el recorrido y lectura de los pines de entrada. Vemos que el pin 1
del puerto A es el encargado de llevar al sistema a la posición inicial
o de “reset” que le decimos en los videos, colocando en las variables
que definen el ancho del impulso un valor de 1500. Luego chequeamos los
pines que activan los incrementos o decrementos de las variables y, si
observas bien, notarás que ya no varían de a una unidad SINO que lo
hacen de a dos. GIRO = GIRO + 2 y GIRO = GIRO – 2. El valor que exista
en las variables GIRO y ALTO se reflejará en movimiento por parte de los
servomotores, adoptando la posición que elijamos.
Por supuesto que la mayoría de las mentes brillantes que visita NeoTeo
ya estará ideando y pensando la forma de realizar la toma de datos
correspondientes a las variables a partir de los mapas de bits de la
misma imagen que nos devuelva la webcam, para comenzar a desarrollar una
Sentry-Gun … ¡ya los imagino!
Optimizando las velocidades de acción del sistema, puedes transformar
este simple sistema de orientación de cámara webcam en lo que desees.
¿Alguien dijo seguidor de cuerpos celestes para telescopio? ¿O me
pareció escuchar que están preparando un sistema de dirección para
aeromodelos? Cualquier aplicación es posible, sólo hay que soñar. Acoplando el módulo UHF
De la misma forma que cuando ensayamos con sencillos LEDs para
experimentar con módulos de radio UHF, ahora trabajaremos basándonos en
el mismo estilo de programa para el 12F675, pero, en vez de encender
LEDs, cada estado lógico alto que obtengamos en sus salidas ahora nos
servirá para activar transistores NPN, según el siguiente circuito:
Conexión del módulo
receptor UHF simulando pulsadores para el 16F628A
Entonces, cada estado
alto a la salida de un pin del 12F675 provocará un estado bajo en el
Colector del respectivo transistor, lo que equivaldrá a un pulsador
activado respecto a GND para el 16F628A encargado de controlar los
servos. Cuando a la salida del 12F675 existe un estado bajo, el
transistor no conduce a su salida y entonces aparece un estado alto en
su Colector. Todo esto como si se tratara de un pulsador ubicado en cada
pin de entrada del 16F628A.
Naturalmente, en el gráfico hemos dibujado un solo transistor pero tú
deberás colocar la cantidad equivalente a los pulsadores que quieras
emular. El transmisor no varía respecto al artículo anterior por lo que
no merece mención alguna. Por último, recuerda alimentar al módulo
receptor y al 12F675 con los mismos 5 Volts que utilizas para el
16F628A. Recuerda también que los motores de los servomecanismos generan
mucho ruido eléctrico que puede provocar funcionamientos inestables en
el sistema. Trata de filtrar muy bien la alimentación en el receptor y
en los PIC de esta sección con capacitores cerámicos de 100 nanofaradios
(100 nF) ubicados lo más próximo posible a los microcontroladores. Un
par de capacitores electrolíticos de 100uF repartidos en el circuito
también serán bienvenidos.
¿Quieres verlo en acción con la webcam? Aquí lo tienes bien detallado.
Sería muy interesante y
enriquecedor para nosotros saber qué aplicaciones se te ocurren a partir
de un sistema de estas características. Deja volar tu imaginación y
compártela con nosotros. Tal vez nos entusiasmemos y te ayudemos a
desarrollarla. ¿Te gustaría?
Importante: Si lo que encuentras
aquí te resulta útil, ayúdanos a mantener
este sitio. Cualquier donación es bienvenida. Tu apoyo nos
permitirá acceder a nuevos materiales y a montajes más
interesantes y útiles. Gracias por ayudarnos a hacer
Servisystem cada día mejor. Tu ayuda será muy importante
para nosotros. Gracias.