Servomotores: El primer paso hacia tu robot(2)  

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:

 
   
Mi primer receptor: TDA7000

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
 
Montajes

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.

 
ON-OFF de un toque

Lazo principal del programa
 

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.

 


 

 
     
     Pagina anterior // Servisystem