- Infraraudonųjų spindulių lizdas turinčio optinio greičio jutiklio modulis LM-393
- Greičio ir nuvažiuoto atstumo matavimas norint apskaičiuoti kainą
Šiandien skaitmeniniai skaitikliai pakeičia analoginius skaitiklius kiekviename sektoriuje, nesvarbu, ar tai elektros skaitiklis, ar taksi bilietų skaitiklis. Pagrindinė to priežastis - analoginiai skaitikliai turi mechanines dalis, kurios linkusios dėvėti ilgą laiką, ir jos nėra tokios tikslios kaip skaitmeniniai matuokliai.
Geras to pavyzdys yra analoginis spidometras ir odometras, kurie naudojami senuose motocikluose matuojant greitį ir nuvažiuotą atstumą. Jie turi specialias dalis, vadinamas krumpliaračio ir stovo išdėstymu, kai kabelis naudojamas pasukti greičio matuoklio kaištį, kai ratas pasukamas. Tai nusidėvės ilgą laiką naudojant, todėl ją taip pat reikia pakeisti ir prižiūrėti.
Skaitmeniniame matuoklyje greičiui ir atstumui apskaičiuoti naudojami kai kurie jutikliai, pvz., Optinis pertraukiklis arba salės jutiklis, o ne mechaninės dalys. Tai tiksliau nei analoginiai skaitikliai ir nereikalauja jokios priežiūros ilgą laiką. Anksčiau mes sukūrėme daug skaitmeninių spidometrų projektų, naudodami skirtingus jutiklius:
- Pasidarykite spidometrą naudodami „Arduino“ ir apdorodami „Android“ programą
- Skaitmeninis spidometras ir odometro grandinė naudojant PIC mikrovaldiklį
- Mobiliųjų robotų greičio, atstumo ir kampo matavimas naudojant jutiklį LM393 (H206)
Šiandien šioje pamokoje mes pagaminsime skaitmeninio taksi bilietų matuoklio prototipą naudodami „Arduino“. Šis projektas apskaičiuoja greitį ir nuvažiuotą taksi ratą atstumą ir nuolat jį rodo 16x2 LCD ekrane. Remiantis nuvažiuotu atstumu, gaunama bilieto kaina, kai paspaudžiame mygtuką.
Žemiau esančiame paveikslėlyje parodyta visa „ Digital Taxi Meter Project“ sąranka
Šis prototipas turi RC automobilio važiuoklę su greičio jutiklio moduliu ir prie variklio pritvirtintą kodavimo ratą. Išmatavus greitį, paspaudus mygtuką, galime išmatuoti nuvažiuotą atstumą ir rasti bilieto kainą. Mes galime nustatyti rato greitį naudodami potenciometrą. Norėdami sužinoti daugiau apie LM-393 greičio jutiklio modulio naudojimą su „Arduino“, spustelėkite nuorodą. Pažiūrėkime trumpą greičio jutiklio modulio pristatymą.
Infraraudonųjų spindulių lizdas turinčio optinio greičio jutiklio modulis LM-393
Tai yra lizdo tipo modulis, kurį galima naudoti matuojant kodavimo ratų sukimosi greitį. Šis greičio jutiklio modulis veikia pagal lizdo tipo optinį pertraukiklį, dar vadinamą optinio šaltinio jutikliu. Šiam moduliui reikalinga nuo 3,3 V iki 5 V įtampa ir sukuriama skaitmeninė išvestis. Taigi jį galima susieti su bet kuriuo mikrovaldikliu.
Infraraudonųjų spindulių šviesos jutiklį sudaro šviesos šaltinis (IR-LED) ir fototransistoriaus jutiklis. Abi dedamos su nedideliu tarpu tarp jų. Kai objektas yra tarp IR šviesos diodo tarpo ir fototransistoriaus, jis pertraukia šviesos spindulį, todėl fototransistorius nustoja praeiti srovę.
Taigi su šiuo jutikliu naudojamas lizdinis diskas (kodavimo ratas), kurį galima pritvirtinti prie variklio, o ratas sukasi su varikliu pertraukia šviesos spindulį tarp IR šviesos diodo ir fototransistoriaus, kuris įjungia ir išjungia išvestį (impulsų kūrimas).
Taigi jis sukuria AUKŠTĄ išėjimą, kai tarp šaltinio ir jutiklio yra pertrauka (kai tarp jų yra bet koks objektas), o LOW išvestį, kai nėra jokio objekto. Modulyje turime šviesos diodą, kuris nurodo sukeltą optinį pertraukimą.
Šis modulis yra su „ LM393 Comparator IC“, kuris naudojamas norint gauti tikslius AUKŠTUS ir ŽEMUS signalus išvestyje. Taigi šis modulis kartais vadinamas LM393 greičio jutikliu.
Greičio ir nuvažiuoto atstumo matavimas norint apskaičiuoti kainą
Norėdami išmatuoti sukimosi greitį, turime žinoti kodavimo įrenginio ratelyje esančių angų skaičių. Turiu kodavimo ratuką, kuriame yra 20 angų. Kai jie sukasi visą sukimąsi, išėjime yra 20 impulsų. Taigi, norint apskaičiuoti greitį, reikia impulsų, sukurtų per sekundę, skaičiaus.
Pavyzdžiui
Jei per vieną sekundę yra 40 impulsų, tada
Greitis = Ne. Impulsų / lizdų skaičius = 40/20 = 2RPS (apsisukimai per sekundę)
Apskaičiuojant greitį RPM (apsisukimai per minutę) padauginkite iš 60.
Greitis RPM = 2 X 60 = 120 RPM (apsisukimai per minutę)
Atstumo matavimas
Išmatuoti rato nuvažiuotą atstumą taip paprasta. Prieš apskaičiuojant atstumą, reikia žinoti rato apimtį.
Rato apskritimas = π * d
Kur d yra rato skersmuo.
Π vertė yra 3,14.
Aš turiu ratą (RC automobilio ratą), kurio skersmuo yra 6,60 cm, todėl jo apskritimas yra (20,7 cm).
Taigi, norint apskaičiuoti nuvažiuotą atstumą, tiesiog padauginkite aptiktų impulsų skaičių iš apskritimo.
Nuvažiuotas atstumas = rato x apimtis x (impulsų skaičius / angų skaičius)
Taigi, kai 20,7 cm apskritimo ratas ima 20 impulsų, tai yra vienas kodavimo rato pasukimas, rato nuvažiuotas atstumas apskaičiuojamas pagal
Nuvažiuotas atstumas = 20,7 x (20/20) = 20,7 cm
Norėdami apskaičiuoti atstumą metrais, padalykite atstumą cm verte iš 100.
Pastaba: tai nedidelis RC automobilio ratas, realiuoju laiku automobiliai turi didesnius ratus. Taigi manau, kad šioje instrukcijoje rato apskritimas yra 230 cm.
Skaičiuojant kainą pagal nuvažiuotą atstumą
Norėdami gauti bendrą bilieto kainą, padauginkite nuvažiuotą atstumą iš kainos tarifo (suma / metras).
Laikmatis1.inicijuoti (1000000); Laikmatis1.attachInterrupt (laikmatisIsr);
Tada pritvirtinkite du išorinius pertraukimus. Pirmasis pertraukimas daro „Arduino“ kaištį 2 kaip pertraukimo kaištį ir iškviečia ISR (skaičių), kai 2 kaištyje aptinkama RISING (LOW TO HIGH). Šis kaištis 2 yra prijungtas prie greičio jutiklio modulio D0 išvesties.
Antrasis daro „Arduino“ kaištį 3 kaip pertraukimo kaištį ir iškviečia ISR („generatorfare“), kai PIN3 aptinkama HIGH. Šis kaištis yra sujungtas su nuspaudimo rezistoriumi.
attachInterrupt (digitalPinToInterrupt (2), skaičius, RISING); „attachInterrupt“ („digitalPinToInterrupt“ (3), generavimo kaina , HIGH);
5. Toliau pažiūrėkime apie čia naudotą ISR:
ISR1- skaičius () ISR yra iškviečiamas, kai 2 kaištyje (prijungtame prie greičio jutiklio) įvyksta RISING (LOW TO HIGH).
void count () // ISR skaičiavimams iš greičio jutiklio { counter ++; // padidinkite skaitiklio vertę vienu pasukimu ++; // Padidinkite sukimosi vertę viena vėlavimu (10); }
ISR2- timerIsr () ISR yra iškviečiamas kas sekundę ir įvykdo tas eilutes, esančias ISR viduje.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Laikmatis1.detachInterrupt (); lcd.clear (); plūduriavimo greitis = (skaitiklis / 20,0) * 60,0; plūdės sukimai = 230 * (sukimasis / 20); rotationinm = sukimai / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Greitis (RPM):"); lcd.print (greitis); skaitiklis = 0; int analogip = analogRead (A0); int variklio greitis = žemėlapis (analogas, 0,1023,0,255); analogWrite (5, variklio greitis); Laikmatis1.attachInterrupt (laikmatisIsr); attachInterrupt (digitalPinToInterrupt (2), skaičius, RISING); }
Šioje funkcijoje yra eilutės, kurios pirmiausia pirmiausia atjungia „Timer1“ ir „Interrupt pin2“, nes ISR yra LCD spausdinimo teiginiai.
Skaičiuojant SPEED RPM, mes naudojame žemiau esantį kodą, kur 20.0 yra iš anksto nustatytų laiko tarpsnių skaičius kodavimo įrenginyje.
plūduriavimo greitis = (skaitiklis / 20,0) * 60,0;
Skaičiuojant atstumą žemiau kodas naudojamas:
plūdės sukimai = 230 * (pasukimas / 20);
Čia manoma, kad rato apskritimo apimtis yra 230 cm (nes tai yra įprasta automobiliams realiu laiku)
Tada konvertuokite atstumą m, padalydami atstumą iš 100
rotationinm = sukimai / 100;
Po to LCD ekrane rodome SPEED ir DISTANCE
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Greitis (RPM):"); lcd.print (greitis);
SVARBU: Turime iš naujo nustatyti skaitiklį į 0, nes turime gauti per sekundę aptiktų pliusų skaičių, todėl naudojame šią eilutę
skaitiklis = 0;
Tada perskaitykite analoginį kaištį A0 ir konvertuokite jį į skaitmeninę vertę (nuo 0 iki 1023) ir toliau priskirkite šias vertes 0–255 PWM išėjimui (variklio greičio nustatymas) ir galiausiai užrašykite tas PWM reikšmes naudodami „ analogWrite“ funkciją, kuri yra prijungta prie ULN2003 Variklio IC.
int analogip = analogRead (A0); int variklio greitis = žemėlapis (analogas, 0,1023,0,255); analogWrite (5, variklio greitis);
ISR3: generuoti bilietą () ISR naudojama norint sukurti bilieto kainą pagal nuvažiuotą atstumą. Šis ISR yra iškviečiamas, kai aptinkamas 3 pertraukimo kaištis HIGH (kai paspaudžiamas mygtukas). Ši funkcija atjungia pertraukimą 2 kaištyje, o laikmatis pertraukia ir tada išvalo skystųjų kristalų ekraną.
void generatorfare () { detachInterrupt (digitalPinToInterrupt (2)); smeigtukas 2 laikmatyje1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); plūdės rupijos = rotacija inm * 5; lcd.print (rupijos); lcd.setCursor (0,1); lcd.print ("Rs 5 už metrą"); }
Po to nuvažiuotas atstumas padauginamas iš 5 (aš naudoju 5, kad norma INR 5 / metras). Galite keisti pagal savo norą.
plūdinės rupijos = rotacija inm * 5;
Apskaičiavus sumos vertę, parodykite ją LCD ekrane, prijungtame prie „Arduino“.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupijos); lcd.setCursor (0,1); lcd.print ("Rs 5 už metrą");
Pilnas kodas ir demonstracinis vaizdo įrašas pateikiamas žemiau.
Galite toliau tobulinti šį prototipą, padidindami tikslumą, tvirtumą ir pridėdami daugiau funkcijų, tokių kaip „Android“ programa, skaitmeniniai mokėjimai ir kt., Ir sukursite jį kaip produktą.