UN SENSOR DE ROTACION


Construir un sensor de rotación para LEGO Mindstorm NXT


down-verde-flecha

INTRODUCCION


Como su nombre indica, un sensor de rotación nos determinará la velocidad de un giro, habitualmente de un eje. Si complicamos su construcción (y programación) podemos además determinar el sentido del giro. Ambas cosas son especialmente útiles para controlar motores Power Functions (PF) con tu NXT.






Un artilugio en la industria que realiza esta tarea se llama "encoder". Hay mucha información al respecto en internet. Su funcionamiento es complejo, aunque el principio básico de funcionamiento es sencillo de entender.


Existen 2 tipos básicos de encoder o sensores de giro: absolutos e incrementales. Los que explicaremos aquí son de tipo incremental, como los de los motores del NXT.


En pocas palabras, este sensor se basa en leer un disco codificado en colores blanco y negro con un sensor de luz IR montado en barrera, como el de la imagen de arriba del todo, el logo.


MATERIAL


Un sensor de corte TCST1103 con salida transistor.

3 resistencias: 220 ohm, 15K y 10K.

Los cables, board, etc habituales.

Un board para pinchar los componentes.

Un eje Technic

Discos codificados según cada diseño concreto.


LOS DISCOS CODIFICADOS


Para construir este sensor, usaremos unos discos codificados. Puedes crearlos tú mism@, copiarlos de esta página con un pantallazo o usar alguno de los programas que existen por la red. Te pongo un par de enlaces.


El primero sería este. Hay que descargar un pequeño programa y es el que yo he usado, ya que te permite crear tus propios códigos a medida. Además, en la página del Codewheel Generator encontrarás amplia información sobre los encoders y el programa para descargar.


El segundo enlace no necesita ninguna descarga. Es el Optical Encoder y simplemente vas modificando los datos en pantalla y la página genera el disco.


La impresión sobre un folio no es suficientemente gruesa para activar o desactivar la detección del sensor. Es necesario imprimir dos imagenes idéntcas del disco, superponerlas y pegarlas para que sea más opaco.


Una opción más estética es crear una imagen especular del disco y pegarla por detrás. Así, la cara de detrás no se quedará en blanco. Para eso, simplemente pegas la imagen en un programa de dibujo tipo Paint y lo giras verticalmente. Esa imagen la podrás superponer por la parte posterior de la primera.


Encoder para NXT

Incluso tienes la opción de usar como disco codificado una rueda original de LEGO:


Encoder para NXT

A uno y otro lado podrías poner un LDR y un LED. El funcionamiento sería el mismo. Lo único es que el LDR no tiene una respuesta tan rápida como este sensor, y no se qué tal iría, pero el principio de funcionamiento es el mismo.


VELOCIDAD DE GIRO DEL EJE


Lo mejor para entenderlo es un ejemplo. Si imprimes la siguiente imagen:


Encoder para NXT

Pinchas por su centro en un eje como en la foto superior y conectas el eje a un motor, lo pones en marcha y le pones encima un sensor de luz: ¿qué pasará?. El sensor de luz leerá sucesivamente blanco y negro. En valores "lógicos", leerá ceros y unos. Contando el número de cambios, sabremos la velocidad de giro. Concretamente con esta rueda, cada 8 cambios de blanco a negro, tendremos que el eje (y el disco) habrá dado 1 vuelta.


Este tipo de sensor de giro se llama "encoder incremental" ya que según va dando vueltas, va aumentando el contador de las marcas de forma progresiva. Si paras el programa, el contador se queda a cero y pierde la información de cuánto había avanzado. Los motores del Mindstorms NXT llevan incorporados sensores de este tipo: el Built-in rotation sensor.


Realmente, no sería necesario imprimir toda la rueda anterior. Una pequeña franja justo por donde lee el sensor, sería suficiente. La siguiente es la misma rueda pero con 16 rayas negras.


Encoder para NXT

