BLOQUE

"ROTATION SENSOR"

Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT


down-amarillo-flecha

¿QUÉ ES? ¿DÓNDE ESTÁ?


Es un sensor de rotación incorporado en el interior de los servomotores del NXT con el que podremos medir exactamente la posición del motor, las vueltas (o grados) que ha girado. Es decir, es un encoder, que ya construimos y explicamos en su momento. La diferencia es que este ya está alojado en su interior.


Por la red lo podrás encontrar como "Built-in rotation sensor", es decir, Sensor de Rotación incorporado. En la imagen puedes ver dónde se encuentra. Es una pena tener un sensor y no usarlo ¿no?.


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

¿PARA QUÉ SIRVE?


Puedes decirle a un motor "mueve 30 grados", pero ¿dónde ha acabado realmente? Con este sensor incorporado podrás medirlo con exactitud. Es decir, lo que te aporta este sensor es precisión. ¿porqué? Primera porque estás midiendo. Y segunda porque si el robot realiza tareas repetitivas (como el reloj un poco más abajo) no acumula los errores enviados a los motores, y esta es su gran ventaja.


Por decirlo de otra forma, con los bloques "motor" o "move" mandas la orden:


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

y con el sensor de rotación incorporado mides el desplazamiento real. Por tanto, es el sensor adecuado para medir distancias o desplazamientos recorridos por el motor o por el robot. Puedes seleccionar grados o rotaciones del motor para medir esas distancias. Lo normal es que necesites también el perímetro de la rueda.


RESETEAR


Este icono tiene 2 modos fundamentales de configuración: Reset y Read. Cuando añadas un icono "Reset" al programa, la posición en la que esté en ese momento el motor será considerado como "posición inicial" o "posición cero". Y a partir de ese punto contará los grados.


Es muy recomendable resetear cuando el motor cuando este vuelva a alguna posición fija inicial, como en el ejemplo de este reloj que hicimos en el teclado numérico, en la sección digital y que incluía el siguiente video. Aquí, marcamos en el teclado la hora y el motor la señala. Cada vez que vuelve a las 00.00h, hace un reset.


De esta forma, eliminamos los errores que se puedan acumular tras cada ciclo en la posición de los motores debidos a movimientos repetitivos. Para desplazar unos grados un motor una sola vez o si no necesitamos precisión, este icono no es demasiado útil. Un buen ejemplo de su uso podría estar en la programación de este reloj (dejando a parte la construcción del teclado):





También sería recomendable resetear cuando un robot/coche regrese a una posición fija de inicio. Lo mismo, así se eliminan los errores acumulados en la detección de la posición medida.


UN EJEMPLO SENCILLO


Construye el siguiente sencillo artefacto:


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

Y ahora el siguiente proyecto. El primer icono está configurado en "Reset" para poner a cero el medidor. El segundo está en "Read" para poder visualizar la medida y ahora simplemente mueve a mano el motor. Verás en pantalla los grados que se ha desplazado, valor positivo en un sentido de giro del motor y negativo en el otro.


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

Y ahora, un pequeño "bug" que he encontrado. Si nos centramos en la parte de dentro del bucle y la sustituyes por un "My Block", el resultado cambia, al menos en mi NXT:


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

Los valores que aparecen en pantalla del NXT son positivos en un sentido de giro del motor o decrecientes en el otro, enpezando por el número 65535. Es decir, desaparecen los valores negativos en pantalla del NXT. Si solo vas a contar "hacia adelante" (en un sentido de giro), no hay problema. Pero si tienes que contar en ambos, esto lo complica todo. Tenlo en cuenta a la hora de programar.


Otra cosa que puede que te sirva es el habitual "display" del sensor de rotación y el reset en la pantalla del PC:


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

Para que este "display" en pantalla del PC funcione no es necesario que el programa esté funcionando. Lo que si es necesario es tener el icono señalado y el cable USB conectado. El "reset" pone a cero el encoder.


OTROS PROGRAMAS MAS UTILES


En lugar de mover el motor a mano, lo lógico es que lo mueva el NXT. Usa el "artefacto" anterior en el puerto A y pon la viga en posición de las 12h de un reloj. Ahora queremos mover el motor 90º hasta las 3h. La forma típica es poner "90 Degrees" en la casilla de "Duration".


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

De esta forma enviamos la orden de mover 90º, pero luego no sabemos si ha acabado a 91º, a 89º o a 90º, ya que no medimos. Y este error es el que se puede acumular en tareas repetitivas si no mides. Pero hay otras formas de hacerlo. Esta es una, no demasiado útil, pero que funciona:


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

Lo peculiar de este programa es que el motor está configurado en "unlimited" y es el sensor de rotación el que lo detiene. El último icono es simplemente la activación del freno para que se pare en seco a 180º. Otra forma más efectiva, y sobre todo, más configurable, sería la siguiente:


Tutorial Bloque Built in Rotation Sensor de LEGO Mindstorm NXT

Fijate bien que la pestaña "Wait for completion" está desactivada y que el movimiento está configurado para mover 1 grado. El programa se detiene cuándo se supera el valor programado en el "mayor que", en este caso 180, aunque puedes introducir este valor a través de un cable de programa según la tecla de la calculadora que hayas pulsado (por ejemplo).


El siguiente video (una joya de robot) NO lo he programado ni construido yo. Pero estoy convencido de que sin el "Built-in Rotation Sensor" sería impensable su correcto funcionamiento por la acumulación de errores. No queda más remedio que medir para saber realmente dónde estás. Y según dice el autor, está programado con NXT-G.







.