CONSTRUYE UN

SENSOR DE ANGULOS


Potenciometro para LEGO Mindstorm NXT


down-verde-flecha

Aprenderemos aquí a usar un potenciómetro como sensor para la medida de ángulos. Una de las utilidades más claras que le podemos dar a este sensor es el de la construcción de un joystic para tus Robots. En lugar de los 2 ejes del joystic puedes usar sólo uno, como acelerador.






También puedes convertir en grados el valor del sensor, para saber cuánto ha girado. Como siempre, para información adicional, pincha en Componentes. Estos montajes son muy sencillos. Lo complicado son los programas.


EL POTENCIOMETRO Y EL NXT


Un potenciómetro no es más que una resistencia variable, así que los montajes seguirán una pauta de conexiones muy similar a los que ya hemos visto. Para modificar su valor, no tenemos más que girar el palito negro de plástico.


Para que sepas de lo que hablamos, es lo que hay debajo del volumen de cualquier cadena de música: al girarlo sube o baja la voz.


Ese mástil negro que se gira, se puede serrar para adaptarlo a nuestros proyectos. Existen de varios tipos, de montaje horizontal o vertical, o sea, de los que se pinchan fácilmente en la placa y los que no. Ambos pueden ser útiles según qué construyas.


También existen múltiples valores de resistencia. Los más adecuados, varían entre 0 y 10K, 22K y 47K respectivamente. Esos números representan el valor máximo de su resistencia y viene indicado en la carcasa negra. Su valor de RAW variará según la R.


Como puedes ver en la imagen, constan de 3 patitas, dos juntas y una central. La central es común y constituye uno de los extremos. Las otras se conectan según la necesidad: si quieres que al girar a izquierdas aumente la resistencia, conectas una pata. Si quieres que disminuya, la otra.


Otro factor a tener en cuenta es cuánto puede girar. Los hay que sólo dan media vuelta, o 3/4 de vuelta, etc. Cada uno de ellos es más sensible en una zona de su giro (al principio, por ejemplo).


Según cuál, un pequeño giro del potenciómetro genera un cambio grande del valor de la R, con lo que puede que no tengamos demasiado control sobre el robot y sea mejor elegir otro (p.ej. el de 10K en lugar del de 47K). Así que lo mejor es que pruebes varios y veas cuál te va mejor.


Una última nota. Aquí no podemos usar el "truco" de poner una resistencia si queremos conectar más de un potenciómetro en un solo puerto, ya que el propio potenciómetro ya va variando la resistencia y así no hay forma de distinguirlo.


Así que si queremos montar 2 para un joystic, hay 2 opciones: usar dos puertos o aprender cómo se hace un sensor digital, que son más complejos pero que te permitirían hacerlo. De momento, empezaremos probando cómo se comportan.


MATERIAL


1 Cable de conexión al NXT con uno de sus extremos con los cables pelados.

Cable de conexión blanco y negro.

Varios conectores para unir los cables anteriores.

3 potenciómetros de 10K, 22K y 47K de montaje horizontal, para poder pincharlo sobre la placa.


Vamos a ir probando cosas. Esto nos servirá para montar el acelerador.


PROBANDO


Pincha el potenciómetro de 10K en la parte central de la placa sin soldadura. Conecta el cable blanco del NXT a la pata central. Conecta el cable negro del NXT a una de las otras dos patas. Pon en marcha el MINDSTORM y ejecuta el programa de medir el RAW que ya hemos utilizado otras ocasiones y ahora giras el potenciómetro.


Verás que varía aproximadamente de 0 a 510. Puede incluso que no llegue al cero. Ahora cambia el cable negro a la otra patita. El blanco central se queda donde está. Verás ahora que cambia de 510 a 0, justo al revés de cómo lo ha hecho antes.


Es decir, para que gire a izquierdas o a derechas. El valor exacto RAW dependerá de las características concretas del potenciómetro que hayas puesto, pero para uno de 10K irá por ahí.


