Sunteți pe pagina 1din 28

UN SENSOR DE ROTACION

INTRODUCCION

Como su nombre indica, un sensor de rotacin nos determinar la velocidad de un giro,


habitualmente de un eje. Si complicamos su construccin (y programacin) podemos
adems 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
informacin al respecto en internet. Su funcionamiento es complejo, aunque el principio
bsico de funcionamiento es sencillo de entender.

Existen 2 tipos bsicos 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 segn cada diseo concreto.

LOS DISCOS CODIFICADOS

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

El primero sera este. Hay que descargar un pequeo programa y es el que yo he usado, ya
que te permite crear tus propios cdigos a medida. Adems, en la pgina del Codewheel
Generator encontrars amplia informacin 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 pgina genera el disco.

La impresin sobre un folio no es suficientemente gruesa para activar o desactivar la


deteccin del sensor. Es necesario imprimir dos imagenes idntcas del disco, superponerlas
y pegarlas para que sea ms opaco.

Una opcin ms esttica es crear una imagen especular del disco y pegarla por detrs. As,
la cara de detrs 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 podrs superponer
por la parte posterior de la primera.

Incluso tienes la opcin de usar como disco codificado una rueda original de LEGO:

A uno y otro lado podras poner un LDR y un LED. El funcionamiento sera el mismo. Lo
nico es que el LDR no tiene una respuesta tan rpida como este sensor, y no se qu tal ira,
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 "lgicos", leer ceros y unos. Contando el
nmero 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 segn 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 informacin de cunto haba avanzado. Los motores
del Mindstorms NXT llevan incorporados sensores de este tipo: el Built-in rotation sensor.

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

Para poder hacer pruebas y programar el sensor de rotacin, 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
(ms) loco:

POSICION

Cuantas ms marcas pongas en el diseo del disco, ms precisin tendr. Con nuestro
ltimo ejemplo de 16 marcas, 8 marcas quieren decir "girar el eje 180" y as puedes parar
el eje en una posicin determinada. Sera 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,

vers impreso en el sensor unos smbolos 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 idnticos, los has pegado y los has atravesado con un
eje, ya podemos hacer el montaje. Como habrs visto, el sensor tiene 4 patas. Si lo montas
tal cual en el board, comunicars 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 segn el
esquema anterior.

El resto de componentes ms el motor NXT para las pruebas montado quedara ms 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 estn pinchados por separado.

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

En detalle:

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 mxima parece
mentira que pueda contar las marcas... y lo hace perfectamente.

En la foto se aprecia que no hay conexin 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.

PROGRAMA

Sin duda este programa es el que ms quebraderos de cabeza me ha dado. Cuenta el nmero
de marcas y, dividiendo por 16, el nmero de vueltas que ha dado. Lo que no detecta es el
sentido de giro. Para eso, tendremos que programar el motor adelante o atrs.
Habitualmente por tanto no har falta su deteccin, aunque hablamos de ello ms 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
deteccin), puedes modificar ligeramente los valores de los bloques de comparacin.

SENTIDO DEL GIRO: 2 SENSORES


Para saber el sentido de giro se aade una segunda corona de marcas un poco desfasadas
con respecto a la corona que hemos dibujado. Tambin se aade 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!).

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

Hay muchos diseos posibles. Para explicarnos, dibujar una lnea roja sobre el disco desde
el centro hacia un lado a modo de "meta" y sobre esa lnea 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.

Quin 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 opcin alternativa a esta que puede
facilitar un montaje casero sera separar ambas coronas en 2 discos. Cada disco con solo
una corona. Y que cada sensor leyera uno de los discos.

Con esta opcin, podramos contar las vueltas, determinar la posicin y el sentido de giro.

SENTIDO DEL GIRO: 1 SENSOR


Es lgico preguntarse una vez llegados a este punto si es posible determinar el sentido del
giro con solo un sensor. Y se me ocurri una solucin, pero a costa (casi siempre) de algo.
Con esta opcin, se puede determinar el sentido del giro y contar el nmero de revoluciones
dadas por el motor, pero perderemos la informacin sobre la posicin, ya que 3 rayas no
dan para ello.

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

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

La programacin (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 lgica Si/No.

Mis intentos de programacin van en la lnea siguiente: el sensor nos da una seal
(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
ms estrecha. 200 ms en cruzar la intermedia y 500 ms en la ms 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 sern 100, 200, 500, 100, 200, 500, 100, etc. Y
cuando gira al revs, los tiempos sern 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 sera el de deteccin 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 tambin un proyecto completo (espero que
interesante) para usarlo como Tacmetro y Velocmetro. Incluye all un video adicional
para que veas su funcionamiento y el programa correspondiente para su uso. Con este
proyecto podrs construir un panel de control completo, como el de un coche real, de
indicadores.

Y como final, otra idea alterntiva para su construccin: un anemmetro. Construyes uno y
usas el encoder para contar las revoluciones y de ah, la velocidad del viento. Lo que no se
me ocurre es cmo 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 seales digitales en respuesta al
movimiento, sea de un disco o cinta perforada.
stos se utilizan, en su mayora de las aplicaciones, para el control de posicin y/o
velocidad de un motor. Considerando bsicamente el nmero de pulsos ledo y la cantidad
de ranuras que existen en un disco o cinta para controlar una posicin especfica o una
velocidad.

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 ms adelante y la placa Arduino.
Recomendacin: Si se desea fabricar uno disco recomiendo utilizar programas (como
OPTICAL ENCODER CODEWHEEL GENERATOR) que puedan disear stos e
imprimirlos en cartulinas, tres o cuatro y pegarlas; pegar una hoja de cartulina impresa en
un cartn. Pero no utilizar plstico 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 sern 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 pequeos que con el tiempo se van haciendo muy notorios y eso
afecta el objetivo final. Razn suficiente para aadir un circuito extra un programa
especfico. En este caso expongo el primero, aadiendo un disparador Schmitt (74LS14)
previniendo dicho ruido.

Efecto del uso del schmitt trigger

(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
conexin, puedes considerar cualquier par que te sea ms cmodo (Ix y Qx) y los de
alimentacin (VCC y GND).

Considerando al optoacoplador:

La configuracin de estos sensores puede ser tambin de la siguiente manera (considerando


que su estructura interna es la misma).

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, slo para
hacer la prueba podran interrumpir con una cartulina o cartn interponindolo en el
optoacoplador para observar el conteo de pulsos generado.

S-ar putea să vă placă și