- Módulo de sensor de velocidad óptico ranurado infrarrojo LM-393
- Medir la velocidad y la distancia recorrida para calcular la tarifa
Hoy en día, los medidores digitales están reemplazando a los analógicos en todos los sectores, ya sea el medidor de electricidad o el medidor de tarifa de taxi. La razón principal es que los medidores analógicos tienen partes mecánicas que tienden a desgastarse cuando se usan durante mucho tiempo y no son tan precisas como los medidores digitales.
Un buen ejemplo de esto es el velocímetro y el odómetro analógicos que se utilizan en motocicletas antiguas para medir la velocidad y la distancia recorrida. Tienen piezas especiales llamadas disposición de piñón y cremallera en la que se utiliza un cable para girar el pasador del velocímetro cuando se gira la rueda. Esto se desgastará cuando se use durante un período prolongado y también necesita reemplazo y mantenimiento.
En el medidor digital, en lugar de utilizar piezas mecánicas, se utilizan algunos sensores como el interruptor óptico o el sensor de pasillo para calcular la velocidad y la distancia. Es más preciso que los medidores analógicos y no requiere ningún mantenimiento durante un período de tiempo prolongado. Anteriormente construimos muchos proyectos de velocímetro digital usando diferentes sensores:
- Velocímetro de bricolaje con Arduino y la aplicación de procesamiento de Android
- Circuito digital de velocímetro y odómetro con microcontrolador PIC
- Medición de velocidad, distancia y ángulo para robots móviles con el sensor LM393 (H206)
Hoy, en este tutorial haremos un prototipo de un medidor de tarifa de taxi digital usando Arduino. Este proyecto calcula la velocidad y la distancia recorrida por la rueda del taxi y la muestra continuamente en una pantalla LCD de 16x2. Y en base a la distancia recorrida, genera el monto de la tarifa cuando presionamos el botón.
La siguiente imagen muestra la configuración completa del proyecto de taxímetro digital
Este prototipo tiene un chasis de automóvil RC con un módulo de sensor de velocidad y una rueda codificadora unida al motor. Una vez que se mide la velocidad, podemos medir la distancia recorrida y encontrar el valor del monto de la tarifa presionando el botón. Podemos configurar la velocidad de la rueda mediante un potenciómetro. Para obtener más información sobre el uso del módulo de sensor de velocidad LM-393 con Arduino, siga el enlace. Veamos una breve introducción del módulo de sensor de velocidad.
Módulo de sensor de velocidad óptico ranurado infrarrojo LM-393
Este es un módulo de tipo ranura que se puede utilizar para medir la velocidad de rotación de las ruedas del codificador. Este módulo de sensor de velocidad funciona con un interruptor óptico de tipo ranura, también conocido como sensor de fuente óptica. Este módulo requiere un voltaje de 3.3V a 5V y produce una salida digital. Por lo que puede interactuar con cualquier microcontrolador.
El sensor de luz infrarroja consta de una fuente de luz (IR-LED) y un sensor de fototransistor. Ambos se colocan con un pequeño espacio entre ellos. Cuando se coloca un objeto entre el espacio del LED IR y el fototransistor, interrumpirá el haz de luz y hará que el fototransistor deje de pasar corriente.
Por lo tanto, con este sensor se usa un disco ranurado (rueda codificadora) que se puede conectar a un motor y cuando la rueda gira con el motor, interrumpe el haz de luz entre el LED IR y el fototransistor que activa y desactiva la salida (creando pulsos).
Por lo tanto, produce una salida ALTA cuando hay una interrupción entre la fuente y el sensor (cuando se coloca cualquier objeto en el medio) y produce una salida BAJA cuando no hay ningún objeto colocado. En el módulo tenemos un LED para indicar la interrupción óptica provocada.
Este módulo viene con IC comparador LM393 que se utiliza para producir señales precisas ALTA y BAJA en la SALIDA. Por lo tanto, este módulo a veces se denomina sensor de velocidad LM393.
Medir la velocidad y la distancia recorrida para calcular la tarifa
Para medir la velocidad de rotación, necesitamos saber el número de ranuras presentes en la rueda del codificador. Tengo una rueda codificadora con 20 ranuras. Cuando giran una rotación completa, tenemos 20 pulsos en la salida. Entonces, para calcular la velocidad, necesitamos el número de pulsos producidos por segundo.
Por ejemplo
Si hay 40 pulsos en un segundo, entonces
Velocidad = Noo. De pulsos / No. de ranuras = 40/20 = 2RPS (Revolución por segundo)
Para calcular la velocidad en RPM (revoluciones por minuto) multiplique por 60.
Velocidad en RPM = 2 X 60 = 120 RPM (Revoluciones por minuto)
Distancia de medición
Medir la distancia recorrida por la rueda es muy simple. Antes de calcular la distancia, se debe conocer la circunferencia de la rueda.
Circunferencia de la rueda = π * d
Donde d es el diámetro de la rueda.
El valor de π es 3,14.
Tengo una rueda (rueda de coche RC) de 6,60 cm de diámetro, por lo que la circunferencia es (20,7 cm).
Entonces, para calcular la distancia recorrida, simplemente multiplique el número de pulsos detectados con la circunferencia.
Distancia recorrida = Circunferencia de la rueda x (No de pulsos / No de ranuras)
Entonces, cuando una rueda de circunferencia de 20,7 cm toma 20 pulsos, que es una rotación de la rueda del codificador, la distancia recorrida por la rueda se calcula mediante
Distancia recorrida = 20,7 x (20/20) = 20,7 cm
Para calcular la distancia en metros, divida el valor de la distancia en cm por 100.
Nota: Esta es una pequeña rueda de coche RC, en tiempo real los coches tienen ruedas más grandes que esta. Así que supongo que la circunferencia de la rueda es de 230 cm en este tutorial.
Cálculo de la tarifa en función de la distancia recorrida
Para obtener el monto total de la tarifa, multiplique la distancia recorrida por la tarifa (monto / metro).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
A continuación, adjunte dos interrupciones externas. La primera interrupción hace que el pin 2 de Arduino sea el pin de interrupción y llama a ISR (cuenta) cuando se detecta un RISING (LOW TO HIGH) en el pin 2. Este pin 2 está conectado a la salida D0 del módulo del sensor de velocidad.
Y el segundo hace que el pin 3 de Arduino sea el pin de interrupción y llame a ISR (generatefare) cuando se detecta ALTO en el pin3. Este pin está conectado al botón pulsador con una resistencia desplegable.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. A continuación , veamos el ISR que usamos aquí:
ISR1- count () ISR se llama cuando ocurre un SUBIR (BAJO A ALTO) en el pin 2 (conectado al sensor de velocidad).
void count () // ISR para conteos del sensor de velocidad { contador ++; // aumenta el valor del contador en una rotación ++; // Incrementa el valor de rotación en un retraso (10); }
ISR2- timerIsr () ISR se llama cada segundo y ejecuta esas líneas presentes dentro del ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); velocidad de flotación = (contador / 20.0) * 60.0; rotaciones de flotación = 230 * (rotación / 20); rotacioninm = rotaciones / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotacioninm); lcd.setCursor (0,1); lcd.print ("Velocidad (RPM):"); lcd.print (velocidad); contador = 0; int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, velocidad del motor); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Esta función contiene las líneas que primero separan el Timer1 y el pin2 de interrupción primero porque tenemos declaraciones de impresión LCD dentro del ISR.
Para calcular la VELOCIDAD en RPM usamos el siguiente código donde 20.0 es el número de ranuras preestablecido en la rueda del codificador.
velocidad de flotación = (contador / 20.0) * 60.0;
Y para calcular la distancia se utiliza el siguiente código:
rotaciones de flotación = 230 * (rotación / 20);
Aquí se supone que la circunferencia de la rueda es de 230 cm (ya que esto es normal para los automóviles en tiempo real)
A continuación, convierta la distancia en m dividiendo la distancia por 100
rotacioninm = rotaciones / 100;
Después de eso, mostramos la VELOCIDAD y la DISTANCIA en la pantalla LCD
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotacioninm); lcd.setCursor (0,1); lcd.print ("Velocidad (RPM):"); lcd.print (velocidad);
IMPORTANTE: Tenemos que restablecer el contador a 0 porque necesitamos obtener el número de ventajas detectadas por segundo, por lo que usamos esta línea
contador = 0;
A continuación, lea el pin analógico A0 y conviértalo en valor digital (0 a 1023) y asigne más esos valores a 0-255 para la salida PWM (velocidad de ajuste del motor) y finalmente escriba esos valores PWM utilizando la función analogWrite que está conectada al ULN2003 Motor IC.
int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, velocidad del motor);
ISR3: generatefare () ISR se utiliza para generar el importe de la tarifa en función de la distancia recorrida. Este ISR se llama cuando el pin de interrupción 3 se detecta en ALTO (cuando se presiona el botón). Esta función separa la interrupción en el pin 2 y la interrupción del temporizador y luego borra la pantalla LCD.
anular generatefare () { detachInterrupt (digitalPinToInterrupt (2)); pin en 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("TARIFA Rs:"); rupias flotantes = rotacióninm * 5; lcd.print (rupias); lcd.setCursor (0,1); lcd.print ("Rs 5 por metro"); }
Después de esa distancia recorrida se multiplica por 5 (he usado 5 para la tarifa INR 5 / metro). Puede cambiar según su deseo.
rupias flotantes = rotacióninm * 5;
Después de calcular el valor de la cantidad, muéstrelo en la pantalla LCD conectada a Arduino.
lcd.setCursor (0,0); lcd.print ("TARIFA Rs:"); lcd.print (rupias); lcd.setCursor (0,1); lcd.print ("Rs 5 por metro");
El código completo y el video de demostración se proporcionan a continuación.
Puede mejorar aún más este prototipo aumentando la precisión, la solidez y agregando más funciones como la aplicación de Android, el pago digital, etc. y desarrollándolo como un producto.