- Infraröd slitsad optisk LM-393 hastighetssensormodul
- Mätning av hastighet och avstånd för att beräkna priset
Idag ersätter digitala mätare analoga mätare i alla sektorer oavsett om det är elmätare eller taxamätare. Den främsta anledningen till detta är analoga mätare som har mekaniska delar som brukar bära när de används under lång tid och de är inte lika exakta som digitala mätare.
Ett bra exempel för detta är analog hastighetsmätare och vägmätare som används i gamla motorcyklar för att mäta hastighet och körd sträcka. De har specialdelar som kallas tandhjuls- och rackarrangemang där en kabel används för att rotera hastighetsmätarens stift när hjulet roteras. Detta slits ut vid användning under lång tid och behöver också bytas ut och underhållas.
I digital mätare används vissa sensorer som optisk avbrytare eller hallsensor för att beräkna hastighet och avstånd istället för att använda mekaniska delar. Detta är mer exakt än de analoga mätarna och kräver inget underhåll under lång tid. Vi har tidigare byggt många digitala hastighetsprojekt med olika sensorer:
- DIY Speedometer med Arduino och Processing Android App
- Digital hastighetsmätare och vägmätarkrets med PIC-mikrokontroller
- Mätning av hastighet, avstånd och vinkel för mobila robotar med LM393-sensor (H206)
Idag kommer vi i denna handledning att göra en prototyp av en digital taxamätare med Arduino. Detta projekt beräknar hastighet och sträcka som reste med taxihjulet och visar det kontinuerligt på 16x2 LCD-skärm. Och baserat på körd sträcka genereras det prisbelopp när vi trycker på tryckknappen.
Bilden nedan visar den fullständiga installationen av Digital Taxi Meter Project
Denna prototyp har ett RC-bilchassi med en hastighetssensormodul och ett kodarhjul fäst vid motorn. När hastigheten har uppmätts kan vi mäta avståndet och hitta prisbeloppets värde genom att trycka på knappen. Vi kan ställa in hjulets hastighet med potentiometer. För att lära dig mer om hur du använder LM-393 hastighetssensormodul med Arduino, följ länken. Låt oss se en kort introduktion av hastighetssensormodulen.
Infraröd slitsad optisk LM-393 hastighetssensormodul
Detta är en spaltypsmodul som kan användas för att mäta kodningshjulens rotationshastighet. Den här hastighetssensormodulen fungerar baserat på optisk brytare av kortplats, även känd som optisk källsensor. Denna modul kräver en spänning på 3,3V till 5V och producerar digital utgång. Så det kan anslutas till vilken mikrokontroller som helst.
Den infraröda ljussensorn består av ljuskälla (IR-LED) och en fototransistorsensor. Båda är placerade med ett litet mellanrum mellan dem. När ett objekt placeras mellan gapet mellan IR-LED och fototransistor kommer det att avbryta ljusstrålen och orsaka att fototransistorn slutar strömma.
Således med denna sensor används en slitsad skiva (Encoder Wheel) som kan fästas till en motor och när hjulet roterar med motorn avbryter det ljusstrålen mellan IR-LED och fototransistor som gör utgång till och från (skapa pulser).
Således producerar den HÖG utgång när det är avbrott mellan källa och sensor (När något objekt placeras däremellan) och producerar LÅG utgång när det inte finns något föremål placerat. I modulen har vi en LED för att indikera det orsakade optiska avbrottet.
Denna modul levereras med LM393 Comparator IC som används för att producera exakta HÖGA och LÅGA signaler vid UTGÅNGEN. Således kallas denna modul ibland som LM393 Hastighetssensor.
Mätning av hastighet och avstånd för att beräkna priset
För att mäta rotationshastigheten måste vi veta antalet platser som finns i kodarhjulet. Jag har ett kodarhjul med 20 platser i. När de roterar en hel rotation har vi 20 pulser vid utgången. Så för att beräkna hastigheten behöver vi antalet pulser som produceras per sekund.
Till exempel
Om det finns 40 pulser på en sekund, då
Hastighet = Nej. Av pulser / Antal slitsar = 40/20 = 2RPS (Revolution per sekund)
För beräkning av hastighet i RPM (varv per minut) multipliceras med 60.
Varvtal i RPM = 2 X 60 = 120 RPM (Varv per minut)
Mätavstånd
Att mäta avståndet med ratten är så enkelt. Innan avståndet beräknas bör hjulets omkrets vara känd.
Hjulets omkrets = π * d
Där d är hjulets diameter.
Värdet på π är 3,14.
Jag har ett hjul (RC bilhjul) med en diameter på 6,60 cm så att omkretsen är (20,7 cm).
Så för att beräkna det färdade avståndet, multiplicera bara antalet pulser som detekteras med omkretsen.
Körd distans = Hjulets omkrets x (antal pulser / antal slitsar)
Så när ett hjul med omkrets 20,7 cm tar 20 pulser som är en vridning av kodarhjulet beräknas avståndet med hjulet av
Resad sträcka = 20,7 x (20/20) = 20,7 cm
För att beräkna avståndet i meter dividera avståndet i cm-värdet med 100.
Obs: Detta är ett litet RC-bilhjul, i realtid har bilar större hjul än detta. Så jag antar att hjulets omkrets är 230 cm i denna handledning.
Beräkning av biljettpriset baserat på den rest resan
För att få det totala prisbeloppet multiplicerar du det sträcka som du har rest med priset (belopp / meter).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Lägg sedan till två externa avbrott. Första avbrottet gör Arduino-stift 2 som avbrottsstift och ringer till ISR (räkning) när det uppstår RISING (LOW TO HIGH) vid stift 2. Denna stift 2 är ansluten till D0-utgången på hastighetssensormodulen.
Och den andra gör Arduino-stift 3 som avbrottsstift och kallar ISR (generatefare) när HÖG upptäcks vid stift3. Denna stift är ansluten till tryckknappen med ett neddragbart motstånd.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Låt oss sedan se om den ISR vi använde här:
ISR1-räkning () ISR anropas när en RISING (LOW TO HIGH) inträffar vid stift 2 (ansluten till hastighetssensorn).
tomrumsräkning () // ISR för räkningar från hastighetssensorn { counter ++; // öka räknarvärdet med en rotation ++; // Öka rotationsvärdet med en fördröjning (10); }
ISR2-timerIsr () ISR anropas varannan sekund och kör de linjer som finns i ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); flottörhastighet = (räknare / 20,0) * 60,0; flottörrotationer = 230 * (rotation / 20); rotationinm = rotationer / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Hastighet (RPM):"); lcd.print (hastighet); räknare = 0; int analogip = analogRead (A0); int motorspeed = karta (analogip, 0,1023,0,255); analogWrite (5, motorhastighet); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Denna funktion innehåller de rader som faktiskt först tar loss Timer1 och Interrupt pin2 först eftersom vi har LCD-utskriftsuttalanden i ISR.
För beräkning av SPEED i RPM använder vi nedanstående kod där 20.0 är antalet förinställda platser i kodarhjulet.
flottörhastighet = (räknare / 20,0) * 60,0;
Och för att beräkna avståndet nedan används koden:
flottörrotationer = 230 * (rotation / 20);
Här antas hjulets omkrets vara 230 cm (eftersom det är normalt för bilar i realtid)
Konvertera därefter avståndet i m genom att dela avståndet med 100
rotationinm = rotationer / 100;
Därefter visar vi SPEED och DISTANCE på LCD-displayen
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Hastighet (RPM):"); lcd.print (hastighet);
VIKTIGT: Vi måste återställa räknaren till 0 eftersom vi måste få antalet plussar upptäckta per sekund så vi använder den här raden
räknare = 0;
Läs sedan den analoga stift A0 och konvertera den till digitalt värde (0 till 1023) och kartlägg dessa värden vidare till 0-255 för PWM-utgång (Ställ in motorns hastighet) och skriv slutligen dessa PWM-värden med analogWrite- funktion som är ansluten till ULN2003 Motor IC.
int analogip = analogRead (A0); int motorspeed = karta (analogip, 0,1023,0,255); analogWrite (5, motorhastighet);
ISR3: generatefare () ISR används för att generera biljettpriset baserat på det sträcka som har rest. Denna ISR anropas när avbrottsstift 3 detekteras HÖG (När man trycker på knappen). Denna funktion tar bort avbrottet vid stift 2 och timern avbryter och rensar sedan LCD-skärmen.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); stift vid 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); float rupees = rotationinm * 5; lcd.print (rupier); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter"); }
Därefter multipliceras det färdade avståndet med 5 (jag har använt 5 för hastigheten INR 5 / meter). Du kan ändra enligt din önskan.
float rupees = rotationinm * 5;
Efter beräkning av mängdsvärdet visas det på LCD-skärmen ansluten till Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupier); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter");
Komplett kod och demonstration Video ges nedan.
Du kan förbättra denna prototyp ytterligare genom att öka noggrannheten, robustheten och lägga till fler funktioner som Android-app, digital betalning etc och utveckla den som en produkt.