Ahora quita el de 10K y pones el de 22K, y repites el proceso para ver los resultados. A mi me varía entre 0 y 714 de RAW. Lo mismo para el de 47K. Oscila entre 0 y 837.


Parece que la mejor opción es la última que abarca más intervalo, pero ahora se puede entender mejor lo que decía antes. Gira este último potenciómetro de 47K para que mida 0. Ahora muevelo apenas un poco. ¿qué pasó? El mío ha subido de golpe hasta los 140!!. Es decir, tendremos muy poca sensibilidad al principio del giro.


Si montásemos éste para el acelerador, tan pronto tocásemos el potenciómetro, saldría disparado. Bueno, a lo mejor es eso lo que quieres, pero la elección ya es tuya. Si pones el de 10K verás que va mucho más fino... pero sólo llega a 510.


De todas formas, elegiré este para el montaje siguiente y la programación. Para abrir boca, te dejo este simpático programa para que pruebes lo que hemos hecho hasta ahora.


En el icono de Math, elige "Division", y pones un 6 en la B, para que el dibujo no se salga de pantalla. Recuerda que la pantalla mide 100 pixels de ancho por 64 de ancho. En el icono del Display he seleccionado "Image", "Clear" activado y "Snail" como imagen.


No olvides conectar los cables entre iconos, y ojo, el cable amarillo que acaba en el icono de Display debe acabar en el terminal que pone exactamente "X", no "end point X" ni ningún otro o no funcionará.


Programa potenciometro para LEGO Mindstorm NXT

Foto Potenciometro conectado a LEGO MINDSTORM NXT

ACELERADOR


PROGRAMA


Con una pequeña modificación del programa anterior, ya tenemos el acelerador. Dividiremos por 5 en lugar de 6 en "Math" para ajustar la escala de potencia.


En lugar del display, se pone el icono "Move", que puede activar 2 motores a la vez, el A y el B. Conectas el cable amarillo a la entrada de "Power" y poco más. Por cierto, si no enchufas los motores a su sitio, no creo que se mueva nada.


Programa potenciometro acelerador LEGO Mindstorm NXT

Con estos dos iconos adicionales, además verás el valor de la potencia en pantalla.


2 Programa potenciometro acelerador LEGO Mindstorm NXT

Bueno, pues ya tienes tu acelerador. Te habrás dado cuenta de que solo va hacia adelante. Esto es ya cuestión de programación.


JOYSTICK DE 1 EJE


No te asustes, ahora te lo explico. Esta es la forma que se me ha ocurrido a mí, pero ni es la mejor ni es la única. Te dejo también cómo he configurado el motor, para que no haya problemas. Nota: no funcionará correctamente si no pones la R de 10K.


Programa joystick un eje LEGO Mindstorm NXT

Configuracion motor joystick un eje LEGO Mindstorm NXT

1. Lo primero es leer el valor RAW. Como hemos puesto la R de 10K, obtenemos unos valores entre 0 y 510.


2. Ahora tenemos que poner a escala el valor, para que no se pase de potencia. La potencia máxima del motor es 100, así que dividiremos el RAW entre 5 y prácticamente lo tenemos a escala. Como máximo tendremos: 510 / 5 = 102.


3. Ahora queremos que de la mitad del recorrido del potenciómetro hacia adelante, avance, y de la mitad hacia atrás, retroceda. La mitad de nuestro recorrido ahora son 102/2 = 51. Y los valores oscilan entre 0 y 102. Ahora le tenemos que decir que todo lo que pase de 51, avance, tanto más cuanto más nos alejemos de 51. O sea, restamos ambos. A ver si esto se ve mejor con algunos casos posibles:


Si marca el máximo posible, 102, tenemos: 102 - 51 = 51 (positivos)

Si marca el mínimo posible, cero, tenemos: 0 - 51 = - 51 (negativos)

