- Infrarød spaltet optisk LM-393 hastighetssensormodul
- Måle hastighet og avstand reist for å beregne billettpris
I dag erstatter digitale målere analoge målere i alle sektorer, enten det er strømmåler eller taxameter. Hovedårsaken til det er analoge målere som har mekaniske deler som har en slitasje når de brukes i lang tid, og de er ikke like nøyaktige som digitale målere.
Et godt eksempel på dette er analog hastighetsmåler og kilometerteller som brukes i gamle motorsykler for å måle hastighet og tilbakelagt avstand. De har spesielle deler som kalles tannhjul og stativ der en kabel brukes til å rotere hastighetsmålerens tapp når hjulet roteres. Dette vil slites når du bruker det i lang tid, og trenger også utskifting og vedlikehold.
I digital måler, i stedet for å bruke mekaniske deler, brukes noen sensorer som optisk avbryter eller hallsensor til å beregne hastighet og avstand. Dette er mer nøyaktig enn de analoge målere og krever ikke noe vedlikehold i lang tid. Vi har tidligere bygget mange digitale speedometer-prosjekter ved hjelp av forskjellige sensorer:
- DIY Speedometer ved hjelp av Arduino og Processing Android App
- Digital hastighetsmåler og kilometertellerkrets ved bruk av PIC Microcontroller
- Hastighets-, avstands- og vinkelmåling for mobile roboter ved bruk av LM393-sensor (H206)
I dag, i denne veiledningen, vil vi lage en prototype av en Digital Taxi Fare Meter ved hjelp av Arduino. Dette prosjektet beregner hastighet og avstand som kjøres med taxihjulet og viser det kontinuerlig på 16x2 LCD-skjerm. Og basert på tilbakelagt avstand genererer det billettbeløpet når vi trykker på trykknappen.
Nedenfor vises det komplette oppsettet av Digital Taxi Meter Project
Denne prototypen har et RC-bilchassis med en hastighetssensormodul og et kodehjul festet til motoren. Når hastigheten er målt, kan vi måle avstanden som er tilbakelagt og finne verdien av prisbeløpet ved å trykke på knappen. Vi kan stille hastigheten på hjulet ved hjelp av potensiometer. For å lære mer om bruk av LM-393 hastighetssensormodul med Arduino, følg lenken. La oss se en kort introduksjon av hastighetssensormodulen.
Infrarød spaltet optisk LM-393 hastighetssensormodul
Dette er en spaltmodul som kan brukes til å måle rotasjonshastigheten til koderhjulene. Denne hastighetssensormodulen fungerer basert på optisk bryter av spaltypen, også kjent som optisk kildesensor. Denne modulen krever en spenning på 3,3V til 5V og produserer digital utgang. Så det kan grensesnitt med hvilken som helst mikrokontroller.
Infrarød lyssensor består av lyskilde (IR-LED) og en fototransistorsensor. Begge er plassert med et lite gap mellom dem. Når en gjenstand plasseres mellom gapet mellom IR-LED og fototransistor, vil den forstyrre lysstrålen og føre til at fototransistoren slutter å passere strøm.
Således brukes denne sensoren med en slisset plate (Encoder Wheel) som kan festes til en motor, og når hjulet roterer med motoren, avbryter den lysstrålen mellom IR-LED og fototransistor som gir utgang på og av (Opprette pulser).
Dermed produserer den HØY utgang når det er avbrudd mellom kilde og sensor (Når noe objekt er plassert i mellom) og produserer LAV utgang når det ikke er noe objekt plassert. I modulen har vi en LED som indikerer den optiske forstyrrelsen som er forårsaket.
Denne modulen leveres med LM393 Comparator IC som brukes til å produsere nøyaktige HIGH og LOW signaler ved OUTPUT. Dermed kalles denne modulen noen ganger som LM393 hastighetssensor.
Måle hastighet og avstand reist for å beregne billettpris
For å måle rotasjonshastigheten, må vi vite antall spor som er tilstede i koderhjulet. Jeg har et kodehjul med 20 spor i. Når de roterer en hel rotasjon, har vi 20 pulser ved utgangen. Så for å beregne hastighet trenger vi antall impulser produsert per sekund.
For eksempel
Hvis det er 40 pulser i løpet av ett sekund, da
Hastighet = Noo. Av pulser / Antall spor = 40/20 = 2RPS (revolusjon per sekund)
For å beregne hastighet i RPM (revolusjoner per minutt) multipliser med 60.
Hastighet i RPM = 2 X 60 = 120 RPM (revolusjoner per minutt)
Måle avstand
Det er så enkelt å måle avstanden med hjulet. Før du beregner avstand, bør hjulets omkrets være kjent.
Hjulets omkrets = π * d
Hvor d er hjulets diameter.
Verdien av π er 3,14.
Jeg har et hjul (RC bilhjul) med en diameter på 6,60 cm så omkretsen er (20,7 cm).
Så for å beregne den tilbakelagte avstanden, multipliser bare antall impulser oppdaget med omkretsen.
Kjørt avstand = hjulets omkrets x (antall pulser / antall spor)
Så når et hjul med omkrets 20,7 cm tar 20 pulser som er en rotasjon av koderhjulet, beregnes avstanden med hjulet av
Avstand som er reist = 20,7 x (20/20) = 20,7 cm
For å beregne avstanden i meter, del avstanden i cm-verdi med 100.
Merk: Dette er et lite RC-bilhjul, i sanntid har biler større hjul enn dette. Så jeg antar at hjulets omkrets er 230 cm i denne opplæringen.
Beregning av billettpris basert på avstand
For å få totalprisbeløpet multipliserer du den tilbakelagte avstanden med billettprisen (beløp / meter).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Deretter fester du to eksterne avbrudd. Første avbrudd gjør Arduino-pinne 2 som avbruddspinne og kaller ISR (count) når det oppdages RISING (LOW TO HIGH) ved pinnen 2. Denne pinnen 2 er koblet til D0-utgangen til hastighetssensormodulen.
Og den andre gjør Arduino-pinnen 3 som avbruddspinne og kaller ISR (generatefare) når HIGH oppdages på pin3. Denne pinnen er koblet til trykknappen med en nedtrekkbar motstand.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. La oss se om ISR vi brukte her:
ISR1- count () ISR kalles når en RISING (LOW TO HIGH) skjer på pinnen 2 (koblet til hastighetssensoren).
void count () // ISR for countings from the speed sensor { counter ++; // øke tellerverdien med en rotasjon ++; // Øk rotasjonsverdien med en forsinkelse (10); }
ISR2-timerIsr () ISR kalles hvert sekund og utfører de linjene som er inne i ISR.
ugyldig timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); flytehastighet = (teller / 20,0) * 60,0; flyterotasjoner = 230 * (rotasjon / 20); rotationinm = rotasjoner / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Speed (RPM):"); lcd.print (hastighet); teller = 0; int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, motorspeed); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Denne funksjonen inneholder linjene som først løsner Timer1 og Interrupt pin2 først fordi vi har LCD-utskriftsuttalelser inne i ISR.
For beregning av SPEED i RPM bruker vi koden nedenfor der 20.0 er antall spor som er forhåndsinnstilt i koderhjulet.
flytehastighet = (teller / 20,0) * 60,0;
Og for å beregne avstand under koden brukes:
flyterotasjoner = 230 * (rotasjon / 20);
Her antas hjulets omkrets 230cm (da dette er normalt for sanntidsbiler)
Konverter deretter avstanden i m ved å dele avstanden med 100
rotationinm = rotasjoner / 100;
Etter det viser vi SPEED og DISTANCE på LCD-skjermen
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Speed (RPM):"); lcd.print (hastighet);
VIKTIG: Vi må nullstille telleren til 0 fordi vi må oppdage antall plusser i hvert sekund, så vi bruker denne linjen
teller = 0;
Les deretter den analoge pinnen A0 og konverter den til digital verdi (0 til 1023) og kartlegg disse verdiene videre til 0-255 for PWM-utgang (Innstillingshastighet på motoren) og til slutt skriv de PWM-verdiene ved hjelp av analogWrite- funksjon som er koblet til ULN2003 Motor IC.
int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, motorspeed);
ISR3: generatefare () ISR brukes til å generere prisbeløpet basert på tilbakelagt avstand. Denne ISR kalles når avbrytingspinne 3 oppdages HØY (når trykk på knappen trykkes). Denne funksjonen løsner avbruddet ved pin 2 og timeren avbryter og tømmer deretter LCD-skjermen.
ugyldig generatefare () { detachInterrupt (digitalPinToInterrupt (2)); pin på 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); float rupees = rotationinm * 5; lcd.print (rupees); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter"); }
Etter at den tilbakelagte avstanden multipliseres med 5 (jeg har brukt 5 for hastigheten INR 5 / meter). Du kan endre etter ditt ønske.
float rupees = rotationinm * 5;
Etter å ha beregnet mengdeverdien, vises den på LCD-skjermen som er koblet til Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupees); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter");
Komplett kode og demonstrasjon Video er gitt nedenfor.
Du kan forbedre denne prototypen ytterligere ved å øke nøyaktigheten, robustheten og legge til flere funksjoner som Android-app, digital betaling osv. Og utvikle den som et produkt.