A veces lo que se toma con despreocupación, o quizás con falta de conocimientos, al publicarse en un medio tan multitudinario como Internet afecta a otros. Se encuentran afirmaciones totalmente opuestas entre sí “a vuelta de página” (en el caso de Internet, un enlace que sigue a otro en la búsqueda de Google). En este caso, por lo que he visto, la duda surge de publicaciones en los sitios de venta, incluso en los más grandes. Y se trata de la numeración del módulo de encoder rotativo de la serie de Keyes.
Encontrarán fotos rotuladas KY-007, y también KS-007. Al mismo tiempo, me encuentro artículos que muestran listas “oficiales” de Keyes en las cuales NO EXISTE el módulo KY-007. El que venden con esta numeración se trataría en realidad del KY-040, y este sí existe en su catálogo.
Esto para aclarar confusiones si usted compró un módulo que numeraron como KY-007, aclarando a continuación en el título de la venta con un número 040, sin prefijo. Si hace una búsqueda en algún sitio de venta, encontrará un título escrito así.
Hechas las aclaraciones, y para seguir con la publicación ordenada de la serie de módulos, paso a explicar de qué se trata un encoder (o codificador) rotativo (o si prefiere, giratorio).
En principio, los invito a ver el artículo Codificadores de posición angular que aporta muchos conceptos que pueden ser de utilidad. En este caso se trata de un codificador incremental. Este diseño tiene dos salidas levemente defasadas, gracias a lo cual se puede saber en qué dirección gira el eje. Además, han agregado un pulsador que se activa al presionar el eje verticalmente.
Las salidas del módulo están nombradas con las denominaciones CLK (salida A del codificador), DT (salida B del codificador), y SW (correspondiente a “Switch”, o llave/pulsador en castellano). Los otros dos pines que completan son la alimentación + y la tierra o común GND.
Los contactos de la plaqueta están identificados con una leyenda impresa. Es fácil conectar el encoder.
Si se utilizara el decodificador en forma independiente, sus contactos son:
Diagrama de conexiones en la plaqueta KY-040:
Internamente, dos contactos levemente desplazados se deslizan sobre una placa cuyos sectores están conectados a tierra (GND). Como siempre uno de los dos cerrará circuito primero, se puede saber en qué sentido se está girando el codificador monitoreando cuál de las dos líneas se conecta primero a GND (yendo de ALTO a BAJO). Dependiendo del sentido de giro, será primero A o B. Los dos resistores que tiene la placa mantienen las señales en un valor ALTO cuando no hay contacto.
Diagrama mecánico simplificado
Un codificador rotatorio tiene un número fijo de posiciones por revolución. Estas posiciones se sienten fácilmente como pequeños «clics» cuando se acciona el codificador. El diagrama muestra menos contactos para simplicidad visual, pero el concepto de funcionamiento es idéntico si la cantidad es mayor. Por ejemplo, el módulo de Keyes que uso en esta prueba tiene treinta de estas posiciones, aunque entiendo que la cantidad puede variar según el modelo o partida. Esto no modificará los resultados para nuestro uso.
Como en toda llave con contactos mecánicos, la señal no será totalmente limpia. Habrá una serie de rebotes muy rápidos cuando se juntan las partes metálicas, y también algunos al desconectarse. Esto se debe prever en el programa, introduciendo un breve retardo cuando se detecta que una de las señales cambia de valor, y luego se la lee de nuevo para comprobar que efectivamente se ha estabilizado. A este método se le llama debounce en inglés, lo cual significa (no tenemos una palabra para esto) “eliminación de rebote”. Esta denominación se debe a que por elasticidad de los contactos metálicos, por lo general se produce una serie de rebotes de aquel contacto que es móvil hasta que la conexión se establece definitivamente.
El efecto es menor si los contactos se deslizan un sobre otro, como en el caso de este codificador, pero sí existen ruidos y se deben tanto a efectos de rebote como a que los bordes metálicos, a nivel microscópico, no son absolutamente lisos.
Si no se toma esta precaución, los ruidos causarán que la lectura de una vuelta completa del codificador arroje diferentes números.
Programa Básico, Conexión con el Arduino
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
/* Codificador rotativo Keyes KY-040 * ( KY-007 para algunos vendedores ) * Prueba de conteo, direccion y pulsador * No se filtra los ruidos de contacto */ #define salidaA 2 #define salidaB 3 #define boton 4 int contador = 0; int estadoA; int estadoPrevioA; void setup() { pinMode (salidaA,INPUT); // pin 2 pinMode (salidaB,INPUT); // pin 3 // el pulsador debe ser polarizado a valor ALTO pinMode (boton, INPUT_PULLUP); Serial.begin (9600); // Lee el estado inicial de la salida A estadoPrevioA = digitalRead(salidaA); } void loop() { // Lee el estado de la salida A estadoA = digitalRead(salidaA); // Si el estado previo de la salida A era otro // significa que se ha producido un pulso if (estadoA != estadoPrevioA){ // Si el estado de salida B es diferente del estado // de salida A el codificador esta girando a la derecha if (digitalRead(salidaB) != estadoA) { contador ++; } else { contador --; } Serial.print("Posición: "); Serial.println(contador); } // actualiza el estado guardado estadoPrevioA = estadoA; bool Bot = digitalRead(boton); //Serial.print(B); if (!Bot) // si se pulsa el boton su valor va a BAJO { Serial.println("Boton pulsado: Contador a 0"); contador = 0 ; delay(300); } } |
Para investigar sobre implementaciones más avanzadas recomiendo ver la biblioteca KY-040-Encoder-Library—Arduino de Bill Williams.
Artículos relacionados:
¦ Módulo sensor de temperatura KY-001 (Kit de sensores Keyes 1)
¦ Módulo detector de vibración KY-002 (Kit de sensores Keyes 2)
¦ Módulo de Sensor Magnético por efecto Hall KY-003 (Kit de sensores Keyes 3)
¦ Módulo de llave pulsadora – KY-004 (Kit de sensores Keyes 4)
¦ Módulo sensor de temperatura KY-005 (Kit de sensores Keyes 5)
¦ Módulo de emisor piezoeléctrico pasivo KY-006 (Kit de sensores Keyes 6)
¦ Módulo codificador rotativo KY-040 [ó KY-007] – (Kit de sensores Keyes 040/007)
Pingback: Módulo detector de vibración KY-002 (Kit de sensores Keyes 2) | Robots Didácticos