- Infrapuna-aukkoinen optinen LM-393-nopeusanturimoduuli
- Nopeuden ja kuljetun matkan mittaaminen hinnan laskemiseksi
Nykyään digitaaliset mittarit korvaavat analogiset mittarit kaikilla aloilla, olivatpa ne sitten sähkö- tai taksimittarimittareita. Tärkein syy tähän on, että analogisissa mittareissa on mekaanisia osia, jotka yleensä kuluvat pitkään käytettynä, eivätkä ne ole yhtä tarkkoja kuin digitaaliset mittarit.
Hyvä esimerkki tästä on analoginen nopeusmittari ja matkamittari, jota käytetään vanhoissa moottoripyörissä nopeuden ja kuljetun matkan mittaamiseen. Heillä on erityisosat, joita kutsutaan hammaspyörän ja telineen järjestelyksi, joissa kaapelia käytetään pyörimään nopeusmittarin tapia, kun pyörää pyöritetään. Tämä kuluu pitkäaikaisessa käytössä, ja se on myös vaihdettava ja huollettava.
Digitaalisessa mittarissa käytetään mekaanisten osien sijasta nopeuden ja etäisyyden laskemiseen joitain antureita, kuten optinen katkaisija tai hall-anturi. Tämä on tarkempaa kuin analogiset mittarit eikä vaadi huoltoa pitkään aikaan. Olemme aiemmin rakentaneet monia digitaalisia nopeusmittariprojekteja käyttämällä erilaisia antureita:
- Tee DIY-nopeusmittari Arduinolla ja Android-sovelluksen käsittelyllä
- Digitaalinen nopeusmittari ja matkamittaripiiri PIC-mikrokontrolleria käyttäen
- Nopeuden, etäisyyden ja kulman mittaus mobiiliroboteille LM393-anturia (H206) käyttäen
Tänään tässä opetusohjelmassa teemme prototyypin digitaalisesta taksimaksumittarista Arduinoa käyttämällä. Tämä projekti laskee taksin pyörän kulkeman nopeuden ja matkan ja näyttää sen jatkuvasti 16x2 LCD-näytöllä. Ja kuljetun matkan perusteella se tuottaa hintamäärän, kun painamme painiketta.
Alla olevassa kuvassa näkyy Digital Taxi Meter Projectin täydellinen asennus
Tässä prototyypissä on RC-auton alusta, jossa on nopeusanturimoduuli ja moottoriin kiinnitetty kooderipyörä. Kun nopeus on mitattu, voimme mitata kuljetun matkan ja löytää hinnan arvon painamalla painiketta. Voimme asettaa pyörän nopeuden potentiometrillä. Saat lisätietoja LM-393-nopeusanturimoduulin käytöstä Arduinon kanssa seuraamalla linkkiä. Katsotaanpa lyhyt esittely nopeusanturimoduulista.
Infrapuna-aukkoinen optinen LM-393-nopeusanturimoduuli
Tämä on uratyyppinen moduuli, jota voidaan käyttää enkooderipyörien pyörimisnopeuden mittaamiseen. Tämä nopeusanturimoduuli toimii korttipaikkatyyppisen optisen katkaisijan perusteella, joka tunnetaan myös nimellä optisen lähteen anturi. Tämä moduuli vaatii 3,3 V - 5 V jännitteen ja tuottaa digitaalisen lähdön. Joten se voidaan liittää minkä tahansa mikro-ohjaimen kanssa.
Infrapunavaloanturi koostuu valonlähteestä (IR-LED) ja fototransistorianturista. Molemmat on sijoitettu pieneen rakoon niiden väliin. Kun esine sijoitetaan IR-LEDin ja fototransistorin väliin, se keskeyttää valonsäteen aiheuttaen fototransistorin lopettavan virran.
Siten tämän anturin kanssa käytetään uritettua levyä (kooderipyörää), joka voidaan kiinnittää moottoriin, ja kun pyörä pyörii moottorin kanssa, se keskeyttää valonsäteen IR-LEDin ja valotransistorin välillä, joka antaa lähdön päälle ja pois (pulssien luominen).
Siten se tuottaa HIGH-lähdön, kun lähteen ja anturin välillä on keskeytys (kun mikä tahansa esine asetetaan väliin) ja tuottaa LOW-lähdön, kun mitään kohdetta ei ole asetettu. Moduulissa on LED, joka osoittaa optisen keskeytyksen.
Tämän moduulin mukana tulee LM393 Comparator IC, jota käytetään tuottamaan tarkat KORKEA- ja MATALA-signaalit lähtöön. Siksi tätä moduulia kutsutaan joskus LM393-nopeusanturiksi.
Nopeuden ja kuljetun matkan mittaaminen hinnan laskemiseksi
Pyörimisnopeuden mittaamiseksi meidän on tiedettävä enkooderipyörässä olevien rakojen määrä. Minulla on enkooderipyörä, jossa on 20 paikkaa. Kun ne pyörivät yhtä täydellistä kierrosta, meillä on 20 pulssia lähdössä. Joten nopeuden laskemiseksi tarvitsemme tuotettujen pulssien määrän sekunnissa.
Esimerkiksi
Jos sekunnissa on 40 pulssia, niin
Nopeus = Noo. Pulsseista / aikavälien määrä = 40/20 = 2RPS (kierrosta sekunnissa)
Nopeuden laskemiseksi kierrosta minuutissa (kierrosta minuutissa) kerrotaan 60: llä.
Nopeus kierrosluvulla = 2 X 60 = 120 kierrosta / min (kierrosta minuutissa)
Etäisyyden mittaaminen
Pyörän kulkeman matkan mittaaminen on niin yksinkertaista. Ennen etäisyyden laskemista pyörän ympärysmitta on tiedettävä.
Pyörän ympärysmitta = π * d
Missä d on pyörän halkaisija.
Π: n arvo on 3,14.
Minulla on pyörä (RC-autopyörä), jonka halkaisija on 6,60 cm, joten ympärysmitta on (20,7 cm).
Joten laskeaksesi kuljetun matkan, kerro vain havaittujen pulssien lukumäärä kehällä.
Kuljettu matka = Pyörän ympärysmitta x (pulssien lukumäärä / urien määrä)
Joten kun ympärysmitta 20,7 cm: n pyörä vie 20 pulssia, joka on yksi enkooderipyörän kierros, pyörän kulkeman matkan laskee
Kuljettu matka = 20,7 x (20/20) = 20,7 cm
Jos haluat laskea etäisyyden metreinä, jaa etäisyys cm-arvolla 100: lla.
Huomaa: Tämä on pieni RC-autopyörä, reaaliaikaisissa autoissa on suuremmat pyörät kuin tämä. Joten oletan, että pyörän ympärysmitta on 230 cm tässä opetusohjelmassa.
Hinnan laskeminen kuljetun matkan perusteella
Saadaksesi kokonaishinnan, kerro kuljettu matka hintamäärällä (määrä / metri).
Ajastin1.alusta (1000000); Timer1.attachInterrupt (ajastinIsr);
Seuraavaksi kiinnitä kaksi ulkoista keskeytystä. Ensimmäinen keskeytys tekee Arduino-nasta 2 keskeytysnastaksi ja kutsuu ISR: n (määrä), kun nastasta 2 on havaittu RISING (LOW TO HIGH). Tämä nasta 2 on kytketty nopeusanturimoduulin D0-lähtöön.
Ja toinen tekee Arduino-nastasta 3 keskeytysnastan ja kutsuu ISR: n (generatorfare), kun nasta 3 havaitsee HIGH. Tämä tappi on kytketty painonappiin alasvetovastuksella.
attachInterrupt (digitalPinToInterrupt (2), laskenta, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Seuraavaksi katsotaan ISR, jota käytimme täällä:
ISR1- count () ISR kutsutaan, kun tapissa 2 (kytketty nopeusanturiin) tapahtuu RISING (LOW to HIGH).
void count () // nopeusanturin lukemien ISR- laskuri { counter ++; // lisää laskurin arvoa yhdellä kierroksella ++; // Lisää pyörimisarvoa yhdellä viiveellä (10); }
ISR2- timerIsr () ISR kutsutaan joka sekunti ja suorita ne ISR: n sisällä olevat linjat.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Ajastin1.detachInterrupt (); lcd.clear (); kellunopeus = (laskuri / 20,0) * 60,0; uimurikierros = 230 * (kierto / 20); rotaatio in = kierrot / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotaatio); lcd.setCursor (0,1); lcd.print ("Nopeus (RPM):"); lcd.print (nopeus); laskuri = 0; int analogip = analogRead (A0); int moottorinopeus = kartta (analogia, 0,1023,0255); analogWrite (5, moottorinopeus); Timer1.attachInterrupt (ajastinIsr); attachInterrupt (digitalPinToInterrupt (2), laskenta, RISING); }
Tämä toiminto sisältää rivit, jotka ensin irrottavat ensin ajastimen1 ja keskeytysnastan 2, koska ISR: n sisällä on LCD-tulostuslausekkeita.
Nopeuden laskemiseksi RPM: ssä käytämme alla olevaa koodia, jossa 20.0 on enkooderipyörässä esiasetettujen aikavälien lukumäärä.
kellunopeus = (laskuri / 20,0) * 60,0;
Ja laskettaessa etäisyyttä koodin alapuolella käytetään:
uimurikierros = 230 * (kierto / 20);
Tällöin pyörän ympärysmitaksi oletetaan 230 cm (koska se on normaalia reaaliaikaisille autoille)
Muunna seuraavaksi etäisyys metreinä jakamalla etäisyys 100: lla
rotaatio in = kierrot / 100;
Sen jälkeen näytämme SPEED ja DISTANCE LCD-näytöllä
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotaatio); lcd.setCursor (0,1); lcd.print ("Nopeus (RPM):"); lcd.print (nopeus);
TÄRKEÄÄ: Meidän on palautettava laskuri nollaksi, koska meidän on saatava sekunnissa havaittujen plussien määrä, joten käytämme tätä riviä
laskuri = 0;
Lue seuraavaksi analoginen nasta A0 ja muunna se digitaaliseksi arvoksi (0-1023) ja kartoita nämä arvot 0-255: iin PWM-ulostulolle (moottorin nopeuden asetus) ja kirjoita lopuksi nämä PWM-arvot käyttämällä analogWrite- toimintoa, joka on kytketty ULN2003: een. Moottorin IC.
int analogip = analogRead (A0); int moottorinopeus = kartta (analogia, 0,1023,0255); analogWrite (5, moottorinopeus);
ISR3: generatorfare () ISR: ää käytetään hintamäärän tuottamiseen kuljetun matkan perusteella. Tätä ISR: ää kutsutaan, kun keskeytystappi 3 havaitaan HIGH (kun painonappia painetaan). Tämä toiminto irrottaa keskeytyksen nastasta 2 ja ajastimen keskeytyksestä ja tyhjentää sitten nestekidenäytön.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); tappi 2 Ajastin1.detach Interrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); kelluvat rupiat = rotaatio mm * 5; lcd.print (rupiaa); lcd.setCursor (0,1); lcd.print ("Rs 5 metriä kohti"); }
Sen jälkeen kuljettu matka kerrotaan 5: llä (olen käyttänyt 5: tä nopeuteen INR 5 / metri). Voit vaihtaa toiveidesi mukaan.
kelluva rupia = rotaatio mm * 5;
Laskettuasi määrän arvon näytä se Arduinoon liitetyllä LCD-näytöllä.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupiaa); lcd.setCursor (0,1); lcd.print ("Rs 5 metriä kohti");
Täydellinen koodi ja esittelyvideo on annettu alla.
Voit parantaa tätä prototyyppiä lisäämällä tarkkuutta, kestävyyttä ja lisäämällä muita ominaisuuksia, kuten Android-sovellus, digitaalinen maksu jne., Ja kehittämällä sitä tuotteena.