- Infračervený štrbinový optický modul snímača rýchlosti LM-393
- Meranie rýchlosti a prejdenej vzdialenosti na výpočet cestovného
Dnes digitálne merače sú nahrádzať analógové metrov v každom sektore, že jeho elektromeru alebo taxi cestovné meter. Hlavným dôvodom sú analógové merače, ktoré majú mechanické časti, ktoré sa pri dlhodobom používaní zvyknú opotrebovať a nie sú také presné ako digitálne merače.
Dobrým príkladom je analógový rýchlomer a počítadlo kilometrov, ktoré sa používajú v starých motocykloch na meranie rýchlosti a prejdenej vzdialenosti. Majú špeciálne časti, ktoré sa nazývajú usporiadanie pastorok a ozubená tyč, v ktorých sa kábel používa na otáčanie čapu rýchlomera pri otáčaní kolesa. Pri dlhodobom používaní sa opotrebováva a vyžaduje si výmenu a údržbu.
V digitálnom merači sa na výpočet rýchlosti a vzdialenosti namiesto mechanických častí používajú niektoré snímače, ako napríklad optický prerušovač alebo Hallov snímač. Je to presnejšie ako analógové merače a nevyžaduje si to dlhšiu dobu žiadnu údržbu. Predtým sme vytvorili mnoho projektov digitálnych rýchlomerov pomocou rôznych senzorov:
- DIY rýchlomer pomocou Arduina a spracovania aplikácie pre Android
- Obvod digitálneho tachometra a počítadla kilometrov pomocou mikrokontroléra PIC
- Meranie rýchlosti, vzdialenosti a uhla pre mobilných robotov pomocou snímača LM393 (H206)
Dnes v tomto výučbe vyrobíme prototyp merača cestovného pomocou digitálneho taxíka pomocou Arduina. Tento projekt počíta rýchlosť a vzdialenosť prejdenú volantom taxíka a nepretržite ich zobrazuje na LCD displeji 16x2. A na základe prejdenej vzdialenosti generuje cestovné po stlačení tlačidla.
Na nasledujúcom obrázku je zobrazené kompletné nastavenie projektu Digital Taxi Meter Project
Tento prototyp má podvozok RC auta s modulom snímača rýchlosti a kódovacím kolesom pripevneným k motoru. Po zmeraní rýchlosti môžeme zmerať prejdenú vzdialenosť a stlačením tlačidla zistiť hodnotu cestovného. Rýchlosť kolesa môžeme nastaviť pomocou potenciometra. Ak sa chcete dozvedieť viac o používaní modulu snímača rýchlosti LM-393 s Arduino, kliknite na odkaz. Pozrime sa na krátke predstavenie modulu snímača rýchlosti.
Infračervený štrbinový optický modul snímača rýchlosti LM-393
Jedná sa o modul typu slot, ktorý sa dá použiť na meranie rýchlosti otáčania kolies kódovacieho zariadenia. Tento modul snímača rýchlosti pracuje na základe optického prerušovača typu slot, ktorý sa tiež nazýva snímač optického zdroja. Tento modul vyžaduje napätie od 3,3 V do 5 V a vytvára digitálny výstup. Môže byť prepojený s akýmkoľvek mikrokontrolérom.
Senzor infračerveného svetla sa skladá zo zdroja svetla (IR-LED) a senzora fototranzistora. Oba sú umiestnené s malou medzerou medzi nimi. Ak je objekt umiestnený medzi medzerou IR LED a fototranzistorom, preruší svetelný lúč a spôsobí, že fototranzistor prestane prechádzať prúdom.
Preto sa u tohto snímača používa štrbinový disk (enkodérové koleso), ktorý je možné pripevniť k motoru, a keď sa koleso otáča s motorom, prerušuje svetelný lúč medzi IR LED a fototranzistorom, ktorý umožňuje zapnutie a vypnutie výstupu (vytváranie impulzov).
Produkuje teda VYSOKÝ výstup, keď dôjde k prerušeniu medzi zdrojom a senzorom (Ak je medzi nimi akýkoľvek objekt) a produkuje nízky výstup, ak nie je umiestnený žiadny objekt. V module máme LED, ktorá indikuje spôsobené optické prerušenie.
Tento modul je dodávaný s komparátorom IC LM393, ktorý sa používa na produkciu presných VYSOKÝCH a NÍZKÝCH signálov na VÝSTUPE. Preto sa tento modul niekedy nazýva snímač rýchlosti LM393.
Meranie rýchlosti a prejdenej vzdialenosti na výpočet cestovného
Na meranie rýchlosti otáčania potrebujeme poznať počet slotov prítomných v kódovacom kolese. Mám enkodérové koleso s 20 slotmi. Keď otočia o jednu úplnú rotáciu, máme na výstupe 20 impulzov. Na výpočet rýchlosti teda potrebujeme počet impulzov vyprodukovaných za sekundu.
Napríklad
Ak je za jednu sekundu 40 impulzov, potom
Rýchlosť = Noo. Impulzov / počet slotov = 40/20 = 2 RPS (otáčky za sekundu)
Pre výpočet rýchlosti v otáčkach za minútu (otáčky za minútu) vynásobte číslom 60.
Rýchlosť v ot / min = 2 x 60 = 120 ot / min (otáčky za minútu)
Meranie vzdialenosti
Meranie vzdialenosti prejdenej kolesom je také jednoduché. Pred výpočtom vzdialenosti by mal byť známy obvod kolesa.
Obvod kolesa = π * d
Kde d je priemer kolesa.
Hodnota π je 3,14.
Mám koleso (koleso RC automobilu) o priemere 6,60 cm, takže obvod je (20,7 cm).
Pre výpočet prejdenej vzdialenosti stačí vynásobiť počet detekovaných impulzov obvodom.
Prejdená vzdialenosť = obvod kolesa x (počet impulzov / počet štrbín)
Takže keď koleso s obvodom 20,7 cm zaberie 20 impulzov, čo je jedna rotácia kolieska kódovacieho zariadenia, potom sa vzdialenosť prejdená kolesom vypočíta z
Prejdená vzdialenosť = 20,7 x (20/20) = 20,7 cm
Pre výpočet vzdialenosti v metroch vydelte vzdialenosť v cm hodnotou 100.
Poznámka: Toto je malé koleso RC auta, v reálnom čase majú autá väčšie kolesá. Takže v tomto návode predpokladám, že obvod kolesa bude 230 cm.
Výpočet cestovného na základe prejdenej vzdialenosti
Ak chcete získať celkovú sumu cestovného, vynásobte prejdenú vzdialenosť sadzbou cestovného (suma / meter).
Timer1.inicializovať (10 000 000); Timer1.attachInterrupt (timerIsr);
Ďalej pripojte dve vonkajšie prerušenia. Prvé prerušenie spôsobí, že pin Arduino 2 je prerušovacím pinom, a zavolá ISR (count), keď je na kolíku 2 zistený RISING (LOW TO HIGH). Tento pin 2 je pripojený k výstupu D0 modulu snímača rýchlosti.
A druhý robí pin Arduino 3 ako prerušovací pin a volá ISR (generatefare), keď sa na pin3 zistí HIGH. Tento pin je pripojený k tlačidlu pomocou sťahovacieho odporu.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Ďalej sa pozrime na ISR, ktoré sme tu použili:
ISR1- count () ISR sa volá, keď sa na kolíku 2 (pripojenom k snímaču rýchlosti) vyskytne RISING (LOW TO HIGH).
void count () // ISR pre počty zo snímača rýchlosti { counter ++; // zvýšenie hodnoty počítadla o jednu rotáciu ++; // Zvýši hodnotu rotácie o jedno oneskorenie (10); }
ISR2- timerIsr () ISR sa volá každú sekundu a vykoná tie riadky, ktoré sa nachádzajú vo vnútri ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); plaváková rýchlosť = (počítadlo / 20,0) * 60,0; plavákové rotácie = 230 * (rotácia / 20); rotationinm = rotácie / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Rýchlosť (RPM):"); lcd.print (rýchlosť); pult = 0; int analogip = analogRead (A0); int motorspeed = mapa (analogip, 0,1023,0,255); analogWrite (5, Motorspeed); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Táto funkcia obsahuje riadky, ktoré najskôr najskôr odpojia Timer1 a Interrupt pin2, pretože vo vnútri ISR máme príkazy na tlač LCD.
Pre výpočet RÝCHLOSTI v RPM použijeme nižšie uvedený kód, kde 20.0 je počet slotov prednastavených v kódovacom koliesku.
plaváková rýchlosť = (počítadlo / 20,0) * 60,0;
A na výpočet vzdialenosti sa používa kód nižšie:
plavákové rotácie = 230 * (rotácia / 20);
Tu sa predpokladá obvod kolesa 230 cm (to je pre autá v reálnom čase bežné)
Ďalej prepočítajte vzdialenosť vm vydelením vzdialenosti 100
rotationinm = rotácie / 100;
Potom sa na LCD displeji zobrazí RÝCHLOSŤ a VZDIALENOSŤ
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Rýchlosť (RPM):"); lcd.print (rýchlosť);
DÔLEŽITÉ: Musíme vynulovať počítadlo na 0, pretože potrebujeme zistiť počet plusov za sekundu, aby sme použili tento riadok
pult = 0;
Ďalej si prečítajte analógový pin A0 a preveďte ho na digitálnu hodnotu (0 až 1023), ďalej tieto hodnoty namapujte na 0-255 pre výstup PWM (nastavenie rýchlosti motora) a nakoniec tieto hodnoty PWM zapíšte pomocou funkcie analogWrite, ktorá je pripojená k ULN2003 Motor IC.
int analogip = analogRead (A0); int motorspeed = mapa (analogip, 0,1023,0,255); analogWrite (5, Motorspeed);
ISR3: generatefare () ISR sa používa na generovanie výšky cestovného na základe prejdenej vzdialenosti. Tento ISR sa volá, keď je kolík prerušenia 3 zistený VYSOKÝ (po stlačení tlačidla). Táto funkcia odpojí prerušenie na kolíku 2 a časovač preruší a potom vymaže LCD.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); pripnúť na 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); float rupie = rotationinm * 5; lcd.print (rupie); lcd.setCursor (0,1); lcd.print („5 Rs za meter“); }
Potom sa prejdená vzdialenosť vynásobí číslom 5 (na rýchlosť INR 5 / meter som použil 5). Môžete sa zmeniť podľa vášho želania.
float rupie = rotationinm * 5;
Po vypočítaní hodnoty množstva ju zobrazte na LCD displeji pripojenom k Arduinu.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupie); lcd.setCursor (0,1); lcd.print („5 Rs za meter“);
Kompletný kód a ukážkové video sú uvedené nižšie.
Tento prototyp môžete ďalej vylepšiť zvýšením presnosti, robustnosti a pridaním ďalších funkcií, ako je aplikácia pre Android, digitálne platby atď., A vyvíjať ho ako produkt.