Sensor de Velocidad lm393

En este tutorial te muestro cómo utilizar el sensor de velocidad lm393 encoder FC-03 o FZ0888 (módulo sensor de velocidad por infrarrojos con comparador LM393) o el optoacoplador. Lo incorporé en las 4 ruedas del robot Andromina OFF ROAD para calcular la velocidad de rotación de las mismas.

Sensor de Velocidad lm393


Este codificador fue elegido porque es el más económico del mercado. Este tutorial muestra las dos mejores soluciones para conectar fácilmente el encoder FC-03 al Arduino UNO o MEGA. El codificador se muestra a continuación:
Módulo sensor de velocidad por infrarrojos con comparador LM393 o codificador FC-03
Codificador FC-03
Imagen de la rueda del robot, codificador LM393, polea dentada y motor
Foto del motor del robot, el encoder y la disposición de las poleas.
1-El Encoder: Con este módulo sensor de velocidad IR con el comparador LM393 podemos calcular la velocidad de las ruedas de nuestro robot. Cuando colocamos un piñón que gira, se fija a nuestra rueda. También se puede utilizar como interruptor óptico.
El funcionamiento básico de este sensor es el siguiente: Cuando ocurre algo entre la ranura del sensor, se genera un pulso digital en el pin D0. Este pulso va de 0V a 5V y es una señal digital TTL. Entonces podemos leer este pulso con Arduino.
A continuación describimos las diferentes partes del codificador:
Piezas que componen el codificador FC-03
Principales partes del codificador
Pines de conexión del módulo de velocidad (Encoder FC-03):
VDC: Fuente de alimentación de módulos de 3.3V a 12V.
GND: Tierra.
D0: Señal digital de los pulsos de salida.
A0: Señal analógica de los pulsos de salida. Señal de salida en tiempo real. (no se utiliza normalmente).

Principales características técnicas:
Dimensiones: 32 x 14 x 7mm
La ranura de lectura del sensor es de 5 mm de ancho.
Dos salidas, una digital y otra analógica.
Pantalla LED de encendido.
Indicador LED de los impulsos de salida del pin D0.

Pulsos de 2 baños: Con este encoder también tuve problemas para leer los pulsos digitales generados por el comparador LM-393. Arduino UNO o MEGA lee más pulsos de los que realmente se generan. Lee 4 veces más pulsos de los que realmente se generan. Busqué en Internet información sobre este problema y encontré poco. Como he aprendido, este sensor es muy sensible a las interferencias que se pueden introducir en las clavijas VCC y GND. Si alimentamos el sensor desde el propio Arduino con 3.3V o 5V, el propio regulador de voltaje del arduino puede introducir corrientes de fuga en el sensor. Esto puede conducir a un mal funcionamiento del sensor.
Utilizar un osciloscopio conectado entre los pines D0 y GND para analizar los impulsos generados por el encoder. Vea las siguientes fotos:
Señales de salida del encoder.
Señal de pulso digital del pin A0.
Salida del codificador Señal analógica.
Señal de impulso analógico desde el pin D0.
Si miramos el pulso generado, parece que es un pulso cuadrado correcto, pero si el comienzo del pulso se magnifica mucho, podemos ver que el pulso no es cuadrado. Como se puede ver en la siguiente imagen, la señal digital TTL cuadrada generada por el encoder FC-03 tiene un rebote al principio del pulso.
Señal de rampa de subida con muchos rebotes
Primer impacto de la señal visto con un osciloscopio.
También tiene rebote al final del pulso. Arduino es muy sensible y lee estos rebotes como buenos impulsos y realmente no lo son. Ver foto abajo con los rebotes al final del pulso:
Rampa de reducción de señal con muchos rebotes
Impacto final de la señal vista con un osciloscopio.
3-Dos soluciones: Para resolver este problema, he desarrollado dos soluciones. La primera solución es crear un programa, un sketch de Arduino, que no lea los rebotes y no lea señales falsas. La segunda solución es colocar un condensador para eliminar los golpes iniciales y finales.
La mejor solución que propongo para resolver este problema es la siguiente.

4-Solución 1 ; La siguiente figura muestra el esquema básico que he hecho en esta solución. El truco es colocar un condensador de poliéster (o cerámica) metalizado entre el pin D0 y el pin GND. He probado varios condensadores diferentes. El condensador (562J 250v) me dio el mejor resultado. Este condensador apenas deforma el pulso digital generado por el comparador LM393.
Esta solución es la mejor que se puede asumir. Lo probé con diferentes placas de Arduino y nunca falló. He probado Arduino ONE, MEGA y DUE.
Esquema de encoder con condensador y Arduino
Esquema de conexión del encoder con condensador.
También probé un condensador de 100 nF (104), que me dio buenos resultados. Este condensador deforma más la señal del pulso digital porque tiene una mayor capacitancia.