Para poder hacer pruebas y programar el sensor de rotación, usaré 2 ayudas. La primera es el motor del NXT en lugar de un motor de PF. Esto es porque al motor del NXT le puedo decir las vueltas que quiero que gire y comprobar si el sensor ha leido bien. La segunda ayuda es usar el siguiente disco para poder contar visualmente las vueltas sin volverme (más) loco:


Encoder para NXT

POSICION


Cuantas más marcas pongas en el diseño del disco, más precisión tendrá. Con nuestro último ejemplo de 16 marcas, 8 marcas quieren decir "girar el eje 180º" y así puedes parar el eje en una posición determinada. Sería el equivalente de los "Degrees" del motor del NXT pero aplicado a un motor PF. En realidad, aplicado a cualquier eje.


ESQUEMA


El sensor que usaremos para leer el disco es el que figura arriba del todo, en la cabecera. Es un sensor por IR, que monta un emisor y un receptor enfrentados en barrera. Si te fijas, verás impreso en el sensor unos símbolos para identificar cada pin: +, E y D. En el esquema siguiente se ven esos pines y sus conexions a los cables del NXT.


Encoder para NXT

MONTAJE


Una vez has imprimido los 2 discos idénticos, los has pegado y los has atravesado con un eje, ya podemos hacer el montaje. Como habrás visto, el sensor tiene 4 patas. Si lo montas tal cual en el board, comunicarás directamente los pines del emisor y los del receptor.


Para montarlo adecuadamente, es necesario girarlo un poco de forma que los 2 pines positivos queden pinchados en la misma columna, y por tanto unidos según el esquema anterior.


Encoder para NXT

El resto de componentes más el motor NXT para las pruebas montado quedaría más o menos como sigue. El disco en la ranura del sensor y la placa fijada lo mejor posible con algunas piezas para evitar movimientos. Como ves, no es muy complejo. Los cables amarillo y azul no sirven para nada y están pinchados por separado.


Aquí se ve el montaje con el motor del NXT para las pruebas en lugar del motor PF.


Encoder para NXT

En detalle:


Encoder para NXT

Aunque para el montaje final y el video he usado el motor PF, que permite modificar la velocidad con el mando de IR. La verdad, cuando le das a velocidad máxima parece mentira que pueda contar las marcas... y lo hace perfectamente.


En la foto se aprecia que no hay conexión entre el motor PF y el NXT, son circuitos diferenciados. Y de esta forma el NXT leerá la velocidad de un eje "ajeno" a él, incluso a la velocidad que se ve en el video.


Encoder para NXT

PROGRAMA


Sin duda este programa es el que más quebraderos de cabeza me ha dado. Cuenta el número de marcas y, dividiendo por 16, el número de vueltas que ha dado. Lo que no detecta es el sentido de giro. Para eso, tendremos que programar el motor adelante o atrás. Habitualmente por tanto no hará falta su detección, aunque hablamos de ello más adelante.


Pulsa sobre el icono para descargar el programa. El disco debe tener 16 marcas negras. Si no, simplemente adapta el final del programa (el último bucle) a tu propio disco. El sensor no deja de ser un sensor de luz. Si tienes problemas con el funcionamiento (en la detección), puedes modificar ligeramente los valores de los bloques de comparación.


Descargar Programa Encoder para NXT

SENTIDO DEL GIRO: 2 SENSORES


Para saber el sentido de giro se añade una segunda corona de marcas un poco desfasadas con respecto a la corona que hemos dibujado. También se añade un segundo sensor como el de antes. Por tanto, será necesario usar un segundo puerto del NXT o abordar el tema con los circuitos digitales, concretamente el PCF8591. Cada sensor leerá una corona de marcas (¡qué mareo!).


Encoder para NXT

Fijate que las marcas negras no están alineadas. La marca negra de la corona interior está justo en el centro de la marca negra que tienen encima.


