Encoder rotativo arduino

Interrupción del codificador rotativo Arduino

Existe un sensor para casi todos los parámetros físicos. ¿Temperatura? ¿Presión? ¿Peso? ¿Concentración de gas? Hemos escrito un tutorial para todos ellos en este sitio.  En esta ocasión, intentaremos construir un dispositivo que mida la posición rotacional. El mismo dispositivo puede medir también la velocidad de rotación. Por supuesto, estamos hablando del codificador rotativo.

Hay dos tipos generales de codificador rotativo. El tipo absoluto, que es más caro, puede seguir todas sus posiciones anteriores. Básicamente, todas las posiciones del mando de un codificador rotativo tienen un valor. La forma de leer ese valor depende del sensor que utilice el codificador: magnético, óptico o mecánico.

El disco se divide en 16 áreas y cada una de ellas tiene un valor de código binario o gris correspondiente. La forma de determinar la posición actual es pasando una fuente de luz por el disco. Como se muestra, cada área o posición tiene cuatro ventanas; en cada una de ellas se colocan una fuente de luz y un receptor.

Por ejemplo, cuando la posición actual está en 1110, las ventanas primera a tercera, al ser transparentes, recibirán luz. En consecuencia, la última ventana, al ser opaca, no recibirá ninguna luz. Los receptores de luz emitirán entonces señales en función de la luz recibida, Dado que cada ventana tiene una combinación única, se puede conocer la posición actual del mando.

Ejemplo de interrupción del codificador rotativo Arduino

Un codificador rotativo es un tipo de sensor de posición que convierte la posición angular (rotación) de un mando en una señal de salida que se utiliza para determinar en qué dirección se está girando el mando. Debido a su robustez y a su fino control digital, se utilizan en muchas aplicaciones como la robótica, las máquinas CNC y las impresoras. Hay dos tipos de codificador rotativo: absoluto e incremental. El encoder absoluto nos da la posición exacta del mando en grados mientras que el encoder incremental nos informa de cuántos incrementos se ha movido el eje (pasos).El encoder rotativo utilizado en este tutorial es de tipo incremental.

En el ejemplo animado de abajo puedes ver cómo funciona un encoder. Dentro del codificador tenemos unas almohadillas de cobre (color marrón en la animación). Estos están conectados a GND. Luego tenemos dos pines, reloj y datos, con un pullup a 5V. De esta manera, cuando el pin está en circuito abierto, estará en «HIGH» o 5V. Al girar, estos dos pines tocarán las almohadillas de cobre, tirando de la salida a GND ya que las almohadillas están directamente conectadas a GND. Así, cada vez que tocamos una almohadilla de cobre, tenemos un pulso «LOW». Contando estos pulsos, podemos contar pasos. Si detectamos 10 pulsos por ejemplo, entonces el codificador saltó 10 pads de cobre. Sabiendo cuántas pastillas (pasos ) tiene el codificador, podemos calcular el ángulo de giro.

Biblioteca del codificador Arduino

El programa de ejemplo comprueba el cambio de estado de los pines y determina el sentido de giro en cuanto se detecta un giro. Una vez determinado el sentido, se cuentan y se emiten los pasos desde la posición inicial. Al pulsar el botón se reinicia el recuento.

El programa de ejemplo comprueba el cambio de estado de los pines y determina el sentido de giro en cuanto se detecta un giro. Una vez determinado el sentido, se cuentan y se emiten los pasos desde la posición inicial. Al pulsar el botón se reinicia el recuento.

Código del codificador rotativo Arduino

Si la rotación que se reporta es la opuesta a la que esperas, intenta intercambiar las líneas CLK y DT.Explicación del código:El sketch comienza con la declaración de los pines de Arduino a los que se conectan los pines CLK, DT y SW del codificador.#define CLK 2

unsigned long lastButtonPress = 0;Ahora en la sección Setup, primero definimos las conexiones al codificador como entradas, luego habilitamos la resistencia pullup de entrada en el pin SW. Al final leemos el valor actual del pin CLK y lo almacenamos en la variable lastStateCLK.pinMode(CLK,INPUT);

Para que el codificador rotativo funcione, necesitamos monitorizar continuamente los cambios en las señales DT y CLK. Sin embargo, esta no es la mejor solución por las siguientes razones.Una solución ampliamente adoptada es el uso de una interrupción.Con las interrupciones no es necesario sondear constantemente el evento específico. Esto libera al Arduino para realizar otras tareas mientras no se pierde el evento.CableadoComo la mayoría de los Arduinos (incluyendo el Arduino UNO) tienen sólo dos interrupciones externas, sólo podemos monitorear los cambios en las señales DT y CLK. Por eso hemos eliminado la conexión del pin SW del diagrama de cableado anterior.Así que ahora el cableado se ve así:Algunas placas (como la Arduino Mega 2560) tienen más interrupciones externas. Si tienes una de ellas, puedes mantener la conexión para el pin SW y ampliar el siguiente sketch para incluir el código para el botón.Código ArduinoAquí está el sketch que demuestra el uso de las interrupciones durante la lectura de un codificador rotativo.// Entradas del codificador rotativo

Acerca del autor

admin

Ver todos los artículos