- Infrasarkano staru slota optiskā ātruma sensora modulis LM-393
- Ātruma un nobraukta attāluma mērīšana, lai aprēķinātu maksu
Mūsdienās digitālie skaitītāji aizstāj analogos skaitītājus katrā sektorā, neatkarīgi no tā, vai tas ir elektrības skaitītājs vai taksometra tarifu skaitītājs. Galvenais iemesls tam ir analogie skaitītāji ar mehāniskām detaļām, kuras mēdz nolietoties, ja tās lieto ilgu laiku, un tās nav tik precīzas kā digitālie skaitītāji.
Labs piemērs tam ir analogais spidometrs un odometrs, ko izmanto vecajos motociklos, lai mērītu ātrumu un nobraukto attālumu. Viņiem ir īpašas detaļas, ko sauc par zobratu un plauktu izvietojumu, kurās kabelis tiek izmantots, lai pagrieztu spidometra tapu, kad ritenis tiek pagriezts. Tas ilgstoši lietojot, nolietosies, kā arī ir nepieciešams nomainīt un uzturēt.
Digitālajā skaitītājā ātruma un attāluma aprēķināšanai tiek izmantoti nevis sensori, bet daži sensori, piemēram, optiskais pārtraucējs vai zāles sensors. Tas ir precīzāk nekā analogie skaitītāji, un tam nav nepieciešama nekāda apkope ilgu laiku. Iepriekš mēs izveidojām daudzus digitālos spidometra projektus, izmantojot dažādus sensorus:
- DIY spidometrs, izmantojot Arduino un apstrādājot Android lietotni
- Digitālais spidometrs un odometra shēma, izmantojot PIC mikrokontrolleru
- Ātruma, attāluma un leņķa mērīšana mobilajiem robotiem, izmantojot sensoru LM393 (H206)
Šodien šajā apmācībā mēs izgatavosim digitālā taksometra braukšanas skaitītāja prototipu, izmantojot Arduino. Šis projekts aprēķina taksometra riteņa nobraukto ātrumu un attālumu un nepārtraukti to parāda 16x2 LCD displejā. Un, pamatojoties uz nobraukto attālumu, tas rada braukšanas maksu, kad mēs nospiežam spiedpogu.
Zemāk redzamajā attēlā parādīta pilnīga digitālā taksometra skaitītāja iestatīšana
Šim prototipam ir RC automašīnas šasija ar ātruma sensora moduli un kodētāja riteni, kas piestiprināts pie motora. Kad ātrums ir izmērīts, mēs varam izmērīt nobraukto attālumu un atrast braukšanas maksas vērtību, nospiežot spiedpogu. Izmantojot potenciometru, mēs varam iestatīt riteņa ātrumu. Lai uzzinātu vairāk par LM-393 ātruma sensora moduļa izmantošanu ar Arduino, sekojiet saitei. Apskatīsim īsu ievadu par ātruma sensora moduli.
Infrasarkano staru slota optiskā ātruma sensora modulis LM-393
Šis ir slota tipa modulis, ko var izmantot kodētāja riteņu griešanās ātruma mērīšanai. Šis ātruma sensora modulis darbojas, pamatojoties uz slota tipa optisko pārtraucēju, kas pazīstams arī kā optiskā avota sensors. Šim modulim nepieciešams spriegums no 3,3 V līdz 5 V, un tas rada digitālo izvadi. Tātad to var sasaistīt ar jebkuru mikrokontrolleru.
Infrasarkanās gaismas sensors sastāv no gaismas avota (IR-LED) un fototransistora sensora. Abi ir novietoti ar nelielu atstarpi starp tām. Ja objekts ir novietots starp IR LED spraugu un fototransistoru, tas pārtrauks gaismas staru, izraisot fototransistora pārtraukšanu.
Tādējādi ar šo sensoru tiek izmantots rievots disks (kodētāja ritenis), kuru var piestiprināt pie motora, un, kad ritenis rotē ar motoru, tas pārtrauc gaismas staru starp IR LED un fototransistoru, kas izeju ieslēdz un izslēdz (impulsu radīšana).
Tādējādi tas rada HIGH izvadi, ja starp avotu un sensoru ir pārtraukums (ja starp tiem tiek ievietots kāds objekts), un rada zemu izvadi, ja nav neviena objekta. Modulī mums ir gaismas diode, kas norāda optisko pārtraukumu.
Šis modulis ir aprīkots ar LM393 Comparator IC, kas tiek izmantots, lai iegūtu precīzu AUGSTU un ZEMU signālu izejā. Tādējādi šo moduli dažkārt sauc par LM393 ātruma sensoru.
Ātruma un nobraukta attāluma mērīšana, lai aprēķinātu maksu
Lai izmērītu rotācijas ātrumu, mums jāzina kodētāja ritenī esošo slotu skaits. Man ir kodētāja ritenis ar 20 spraugām. Kad viņi pagriežas vienā pilnā pagriezienā, pie izejas ir 20 impulsi. Tātad, lai aprēķinātu ātrumu, mums ir nepieciešams saražoto impulsu skaits sekundē.
Piemēram
Ja vienā sekundē ir 40 impulsi, tad
Ātrums = Noo. Impulsu skaits / laika nišu skaits = 40/20 = 2RPS (apgriezieni sekundē)
Ātruma aprēķināšanai RPM (apgriezieni minūtē) reiziniet ar 60.
Ātrums RPM = 2 X 60 = 120 RPM (apgriezieni minūtē)
Attāluma mērīšana
Riteņa nobraukto attālumu izmērīt ir tik vienkārši. Pirms attāluma aprēķināšanas jāzina riteņa apkārtmērs.
Riteņa apkārtmērs = π * d
Kur d ir riteņa diametrs.
Π vērtība ir 3,14.
Man ir ritenis (RC automašīnas ritenis) ar diametru 6,60 cm, tāpēc apkārtmērs ir (20,7 cm).
Tātad, lai aprēķinātu nobraukto attālumu, vienkārši reiziniet konstatēto impulsu skaitu ar apkārtmēru.
Nobrauktais attālums = Riteņa x apkārtmērs (impulsu skaits / slotu skaits)
Tātad, kad riņķis ar apkārtmēru 20,7 cm aizņem 20 impulsus, kas ir viens kodētāja rata pagrieziens, tad ar riteni nobraukto attālumu aprēķina
Nobrauktais attālums = 20,7 x (20/20) = 20,7 cm
Lai aprēķinātu attālumu metros, daliet attālumu cm vērtībā ar 100.
Piezīme: Šis ir mazs RC automašīnas ritenis, reālā laika automašīnām ir lielāki riteņi nekā šim. Tāpēc es pieņemu, ka šajā apmācībā riteņa apkārtmērs ir 230 cm.
Braukšanas maksas aprēķināšana, pamatojoties uz nobraukto attālumu
Lai iegūtu kopējo braukšanas maksu, reiziniet nobraukto attālumu ar braukšanas maksas likmi (summa / metrs).
Taimeris1.inicializēt (1000000); Taimeris1.attachInterrupt (taimerisIr);
Pēc tam piestipriniet divus ārējos pārtraukumus. Pirmais pārtraukums padara Arduino tapu 2 par pārtraucamo tapu un izsauc ISR (skaits), kad tapā 2 ir konstatēts RISING (LOW TO HIGH). Šis kontakts 2 ir savienots ar ātruma sensora moduļa D0 izeju.
Un otrais padara Arduino tapu 3 par pārtraucamo tapu un izsauc ISR (generatorfare), kad pin3 tiek atklāts HIGH. Šī tapa ir savienota ar spiedpogu ar nolaišanas rezistoru.
attachInterrupt (digitalPinToInterrupt (2), skaits, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Tālāk apskatīsim ISR, ko mēs šeit izmantojām:
ISR1- skaits () ISR tiek izsaukts, kad 2. tapā (savienots ar ātruma sensoru) notiek RISING (LOW TO HIGH).
void count () // ISR skaitļiem no ātruma sensora { counter ++; // palielināt skaitītāja vērtību par vienu rotāciju ++; // Palieliniet rotācijas vērtību ar vienu kavēšanos (10); }
ISR2- taimerisIsr () ISR tiek izsaukts katru sekundi un izpilda tās līnijas, kas atrodas ISR iekšienē.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Taimeris1.detachPārtraukt (); lcd.clear (); pludiņa ātrums = (skaitītājs / 20,0) * 60,0; pludiņa rotācijas = 230 * (rotācija / 20); rotationinm = rotācijas / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Ātrums (RPM):"); lcd.print (ātrums); skaitītājs = 0; int analogip = analogRead (A0); int motorspeed = karte (analogais, 0,1023,0,255); analogWrite (5, motora ātrums); Taimeris1.attachInterrupt (taimerisIr); attachInterrupt (digitalPinToInterrupt (2), skaits, RISING); }
Šajā funkcijā ir rindas, kas vispirms vispirms atvieno taimeri1 un pārtrauc pin2, jo ISR iekšpusē ir LCD drukas paziņojumi.
Lai aprēķinātu SPEED RPM, mēs izmantojam zem koda, kur 20.0 ir kodētāja ritenī iepriekš iestatīto slotu skaits.
pludiņa ātrums = (skaitītājs / 20,0) * 60,0;
Attāluma aprēķināšanai zem koda tiek izmantots:
pludiņa rotācijas = 230 * (rotācija / 20);
Šeit tiek pieņemts, ka riteņa apkārtmērs ir 230 cm (jo tas ir normāli reālā laika automašīnām)
Pēc tam pārrēķiniet attālumu m, dalot attālumu ar 100
rotationinm = rotācijas / 100;
Pēc tam LCD displejā parādīsim SPEED un DISTANCE
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Ātrums (RPM):"); lcd.print (ātrums);
SVARĪGI: Mums ir jāiestata skaitītājs uz 0, jo mums jāsaņem sekundē noteikto plusu skaits, tāpēc mēs izmantojam šo līniju
skaitītājs = 0;
Pēc tam izlasiet analogo tapu A0 un pārveidojiet to ciparu vērtībā (no 0 līdz 1023), un pēc tam PWM izejai (motora ātruma iestatīšana) šīs vērtības kartē līdz 0-255 un, visbeidzot, ierakstiet šīs PWM vērtības, izmantojot analogWrite funkciju, kas ir savienota ar ULN2003 Motora IC.
int analogip = analogRead (A0); int motorspeed = karte (analogais, 0,1023,0,255); analogWrite (5, motora ātrums);
ISR3: generatorfare () ISR izmanto, lai izveidotu braukšanas maksu, pamatojoties uz nobraukto attālumu. Šis ISR tiek izsaukts, kad tiek atklāts 3. pārtraukuma kontakts HIGH (nospiežot spiedpogu). Šī funkcija atvieno pārtraukumu 2. tapā un taimera pārtraukumu un pēc tam notīra LCD.
neesošu generatefare () { detachInterrupt (digitalPinToInterrupt (2)); piespraude pie 2. taimera1.detachPārtraukt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); pludinātās rūpijas = rotācija inm * 5; lcd.print (rūpijas); lcd.setCursor (0,1); lcd.print ("Rs 5 uz metru"); }
Pēc tam nobrauktais attālums tiek reizināts ar 5 (ātrumam INR 5 / metrs esmu izmantojis 5). Jūs varat mainīt atbilstoši jūsu vēlmēm.
pludinātās rūpijas = rotācija inm * 5;
Pēc summas vērtības aprēķināšanas parādiet to LCD displejā, kas savienots ar Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rūpijas); lcd.setCursor (0,1); lcd.print ("Rs 5 uz metru");
Pilns kods un demonstrācijas video ir norādīts zemāk.
Jūs varat vēl vairāk uzlabot šo prototipu, palielinot precizitāti, izturību un pievienojot citas funkcijas, piemēram, android lietotni, digitālos maksājumus utt., Un attīstīt to kā produktu.