Paso 10: Hey, ¿qué pasa con los codificadores rotativos?
Sobre codificadores rotatorios
Potenciómetros y faders son excelentes para el control de volúmenes y frecuencias, pero a veces te encuentras necesitando algo que puede girar para siempre, por lo que puede desplazarse por sus listas de reproducción, o tal vez eres un DJ y desea añadir ruedas de avance lento a su mando para rayar. Cuando codificadores rotativos vienen en.
Puede parecer como un potenciómetro, pero hay 3 grandes diferencias:
- Un codificador rotatorio puede girar para siempre, mientras que un potenciómetro tiene una gama fija (generalmente alrededor de 270°).
- Un codificador envía señales digitales, mientras que un potenciómetro 'salidas' voltajes analógicos.
- Un codificador envía mensajes relativa, mientras que un potenciómetro informa su ángulo absoluto.
Descifrar un codificador rotatorio
Antes de que podemos utilizarlos, primero tenemos que entender cómo funcionan. Hay un documento largo en el Arduino Playground, pero voy a intentar dar una explicación rápida.
Un codificador rotatorio consiste básicamente de dos interruptores. Cuando se gira, los dos pasadores de estos interruptores (A y B) ser conectados y desconectados el pin común (C). (Ver imagen 1, crédito: RobotRoom)
Esto resulta en dos ondas cuadradas. Estas ondas cuadradas son idénticas, pero el tiempo es diferente. Decimos que están 90° fuera de fase: la segunda ola comienza su ciclo cuando la primera onda es 1/4 de su ciclo. (90 º es 1/4 de un completo de 360°, por lo tanto, el '90° fuera de fase". A y B se denominan también 'cuadratura salidas', porque son un barrio fuera de fase.)
Echa un vistazo a la segunda imagen (fuente: Arduino Playground). Supongamos que nos gire el codificador hacia la derecha (a la derecha en la imagen). Cada vez que una señal se levanta, (línea roja vertical) la señal B es alta, y cada vez que una señal baja (línea verde), la señal B es baja. Ahora imagine girándolo en sentido antihorario (CCW). Ahora cada vez que una señal levanta (línea verde), la señal B es baja, y cada vez que una señal baja (línea roja), la señal B es alta. Comprobando el valor de B cuando el valor cambia, sabemos qué dirección va el eje. Esto vale también para los cambios del canal B. Contando los pulsos, sabemos cuánto nos gire.
Porque marcar el pin A y B en el circuito de nuestro sketch sería demasiado lento si hay otras cosas funcionando así, y no queremos perder ningún cambio de ellos, usamos interrupciones. Aquí están algunas grandes páginas sobre interrupciones: la Referencia de Arduino, sitio de Nick Gammony capítulo 11 en el Atmel Datasheet (Uno o Leonardo).
Interrupciones son, sencillamente, partes del código que se ejecutan sólo cuando algo se dispara, como un cambio de pin. El bucle principal se interrumpe, y se llama ISR o interrumpir el servicio de rutina. Es mucho más complejo que esto, pero es imposible explicar en una Instructable. De todos modos, si Atribuimos una interrupción a los pines del codificador rotatorio, podemos cerciorarnos de que no se pierda ningún cambio de pin, no importa lo que está sucediendo en otras partes de nuestro código. Puedes leer más sobre este tema en los enlaces anteriores, pero no vamos a ser preocupantes a mucho de las interrupciones, ya que usaremos biblioteca de codificador de PJRC, que se encarga de esto para nosotros.
Hay dos tipos de encoders rotativos: mecánicas y ópticas. La primera imagen es una mecánica: hay una estática y una placa móvil de metal, y hacer o las conexiones del freno. El segundo tipo es un codificador óptico: hay dos haces de luz (mayormente infrarroja), y un disco giratorio con dientes interrumpe el disco. Si la distancia entre las vigas es la proporción derecha comparada con la anchura de los dientes, sus ondas cuadradas será 90° fuera de fase. Hay un ejemplo en la imagen 3 (fuente: Kawasaki Heavy Industries). También es posible que dos anillos de abertura, que ya está en la fase correcta en el disco.
Hay un problema con codificadores mecánicos, y que es debido a que la conexión nunca es perfecta. Puede tener pequeñas espigas al conectar y desconectar, y el Arduino también detectar aquellos y nos dan lecturas mal. Una solución simple es agregar dos capacitores de 100nF entre nuestras salidas A y B y el suelo.