28
UN SENSOR DE ROTACION 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

Un Sensor de Rotacion

Embed Size (px)

DESCRIPTION

12

Citation preview

Page 1: Un Sensor de Rotacion

UN SENSOR DE ROTACION

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

Page 2: Un Sensor de Rotacion

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.

Page 3: Un Sensor de Rotacion
Page 4: Un Sensor de Rotacion

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

Page 5: Un Sensor de Rotacion
Page 6: Un Sensor de Rotacion

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:

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.

Page 7: Un Sensor de Rotacion

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.

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:

Page 8: Un Sensor de Rotacion

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,

Page 9: Un Sensor de Rotacion

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.

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.

Page 10: Un Sensor de Rotacion
Page 11: Un Sensor de Rotacion

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.

Page 12: Un Sensor de Rotacion
Page 13: Un Sensor de Rotacion

En detalle:

Page 14: Un Sensor de Rotacion
Page 15: Un Sensor de Rotacion

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.

Page 16: Un Sensor de Rotacion
Page 17: Un Sensor de Rotacion

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.

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!).

Page 18: Un Sensor de Rotacion

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.

Page 19: Un Sensor de Rotacion

¿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.

Page 20: Un Sensor de Rotacion
Page 21: Un Sensor de Rotacion

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:

Page 22: Un Sensor de Rotacion

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

Page 23: Un Sensor de Rotacion

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...

CONTADOR DE PULSOS DE ENCODER CON ARDUINO

(Recomiendo conocer primero el funcionamiento de los encoders, pueden ver este link y/o

buscar por otras fuentes)

Los encoders tienen como principio generan señales digitales en respuesta al

movimiento, sea de un disco o cinta perforada.

Éstos se utilizan, en su mayoría de las aplicaciones, para el control de posición y/o

velocidad de un motor. Considerando básicamente el número de pulsos leído y la cantidad

de ranuras que existen en un disco o cinta para controlar una posición específica o una

velocidad.

Page 24: Un Sensor de Rotacion

Sin embargo, este post se centrará en realizar el conteo de pulsos que genera un encoder.

Para ello se necesitará el sensor optoacoplador y el disco o cinta ranurada, resistencias que

se especifican en el circuito más adelante y la placa Arduino.

Recomendación: Si se desea fabricar uno disco recomiendo utilizar programas (como

OPTICAL ENCODER ó CODEWHEEL GENERATOR) que puedan diseñar éstos e

imprimirlos en cartulinas, tres o cuatro y pegarlas; ó pegar una hoja de cartulina impresa en

un cartón. Pero no utilizar plástico a no ser que se pegue una cartulina impresa a cada lado.

Bueno, el sensor optoacoplador generará pulsos de acuerdo a cuantas franjas blancas o

transparentes detectó. Estos pulsos serán contados por Arduino.

Como se sabe la sensibilidad de los sensores, es posible que en algunos casos no esté claro

un pulso y exista errores pequeños que con el tiempo se van haciendo muy notorios y eso

afecta el objetivo final. Razón suficiente para añadir un circuito extra ó un programa

específico. En este caso expongo el primero, añadiendo un disparador Schmitt (74LS14)

previniendo dicho ruido.

Efecto del uso del schmitt trigger

Page 25: Un Sensor de Rotacion

(B) en vez de un comparador (A)

Como se conoce los pulsos tienen únicamente dos respuestas ALTO(1) y BAJO(0), que da

lugar a conectar a una entrada digital del Arduino, como se observa en la imagen.

Toma en cuenta el esquema del CI 74LS14. Para este caso únicamente se utiliza 4 pines de

conexión, puedes considerar cualquier par que te sea más cómodo (Ix y Qx) y los de

alimentación (VCC y GND).

Page 27: Un Sensor de Rotacion

El programa es de la siguiente manera: boolean anterior = 0;

boolean actual = 0;

int contador = 0;

void setup()

{

Serial.begin(9600);

pinMode(2,INPUT);

}

boolean debounce(boolean dato_anterior)

{

boolean dato_actual = digitalRead(2);

if (dato_anterior != dato_actual)

{

delay(10);

dato_actual = digitalRead(2);

}

return dato_actual;

}

void loop()

{

actual = debounce(anterior);

if ( anterior == 0 && actual == 1)

{

contador++;

delay (100);

Serial.println(contador);

}

anterior = actual;

}

De esta manera acoplando un disco o cinta, como se mencionó anteriormente, ó sólo para

hacer la prueba podrían interrumpir con una cartulina o cartón interponiéndolo en el

optoacoplador para observar el conteo de pulsos generado.