El encoder es un dispositivo utilizado para medir las Revoluciones Por Minuto (RPM) y la velocidad de las ruedas de un robot. Estos convierten el movimiento en una señal eléctrica que puede ser leída por algún de dispositivo de control en un sistema de control de movimiento. El codificador envía una señal de respuesta que puede ser utilizada para determinar la posición, contar, velocidad o dirección.
El encoder que hemos utilizado nosotras para este proyecto es el encoder fotoeléctrico HC-020K . Este es un Módulo Encoder o sensor de velocidad B83609, es un dispositivo que permite realizar mediciones de velocidad de un motor, es compatible con microcontroladores PIC, placas de Arduino y otros. El módulo incluye disco Encoder y cables de conexión. Lo elegimos ya que este es ideal para ser empleado en proyectos o prototipos que necesiten medir velocidad.
Tipo: HC-020K Módulo Encoder B83609
Voltaje de funcionamiento: Min. 4.5V y Max. 5.5V DC
Salida: Digital
Resolución: 0.01 mm
Frecuencia de medición: 100 KHz
Resolución del Encoder : 20 líneas
Dimensiones del modulo: 26.3mm x 22.20mm x 13.2mm
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 usará un disco, el cual está dividido en zonas opacas/transparentes o muescas.
Estas muecas 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.
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:
Lo primero que hicimos cuando empezamos a utilizar el encoder es determinar donde colocaríamos cada cable y que color le pondríamos para poder diferenciarlos; el amarillo lo conectaríamos con 5V, el naranja con GND y el verde sería la salida en este caso 6.
Después, para saber que funcionaba lo probamos con una rueda, para ello contamos el número de huecos que tiene el disco del encoder, así cuando lo colocábamos en su sitio y giraba una vuelta completa el número que debía aparecer en la pantalla tenía que coincidir con el número de ranuras contadas. Si coincidía significa que el encoder funciona y el código esta bien realizado.
Nosotras a lo largo de las pruebas tuvimos una serie de problemas, pues en muchos intentos estos números no coincidían, al principio el primer problema fue la sujeción, pues si el encoder se mueve cuando damos la vuelta el sensor lumínico no captaba bien los luz dándonos o más o menos números, este problema lo solucionamos gracias a unir el encoder con un tornillo apretándolo bien para que no se mueva, evitando así este problema. El último fue la fuente de energía, esto pasa cuando conectas demasiadas cosas a un Arduino, el cual tiene poca potencia por lo que no le puede aportar energía. Todo esto se solucionó gracias a la división de los componentes en cuanto a dónde recibían la energía gracias a la utilización de pilas, pero esto lo explicaremos mejor en motores.
En cuanto al montaje la siguiente foto muestra el realizado para este tutorial:
Por último, nosotras quisimos utilizar el encoder con el objetivo de poder mandar al coche el comando de dar un determinado número de vueltas y que este, gracias al encoder, sepa detectar cuántas esta dando debido al sistema de ranuras y a todo el proceso especificado. De esta forma, el Arduino sabrá cuando debe parar para cumplir dicho comando, gracias a la fórmula determinada con anterioridad, la cual incluye cálculos matemáticos.
Nosotras finalmente no tuvimos tiempo de realizar este objetivo, mas dejamos las bases especificadas para poder continuarlo.
Este caso no nos ha pasado a nosotras, pero cuando estuvimos buscando información sobre el encoder si que observamos este problema en varios casos por lo que aquí se especifica de que se trata el problema y sus soluciones:
Pulsos malos: Si conectamos directamente el encoder HC-020K a Arduino, tal y como nos indican sus proveedores. En seguida nos damos cuenta que Arduino lee más pulsos de los que realmente se generan. Arduino nos indica una velocidad de rotación mas alta de la que realmente hay en el motor. Este problema es difícil de solventar. Ya que si conectamos la señal del encoder a un osciloscopio nos muestra unos pulsos como los de la siguiente foto:
Soluciones : Para solucionar este problema tenemos dos opciones, eliminar los rebotes por "Hardware" o por "Software".
Para eliminar los rebotes por "Hardware" tenemos que colocar un condensador que absorba los rebotes iniciales y finales de los pulsos. En el esquema inicial que hay más arriba se muestra como se tiene que conectar el encoder y dicho condensador.
Para eliminar los rebotes por "Software" tenemos que diseñar un "Sketch" de Arduino que no tenga en cuenta los rebotes iniciales y finales y los falsos pulsos. En este tutorial solo se a implementado la solución del condensador.
Al principio de curso se nos ofreció como alternativa utilizar partes del ratón para hacer un encoder. El proceso seguido para la realización de un encoder mediante un ratón es:
Desmontar un ratón para sacar la pequeña parte azul,( la cual podemos observar en la imagen de abajo a la derecha) esta es la parte luminosa del encoder que le mandará las señales a la pieza negra, que funcionara como sensor lumínico
Este sensor al recibir la señal y genera una serie de pulsos que pueden ser leídos e interpretados por un microcontrolador, al igual que el sensor que hemos utilizado
Para poder conectarlo con nuestro Arduino necesitaremos tres cables: uno rojo que se conecta con la masa, el verde que se conecta a la tensión y el naranja que enviaría la señal, todos estos se colocan de la manera que se muestra en la imagen a la derecha
La imagen de la izquierda nos muestra la placa del ratón de la cual sacamos en encoder y gracias a ella aprendimos donde esta cada conexión
Lamentablemente, a pesar de tener en cuenta esta opción e intentar utilizarla nos dimos cuenta de que era necesario una oscuridad total para poder hacer uso del encoder ya que es muy sensible a las ondas luminosas del ambiente. Esto es debido a la naturaleza del encoder. Por lo que tuvimos que descartar completamente esta opción y pasar a comprarlo por internet.