Si marca justo la mitad de los 102 posibles, es decir, cuando el potenciómetro esté en la mitad, tendremos: 51 - 51 = 0

Si marca 80 (de los 102 posibles), tendremos: 80 - 51 = 29 (positivos).

Si marca 20 (de los 102 posibles): 20 - 51 = - 31 (negativos)


Espero que se haya aclarado algo. De esta forma, obtenemos valores positivos de la mitad en adelante del potenciómetro y negativos de la mitad hacia el atras. El signo es lo que nos dirá si tiene que avanzar o retroceder el robot. Por eso añadimos el comparador "> 0".


Cuando sea mayor que cero, el comparador "Mayor que" nos dará un resultado de "Cierto" (cable verde del dibujo) y hará que la dirección sea de avance. Si es menor que cero, nos dará "Falso" y hará que la dirección sea la contraria.


4. ¿Y cuánta potencia? Como la potencia del motor varia de 0 a 100 (siempre positivos) y nosotros sólo llegamos a 51, multiplicamos por 2. Ahora el intervalo es desde -102 hasta +102. Si tomamos su valor absoluto, ya tenemos el valor de la potencia del motor.


Umm, qué farragoso... no se si vale la pena explicar estas cosas... Pero bueno, el caso es que ya tenemos un eje del joystick. Afortunadamente, funciona igual aunque no se entienda el programa. Si quieres hacer un joystick de dos ejes, ya te puedes imaginar lo que toca.


Eso si, por esta vía no hay forma que yo conozca de meter el 2º potenciómetro en el mismo puerto del NXT. Tendrás que gastar el otro o intentarlo con un sensor digital.


UN JOYSTICK COMPLETO


Para completar nuestro joystick, tendríamos que usar otro potenciómetro para controlar la dirección de las ruedas. Esa sería una opción, uno controla el avance y el otro la dirección. Pero la programación se complicaría. Aquí voy a proponer otra que creo que simplifica las cosas y además hace la conducción de vehículos mucho más divertida.


La idea es que un potenciómetro controle una rueda, y el 2º la otra. De esta forma, el programa es exactamente el mismo, a excepción del último icono, el del motor. Por simplificar, usaré un My Block, y así verás lo útil que resulta. Si no sabes cómo se crean, pulsa en Tutorial My Block, que está explicado justo con el programa que estamos usando.


El programa de un eje era este:


Programa potenciometro acelerador joystic un eje LEGO Mindstorm NXT

La parte central de este programa es justamente la que vamos a convertir en el icono azul de My Block, concretamente esto:


Programa my block potenciometro acelerador joystic un eje LEGO Mindstorm NXT

Así que el programa queda reducido a esto:


Programa 2 my block potenciometro acelerador joystic un eje LEGO Mindstorm NXT

Como puedes ver, entran y salen del Block exactamente los mismos cables que antes. El RAW (cable amarillo de entrada), la potencia (cable amarillo de salida) y el sentido de avance (cable verde). Ahora sustituimos el icono "Move", por el del motor:


Programa 3 my block potenciometro acelerador joystic un eje LEGO Mindstorm NXT

Configura el motor únicamente con el puerto A y con el "Unlimited". Potenciómetro en puerto 1. Ahora, montamos otro potenciómetro exactamente igual que hemos hecho al principio, esta vez conectado al puerto 2 y configuramos el motor en B, también en "Unlimited". El programa que gestiona ahora los dos ejes queda así de sencillo:


Programa 2 potenciometros joystic 2 ejes LEGO Mindstorm NXT

USOS


Simplemente hemos dado alguna posible programación, pero se pueden hacer muchas más según lo que necesites. La que hemos descrito creo que se adapta bien a vehículos tipo "oruga". Tienes un ejemplo de la página de LEGO aquí.


Para este joystic el montaje de los dos potenciómetros debería ser así:


pot-placa

