- Tarvittavat materiaalit
- Nopeuden laskeminen ja näyttäminen analogisella nopeusmittarilla
- Piirikaavio ja liitännät
- Ohjelmoinnin selitys
Ajoneuvon tai moottorin nopeuden / kierrosluvun mittaaminen on aina ollut kiehtova projekti. Tässä projektissa aiomme rakentaa analogisen nopeusmittarin käyttämällä Arduinoa. Käytämme IR Sensor -moduulia nopeuden mittaamiseen. Tähän on olemassa muita tapoja / antureita, kuten hall-anturi nopeuden mittaamiseen, mutta IR-anturin käyttö on helppoa, koska IR-anturimoduuli on hyvin yleinen laite ja voimme saada sen helposti markkinoilta ja sitä voidaan käyttää myös minkä tahansa tyyppisissä laitteissa moottoriajoneuvo.
Tässä projektissa aiomme näyttää nopeuden sekä analogisessa että digitaalisessa muodossa. Tekemällä tämän projektin parannamme myös taitojamme oppia Arduino- ja Stepper-moottoreita, koska tähän projektiin kuuluu keskeytysten ja ajastinten käyttö. Tämän projektin lopussa voit laskea minkä tahansa pyörivän esineen kulkeman nopeuden ja etäisyydet ja näyttää ne 16x2 LCD-näytöllä digitaalisessa muodossa ja myös analogisella mittarilla. Joten aloitetaan tästä nopeusmittarista ja matkamittaripiiristä Arduinolla
Tarvittavat materiaalit
- Arduino
- Bipolaarinen askelmoottori (4 johtoa)
- Askelmoottorin ohjain (L298n-moduuli)
- IR-anturimoduuli
- 16 * 2 LCD-näyttö
- 2.2k vastus
- Johtojen liittäminen
- Leipälauta.
- Virtalähde
- Nopeusmittarin kuvien tulostus
Nopeuden laskeminen ja näyttäminen analogisella nopeusmittarilla
IR- anturi on laite, joka havaitsee kohteen läsnäolon sen edessä. Olemme käyttäneet kahta teräroottoria (puhallinta) ja asettaneet IR-anturin lähelle sitä siten, että joka kerta kun terät pyörivät, IR-anturi havaitsee sen. Sitten käytämme Arduinon ajastimien ja keskeytysten apua laskemaan moottorin yhdelle täydelle pyörimiselle kuluva aika.
Tässä projektissa olemme käyttäneet korkeimman prioriteetin keskeytystä havaitsemaan kierrosluvut ja olemme määrittäneet sen nousevassa tilassa. Joten aina kun anturin ulostulo menee matalasta korkeaksi, toiminto RPMCount () suoritetaan. Ja koska olemme käyttäneet kahta teräroottoria, se tarkoittaa, että toimintoa kutsutaan neljä kertaa yhdellä kierroksella.
Kun käytetty aika on tiedossa, voimme laskea kierrosluvun käyttämällä seuraavia kaavoja: Missä 1000 / käytetty aika antaa RPS: n (kierros / sekunti) ja kertomalla se edelleen 60: llä saat RPM: n (kierros / minuutti)
rpm = (60/2) * (1000 / (millis () - aika)) * REV / terätInFan;
Saatuaan kierrosluvun nopeus voidaan laskea annetulla kaavalla:
Nopeus = rpm * (2 * Pi * säde) / 1000
Tiedämme, että Pi = 3,14 ja säde on 4,7 tuumaa
Mutta ensin meidän on muutettava säde metreiksi tuumista:
säde = ((säde * 2,54) / 100,0) metriä Nopeus = rpm * 60,0 * (2,0 * 3,14 * säde) / 1000,0) kilometreinä tunnissa
Tässä olemme kertoneet kierrosluvun 60: llä kääntääksesi kierrosluvun kierrosta minuutissa (kierros tunnissa) ja jakamalla 1000: lla muuntaa metrit tunnissa kilometreiksi tunnissa.
Kun nopeus on kmh, voimme näyttää nämä arvot suoraan LCD-näytöllä digitaalisessa muodossa, mutta nopeuden näyttämiseksi analogisessa muodossa meidän on tehtävä vielä yksi laskenta, jotta ei. vaiheiden aikana askelmoottorin tulisi liikkua näyttämään nopeus analogisella mittarilla.
Tässä olemme käyttäneet 4-johdinista kaksisuuntaista askelmoottoria analogiselle mittarille, jonka 1,8 asteen keskiarvo on 200 askelta kierrosta kohden.
Nyt meidän on näytettävä 280 Kmh nopeusmittarilla. Joten 280 Kmh: n askelmoottorin näyttämiseksi täytyy liikkua 280 astetta
Joten meillä on maxSpeed = 280
Ja maxSteps tulee olemaan
maxSteps = 280 / 1,8 = 155 askelta
Nyt meillä on Arduino-koodissamme funktio, nimittäin karttatoiminto, jota käytetään tässä nopeuden kartoittamiseen vaiheisiin.
Vaiheet = kartta (nopeus, 0, maxSpeed , 0, maxSteps);
Joten nyt meillä on
vaiheet = kartta (nopeus, 0,280,0, 155);
Vaiheiden laskemisen jälkeen voimme soveltaa näitä vaiheita suoraan askelmoottoritoiminnossa askelmoottorin siirtämiseksi. Meidän on myös huolehdittava askelmoottorin nykyisistä vaiheista tai kulmasta annettujen laskelmien avulla
currSteps = Vaiheet vaiheet = currSteps-preSteps preSteps = currSteps
tässä currSteps on nykyinen vaihe, joka tulee viimeisestä laskelmasta, ja preSteps on viimeinen suoritettu vaihe.
Piirikaavio ja liitännät
Tämän analogisen nopeusmittarin kytkentäkaavio on yksinkertainen, tässä olemme käyttäneet 16x2 nestekidenäyttöä osoittamaan nopeutta digitaalisessa muodossa ja askelmoottoria pyörittämään analogista nopeusmittarin neulaa.
16x2 LCD on kytketty seuraaviin Arduinon analogisiin nastoihin.
RS - A5
RW - GND
FI - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Nestekidenäytön kirkkauden asettamiseen käytetään 2,2 k: n vastusta. IR-anturimoduuli, jota käytetään tuulettimen terän havaitsemiseen kierrosluvun laskemiseksi, on kytketty keskeytykseen 0 tarkoittaa Arduinon D2-nastaa.
Tässä olemme käyttäneet askelmoottorin ohjainta, nimittäin L293N-moduulia. Askelmoottorin ohjaimen IN1, IN2, IN3 ja IN4 nasta on kytketty suoraan Arduinon D8, D9, D10 ja D11. Loput liitännöistä on esitetty piirikaaviossa.
Ohjelmoinnin selitys
Arduino Speedomete r: n täydellinen koodi annetaan lopussa, tässä selitämme muutaman tärkeän osan siitä.
Ohjelmointiosaan olemme sisällyttäneet kaikki vaaditut kirjastot, kuten askelmoottorikirjaston, LiquidCrystal LCD -kirjaston ja ilmoittaneet niitit niille.
#sisältää
Tämän jälkeen olemme ottaneet muutamia muuttujia ja makroja laskelmien suorittamiseksi. Laskelmat selitetään jo edellisessä osassa.
haihtuva tavu REV; allekirjoittamaton pitkä int rpm, RPM; allekirjoittamaton pitkä st = 0; allekirjoittamaton pitkä aika; int ledPin = 13; int led = 0, RPMlen, edellinen RPM; int lippu = 0; int lippu1 = 1; #define bladesInFan 2 kellukkasäde = 4,7; // tuuman int preSteps = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; kelluva minNopeus = 0; kelluva maxSpeed = 280,0; kelluva minVaiheet = 0; float maxSteps = maxSpeed / stepAngle;
Tämän jälkeen on alustaa LCD, Serial, keskeytys ja Askelmoottori on setup toiminto
void setup () { myStepper.setSpeed (60); Sarjan alku (9600); pinMode (ledPin, OUTPUT); lcd-alku (16,2); lcd.print ("Nopeusmittari"); viive (2000); attachInterrupt (0, RPMCount, RISING); }
Tämän jälkeen luemme kierrosluvun silmukka- toiminnossa ja suoritamme laskennan nopeuden saamiseksi ja muunnamme sen vaiheiksi askelmoottorin ajamiseksi näyttämään nopeus analogisessa muodossa.
void loop () { readRPM (); säde = ((säde * 2,54) / 100,0); // muunnos metreinä int Nopeus = ((kelluva) RPM * 60,0 * (2,0 * 3,14 * säde) / 1000,0); // Kierrosluku 60 minuutissa, renkaan halkaisija (2pi r) r on säde, 1000 muunnettavaksi km int Vaiheet = kartta (nopeus, minSpeed, maxSpeed, minSteps, maxSteps); if (lippu1) { Sarja.tulos (nopeus); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Nopeus:"); lcd.print (nopeus); lcd.print ("Km / h"); lippu1 = 0; } int currSteps = Vaiheet;int vaiheet = currSteps-preSteps; preSteps = currSteps; myStepper.step (vaiheet); }
Tässä meillä on reapRPM () -funktio RPM: n laskemiseksi.
int readRPM () { if (REV> = 10 tai millis ()> = st + 1000) // PÄIVITETTÄÄ AFETR JOKA 10 LUKUA tai 1 sekunti tyhjäkäynnillä { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (millis () - aika)) * REV / terätInFan; aika = millis (); REV = 0; int x = rpm; kun (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); Kierrosluku = rpm; viive (500); st = millis (); lippu1 = 1; } }
Lopuksi olemme keskeyttäneet rutiinin, joka on vastuussa kohteen vallankumouksen mittaamisesta
void RPMCount () { REV ++; jos (led == MATALA) { led = KORKEA; } muu { led = LOW; } digitalWrite (ledPin, led); }
Näin voit yksinkertaisesti rakentaa analogisen nopeusmittarin Arduinolla. Tämä voidaan rakentaa myös Hall-anturilla ja nopeus voidaan näyttää älypuhelimessa, noudata samaa Arduino-nopeusmittarin opetusohjelmaa.