- Infravörös nyílású optikai LM-393 sebességérzékelő modul
- A sebesség és a megtett távolság mérése a viteldíj kiszámításához
Manapság a digitális mérők minden szektorban felváltják az analóg mérőket, legyen az elektromos fogyasztásmérő vagy taxis viteldíj. Ennek fő oka az, hogy az analóg mérők olyan mechanikus alkatrészekkel rendelkeznek, amelyek hajlamosak kopni, ha hosszú ideig használják őket, és nem olyan pontosak, mint a digitális mérők.
Jó példa erre az analóg sebességmérő és az odométer, amelyet a régi motorkerékpárokban használnak a sebesség és a megtett távolság mérésére. Van egy speciális alkatrészük, az úgynevezett fogaskerék és állvány elrendezés, amelyben egy kábelt használnak a sebességmérő csapjának elforgatásához, amikor a kerék forog. Ez elhúzódik, ha hosszabb ideig használja, és cserére és karbantartásra is szükség van.
A digitális mérőben mechanikus alkatrészek helyett néhány érzékelőt, például optikai megszakítót vagy hall-érzékelőt használnak a sebesség és a távolság kiszámításához. Ez pontosabb, mint az analóg mérők, és nem igényel karbantartást hosszú ideig. Korábban számos digitális sebességmérő projektet építettünk különböző érzékelők felhasználásával:
- Barkácssebességmérő az Arduino használatával és az Android App feldolgozásával
- Digitális sebességmérő és kilométeróra áramkör PIC mikrokontrollerrel
- Sebesség, távolság és szögmérés mobil robotokhoz az LM393 érzékelővel (H206)
Ma ebben az oktatóanyagban egy Arduino segítségével elkészítjük a digitális taximéter számlálójának prototípusát. Ez a projekt kiszámítja a taxi kerekével megtett sebességet és távolságot, és folyamatosan megjeleníti a 16x2 LCD kijelzőn. A megtett távolság alapján pedig viteldíjat generál, amikor megnyomjuk a nyomógombot.
Az alábbi kép a Digital Taxi Meter Project teljes beállítását mutatja
Ez a prototípus RC autó alvázzal rendelkezik, sebességmérő modullal és a motorhoz rögzített jeladó kerékkel. A sebesség mérése után meg tudjuk mérni a megtett távolságot, és a nyomógomb megnyomásával megtalálhatjuk a viteldíj értékét. A kerék sebességét potenciométerrel állíthatjuk be. Ha többet szeretne megtudni az LM-393 sebességérzékelő modul Arduino-val történő használatáról, kövesse a linket. Lássuk a Speed Sensor modul rövid bemutatását.
Infravörös nyílású optikai LM-393 sebességérzékelő modul
Ez egy rés típusú modul, amely felhasználható a kódoló kerekek forgási sebességének mérésére. Ez a sebességérzékelő modul a nyílás típusú optikai megszakítón, más néven optikai forrás érzékelőn működik. Ehhez a modulhoz 3,3 V és 5 V feszültség szükséges, és digitális kimenetet eredményez. Tehát bármilyen mikrovezérlővel összekapcsolható.
Az infravörös fényérzékelő egy fényforrásból (IR-LED) és egy fototranzisztor érzékelőből áll. Mindkettő egy kis réssel van elhelyezve közöttük. Ha egy tárgyat elhelyeznek az IR LED és a fototranzisztor rése között, az megszakítja a fénysugarat, és ezáltal a fototranzisztor megállítja az áram áthaladását.
Így ezzel az érzékelővel egy réselt tárcsát (kódoló kerék) használnak, amelyet egy motorhoz lehet rögzíteni, és amikor a kerék forog a motorral, megszakítja az IR LED és a fototranzisztor közötti fénysugarat, amely be- és kikapcsolja a kimenetet (impulzusok létrehozása).
Így HIGH kimenetet produkál, ha megszakítás van a forrás és az érzékelő között (ha bármilyen tárgy kerül közé), és LOW kimenetet eredményez, ha nincs objektum elhelyezve. A modulban van egy LED, amely jelzi az okozott optikai megszakítást.
Ez a modul az LM393 Comparator IC- vel érkezik, amely pontos HIGH és LOW jelek előállítására szolgál az OUTPUT-on. Ezért ezt a modult néha LM393 sebességérzékelőnek hívják.
A sebesség és a megtett távolság mérése a viteldíj kiszámításához
A forgás sebességének méréséhez tudnunk kell a kódoló kerékben lévő rések számát. Van egy kódoló kerékem, amelyben 20 rés van. Amikor egy teljes forgatást elforgatnak, 20 impulzusunk van a kimeneten. A sebesség kiszámításához tehát másodpercenként előállított impulzusszámra van szükségünk.
Például
Ha egy másodperc alatt 40 impulzus van, akkor
Sebesség = Noo. Impulzusok / rések száma = 40/20 = 2RPS (fordulat / másodperc)
A fordulatszám RPM-ben történő kiszámításához (fordulat / perc) szorozzuk meg 60-mal.
Sebesség fordulatszámban = 2 X 60 = 120 ford / perc (fordulat / perc)
Távolság mérése
A kerék által megtett távolság mérése olyan egyszerű. A távolság kiszámítása előtt ismerni kell a kerék kerületét.
A kerék kerülete = π * d
Ahol d a kerék átmérője.
A π értéke 3,14.
Van egy kerékem (RC autó kerék), amelynek átmérője 6,60 cm, így a kerülete (20,7 cm).
Tehát a megtett távolság kiszámításához egyszerűen szorozzuk meg az észlelt impulzusok számát a kerülettel.
Megtett távolság = Kerék x kerülete (impulzusok száma / rések száma)
Tehát, amikor egy 20,7 cm-es kerületű kerék 20 impulzust vesz igénybe, ami a kódoló kerék egyik forgása, akkor a kerék által megtett távolságot
Megtett távolság = 20,7 x (20/20) = 20,7 cm
A távolság méterben történő kiszámításához ossza el a távolságot cm-ben 100-mal.
Megjegyzés: Ez egy kicsi RC autókerék, valós időben az autók ennél nagyobb kerekekkel rendelkeznek. Tehát feltételezem, hogy ebben az útmutatóban a kerék kerülete 230 cm.
A viteldíj kiszámítása a megtett távolság alapján
A teljes viteldíj összegének megszerzéséhez szorozza meg a megtett távolságot a viteldíj mértékével (összeg / méter).
Timer1.inicialize (1000000); Timer1.attachInterrupt (timerIsr);
Ezután csatlakoztasson két külső megszakítást. Az első megszakítás az Arduino 2-es tűt megszakító csapként hozza létre, és hívja az ISR-t (szám), ha a 2-es érintkezőnél RISING (LOW TO HIGH) van érzékelve. Ez a 2 érintkező a sebességérzékelő modul D0 kimenetéhez csatlakozik.
A második pedig az Arduino 3 tűt állítja megszakító tűként és hívja az ISR-t (generatorfare), amikor a HIGH értéket észleli a pin3-on. Ez a csap a nyomógombhoz van csatlakoztatva egy lehúzható ellenállással.
attachInterrupt (digitalPinToInterrupt (2), számlálás, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Ezután nézzük meg az itt használt ISR-t:
ISR1- count () ISR hívódik meg, ha RISING (LOW to HIGH) történik a 2-es csapnál ( a sebességérzékelőhöz csatlakozva).
void count () // ISR a sebességérzékelő számlálásához { számláló ++; // növelje a számláló értékét egy forgatással ++; // A késés értékének növelése egy késéssel (10); }
ISR2- timerIsr () Az ISR-t másodpercenként meghívják, és végrehajtja az ISR-ben lévő sorokat.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); úszósebesség = (számláló / 20,0) * 60,0; úszó forgás = 230 * (forgás / 20); rotationinm = forgások / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Sebesség (RPM):"); lcd.print (sebesség); számláló = 0; int analóg = analogRead (A0); int motorspeed = térkép (analóg, 0,1023,0,255); analogWrite (5, motorspeed); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Ez a funkció tartalmazza azokat a sorokat, amelyek először először leválasztják a Timer1 és a Pin2 megszakítását, mert az ISR-ben vannak LCD nyomtatási utasítások.
A SPEED RPM- ben történő kiszámításához az alábbi kódot használjuk, ahol 20.0 a kódolókerékben előre beállított rések száma.
úszósebesség = (számláló / 20,0) * 60,0;
És a távolság kiszámításához a kódot használják:
úszó forgás = 230 * (forgás / 20);
Itt a kerék kerületét 230 cm-nek feltételezzük (mivel ez valós idejű autóknál normális)
Ezután konvertálja a távolságot méterben úgy, hogy elosztja a távolságot 100-mal
rotationinm = forgások / 100;
Ezt követően az LCD kijelzőn megjelenik a SPEED és a DISTANCE
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Sebesség (RPM):"); lcd.print (sebesség);
FONTOS: Vissza kell állítanunk a számlálót 0-ra, mert másodpercenként meg kell találnunk az észlelt pluszok számát, ezért ezt a sort használjuk
számláló = 0;
Ezután olvassa el az A0 analóg csapot, és alakítsa át digitális értékre (0 és 1023 között), majd tovább térképezze ezeket az értékeket 0-255 értékre a PWM kimenethez (A motor fordulatszámának beállítása), végül írja le ezeket a PWM értékeket az ULN2003-hoz csatlakoztatott analóg írási funkció segítségével. Motor IC.
int analóg = analogRead (A0); int motorspeed = térkép (analóg, 0,1023,0,255); analogWrite (5, motorspeed);
ISR3: generatorfare () Az ISR a viteldíj összegének a megtett távolság alapján történő előállítására szolgál. Ezt az ISR-t akkor hívják meg, amikor a 3-as megszakító tűt HIGH (a nyomógomb lenyomásakor) érzékeli. Ez a funkció leválasztja a megszakítást a 2. tűről és az időzítő megszakítását, majd kitisztítja az LCD-t.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); pin 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); úszó rúpia = rotáció inm * 5; lcd.print (rúpia); lcd.setCursor (0,1); lcd.print ("Rs 5 méterenként"); }
Ezt követően a megtett távolságot megszorozzuk 5-tel (5-öt használtam az INR 5 / méter sebességhez). Kívánsága szerint változtathat.
úszó rúpia = rotáció inm * 5;
Az összeg kiszámítása után jelenítse meg az Arduino-hoz csatlakoztatott LCD kijelzőn.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rúpia); lcd.setCursor (0,1); lcd.print ("Rs 5 méterenként");
A teljes kód és a bemutató videó az alábbiakban található.
Ezt a prototípust tovább javíthatja azáltal, hogy növeli a pontosságot, a robusztusságot, és további funkciókat ad hozzá, mint például az androidos alkalmazás, a digitális fizetés stb.