- Nødvendig materiale
- Beregner hastighet og viser den på analogt hastighetsmåler
- Kretsdiagram og tilkoblinger
- Programmering Forklaring
Å måle hastigheten / o / min på et kjøretøy eller en motor har alltid vært et fascinerende prosjekt å prøve. I dette prosjektet skal vi bygge et analogt hastighetsmåler ved hjelp av Arduino. Vi vil bruke IR-sensormodulen for å måle hastigheten. Det er andre måter / sensorer for dette, som hallsensor for å måle hastighet, men det er enkelt å bruke en IR-sensor fordi IR-sensormodulen er veldig vanlig enhet, og vi kan få den enkelt fra markedet, og den kan også brukes på alle typer motorkjøretøy.
I dette prosjektet skal vi vise fart i både analog og digital form. Ved å gjøre dette prosjektet vil vi også forbedre ferdighetene våre i å lære Arduino og Stepper motor siden dette prosjektet innebærer bruk av Interrupts and Timers. På slutten av dette prosjektet vil du kunne beregne hastigheten og avstandene dekket av et roterende objekt og vise dem på en 16x2 LCD-skjerm i digitalt format og også på en analog måler. Så la oss starte med dette hastighetsmåleren og kilometertellerkretsen med Arduino
Nødvendig materiale
- Arduino
- En bipolar trinnmotor (4 ledere)
- Stepper motor driver (L298n Module)
- IR-sensormodul
- 16 * 2 LCD-skjerm
- 2,2 k motstand
- Koble ledninger
- Brettbrett.
- Strømforsyning
- Hastighetsmåler bildeutskrift
Beregner hastighet og viser den på analogt hastighetsmåler
En IR- sensor er en enhet som kan oppdage tilstedeværelsen av et objekt foran den. Vi har brukt to bladrotorer (vifte) og plassert IR-sensoren i nærheten av den på en slik måte at hver gang bladene roterer, oppdager IR-sensoren den. Vi bruker deretter hjelp av timere og Interrupts i Arduino for å beregne tiden det tar for en fullstendig rotasjon av motoren.
Her i dette prosjektet har vi brukt avbrudd med høyeste prioritet for å oppdage rpm, og vi har konfigurert det i stigende modus. Slik at når sensorutgangen går LAV til Høy, vil funksjon RPMCount () utføres. Og ettersom vi har brukt to bladrotorer, betyr det at funksjonen vil bli kalt 4 ganger i en revolusjon.
Når tiden som er tatt er kjent, kan vi beregne RPM ved å bruke nedenstående formler, hvor 1000 / tid tatt vil gi oss RPS (revolusjon per sekund) og ytterligere å multiplisere den med 60 vil gi deg RPM (revolusjon per minutt)
rpm = (60/2) * (1000 / (millis () - tid)) * REV / bladesInFan;
Etter å ha fått RPM, kan hastigheten beregnes ved å gi formelen:
Hastighet = o / min * (2 * Pi * radius) / 1000
Vi vet at Pi = 3,14 og radius er 4,7 tommer
Men først må vi konvertere radius til meter fra tommer:
radius = ((radius * 2,54) / 100,0) meter Hastighet = rpm * 60,0 * (2,0 * 3,14 * radius) / 1000,0) i kilometer per time
Her har vi multiplisert rpm med 60 for å konvertere rpm til rph (omdreining per time) og delt på 1000 for å konvertere meter / time til Kilometer / time.
Etter å ha hatt hastighet i kmh kan vi vise disse verdiene direkte over LCD-skjermen i digital form, men for å vise hastighet i analog form, må vi gjøre en beregning til for å finne ut nei. trinn, trinnmotor skal bevege seg for å vise hastighet på analog meter.
Her har vi brukt en 4-leder bipolar trinnmotor for analog meter, som har 1,8 graders betyr 200 trinn per omdreining.
Nå må vi vise 280 Kmh på speedometer. Så for å vise 280 Kmh trinnmotor trenger å bevege seg 280 grader
Så vi har maxSpeed = 280
Og maxSteps vil være
maxSteps = 280 / 1,8 = 155 trinn
Nå har vi en funksjon i vår Arduino kode nemlig kartlegge funksjon som brukes her til å kartlegge fart inn i trinn.
Trinn = kart (hastighet, 0, maxSpeed , 0, maxSteps);
Så nå har vi gjort det
trinn = kart (hastighet, 0,280,0,155);
Etter beregning av trinn kan vi direkte bruke disse trinnene i trinnmotorfunksjon for å flytte trinnmotor. Vi må også ta vare på gjeldende trinn eller vinkel på trinnmotoren ved å bruke gitte beregninger
currSteps = Steps trinn = currSteps-preSteps preSteps = currSteps
her currSteps er nåværende trinn som kommer fra siste beregning og preSteps er siste utførte trinn.
Kretsdiagram og tilkoblinger
Kretsskjema for dette analoge hastighetsmåleren er enkelt, her har vi brukt 16x2 LCD for å vise hastighet i digital form og trinnmotor for å rotere den analoge hastighetsmålernålen.
16x2 LCD er koblet til følgende analoge pinner fra Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
En 2,2 k motstand brukes til å stille lysstyrken på LCD-skjermen. En IR-sensormodul, som brukes til å oppdage viftebladet for å beregne rpm, er koblet til å avbryte 0 betyr D2-pinne av Arduino.
Her har vi brukt en trinnmotordriver, nemlig L293N-modul. IN1, IN2, IN3 og IN4 pin av trinnmotordriveren er direkte koblet til D8, D9, D10 og D11 i Arduino. Resten av tilkoblinger er gitt i kretsdiagram.
Programmering Forklaring
Komplett kode for Arduino Speedomete r er gitt til slutt, her forklarer vi noen viktige deler av den.
I programmeringsdelen har vi tatt med alle nødvendige biblioteker som trinnmotorbibliotek, LiquidCrystal LCD-bibliotek og erklært pinner for dem.
#inkludere
Etter dette har vi tatt noen variabler og makroer for å utføre beregningene. Beregninger er allerede forklart i forrige avsnitt.
flyktig byte REV; usignert langt int rpm, RPM; usignert lang st = 0; usignert lang tid; int ledPin = 13; int ledet = 0, RPMlen, prevRPM; int flagg = 0; int flag1 = 1; #define bladesInFan 2 float radius = 4.7; // inch int preSteps = 0; float stepAngle = 360.0 / (float) trinnPerRevolution; flyte minSpeed = 0; flyte maxSpeed = 280,0; flyte minTrinn = 0; flyte maxSteps = maxSpeed / stepAngle;
Etter dette initial vi LCD, Serial, interrupt og Stepper motor i setup -funksjonen
ugyldig oppsett () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Speedometer"); forsinkelse (2000); attachInterrupt (0, RPMCount, RISING); }
Etter dette leser vi rpm i loop- funksjon og utfører en beregning for å få hastighet og konvertere den til trinn for å kjøre trinnmotor for å vise hastighet i analog form.
ugyldig sløyfe () { readRPM (); radius = ((radius * 2,54) / 100,0); // konvertering i meter int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) / 1000.0); // RPM på 60 minutter, diameter på dekk (2pi r) r er radius, 1000 for å konvertere i km int. Trinn = kart (hastighet, minSpeed, maxSpeed, minSteps, maxSteps); hvis (flagg1) { Serial.print (Speed); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Speed:"); lcd.print (hastighet); lcd.print ("Km / h"); flagg1 = 0; } int currSteps = trinn;int trinn = currSteps-preSteps; preSteps = currSteps; myStepper.step (trinn); }
Her har vi reapRPM () -funksjonen for å beregne RPM.
int readRPM () { if (REV> = 10 or millis ()> = st + 1000) // DET OPPDATERER AFETR HVERT 10 LESINGER eller 1 sekund på tomgang { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (millis () - tid)) * REV / bladesInFan; tid = millis (); REV = 0; int x = o / min; mens (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (o / min, DEC); RPM = rpm; forsinkelse (500); st = millis (); flagg1 = 1; } }
Til slutt har vi avbrutt rutine som er ansvarlig for å måle revolusjon av objektet
ugyldig RPMCount () { REV ++; hvis (led == LAV) { led = HØY; } annet { led = LAV; } digitalWrite (ledPin, ledet); }
Slik kan du ganske enkelt bygge et analogt hastighetsmåler ved hjelp av Arduino. Dette kan også bygges ved hjelp av Hall-sensoren, og hastigheten kan vises på smarttelefonen, følg denne Arduino Speedometer-opplæringen for det samme.