- Optički modul osjetnika brzine LM-393 s infracrvenim utorom
- Mjerenje brzine i prijeđene udaljenosti za izračunavanje cijene
Danas digitalna brojila zamjenjuju analogna brojila u svakom sektoru, bilo da se radi o brojilu električne energije ili brojilu taksija. Glavni razlog tome su analogni mjerači koji imaju mehaničke dijelove koji se obično troše kada se koriste dulje vrijeme i nisu toliko precizni kao digitalni mjerači.
Dobar primjer za to su analogni brzinomjer i odometar koji se koriste u starim motociklima za mjerenje brzine i prijeđene udaljenosti. Imaju posebne dijelove koji se nazivaju aranžman i zupčanik u kojima se kabel koristi za okretanje osovine brzinomjera pri okretanju kotača. To će se istrošiti tijekom duže upotrebe, a također treba zamjenu i održavanje.
U digitalnom mjeraču, umjesto upotrebe mehaničkih dijelova, za izračunavanje brzine i udaljenosti koriste se neki senzori poput optičkog prekidača ili Hallovog senzora. Ovo je preciznije od analognih brojila i ne zahtijeva nikakvo održavanje dulje vrijeme. Prethodno smo izgradili mnoge projekte digitalnog brzinomjera koristeći različite senzore:
- Uradi sam brzinomjer pomoću Arduina i Android aplikacije za obradu
- Krug digitalnog brzinomjera i odometra pomoću PIC mikrokontrolera
- Mjerenje brzine, udaljenosti i kuta za mobilne robote pomoću senzora LM393 (H206)
Danas ćemo u ovom uputstvu izraditi prototip digitalnog mjerača cijene taksija pomoću Arduina. Ovaj projekt izračunava brzinu i udaljenost koju je prešao kotač taksija i kontinuirano ga prikazuje na LCD zaslonu 16x2. A na temelju prijeđene udaljenosti generira iznos cijene kada pritisnemo tipku.
Ispod slike prikazana je kompletna postavka projekta Digital Taxi Meter

Ovaj prototip ima RC šasiju automobila s modulom senzora brzine i kotač kodera pričvršćen na motor. Jednom kada se izmjeri brzina, možemo izmjeriti prijeđenu udaljenost i pritisnuti tipku pronaći vrijednost iznosa cijene. Brzinu kotača možemo podesiti pomoću potenciometra. Da biste saznali više o korištenju modula LM-393 osjetnika brzine s Arduinom, slijedite vezu. Pogledajmo kratko uvođenje modula osjetnika brzine.
Optički modul osjetnika brzine LM-393 s infracrvenim utorom

Ovo je modul s utorom koji se može koristiti za mjerenje brzine rotacije kotača davača. Ovaj modul osjetnika brzine radi na temelju optičkog prekidača s utorima koji je poznat i kao senzor optičkog izvora. Ovaj modul zahtijeva napon od 3,3 V do 5 V i daje digitalni izlaz. Tako se može povezati s bilo kojim mikrokontrolerom.
Senzor infracrvene svjetlosti sastoji se od izvora svjetlosti (IR-LED) i fototransistorskog senzora. Obje su postavljene s malim razmakom između njih. Kada se objekt postavi između razmaka IR LED-a i fototranzistora, on će prekinuti svjetlosnu zraku uzrokujući da fototranzistor zaustavi propuštanje struje.