Podrías adaptar el joystick para que tenga la forma de los mandos de los motores de los barcos, para que sea más sencillo avanzar:


mando-barco

Si encuentras potenciómetros con un eje suficientemente pequeño como para entrar en el agujero de una viga de LEGO, tendrás mucho avanzado. Si no, tendrás que hacer inventos para adaptarlo.


Para un joystic más "tradicional", es decir, que se mueva en forma de X, puedes encontrar ejemplos en la red. En este enlace externo puedes ver un ejemplo, y tomarlo como base para adaptar los dos potenciómetros que acabamos de describir. ¿Aún te quedan fuerzas para el programa de medir ángulos?. A fin de cuentas, era el título de este apartado...


UN SENSOR PARA MEDIR EL ANGULO


Un aviso previo. Las mates pueden ser algo engorrosas, ya lo has visto. Si no te interesa la explicación, copias el programa y arreglado.


La idea es saber en pantalla cuántos grados has girado el potenciómetro. La primera aproximación es sencillita y de resultados no muy finos. Si con esto tienes suficiente para medir ángulos, arreglado. Si con este programa ves que el resultado no te convence, puedes pasar al segundo programa, un poquito más complejo.


UNA PRIMERA APROXIMACION


La primera opción es adaptar los valores raw que tenemos (de 0 a 510 aprox) al ángulo de giro disponible, que són 3/4 de vuelta, o sea 270º. Todo esto referido siempre al potenciómetro con el que hemos estado trabajando, que es el de 10K. Con otro sería diferente.


Esto significa hacer una simple regla de tres: Si 510 son 270, raw es X. De esta forma, podías adaptarlo a cualquier potenciómetro que uses, midiendo su raw máximo y el giro


Potenciometro ecuacion 1 LEGO Mindstorm NXT
Programa potenciometro ecuacion 1 LEGO Mindstorm NXT

Este programa sencillito te puede servir. Aunque no es muy fino, es una buena aproximación. ¿porqué no es muy exacto?. Para eso hay que pintar los numeritos en una gráfica y lo verás claro.


Tomamos los valores girando el potenciómetro y anotando los valores raw que vamos obteniendo cuando situamos el eje a los 0º, a los 90º, a la media vuelta del eje del potenciómetro (180º) y a los 3/4, 270º. Pintamos el raw en el eje horizontal de las X y los grados en el vertical de las Y.


Como puedes ver, el potenciómetro no se comporta de forma lineal, sino que más bien es una curva (en color azul en la gráfica). Ahí se ve con claridad la desviación con respecto a una recta, y de ahí las desviaciones en los valores y los ángulos. La recta roja es un ajuste por mínimos cuadrados, hecho con una hoja de cálculo.


Tabla valores potenciometro ec1 LEGO Mindstorm NXT

Grafica valores potenciometro ec1 LEGO Mindstorm NXT

UNA APROXIMACION MAS FINA


Si partimos nuevamente de la gráfica azul, la que representa los valores obtenidos, y (en la hoja de cálculo) ponemos el cursor encima de esa curva azul y le damos al botón derecho, podemos seleccionar "Agregar línea de tendencia".


Se abrirá una ventana y seleccionamos "Polinómica", "Orden 2", y "Presentar ecuación en la gráfica". Te saldrá la línea roja, que se solapa mejor a los datos reales, los azules.


Grafica valores potenciometro ec2 LEGO Mindstorm NXT

Así que trasladamos esto al NXT. El segundo icono, el que pone "Elevado 2", es la forma de elevar al cuadrado un número: introduces el valor raw en A y B y seleccionas "multiplicar". Esta todo detallado en la imagen. Espero que, con paciencia, lo puedas copiar. Este programa reproduce mejor el comportamiento real del potenciómetro.


Programa potenciometro ec2 LEGO Mindstorm NXT

up-verde-flecha
Balanza
Dos LEDs de intensidad variable
.