- Mòdul de sensor de velocitat òptic LM-393 amb ranures infrarogues
- Mesurament de la velocitat i la distància recorreguda per calcular la tarifa
Avui en dia els comptadors digitals substitueixen els comptadors analògics en tots els sectors, ja sigui el comptador d’electricitat o el de tarifa de taxi. La raó principal és que els comptadors analògics tenen parts mecàniques que tendeixen a desgastar-se quan s’utilitzen durant molt de temps i que no són tan precisos com els comptadors digitals.
Un bon exemple d’això és el velocímetre i el comptaquilòmetres analògics que s’utilitzen en motos antigues per mesurar la velocitat i la distància recorreguda. Tenen una composició especial anomenada pinyó i disposició de cremallera en què s’utilitza un cable per girar el passador del velocímetre quan es gira la roda. Això es desgastarà quan s’utilitzi durant un període llarg de temps i també necessita reemplaçament i manteniment.
En el mesurador digital, en lloc d’utilitzar peces mecàniques, s’utilitzen alguns sensors com a interruptor òptic o sensor de sala per calcular la velocitat i la distància. Això és més precís que els comptadors analògics i no requereix cap manteniment durant un llarg període de temps. Anteriorment vam construir molts projectes de velocímetre digital mitjançant diferents sensors:
- Velocímetre de bricolatge mitjançant Arduino i aplicació de processament d'Android
- Circuit de velocímetre i odòmetre digital mitjançant microcontrolador PIC
- Mesura de velocitat, distància i angle per a robots mòbils mitjançant sensor LM393 (H206)
Avui, en aquest tutorial, farem un prototip de comptador de tarifes de taxi digital mitjançant Arduino. Aquest projecte calcula la velocitat i la distància recorreguda per la roda del taxi i la mostra contínuament a la pantalla LCD de 16x2. I en funció de la distància recorreguda, es genera una quantitat de tarifa en prémer el botó.
La imatge següent mostra la configuració completa del projecte Digital Taxi Meter Project

Aquest prototip té un xassís de cotxe RC amb un mòdul de sensor de velocitat i una roda de codificador connectada al motor. Un cop mesurada la velocitat, podem mesurar la distància recorreguda i trobar el valor de la tarifa prement el botó. Podem configurar la velocitat de la roda mitjançant un potenciòmetre. Per obtenir més informació sobre l’ús del mòdul del sensor de velocitat LM-393 amb Arduino, seguiu l’enllaç. Vegem una breu introducció del mòdul del sensor de velocitat.
Mòdul de sensor de velocitat òptic LM-393 amb ranures infrarogues

Es tracta d'un mòdul de ranura que es pot utilitzar per mesurar la velocitat de rotació de les rodes del codificador. Aquest mòdul de sensor de velocitat funciona basat en un interruptor òptic tipus ranura també conegut com a sensor de font òptica. Aquest mòdul requereix una tensió de 3,3 V a 5 V i produeix una sortida digital. Per tant, es pot connectar amb qualsevol microcontrolador.
El sensor de llum infraroja està format per una font de llum (IR-LED) i un sensor de fototransistor. Tots dos es col·loquen amb un petit buit entre ells. Quan un objecte es col·loca entre la bretxa del LED IR i el fototransistor, interromprà el feix de llum provocant que el fototransistor deixi de passar el corrent.

