Manual del Codificador KY-040 para Arduino
Manual del Codificador KY-040 para Arduino
Es un gran dispositivo para el control de motores paso a paso y servomotores. También podrías usarlo para controlar
En un lado del interruptor hay tres pines. Normalmente se les conoce como
como A, B y C. En el caso del KY-040, están orientados como se muestra.
Si ambos interruptores están abiertos, girar el codificador en sentido horario o antihorario uno
la posición hará que ambos interruptores se cierren.
Como puedes ver, la posición angular del terminal A y el terminal B es tal que:
Girar el interruptor en el sentido de las agujas del reloj hará que el interruptor que conecta A y C cambie de estado primero.
Girar el interruptor en sentido antihorario causará que el interruptor que conecta B y C cambie
estados primero.
Si quisiéramos representar la apertura y el cierre de los interruptores como formas de onda, se vería
algo como esto.
Esencialmente, determinar cuál interruptor cambió de estado primero es cómo se determina la dirección de rotación.
determinado.
Si B cambió de estado primero, el interruptor está girando en sentido contrario a las agujas del reloj.
El módulo está diseñado para que se emita un bajo cuando los interruptores están cerrados y un alto
when the switches are open.
El bajo se genera colocando un suelo en el Pin C y pasándolo a los pines CLK y DT.
cuando los interruptores están cerrados.
El alto se genera con una entrada de suministro de 5V y resistencias de tirón, de tal manera que CLK
Este sitio web utiliza cookies para mejorar su experiencia. Al continuar visitando esto y DT
ambos son altos cuando los interruptores están abiertos.
void setup() {
pinMode(pinA, INPUT);
pinMode(pinB, INPUT);
/* Leer Pin A
Cualquier estado en el que se encuentre reflejará la última posición
*/
pinALast = digitalRead(pinA);
[Link] (9600);
}
bucle vacío() {
aVal = digitalRead(pinA);
si (aVal != pinALast){ // Significa que la perilla está girando
// si la perilla está girando, necesitamos determinar la dirección
Hacemos eso leyendo el pin B.
si (digitalRead(pinB) != aVal) { // Significa que el pin A cambió primero - Estamos girando en el sentido horario
encoderPosCount ++;
bCW = true;
} else {// De lo contrario, B cambió primero y nos estamos moviendo en sentido contrario a las agujas del reloj
bCW = false;
encoderPosCount--;
}
[Link] ("Rotado: ");
si (bCW){
[Link] ("en sentido horario");
}else{
[Link]("contra las agujas del reloj");
}
[Link]("Posición del Encoder: ");
[Link](encoderPosCount);
}
pinALast = aVal;
}