- Optični senzorski modul LM-393 z infrardečim režami
- Merjenje hitrosti in prevožene razdalje za izračun cene vozovnice
Danes digitalni števci nadomeščajo analogne števce v vseh sektorjih, ne glede na to, ali gre za števce električne energije ali taksimere. Glavni razlog za to so analogni števci, ki imajo mehanske dele, ki se ob dolgotrajni uporabi običajno obrabijo in niso tako natančni kot digitalni merilniki.
Dober primer za to sta analogni merilnik hitrosti in števec kilometrov, ki se v starih motornih koles uporablja za merjenje hitrosti in prevožene razdalje. Imajo posebne dele, imenovane zobnik in razporeditev stojal, pri katerih se kabel uporablja za vrtenje zatiča merilnika hitrosti pri vrtenju kolesa. Ta se bo dolgotrajno obrabljala, prav tako pa jo je treba zamenjati in vzdrževati.
Pri digitalnem števcu se za izračun hitrosti in razdalje namesto mehanskih delov uporabljajo nekateri senzorji, kot sta optični prekinilnik ali Hallov senzor. Ta je natančnejši od analognih števcev in ne zahteva daljšega vzdrževanja. Pred tem smo zgradili številne projekte digitalnega merilnika hitrosti z uporabo različnih senzorjev:
- DIY merilnik hitrosti z uporabo Arduino in obdelavo Android App
- Vezje digitalnega merilnika hitrosti in števca kilometrov z uporabo mikrokrmilnika PIC
- Merjenje hitrosti, razdalje in kota za mobilne robote z uporabo senzorja LM393 (H206)
Danes bomo v tej vadnici izdelali prototip digitalnega merilnika vozovnic za taksi z uporabo Arduina. Ta projekt izračuna hitrost in razdaljo, ki jo prevozi kolo taksija, in jo neprestano prikazuje na LCD zaslonu 16x2. In na podlagi prevožene razdalje ustvari znesek prevoznine, ko pritisnemo gumb.
Spodnja slika prikazuje celotno nastavitev projekta Digital Taxi Meter
Ta prototip ima avtomobilsko podvozje RC z modulom senzorja hitrosti in kolesom dajalnika, pritrjenim na motor. Ko izmerimo hitrost, lahko s pritiskom na gumb izmerimo prevoženo razdaljo in poiščemo vrednost zneska vozovnice. Hitrost kolesa lahko nastavimo s potenciometrom. Če želite izvedeti več o uporabi modula senzorja hitrosti LM-393 z Arduino, sledite povezavi. Oglejmo si kratko predstavitev modula senzorja hitrosti.
Optični senzorski modul LM-393 z infrardečim režami
To je modul z režami, ki se lahko uporablja za merjenje hitrosti vrtenja koles dajalnika. Ta modul senzorja hitrosti deluje na osnovi optičnega pretvornika z režo, znanega tudi kot senzor optičnega vira. Ta modul zahteva napetost od 3,3 V do 5 V in proizvaja digitalni izhod. Tako ga je mogoče povezati s katerim koli mikrokrmilnikom.
Infrardeči svetlobni senzor je sestavljen iz svetlobnega vira (IR-LED) in fototranzistorskega senzorja. Oba sta postavljena z majhno režo med njima. Ko je predmet nameščen med režo IR LED in fototranzistorjem, bo prekinil svetlobni žarek, zaradi česar fototranzistor preneha prenašati tok.
Tako se s tem senzorjem uporablja diskovni disk (Encoder Wheel), ki ga je mogoče pritrditi na motor in ko se kolo vrti z motorjem, prekine svetlobni žarek med IR LED in fototranzistorjem, ki omogoča vklop in izklop izhoda (ustvarjanje impulzov).
Tako ustvari HIGH izhod, kadar pride do prekinitve med virom in senzorjem (kadar je vmes postavljen kateri koli predmet), in kadar ni nobenega predmeta, odda LOW izhod. V modulu imamo LED, ki označuje povzročeno optično prekinitev.
Ta modul je opremljen s primerjalno IC LM393, ki se uporablja za izdelavo natančnih HIGH in LOW signalov na IZHODU. Tako ta modul včasih imenujejo tudi senzor hitrosti LM393.
Merjenje hitrosti in prevožene razdalje za izračun cene vozovnice
Za merjenje hitrosti vrtenja moramo poznati število rež v kolesu dajalnika. Imam dajalno kolo z 20 režami. Ko zavrtita eno popolno rotacijo, imamo na izhodu 20 impulzov. Torej za izračun hitrosti potrebujemo število impulzov, proizvedenih na sekundo.
Na primer
Če je v eni sekundi 40 impulzov, potem
Hitrost = Ne. Impulzov / število rež = 40/20 = 2RPS (vrtljaji na sekundo)
Za izračun hitrosti v vrtljajih na minuto (vrtljaji v minuti) pomnožite s 60.
Hitrost v vrt / min = 2 X 60 = 120 vrt / min (vrtljajev v minuti)
Merilna razdalja
Merjenje razdalje, ki jo prevozi kolo, je tako preprosto. Pred izračunom razdalje je treba poznati obseg kolesa.
Obseg kolesa = π * d
Kjer je d premer kolesa.
Vrednost π je 3,14.
Imam kolo (RC avtomobilsko kolo) s premerom 6,60 cm, tako da je obseg (20,7 cm).
Torej za izračun prevožene razdalje pomnožite število zaznanih impulzov z obsegom.
Prevožena razdalja = Obseg kolesa x (število impulzov / število rež)
Torej, ko kolo s premerom 20,7 cm vzame 20 impulzov, to je eno vrtenje kolesa dajalnika, se razdalja, ki jo prevozi kolo, izračuna
Prevožena razdalja = 20,7 x (20/20) = 20,7 cm
Za izračun razdalje v metrih razdaljo v cm razdelite na 100.
Opomba: To je majhno RC avtomobilsko kolo, v realnem času imajo avtomobili večja kolesa od tega. Torej predvidevam, da je obseg kolesa v tej vadnici 230 cm.
Izračun prevoznine na podlagi prevožene razdalje
Če želite dobiti celoten znesek vozovnice, pomnožite prevoženo razdaljo s ceno vozovnice (znesek / meter).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Nato priložite dve zunanji prekinitvi. Prva prekinitev naredi pin Arduino 2 kot prekinitveni zatič in pokliče ISR (count), ko je na zatiču 2 zaznan RISING (LOW TO HIGH). Ta pin 2 je povezan z izhodom D0 modula senzorja hitrosti.
In drugi naredi Arduino pin 3 kot prekinitveni pin in pokliče ISR (generiranje fare), ko je na pin3 zaznan HIGH Ta zatič je s potisnim uporom povezan s tipko.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Nato si oglejmo ISR, ki smo ga uporabili tukaj:
ISR1- count () ISR se prikliče, ko se na zatiču 2 (povezan s senzorjem hitrosti) zgodi RISING (LOW TO HIGH)
void count () // ISR za štetje s senzorja hitrosti { counter ++; // povečanje vrednosti števca za eno rotacijo ++; // Povečaj vrednost vrtenja za eno zamudo (10); }
ISR2- timerIsr () ISR se pokliče vsako sekundo in izvede tiste vrstice, ki so znotraj ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); hitrost plovca = (števec / 20,0) * 60,0; rotacije plovca = 230 * (rotacija / 20); rotacijam = rotacije / 100; lcd.setCursor (0,0); lcd.print ("Razdalja (m):"); lcd.print (rotainm); lcd.setCursor (0,1); lcd.print ("Hitrost (RPM):"); lcd.print (hitrost); števec = 0; int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, hitrost motorja); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Ta funkcija vsebuje vrstice, ki najprej najprej odklopijo timer1 in Interrupt pin2, ker imamo v ISR izjave za tiskanje LCD.
Za izračun hitrosti v vrtljajih na minuto uporabljamo spodnjo kodo, kjer je 20,0 število rež v prednastavljenem kolesu dajalnika.
hitrost plovca = (števec / 20,0) * 60,0;
Za izračun razdalje se uporablja spodnja koda:
rotacije plovca = 230 * (rotacija / 20);
Tu se domneva, da je obseg kolesa 230 cm (kot je to običajno za avtomobile v realnem času)
Nato razdaljo pretvorite v m tako, da razdaljo delite s 100
rotacijam = rotacije / 100;
Nato na LCD zaslonu prikažemo HITROST in ODDALJENOST
lcd.setCursor (0,0); lcd.print ("Razdalja (m):"); lcd.print (rotainm); lcd.setCursor (0,1); lcd.print ("Hitrost (RPM):"); lcd.print (hitrost);
POMEMBNO: Števec moramo ponastaviti na 0, ker moramo dobiti število zaznanih plusov na sekundo, zato uporabljamo to vrstico
števec = 0;
Nato preberite analogni zatič A0 in ga pretvorite v digitalno vrednost (0 do 1023) in nato te vrednosti preslikajte na 0-255 za izhod PWM (nastavitev hitrosti motorja) in na koncu te vrednosti PWM zapišite s funkcijo analogWrite, ki je priključena na ULN2003 IC motorja.
int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, hitrost motorja);
ISR3: generirajte vozovnico () ISR se uporablja za ustvarjanje zneska prevoznine na podlagi prevožene razdalje. Ta ISR se pokliče, ko je prekinitveni zatič 3 zaznan HIGH (ob pritisku na gumb). Ta funkcija loči prekinitev na zatiču 2, prekinjevalec časovnika in nato izbriše LCD.
void generiraj fare () { detachInterrupt (digitalPinToInterrupt (2)); zatič na 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); plavajoče rupije = rotacija * 5; lcd.print (rupije); lcd.setCursor (0,1); lcd.print ("5 Rs na meter"); }
Po tem se prevožena razdalja pomnoži s 5 (porabil sem 5 za stopnjo INR 5 / meter). Lahko se spreminjate po svoji želji.
plavajoče rupije = rotacija * 5;
Po izračunu vrednosti zneska jo prikažite na LCD zaslonu, ki je povezan z Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupije); lcd.setCursor (0,1); lcd.print ("5 Rs na meter");
Celotna koda in predstavitveni video je podan spodaj.
Ta prototip lahko še izboljšate tako, da povečate natančnost, robustnost in dodate več funkcij, kot so aplikacija za Android, digitalno plačilo itd., In ga razvijete kot izdelek.