Servos

Los servos son un tipo de actuadores que podemos conectar en las salidas de la controladora  y que trabajan de manera especial. Un servo es un motor con un sistema de desmultiplicación muy potente (tiene mucha fuerza) y con capacidad para medir su posición. En condiciones normales  no puede dar ni siquiera un giro completo, pero tiene la ventaja de que tiene mucha fuerza y de que podemos controlar la posición  (ángulo de giro) de manera bastante precisa.


Conexiones


El servo tiene tres cables, uno rojo que se conecta a positivo, uno negro que se conecta a negativo y uno blanco que se conecta a  una salida de la controladora a través de una resistencia de 330ohmios. Esta salida no debe estar invertida. Debe ser una salida que con la instrucción high nos de 5 voltios en la misma. Por tanto, en la placa de alta potencia, la que más usamos, nos sirven las salidas 7, 6, 5 y 4. No nos sirven las salidas 0, 1, 2 ni 3 y a que estás están invertidas. En ellas con high lo que hacemos es conectar al polo negativo. Recordemos que un actuador que se conecte a ellas, debe conectarse por el otro lado al polo positivo.


Control

El control del servo se hace mediante la instrucción servo que tiene como argumentos el  número de salida en la que está conectado y un número que va desde el 75 al 225 para indicar la posición a la que queremos llevarlo. 75 se refiere a un extremo, 225 al otro y 150, por ejemplo, sería la posición media.


Ejemplo:

servo 5, 75   ;colocariamos el servo conectado en la salida 5, en una de sus posiciones extremas
wait 1   ; esperamos un segundo
servo 5, 150  ; el servo se mueve hasta su posición media.
wait 1    ; esperamos un segundo
servo 5, 225   ; el servo se mueve hasta el otro extremo.


Control fino de un servo usando un potenciómetro

Es muy interesante poder controlar la posición de un servo moviendo un potenciómetro. El potenciómetro debe conectarse por un lado a positivo, por otro a negativo, y el cursor debe conectarse a una entrada analógica a través de una resistencia de 330ohmios, por ejemplo (pueden ser otros valores, pero debe ser mayor de 100ohmios y lo más diferente posible al valor de la resistencia total del potenciómetro).

Se puede medir  el valor de esa entrada analógica utilizando una instrucción debug:

inicio:
readadc 1,b1 ; leemos el valor analógico de la entrada 1 (donde habremos conectado el cursor del potenciómetro) y lo metemos en la variable b1
debug b1 ; mostramos en la pantalla el valor almacenado en b1
pause 10  ; esperamos un poco para no atosigar a la máquina
goto inicio  ; volvemos al principio para que  el programa se ejecute contínuamente

Veremos que, dependiendo de la posición del potenciómetro, su valor puede oscilar entre 0 y 255. Como para el control del servo no se deben usar valores menores de 75 ni mayores de 225, combiene hacer un pequeño cálculo:

b1=b1*150/255 +75

Si añadimos la insrtrución al programa antes del debug conseguiremos que el valor de b1 varie entre 75 y 225:

inicio:readadc 1,b1 ; leemos el valor analógico de la entrada 1 (donde habremos conectado el cursor del potenciómetro) y lo metemos en la variable b1
b1=b1*150/255 +75
debug b1 ; mostramos en la pantalla el valor almacenado en b1
pause 10  ; esperamos un poco para no atosigar a la máquina
goto inicio  ; volvemos al principio para que  el programa se ejecute contínuamente

El programa completo para controlar un servo con un potenciómetro sería:

inicio:readadc 1,b1 ; leemos el valor analógico de la entrada 1 (donde habremos conectado el cursor del potenciómetro) y lo metemos en la variable b1
b1=b1*150/255 +75
servo 5, b1    ; Ponemos el servo conecdtado a la salida 5 en la posición indicada por el potenciómetro
pause 10  ; esperamos un poco para no atosigar a la máquina
goto inicio  ; volvemos al principio para que  el programa se ejecute contínuamente

Si quisieramos  que el movimiento del servo no cogiera todo su rango, sino sólo una parte, habría que ajustar la instrucción b1=b1*150/255 +75