Hay muchos diseños posibles. Para explicarnos, dibujaré una línea roja sobre el disco desde el centro hacia un lado a modo de "meta" y sobre esa línea pondremos los dos sensores alineados.


En esas posiciones hacemos que los sensores vayan midiendo. Los sensores leen blanco o negro y miden a la vez. Un sensor (el 1) lee la corona de fuera y el otro (el 2) la de dentro. Imagina ahora que la rueda gira en el sentido de las agujas del reloj.


Encoder para NXT

¿Quién llega antes a la meta (linea roja), la marca negra de la corona externa o la interna? Y si ahora haces que gire en sentido contrario a las agujas del reloj, ¿qué marca negra llega antes a la meta?.


Así es como se determina el sentido de giro. Una opción alternativa a esta que puede facilitar un montaje casero sería separar ambas coronas en 2 discos. Cada disco con solo una corona. Y que cada sensor leyera uno de los discos.


Encoder para NXT

Con esta opción, podríamos contar las vueltas, determinar la posición y el sentido de giro.


SENTIDO DEL GIRO: 1 SENSOR


Es lógico preguntarse una vez llegados a este punto si es posible determinar el sentido del giro con solo un sensor. Y se me ocurrió una solución, pero a costa (casi siempre) de algo. Con esta opción, se puede determinar el sentido del giro y contar el número de revoluciones dadas por el motor, pero perderemos la información sobre la posición, ya que 3 rayas no dan para ello.


El disco que he usado para esta opción es el siguiente, incluyendo su imagen especular para pegarla por la parte posterior:


Encoder para NXT

Este disco surge de eliminar sectores negros en el disco con 8 marcas negras hasta dejarlo como se ve en la imagen.


La programación (que no he conseguido realizar de forma satisfactoria de momento) nos indicará si el motor avanza o retrocede. Nos avisará bien por pantalla bien mediante una salida lógica Si/No.


Mis intentos de programación van en la línea siguiente: el sensor nos da una señal (pongamos un 1) cuando está sobre el negro y un 0 cuando está sobre el blanco.


El tiempo que el sensor da un 1 es el mismo cada vez, ya que las marcas negras tienen el mismo "grosor". Sin embargo, el tiempo que el sensor permanece aportando un 0 es distinto en cada franja blanca. Es decir, el sensor permanece tiempos dstintos en cada una de las franjas blancas.


Por poner un ejemplo. El sensor tarda 100 ms (valor imaginario) en cruzar la banda blanca más estrecha. 200 ms en cruzar la intermedia y 500 ms en la más ancha. Estas proporciones en los tiempos se mantienen independientemente de la velocidad del motor, ya que son proporcionales a lo ancha que sea la franja blanca.


Cuando gira en sentido horario, los tiempos serán 100, 200, 500, 100, 200, 500, 100, etc. Y cuando gira al revés, los tiempos serán 100, 500, 200, 100, 500, 200, 100, etc. Y de ahí podremos determinar el sentido de giro, ya que la secuencia cambia.


Con el NXT-g se me complica tanto que aun no lo he conseguido. Así que si lo sacas, ya sabes que puedes acudir al foro.


OTROS USOS


Un uso alternativo de este sensor sería el de detección de grosores de papel. Ajustado convenientemente, este sensor puede determinar el grosor de una hoja. O dicho de otra forma, puede determinar si hay 1 o 2 hojas.


Como complemento de uso a este sensor, tienes también un proyecto completo (espero que interesante) para usarlo como Tacómetro y Velocímetro. Incluye allí un video adicional para que veas su funcionamiento y el programa correspondiente para su uso. Con este proyecto podrás construir un panel de control completo, como el de un coche real, de indicadores.


Y como final, otra idea alterntiva para su construcción: un anemómetro. Construyes uno y usas el encoder para contar las revoluciones y de ahí, la velocidad del viento. Lo que no se me ocurre es cómo calibrarlo...


up-verde-flecha
Simulador RFID
Un sensor de presión neumatico para NXT
.