Como hacer un encoder óptico usando partes de un mouse mecánico

Como hacer un encoder óptico usando partes de un viejo mouseEn proyectos de robótica, mecatrónica, o cualquier otro que requiera medir movilidad o cambios mecánicos, se hace necesario adicionar algún tipo de sensor que pueda contabilizar la cantidad de movimiento y el sentido del mismo. Dependiendo del tipo de desplazamiento a medir, estos sensores pueden ser lineales o rotatorios. Para el caso que nos ocupa, esta la necesidad de contabilizar el movimiento de un robot con ruedas, de tipo rover. Si se desea poder aplicar algún algoritmo de utilidad a dicho robot que permita determinar su posición y desplazamiento relativo, es imprescindible que exista alguna manera de medir el movimiento de las ruedas, contabilizar la distancia que recorre y el sentido de giro de estas.
Soluciones comerciales a este problema las hay de sobra, pero a veces existen limitaciones en tiempo o dinero para adquirir una solución de estas. Así que nos queda la otra alternativa, usar lo que tenemos a mano y hacer algo de trabajo de diseño y ensamblado.  En este aspecto, la solución pasa por reciclar piezas y partes de otros equipos. Fabricar un encoder óptico rotatorio no es tan difícil usando las piezas recuperadas  ¿Quién no tiene en su casa, olvidado en algún lado, un viejo mouse mecánico de PC, dañado o inutilizado?

Un encoder es un sensor o transductor rotativo que transforma el movimiento angular en una serie de impulsos digitales. Estos impulsos generados pueden ser utilizados para controlar los desplazamientos de tipo angular o de tipo lineal. Las aplicaciones principales de estos transductores están en las herramientas, sistemas de medición y control y en robótica.
En nuestro caso, trabajaremos con un encoder óptico incremental.  Este tipo de sensor utiliza un elemento lineal o un disco liviano, que va solidario al eje rotativo de la pieza que se desea medir su posición. Para el caso de robot rover, se usara un disco, el cual está dividido en zonas opacas/transparentes o muescas.

Disco para encoder óptico

Estas zonas actúan como un obturador de cámara, las cuales harán la función de permitir o denegar el paso de la luz en forma alternada. Estos cambios serán detectados por un sensor lumínico (generalmente un fotodiodo o fototransistor), que en junto con la electrónica necesaria generara un grupo de pulsos que luego pueden ser leídos e interpretados por un microcontrolador.

Rueda con muescas de un mouse mecanico

Los mouses mecánicos poseen en interior un par de ruedas dentadas y su correspondiente grupo de sensores ópticos.

Una de los encoder de cuadratura de un mouse mecanico

Esquema de operacion  de un encoder optico mecanico

El tándem LED/Fototransistor forman en su conjunto un codificador de cuadratura, en donde el receptor óptico está conformado por dos fototransistores,  posicionados estos en forma vertical con un desplazamiento de ¼ de ranura el uno del otro, generando de esta manera dos señales de pulsos digitales, desfasadas en 90º o en cuadratura.

Secuencia de pulsos de cuadratura

Cada fototransistor genera una señal de salida, comúnmente denominadas A y B. Mediante estas es posible suministrar al microcontrolador información suficiente para determinar la posición, velocidad y dirección de rotación del eje. El convenio general es que, si la señal A adelanta a la señal B, el eje está rotando en sentido horario. En cambio, si B adelanta a A, el sentido será anti horario. La resolución y precisión de la medida de giro estará en función del número de ranuras o muescas que posea el disco codificado, aunque esto último dependerá mucho de la configuración física del sensor óptico. Matemáticamente hablando:

Ecuacion para el calculo de ranuras del disco encoder

la resolución del sensor N está determinada por el diámetro D del disco y la anchura X de la ranura o muesca codificada. Las piezas a extraer del mouse son: las ruedas ranuradas, los leds IR y los fototransistores


Partes recuperadas de un mouse mecanico

Para el montaje en el eje giratorio, en este caso, en una caja reductora de velocidad, es necesario hacer algo de trabajo con la rueda. Si bien estaba la opción de crear una nueva con pocas muescas, preferí usar la que poseía el ratón, dado que proporciona una buena resolución de pulsos al giro de la rueda.

Partes del mouse listas para usar

Adaptando un poco el eje original de la rueda, incorporarlo en el eje de la caja reductora fue relativamente fácil

