- Infrarød slidsoptisk optisk LM-393 hastighedssensormodul
- Måling af hastighed og tilbagelagt distance til beregning af billetpris
I dag erstatter digitale målere analoge målere i hver sektor, hvad enten det er elmåler eller taxameter. Hovedårsagen til det er analoge målere, der har mekaniske dele, der har tendens til at bære, når de bruges i lang tid, og de er ikke så nøjagtige som digitale målere.
Et godt eksempel på dette er analog hastighedsmåler og kilometertæller, der bruges i gamle motorcykler til måling af hastighed og tilbagelagt afstand. De har specielle dele kaldet tandhjuls- og stativarrangement, hvor et kabel bruges til at rotere speedometerets stift, når hjulet drejes. Dette slides ud, når det bruges i lang tid, og det skal også udskiftes og vedligeholdes.
I digital meter bruges nogle sensorer som optisk afbryder eller hallsensor til at beregne hastighed og afstand i stedet for at bruge mekaniske dele. Dette er mere nøjagtigt end de analoge målere og kræver ingen vedligeholdelse i lang tid. Vi har tidligere bygget mange digitale speedometer-projekter ved hjælp af forskellige sensorer:
- DIY Speedometer ved hjælp af Arduino og Processing Android App
- Digital hastighedsmåler og kilometertællerkredsløb ved hjælp af PIC Microcontroller
- Måling af hastighed, afstand og vinkel for mobile robotter ved hjælp af LM393-sensor (H206)
I dag laver vi i denne vejledning en prototype af et Digital Taxi Fare Meter ved hjælp af Arduino. Dette projekt beregner hastighed og afstand tilbagelagt med taxahjulet og viser det kontinuerligt på 16x2 LCD-display. Og baseret på den tilbagelagte afstand genererer det billetprisen, når vi trykker på trykknappen.
Nedenstående billede viser den komplette opsætning af Digital Taxi Meter Project
Denne prototype har et RC-bilchassis med et hastighedssensormodul og et kodehjul fastgjort til motoren. Når hastigheden er målt, kan vi måle den tilbagelagte afstand og finde værdien for billetprisen ved at trykke på knappen. Vi kan indstille hjulets hastighed ved hjælp af potentiometer. For at lære mere om brug af LM-393 Speed Sensor-modul med Arduino, følg linket. Lad os se en kort introduktion af Speed sensor module.
Infrarød slidsoptisk optisk LM-393 hastighedssensormodul
Dette er et slottypemodul, der kan bruges til at måle omdrejningshastigheden for encoderhjul. Dette hastighedssensormodul fungerer baseret på en optisk afbryder, der også er kendt som optisk kildesensor. Dette modul kræver en spænding på 3,3V til 5V og producerer digital output. Så det kan grænseflade til enhver mikrokontroller.
Infrarød lyssensor består af lyskilde (IR-LED) og en fototransistor-sensor. Begge er placeret med et lille mellemrum imellem dem. Når en genstand placeres mellem afstanden mellem IR-LED og fototransistor, vil den afbryde lysstrålen, hvilket får fototransistoren til at stoppe med at passere strøm.
Således anvendes der med denne sensor en slidset skive (Encoder Wheel), der kan fastgøres til en motor, og når hjulet roterer med motoren, afbryder det lysstrålen mellem IR-LED og fototransistor, der gør output til og fra (Oprettelse af impulser).
Således producerer den HØJ output, når der er afbrydelse mellem kilde og sensor (Når en genstand placeres imellem) og producerer LAV output, når der ikke er nogen genstand placeret. I modulet har vi en LED, der angiver den forårsagede optiske afbrydelse.
Dette modul leveres med LM393 Comparator IC, der bruges til at producere nøjagtige HIGH og LOW signaler ved OUTPUT. Således kaldes dette modul undertiden som LM393 Speed sensor.
Måling af hastighed og tilbagelagt distance til beregning af billetpris
For at måle rotationshastigheden er vi nødt til at kende antallet af slots til stede i kodningshjulet. Jeg har et kodehjul med 20 slots i. Når de roterer en komplet rotation, har vi 20 impulser ved udgangen. Så for at beregne hastighed har vi brug for antal impulser produceret pr. Sekund.
For eksempel
Hvis der er 40 impulser på et sekund, så
Hastighed = Noo. Af impulser / Antal slots = 40/20 = 2RPS (Revolution per sekund)
Til beregning af hastighed i RPM (omdrejninger pr. Minut) ganges med 60.
Hastighed i RPM = 2 X 60 = 120 RPM (Omdrejninger pr. Minut)
Måling af afstand
Det er så simpelt at måle afstanden med rattet. Før afstand beregnes, skal hjulets omkreds være kendt.
Hjulets omkreds = π * d
Hvor d er hjulets diameter.
Værdien af π er 3,14.
Jeg har et hjul (RC bilhjul) med en diameter på 6,60 cm, så omkredsen er (20,7 cm).
Så for at beregne den tilbagelagte afstand skal du blot gange antallet af detekterede impulser med omkredsen.
Kørt distance = hjulets omkreds x (antal impulser / antal slots)
Så når et hjul med en omkreds på 20,7 cm tager 20 impulser, det vil sige en drejning af koderhjulet, beregnes afstanden med hjulet af
Afstand tilbagelagt = 20,7 x (20/20) = 20,7 cm
For at beregne afstanden i meter divider afstanden i cm-værdi med 100.
Bemærk: Dette er et lille RC-hjul, i realtid har biler større hjul end dette. Så jeg antager, at hjulets omkreds er 230 cm i denne vejledning.
Beregning af billetprisen baseret på tilbagelagt distance
For at få det samlede billetpris multipliceres den tilbagelagte afstand med billetprisen (beløb / meter).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Fastgør derefter to eksterne afbrydelser. Første afbrydelse gør Arduino-pin 2 som afbrydelsesstift og kalder ISR (optælling), når der registreres RISING (LOW TO HIGH) ved pin 2. Denne pin 2 er forbundet til D0-udgangen fra hastighedsfølermodulet.
Og den anden gør Arduino pin 3 som afbrydelsesstift og kalder ISR (generatefare), når HIGH registreres ved pin3. Denne stift er forbundet med trykknappen med en pull-down modstand.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Lad os derefter se om den ISR, vi brugte her:
ISR1- count () ISR kaldes, når der sker en RISING (LOW TO HIGH) ved pin 2 (forbundet til hastighedsføler).
ugyldigt antal () // ISR for optællinger fra hastighedssensoren { tæller ++; // øge tællerværdien med en rotation ++; // Forøg rotationsværdien med en forsinkelse (10); }
ISR2-timerIsr () ISR kaldes hvert sekund og udfører de linjer, der findes i ISR.
ugyldig timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); flydehastighed = (tæller / 20,0) * 60,0; flyderotationer = 230 * (rotation / 20); rotationinm = rotationer / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Hastighed (RPM):"); lcd.print (hastighed); tæller = 0; int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, motorhastighed); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Denne funktion indeholder de linjer, der faktisk først afmonterer Timer1 og Interrupt pin2 først, fordi vi har LCD-udskrivningsudsagn inde i ISR.
Til beregning af SPEED i RPM bruger vi nedenstående kode, hvor 20.0 er antallet af forudindstillede slots i encoderhjulet.
flydehastighed = (tæller / 20,0) * 60,0;
Og til beregning af afstand under kode bruges:
flyderotationer = 230 * (rotation / 20);
Her antages omkredsen af hjulet som 230 cm (da dette er normalt for biler i realtid)
Konverter derefter afstanden i m ved at dividere afstanden med 100
rotationinm = rotationer / 100;
Derefter viser vi SPEED og DISTANCE på LCD display
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Hastighed (RPM):"); lcd.print (hastighed);
VIGTIGT: Vi er nødt til at nulstille tælleren til 0, fordi vi skal registrere antallet af plusser i hvert sekund, så vi bruger denne linje
tæller = 0;
Læs derefter den analoge pin A0 og konverter den til digital værdi (0 til 1023), og kortlæg disse værdier yderligere til 0-255 for PWM-output (Indstil motorens hastighed), og skriv endelig disse PWM-værdier ved hjælp af analogWrite- funktion, der er forbundet til ULN2003 Motor IC.
int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, motorspeed);
ISR3: generatefare () ISR bruges til at generere billetprisen baseret på den tilbagelagte afstand. Denne ISR kaldes, når interrupt pin 3 registreres HIGH (Når der trykkes på trykknappen). Denne funktion afbryder afbrydelsen ved pin 2 og timeren afbryder og rydder derefter LCD'et.
ugyldigt generatefare () { detachInterrupt (digitalPinToInterrupt (2)); pin ved 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); flyderup = rotationinm * 5; lcd.print (rupees); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter"); }
Efter at den tilbagelagte afstand er ganget med 5 (jeg har brugt 5 til hastigheden INR 5 / meter). Du kan ændre alt efter dit ønske.
flyderup = rotationinm * 5;
Efter beregning af beløbsværdien vises det på LCD-skærmen, der er tilsluttet Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupees); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter");
Komplet kode og demonstration Video er angivet nedenfor.
Du kan forbedre denne prototype yderligere ved at øge nøjagtigheden, robustheden og tilføje flere funktioner som Android-app, digital betaling osv. Og udvikle den som et produkt.