Contador ascendente/descendente con codificador rotativo

Publicado el 16 febrero 2016 por Villalba2006

En el POST de hoy, introduzco la utilización de un codificador rotativo, que aunque son muy parecidos a un potenciómetro por fuera, en realidad son muy distintos. El potenciómetro nos da un valor analógico que tenemos que leer, pero el codificador nos envía información “digital” que vamos leyendo según giramos el mando del codificador. El modelo que vamos a utilizar nosotros es el PEC11-4215F-S0024, que nos envía 24 “pulsos” en una vuelta completa, pero ya montado sobre una pequeña tarjeta de circuito impreso con sus respetivas conexiones internas y sus resistencias PULL-DOWN incorporadas.

Módulo codificador rotativo

Su funcionamiento es muy sencillo, al girarlo se envían dos señales cuadradas desfasadas 90 grados entre sí, una por el pin CLK y otra por el pin DT del módulo, aunque dependiendo del sentido en que estemos girando el mando del codificador rotativo, el desfase de la señal del pin DT respecto del pin CLK será positivo o negativo como en el siguiente diagrama os muestro, con lo que obtendremos unos valores en el pin DT diferentes en cada caso y que podremos evaluar con Arduino para reconocer el sentido de giro en cada momento.

Diagrama de estado de los pines CLK y DT del codificador rotativo


Si evaluamos el valor de los pines CLK y DT del codificador rotativo, cuando hay un cambio de estado, de “1” a “0” (Flanco de bajada) o de “0” a “1” (flanco de subida), en el pin CLK, podemos observar en el diagrama anterior que si estamos girando en sentido horario, el valor de CLK y DT son siempre contrarios, en cambio sí giramos en sentido antihorario los valores de CLK y DT siempre coinciden, con lo que basaremos la programación del código que grabaremos en nuestro Arduino en este fenómeno para que pueda saber en qué sentido estamos girando.Además de conocer el sentido de giro del mando del codificador rotativo, que Arduino nos señalizará mediante el encendido de dos LEDS, es decir, el LED azul solo se encenderá cuando giramos en sentido horario y el rojo cuando lo hacemos al contrario, también visualizaremos a través de un display de 7 segmentos de un solo digito, la posición en la que se encuentra el mando, aunque en una escala del 0 al 9 exclusivamente (se incrementa una posición cuando giramos en sentido horario y cuando giramos en sentido contrario disminuye). Por último añadir que los codificadores rotativos son ampliamente utilizados por ejemplo para el control del volumen en equipos de sonido.Para su correcto montaje y funcionamiento, cada uno de los segmentos que componen el display de 7 segmentos se denominan a, b, c, d, e, f y g, denominándose además dp al punto decimal, tal y como se muestra en la siguiente imagen.

Relación entre terminales y segmentos

 Para este proyecto utilizaremos un display de 7 segmentos de cátodo común, en concreto el modelo LMS5161AS (luz roja, tamaño de dígito 0.56''). Para obtener un brillo optimo del display, debemos de colocar una resistencia de 220Ω por cada terminal y no una sola en el común (en este caso el común no llevaría resistencia). Aunque para efectos de prueba nos sobra con este montaje. Para más información sobre la utilización del display, podemos ver el POST “Display de 7 segmentos de un solo dígito” publicado con anterioridad a este.
Lista de Materiales:
 ·   Arduino UNO Rev.3.·   Cable USB tipo A-B.·   Módulo codificador rotatorio (PEC11-4215F-S0024).·   Display de 7 segmentos de cátodo común (LMS5161AS).·   3 Resistencia de 220Ω.·   2 LEDS de 3 mm (Rojo y Azul).·   Protoboard.·   Cables de conexión.
Programa: Descarga del Programa Video: