- Infračervený štěrbinový optický modul snímače rychlosti LM-393
- Měření rychlosti a ujeté vzdálenosti pro výpočet jízdného
Digitální měřiče dnes nahrazují analogové měřiče ve všech odvětvích, ať už jde o měřiče elektřiny nebo taxislužby. Hlavním důvodem jsou analogové měřicí přístroje, které mají mechanické části, které se při dlouhodobém používání opotřebovávají a nejsou tak přesné jako digitální měřicí přístroje.
Dobrým příkladem je analogový rychloměr a počítadlo kilometrů, které se používají ve starých motocyklech k měření rychlosti a ujeté vzdálenosti. Mají speciální části zvané pastorek a ozubnicové uspořádání, ve kterých se lanko používá k otáčení čepu rychloměru při otáčení kola. Při dlouhodobém používání se opotřebovává a vyžaduje také výměnu a údržbu.
V digitálním měřiči se místo mechanických částí používají k výpočtu rychlosti a vzdálenosti některé senzory, jako je optický přerušovač nebo halový senzor. To je přesnější než u analogových měřičů a nevyžaduje žádnou údržbu po dlouhou dobu. Dříve jsme stavěli mnoho projektů digitálního rychloměru pomocí různých senzorů:
- DIY rychloměr pomocí Arduina a zpracování aplikace pro Android
- Digitální obvod rychloměru a počítadla kilometrů pomocí mikrokontroléru PIC
- Měření rychlosti, vzdálenosti a úhlu pro mobilní roboty pomocí senzoru LM393 (H206)
Dnes v tomto tutoriálu vyrobíme prototyp měřiče jízdného pomocí digitálního taxi pomocí Arduina. Tento projekt počítá rychlost a vzdálenost ujetou kolem taxíku a průběžně ji zobrazuje na 16x2 LCD displeji. A na základě ujeté vzdálenosti generuje výši jízdného, když stiskneme tlačítko.
Níže uvedený obrázek ukazuje kompletní nastavení projektu Digital Taxi Meter Project
Tento prototyp má RC podvozek s modulem snímače rychlosti a kódovacím kolem připojeným k motoru. Jakmile je rychlost změřena, můžeme změřit ujetou vzdálenost a stisknutím tlačítka zjistit hodnotu částky jízdného. Rychlost kola můžeme nastavit pomocí potenciometru. Chcete-li se dozvědět více o používání modulu snímače rychlosti LM-393 s Arduino, klikněte na odkaz. Podívejme se na krátké představení modulu snímače rychlosti.
Infračervený štěrbinový optický modul snímače rychlosti LM-393
Jedná se o modul typu slot, který lze použít k měření rychlosti otáčení kódovacích kol. Tento modul snímače rychlosti pracuje na základě optického přerušovače typu slot, známého také jako snímač optického zdroje. Tento modul vyžaduje napětí 3,3 V až 5 V a vytváří digitální výstup. Lze jej tedy propojit s jakýmkoli mikrokontrolérem.
Senzor infračerveného světla se skládá ze zdroje světla (IR-LED) a senzoru fototranzistoru. Oba jsou umístěny s malou mezerou mezi nimi. Když je objekt umístěn mezi mezeru infračervené LED diody a fototranzistoru, přeruší světelný paprsek a způsobí, že fototranzistor přestane procházet proudem.
U tohoto senzoru se tedy používá štěrbinový disk (Encoder Wheel), který lze připojit k motoru, a když se kolo otáčí s motorem, přeruší světelný paprsek mezi IR LED a fototranzistorem, který umožňuje zapnutí a vypnutí výstupu (vytváření pulsů).
Produkuje tedy VYSOKÝ výstup, když dojde k přerušení mezi zdrojem a senzorem (Když je mezi ně umístěn jakýkoli objekt) a produkuje NÍZKÝ výstup, pokud není umístěn žádný objekt. V modulu máme LED, která indikuje způsobené optické přerušení.
Tento modul je dodáván s komparátorem IC LM393, který se používá k výrobě přesných VYSOKÝCH a NÍZKÝCH signálů na VÝSTUPU. Proto je tento modul někdy nazýván jako snímač rychlosti LM393.
Měření rychlosti a ujeté vzdálenosti pro výpočet jízdného
Abychom změřili rychlost otáčení, potřebujeme znát počet slotů v kodovacím kole. Mám enkodérové kolo s 20 sloty. Když se otočí o jednu úplnou rotaci, máme na výstupu 20 pulzů. Pro výpočet rychlosti tedy potřebujeme počet pulzů vyprodukovaných za sekundu.
Například
Pokud je za jednu sekundu 40 pulzů, pak
Rychlost = Noo. Impulsů / počet slotů = 40/20 = 2RPS (otáčky za sekundu)
Pro výpočet rychlosti v RPM (otáčky za minutu) vynásobte 60.
Rychlost v RPM = 2 X 60 = 120 RPM (otáčky za minutu)
Měření vzdálenosti
Měření vzdálenosti ujeté kolem je tak jednoduché. Před výpočtem vzdálenosti by měl být znám obvod kola.
Obvod kola = π * d
Kde d je průměr kola.
Hodnota π je 3,14.
Mám kolo (RC auto) o průměru 6,60 cm, takže obvod je (20,7 cm).
Chcete-li tedy vypočítat ujetou vzdálenost, vynásobte počet pulzů detekovaných obvodem.
Ujetá vzdálenost = obvod kola x (počet impulzů / počet slotů)
Takže když kolo s obvodem 20,7 cm trvá 20 pulzů, což je jedna rotace kola kodéru, vzdálenost ujetá kolem se vypočítá podle
Ujetá vzdálenost = 20,7 x (20/20) = 20,7 cm
Chcete-li vypočítat vzdálenost v metrech, vydělte vzdálenost v cm hodnotou 100.
Poznámka: Toto je malé RC auto, v reálném čase mají auta větší kola. Takže v tomto tutoriálu předpokládám, že obvod kola bude 230 cm.
Výpočet jízdného na základě ujeté vzdálenosti
Chcete-li získat celkovou výši jízdného, vynásobte ujetou vzdálenost sazbou jízdného (částka / metr).
Časovač 1. inicializovat (10 000 000); Timer1.attachInterrupt (timerIsr);
Dále připojte dvě externí přerušení. První přerušení způsobí, že pin Arduino 2 je přerušovacím pinem, a volá ISR (count), když je na pinu 2 detekován RISING (LOW TO HIGH). Tento pin 2 je připojen k výstupu D0 modulu snímače rychlosti.
A druhý způsobí, že pin Arduino 3 jako přerušovací pin a volá ISR (generatefare), když je na pin3 detekován HIGH. Tento kolík je připojen k tlačítku pomocí stahovacího odporu.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Dále se podívejme na ISR, které jsme zde použili:
ISR1- count () ISR se volá, když na kolíku 2 (připojeném k čidlu rychlosti) nastane RISING (LOW TO HIGH).
void count () // ISR pro počty ze snímače rychlosti { counter ++; // zvýší hodnotu čítače o jednu rotaci ++; // Zvyšte hodnotu rotace o jedno zpoždění (10); }
ISR2- timerIsr () ISR se volá každou sekundu a provádí ty řádky přítomné uvnitř ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); float speed = (counter / 20.0) * 60.0; plovoucí rotace = 230 * (rotace / 20); rotationinm = rotace / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Rychlost (RPM):"); lcd.print (rychlost); counter = 0; int analogip = analogRead (A0); int Motorspeed = mapa (analogip, 0,1023,0,255); analogWrite (5, motorspeed); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Tato funkce obsahuje řádky, které nejprve nejdříve odpojí Timer1 a Interrupt pin2, protože uvnitř ISR máme příkazy k tisku LCD.
Pro výpočet RYCHLOSTI v RPM používáme níže uvedený kód, kde 20.0 je počet slotů přednastavených v enkodérovém kole.
float speed = (counter / 20.0) * 60.0;
A pro výpočet vzdálenosti se používá níže uvedený kód:
plovoucí rotace = 230 * (rotace / 20);
Zde se předpokládá obvod kola 230 cm (u automobilů v reálném čase je to normální)
Dále převeďte vzdálenost vm vydělením vzdálenosti 100
rotationinm = rotace / 100;
Poté zobrazíme RYCHLOST a VZDÁLENOST na LCD displeji
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Rychlost (RPM):"); lcd.print (rychlost);
DŮLEŽITÉ: Musíme vynulovat počítadlo na 0, protože potřebujeme zjistit počet plusů za sekundu, takže použijeme tento řádek
counter = 0;
Dále si přečtěte analogový pin A0 a převeďte jej na digitální hodnotu (0 až 1023) a dále tyto hodnoty namapujte na 0-255 pro výstup PWM (nastavení rychlosti motoru) a nakonec tyto hodnoty PWM zapište pomocí funkce analogWrite, která je připojena k ULN2003 Motor IC.
int analogip = analogRead (A0); int Motorspeed = mapa (analogip, 0,1023,0,255); analogWrite (5, motorspeed);
ISR3: generatefare () ISR se používá ke generování výše jízdného na základě ujeté vzdálenosti. Tento ISR se volá, když je detekován přerušovací kolík 3 VYSOKÝ (Při stisknutí tlačítka). Tato funkce odpojí přerušení na pinu 2 a časovač přeruší a poté vymaže LCD.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); připnout 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 („Rs 5 za metr“); }
Poté se ujetá vzdálenost vynásobí 5 (pro rychlost INR 5 / metr jsem použil 5). Můžete se změnit podle svého přání.
float rupie = rotationinm * 5;
Po výpočtu hodnoty množství ji zobrazte na LCD displeji připojeném k Arduinu.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupie); lcd.setCursor (0,1); lcd.print („Rs 5 za metr“);
Kompletní kód a ukázkové video jsou uvedeny níže.
Tento prototyp můžete dále vylepšit zvýšením přesnosti, robustnosti a přidáním dalších funkcí, jako je aplikace pro Android, digitální platby atd., A vyvíjet jej jako produkt.