Tako se s ovim senzorom koristi disk s prorezima (kotač enkodera) koji se može pričvrstiti na motor, a kada se kotač okreće s motorom, prekida snop svjetlosti između IR LED-a i fototranzistora koji omogućuje izlaz i uključivanje (stvaranje impulsa).
Tako on proizvodi HIGH izlaz kad postoji prekid između izvora i senzora (Kada je bilo koji objekt postavljen između) i daje LOW izlaz kada nema postavljenog objekta. U modulu imamo LED diodu koja označava uzrokovani optički prekid.
Ovaj modul dolazi s LM393 Comparator IC koji se koristi za stvaranje točnih HIGH i LOW signala na IZLAZU. Stoga se ovaj modul ponekad naziva i LM393 senzor brzine.
Mjerenje brzine i prijeđene udaljenosti za izračunavanje cijene
Za mjerenje brzine rotacije moramo znati broj utora prisutnih na kotaču kodera. Imam kotač kodera s 20 utora. Kad okrenu jedno potpuno okretanje, na izlazu imamo 20 impulsa. Dakle, za izračunavanje brzine potreban nam je broj impulsa proizvedenih u sekundi.
Na primjer
Ako u jednoj sekundi ima 40 impulsa, onda
Brzina = Ne. Od impulsa / broj utora = 40/20 = 2RPS (okretaj u sekundi)
Za izračunavanje brzine u okretajima (okretaja u minuti) pomnožite sa 60.
Brzina u o / min = 2 X 60 = 120 o / min (broj okretaja u minuti)
Mjerenje udaljenosti
Mjerenje udaljenosti pređene volanom je tako jednostavno. Prije izračuna udaljenosti treba znati opseg kotača.
Opseg kotača = π * d
Gdje je d promjer kotača.
Vrijednost π je 3,14.
Imam kotač (RC kotač za automobil) promjera 6,60 cm, tako da je opseg (20,7 cm).
Dakle, da biste izračunali prijeđenu udaljenost, samo pomnožite broj otkrivenih impulsa s opsegom.
Pređena udaljenost = opseg kotača x (broj impulsa / broj utora)
Dakle, kada kotač opsega 20,7 cm uzima 20 impulsa, što je jedno okretanje kotača kodera, tada se put koji je prešao kotačić izračunava
Pređena udaljenost = 20,7 x (20/20) = 20,7 cm
Da biste izračunali udaljenost u metru, podijelite udaljenost u cm vrijednosti sa 100.
Napomena: Ovo je mali RC kotač automobila, au stvarnom vremenu automobili imaju veće kotače od ovog. Dakle, pretpostavljam da bi opseg kotača bio 230 cm u ovom vodiču.
Izračunavanje cijene karte na temelju pređene udaljenosti
Da biste dobili ukupni iznos cijene, pomnožite prijeđenu udaljenost sa tarifom karte (iznos / metar).
Timer1.inicialize (1000000); Timer1.attachInterrupt (timerIsr);
Zatim priložite dva vanjska prekida. Prvi prekid čini Arduino pin 2 prekidnim pinom i poziva ISR (count) kada je na pinu 2 otkriven RISING (LOW TO HIGH). Ovaj pin 2 spojen je na D0 izlaz modula osjetnika brzine.
A drugi čini Arduino pin 3 prekidnim pinom i poziva ISR (generiranje fare) kada se na pin3 detektira HIGH. Ovaj je zatik povezan s gumbom pomoću spuštajućeg otpora.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatedfare , HIGH);
5. Dalje , pogledajmo ISR koji smo ovdje koristili:
ISR1- count () ISR se poziva kada se na pin 2 (spojen na osjetnik brzine) dogodi RISING (NISKO DO VISOKO).
void count () // ISR za brojanja sa senzora brzine { counter ++; // povećanje brojača za jednu rotaciju ++; // Povećaj vrijednost rotacije za jedno kašnjenje (10); }
ISR2- timerIsr () ISR se poziva svake sekunde i izvršava one retke prisutne unutar ISR-a.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); brzina plovka = (brojač / 20,0) * 60,0; rotacije plovka = 230 * (rotacija / 20); okretanjeinm = rotacije / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.tisak (rotacija); lcd.setCursor (0,1); lcd.print ("Brzina (o / min):"); lcd.print (brzina); brojač = 0; int analogip = analogRead (A0); int motorspeed = karta (analogip, 0,1023,0,255); analogWrite (5, brzina motora); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Ova funkcija sadrži retke koji zapravo prvi odvajaju timer1 i prekidni pin2 jer u ISR-u imamo izjave za ispis LCD-a.
Za izračunavanje SPEED-a u o / min koristimo donji kod gdje je 20,0 broj utora unaprijed postavljen na kotaču kodera.
brzina plovka = (brojač / 20,0) * 60,0;
A za izračunavanje udaljenosti koristi se kod:
rotacije plovka = 230 * (rotacija / 20);
Ovdje se pretpostavlja da je opseg kotača 230 cm (što je normalno za automobile u stvarnom vremenu)
Zatim pretvorite udaljenost u m dijeljenjem udaljenosti sa 100
okretanjeinm = rotacije / 100;
Nakon toga prikazujemo BRZINU i DALJINU na LCD zaslonu
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.tisak (rotacija); lcd.setCursor (0,1); lcd.print ("Brzina (o / min):"); lcd.print (brzina);
VAŽNO: Brojač moramo resetirati na 0 jer moramo dobiti broj pluseva otkrivenih u sekundi pa koristimo ovaj redak
brojač = 0;
Zatim pročitajte analogni pin A0 i pretvorite ga u digitalnu vrijednost (0 do 1023) i dalje te vrijednosti preslikajte na 0-255 za PWM izlaz (podešavanje brzine motora) i na kraju zapišite te vrijednosti PWM koristeći funkciju analogWrite koja je povezana na ULN2003 IC motora.
int analogip = analogRead (A0); int motorspeed = karta (analogip, 0,1023,0,255); analogWrite (5, brzina motora);
ISR3: generirajte cijenu () ISR se koristi za generiranje cijene karte na temelju prijeđene udaljenosti. Ovaj se ISR poziva kada se prepozna prekidni pin 3 VISOKO (Kad se pritisne tipka). Ova funkcija odvaja prekid na pinu 2, tajmer prekida i zatim briše LCD.
praznina generira fare () { detachInterrupt (digitalPinToInterrupt (2)); prikvači na 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); plutajuće rupije = rotacija * 5; lcd.print (rupije); lcd.setCursor (0,1); lcd.print ("Rs 5 po metru"); }
Nakon toga prijeđena udaljenost se pomnoži s 5 (upotrijebio sam 5 za INR 5 / metar). Možete se mijenjati prema svojoj želji.
plutajuće rupije = rotacija * 5;
Nakon izračuna vrijednosti iznosa prikažite ga na LCD zaslonu spojenom na Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupije); lcd.setCursor (0,1); lcd.print ("Rs 5 po metru");
Kompletni kod i demonstracijski video prikazan je u nastavku.
Ovaj prototip možete dodatno poboljšati povećavanjem točnosti, robusnosti i dodavanjem više značajki poput android aplikacije, digitalnog plaćanja itd. I razviti ga kao proizvod.