Així, amb aquest sensor s’utilitza un disc ranurat (Roda del codificador) que es pot connectar a un motor i quan la roda gira amb el motor interromp el feix de llum entre el LED IR i el fototransistor que fa que la sortida s’activi i s’apagui (Creació d’impulsos).
Així, produeix una sortida ALTA quan hi ha interrupció entre la font i el sensor (quan es col·loca algun objecte entre si) i produeix una sortida BAIXA quan no hi ha cap objecte col·locat. Al mòdul tenim un LED per indicar la interrupció òptica causada.
Aquest mòdul inclou un IC comparador LM393 que s’utilitza per produir senyals ALTA i BAIXA precisos a la SORTIDA. Per tant, aquest mòdul de vegades es denomina sensor de velocitat LM393.
Mesurament de la velocitat i la distància recorreguda per calcular la tarifa
Per mesurar la velocitat de rotació hem de conèixer el nombre de ranures presents a la roda del codificador. Tinc una roda de codificador amb 20 ranures. Quan giren una rotació completa, tenim 20 impulsos a la sortida. Per calcular la velocitat, necessitem el nombre de polsos produïts per segon.
Per exemple
Si hi ha 40 impulsos en un segon, llavors
Velocitat = No. De polsos / nombre de ranures = 40/20 = 2 RPS (revolució per segon)
Per calcular la velocitat en RPM (revolucions per minut) multipliqueu per 60.
Velocitat en RPM = 2 X 60 = 120 RPM (revolucions per minut)
Mesura de la distància
Mesurar la distància recorreguda per la roda és tan senzill. Abans de calcular la distància, s’ha de conèixer la circumferència de la roda.
Circumferència de la roda = π * d
On d és el diàmetre de la roda.
El valor de π és 3,14.
Tinc una roda (roda de cotxe RC) de 6,60 cm de diàmetre, de manera que la circumferència és de 20,7 cm.
Per calcular la distància recorreguda, només heu de multiplicar el nombre d’impulsos detectats amb la circumferència.
Distància recorreguda = Circumferència de la roda x (nombre de pulsacions / nombre de ranures)
Per tant, quan una roda de circumferència de 20,7 cm pren 20 polsos que és una rotació de la roda del codificador, la distància recorreguda per la roda es calcula per
Distància recorreguda = 20,7 x (20/20) = 20,7cm
Per calcular la distància en metres, divideix la distància en cm per 100.
Nota: es tracta d'una roda petita de cotxe RC, en temps real, els cotxes tenen rodes més grans que aquesta. Així doncs, suposo que la circumferència de la roda serà de 230 cm en aquest tutorial.
Càlcul de la tarifa en funció de la distància recorreguda
Per obtenir l'import total de la tarifa, multipliqueu la distància recorreguda per la tarifa (quantitat / metre).
Temporitzador1.inicialitzar (1000000); Timer1.attachInterrupt (timerIsr);
A continuació, adjunteu dues interrupcions externes. La primera interrupció fa que el pin Arduino 2 sigui pin d'interrupció i crida a ISR (recompte) quan es detecta RISING (LOW TO HIGH) al pin 2. Aquest pin 2 està connectat a la sortida D0 del mòdul del sensor de velocitat.
I el segon fa que el pin 3 d'Arduino com a pin d'interrupció i cridi ISR (generatefare) quan es detecti HIGH al pin3. Aquest passador està connectat al polsador amb una resistència de baixada.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. A continuació, anem a veure la ISR que hem utilitzat aquí:
ISR1- count () ISR es diu quan es produeix un RISING (BAIX A ALT) al pin 2 (connectat al sensor de velocitat).
void count () // ISR per als recomptes del sensor de velocitat { comptador ++; // augmentar el valor del comptador en una rotació ++; // Augmenteu el valor de rotació un retard (10); }
ISR2- timerIsr () ISR es diu cada segon i executa les línies presents dins de l'ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); velocitat de flotació = (comptador / 20,0) * 60,0; rotacions de flotador = 230 * (rotació / 20); rotationinm = rotacions / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Velocitat (RPM):"); lcd.print (velocitat); comptador = 0; int analogip = analogRead (A0); int motorspeed = mapa (analogip, 0,1023,0,255); analogWrite (5, velocitat motora); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Aquesta funció conté les línies que en primer lloc separen primer el temporitzador1 i el pin2 d'interrupció, ja que tenim declaracions d'impressió LCD dins de l'ISR.
Per calcular la VELOCITAT en RPM utilitzem el codi següent, on 20.0 és el nombre de ranures preestablert a la roda del codificador.
velocitat de flotació = (comptador / 20,0) * 60,0;
I per calcular la distància per sota del codi s’utilitza:
rotacions de flotador = 230 * (rotació / 20);
Aquí es suposa que la circumferència de la roda és de 230 cm (ja que és normal per als cotxes en temps real)
A continuació, converteix la distància en m dividint la distància per 100
rotationinm = rotacions / 100;
Després d'això, mostrem la VELOCITAT i la DISTÀNCIA a la pantalla LCD
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Velocitat (RPM):"); lcd.print (velocitat);
IMPORTANT: hem de restablir el comptador a 0 perquè hem d’obtenir el nombre de pluses detectats per segon, de manera que fem servir aquesta línia
comptador = 0;
A continuació, llegiu el pin analògic A0 i convertiu-lo en valor digital (0 a 1023) i assigneu aquests valors a 0-255 per a la sortida PWM (Configuració de la velocitat del motor) i, finalment, escriviu aquests valors PWM mitjançant la funció analogWrite connectada a l'ULN2003. Motor IC.
int analogip = analogRead (A0); int motorspeed = mapa (analogip, 0,1023,0,255); analogWrite (5, velocitat motora);
ISR3: generatefare () ISR s’utilitza per generar l’import de la tarifa en funció de la distància recorreguda. Aquest ISR es diu quan es detecta el PIN d'interrupció 3 ALTA (Quan es prem el botó). Aquesta funció desconnecta la interrupció al pin 2 i la temporitzadora i després esborra la pantalla LCD.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); fixa a 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); rupies flotants = rotationinm * 5; lcd.print (rupies); lcd.setCursor (0,1); lcd.print ("5 rupies per metre"); }
Després d'aquesta distància recorreguda es multiplica per 5 (he utilitzat 5 per a la taxa INR 5 / metre). Podeu canviar segons el vostre desig.
rupies flotants = rotationinm * 5;
Després de calcular el valor de la quantitat, mostreu-lo a la pantalla LCD connectada a Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupies); lcd.setCursor (0,1); lcd.print ("5 rupies per metre");
A continuació es mostra el codi complet i el vídeo de demostració.
Podeu millorar encara més aquest prototip augmentant la precisió, la robustesa i afegint més funcions com l’aplicació per a Android, el pagament digital, etc. i desenvolupar-lo com a producte.