Adaptacion del disco encoder al eje rotatorio de la caja reductora del motor

En donde hay que hacer algo más de trabajo es en crear la estructura asociada a la caja reductora para que se fije mecánicamente a esta, portando el LED IR y el lector de fototransistores

Led IR y fototransistor instalados en tarjeta de circuito impreso perforada

Para ello lo más fácil es usar partes de circuito impreso perforado, un poco de alambre y mucha paciencia. El resultado final no está nada mal y se adapta muy bien a la caja reductora

Caja reductora con sensor encoder instalado (1)

Caja reductora con sensor encoder instalado (2)

Caja reductora con sensor encoder instalado (3)

El siguiente paso es diseñar la electrónica necesaria para acondicionar los pulsos generados por los fototransistores a niveles TTL requeridos por el microcontrolador. Hay muchos diseños, muy buenos, basados en el uso de inversores Schmitt-Trigger

Acondicionador de pulsos usando inversores Schmitt-Trigger

En mi caso, preferí hace un diseño más básico, usando transistores, ya que por requisitos específicos me permitía un mejor control de los niveles de tensión generados en las lecturas de pulsos por los fototransistores.

Sensor encoder optico sencillo

Este esquema es la versión simple, para un solo LED IR y solo un fototransistor, el cual es suficiente para solo detectar pulsos por movimiento. Si se desea también detectar el sentido de giro, es necesario usar el segundo fototransistor

Sensor encoder optico por cuadratura

Este sería el circuito completo para el detector de cuadratura. En el caso del robot rover, al tener cuatro ruedas, lo correcto sería que cada una tenga un encoder, pero por cuestiones de economía, solo se incorporan dos. La placa del circuito con el montaje final para dos encoders queda así

Montaje final de la placa para el sensor optico de cuadratura

Para hacer las pruebas de funcionamiento, use una placa Arduino Deumilanove. En la pagina de proyectos de Arduino está un buen ejemplo de código para un encoder mecánico.  Haciendo algunas modificaciones al código, la actualización del contador se hace mediante interrupciones. En los pines 2 y 3 se conectan las salidas, los puntos TP1 y TP2. El LED IR se alimenta directamente de la fuente regulada de 5V de la placa arduino.

Probando el circuito del sensor optico de cuadratura con la placa arduino

El codigo del programa a cargar en la placa Arduino:

int encoderPinA = 2;
int encoderPinB = 3;
volatile int encoderPos = 0;
volatile int encoderPinLast = LOW;
volatile int n = LOW;
volatile int m = LOW;
int valNew = 0;
int valOld = 0;

void setup()
{
pinMode (encoderPinA,INPUT);
pinMode (encoderPinB,INPUT);
Serial.begin (9600);
attachInterrupt(0, CountA, CHANGE);
attachInterrupt(1, CountB, CHANGE);
}

void loop()
{
encoderPinLast = n;
valNew = encoderPos;
if ((valNew != valOld)) {
Serial.print(" -> ");
Serial.println (encoderPos, DEC);
valOld = valNew;
}

}

void CountA()
{
n = digitalRead(encoderPinA);
if ((encoderPinLast == LOW) && (n == HIGH)) {
if (m == LOW) {
encoderPos--;
}
else {
encoderPos++;
}
}
}

void CountB()
{
m = digitalRead(encoderPinB);
}

Enlaces:
http://www.eehomepage.com/report.php?report=20080225
http://thedenneys.org/pub/robot/encoders/
http://zumbrovalley.net/readpost.php?artid=1

Tambien le puede interesar...

8 comentarios

  1. Mamma mia! Eres un genio! Reconozco que soy muy negado para estos temas pero tal y como lo explicas y con el detallado paso a paso se hace superinteresante, qué pena no haber dado con el blog antes!! Sigue así máquina!!

  2. Estoy en una situacion muy parecida a la tuya pero me gustaria implementar el primer circuito q mostras diseñado, podrias explicarme mas en detalle como se conectan las 3 patas del receptor?? cual es colector base y emisor? de donde sale la salida A? desde ya muchas gracias!

  3. Si usas un receptor recuperado de un raton de pc, el pin central es colector comun, siendo los otros dos los emisores. Coloca una resistencia de 10k a cada emisor hacia Vcc, y conecta la entrada del inversor del 74LS14 en el punto de union resistencia-colector.

  4. Pingback: BlogESfera.com
  5. Pingback: Bitacoras.com