You are on page 1of 4

CONTADOR DE PULSOS DE ENCODER CON ARDUINO

Los encoders tienen como principio generar señales digitales en respuesta al
movimiento, sea de un disco o cinta perforada.

Éstos se utilizan, en su mayoría de las aplicaciones, para el control de posición y/o
velocidad de un motor. Considerando básicamente el número de pulsos leído y la
cantidad de ranuras que existen en un disco o cinta para controlar una posición
específica o una velocidad.

Como se hace el conteo de pulsos que genera un encoder. Para ello se necesitará el
sensor optoacoplador y el disco o cinta ranurada, resistencias que se especifican en el
circuito más adelante y la placa Arduino.

Recomendación: Si se desea fabricar uno disco recomiendo utilizar programas
(como OPTICAL ENCODER ó CODEWHEEL GENERATOR) que puedan diseñar
éstos e imprimirlos en cartulinas, tres o cuatro y pegarlas; ó pegar una hoja de cartulina
impresa en un cartón. Pero no utilizar plástico a no ser que se pegue una cartulina
impresa a cada lado.

Bueno, el sensor optoacoplador generará pulsos de acuerdo a cuantas franjas blancas
o transparentes detectó. Estos pulsos serán contados por Arduino.

Como se sabe la sensibilidad de los sensores, es posible que en algunos casos no esté
claro un pulso y exista errores pequeños que con el tiempo se van haciendo muy
notorios y eso afecta el objetivo final. Razón suficiente para añadir un circuito extra ó
un programa específico. En este caso se añade un disparador Schmitt (74LS14)
previniendo dicho ruido.

. como se observa en la imagen. Efecto del uso del schmitt trigger (B) en vez de un comparador (A) Como se conoce los pulsos tienen únicamente dos respuestas ALTO (1) y BAJO (0). que da lugar a conectar a una entrada digital del Arduino.

puedes considerar cualquier par que sea más cómodo (Ij y Qj) y los de alimentación (VCC y GND). void setup() { Serial. boolean actual = 0.begin(9600).Uso del CI 74LS14. Para este caso únicamente se utiliza 4 pines de conexión. if (dato_anterior != dato_actual) { delay(10). } boolean debounce(boolean dato_anterior) // filtrado del ruido de rebote por software { boolean dato_actual = digitalRead(2). int contador = 0. no mide rpm) boolean anterior = 0. Considerando al optoacoplador: PROGRAMA (Cuenta pulsos. pinMode(2.INPUT). dato_actual = digitalRead(2). .

como se mencionó anteriormente. if ( anterior == 0 && actual == 1) { contador++. Con un disco de 4 ranuras. } void loop() { actual = debounce(anterior). se puede controlar posición angular? 2. antes de agregar hardware. } anterior = actual. revise antes si no hay algún cable suelto o una conexión mala. Se recomienda girar a mano la ruedita y comparar la cuenta que da el Arduino con el número de vueltas conocido. ¿cuál es la fórmula para calcular las RPM de un motor? (Pista: estudie el programa visto en clases y modifíquelo) .println(contador). Si el número de vueltas no coincide. con el fotointerruptor CNZ1120. ó sólo para hacer la prueba podrían interrumpir con una cartulina o cartón interponiéndolo en el optoacoplador para observar el conteo de pulsos generado. Serial. se podría requerir un filtro antirebote o un disparador de Schmitt. Una mala conexión puede generar señales ruidosas y falsear los datos. Preguntas: 1. acoplando un disco o cinta. Existe otro fotointerruptor con salidas análogas y digital. ¿Con una única ranura en el disco. COMENTARIOS El detector mostrado en clases está basado en una antigua placa de Sparkfun. delay (100). Pero. } De esta manera. } return dato_actual.