- Nødvendige materialer
- Beregning af hastighed og visning på analogt speedometer
- Kredsløbsdiagram og forbindelser
- Programmering Forklaring
Måling af hastighed / omdrejningstal for et køretøj eller en motor har altid været et fascinerende projekt at prøve. I dette projekt skal vi bygge et analogt speedometer ved hjælp af Arduino. Vi bruger IR-sensormodul til at måle hastigheden. Der er andre måder / sensorer til dette, som hall-sensor til at måle hastighed, men det er nemt at bruge en IR-sensor, fordi IR-sensormodul er meget almindelig enhed, og vi kan nemt få det fra markedet, og det kan også bruges på enhver form for motor køretøj.
I dette projekt skal vi vise hastighed i både analog og digital form. Ved at gøre dette projekt vil vi også forbedre vores færdigheder i at lære Arduino og Stepper motor, da dette projekt involverer brug af Interrupts og Timers. Ved afslutningen af dette projekt vil du være i stand til at beregne hastigheden og afstande, der er dækket af ethvert roterende objekt, og vise dem på en 16x2 LCD-skærm i digitalt format og også på en analog måler. Så lad os starte med dette Speedometer og kilometertællerkredsløb med Arduino
Nødvendige materialer
- Arduino
- En bipolar trinmotor (4 ledere)
- Trinmotordriver (L298n-modul)
- IR-sensormodul
- 16 * 2 LCD-skærm
- 2,2 k modstand
- Tilslutning af ledninger
- Brødbræt.
- Strømforsyning
- Billedudskrift af speedometer
Beregning af hastighed og visning på analogt speedometer
En IR- sensor er en enhed, der kan registrere tilstedeværelsen af en genstand foran den. Vi har brugt to knivrotorer (blæser) og placeret IR-sensoren i nærheden af den på en sådan måde, at hver gang knivene roterer, registrerer IR-sensoren den. Vi bruger derefter hjælp fra timere og Interrupts i Arduino til at beregne den tid, det tager for en komplet rotation af motoren.
Her i dette projekt har vi brugt afbrydelse med højeste prioritet til at opdage omdrejninger pr. Minut, og vi har konfigureret det i stigende tilstand. Så når sensoroutput går LAV til Høj, udføres funktion RPMCount () . Og da vi har brugt to knivrotorer, betyder det, at funktionen kaldes 4 gange i en omdrejning.
Når den tid, der er taget, er kendt, kan vi beregne omdrejningstallet ved hjælp af nedenstående formler, hvor 1000 / tid taget giver os RPS (omdrejning pr. Sekund) og yderligere multiplicering med 60 giver dig RPM (omdrejning pr. Minut)
rpm = (60/2) * (1000 / (millis () - tid)) * REV / bladesInFan;
Efter at have fået RPM kan hastigheden beregnes ved at give formlen:
Hastighed = o / min * (2 * Pi * radius) / 1000
Vi ved, at Pi = 3,14 og radius er 4,7 tommer
Men først skal vi konvertere radius til meter fra inches:
radius = ((radius * 2,54) / 100,0) meter Hastighed = o / min * 60,0 * (2,0 * 3,14 * radius) / 1000,0) i kilometer i timen
Her har vi ganget rpm med 60 for at konvertere rpm til rph (omdrejning pr. Time) og divideret med 1000 for at konvertere meter / time til Kilometer / time.
Efter at have haft hastighed i kmh kan vi vise disse værdier direkte over LCD'et i digital form, men for at vise hastighed i den analoge form er vi nødt til at foretage endnu en beregning for at finde ud af nej. trinvis skal trinmotor bevæge sig for at vise hastighed på analog meter.
Her har vi brugt en 4-leder bipolar stepmotor til analogmåler, som har 1,8 graders gennemsnit 200 trin pr. Omdrejning.
Nu skal vi vise 280 Kmh på speedometer. Så for at vise 280 Kmh trinmotor skal bevæge sig 280 grader
Så vi har maxSpeed = 280
Og maxSteps vil være
maxSteps = 280 / 1,8 = 155 trin
Nu har vi en funktion i vores Arduino-kode, nemlig kortfunktion , der bruges her til at kortlægge hastighed i trin.
Trin = kort (hastighed, 0, maxSpeed , 0, maxSteps);
Så nu har vi det
trin = kort (hastighed, 0,280,0,155);
Efter beregning af trin kan vi anvende disse trin direkte i trinmotorfunktion til at flytte trinmotor. Vi har også brug for at tage os af de aktuelle trin eller vinklen på trinmotoren ved hjælp af givne beregninger
currSteps = Steps trin = currSteps-preSteps preSteps = currSteps
her currSteps er aktuelle trin, der kommer fra sidste beregning, og preSteps er sidste udførte trin.
Kredsløbsdiagram og forbindelser
Kredsløbsdiagram for dette analoge hastighedsmåler er simpelt, her har vi brugt 16x2 LCD til at vise hastighed i digital form og trinmotor til at rotere den analoge hastighedsmåler.
16x2 LCD er forbundet med følgende analoge ben fra Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
En 2,2 k modstand bruges til at indstille LCD-lysstyrken. Et IR-sensormodul, der bruges til at detektere ventilatorblad til beregning af omdrejningstallet, er forbundet til at afbryde 0 betyder D2-pin af Arduino.
Her har vi brugt en stepper motor driver, nemlig L293N modul. IN1, IN2, IN3 og IN4 pin af trinmotordriveren er direkte forbundet til D8, D9, D10 og D11 fra Arduino. Resten af forbindelser er angivet i kredsløbsdiagram.
Programmering Forklaring
Komplet kode til Arduino Speedomete r er givet i slutningen, her forklarer vi få vigtige dele af den.
I programmeringsdelen har vi inkluderet alle de påkrævede biblioteker som trinmotorbibliotek, LiquidCrystal LCD-bibliotek og erklærede stifter til dem.
#omfatte
Herefter har vi taget nogle variabler og makroer til at udføre beregningerne. Beregninger er allerede forklaret i det foregående afsnit.
flygtige byte REV; usigneret lang int rpm, RPM; usigneret lang st = 0; usigneret lang tid; int ledPin = 13; int ledet = 0, RPMlen, prevRPM; int flag = 0; int flag1 = 1; #define bladesInFan 2 float radius = 4.7; // inch int preSteps = 0; float stepAngle = 360.0 / (float) trinPerRevolution; flyde minSpeed = 0; flyde maxSpeed = 280,0; float minSteps = 0; flyde maxSteps = maxSpeed / stepAngle;
Efter dette, vi initialisere LCD, Serial, afbryder og Stepper motor i setup -funktionen
ugyldig opsætning () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Speedometer"); forsinkelse (2000); attachInterrupt (0, RPMCount, RISING); }
Efter dette læser vi rpm i loop- funktion og udfører en beregning for at få hastighed og konvertere det til trin for at køre trinmotor for at vise hastighed i analog form.
ugyldig sløjfe () { readRPM (); radius = ((radius * 2,54) / 100,0); // konvertering i meter int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) / 1000.0); // RPM i 60 minutter, dækdiameter (2pi r) r er radius, 1000 for at konvertere i km int Trin = kort (Hastighed, minSpeed, maxSpeed, minSteps, maxSteps); hvis (flag1) { Serial.print (Speed); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Hastighed:"); lcd.print (hastighed); lcd.print ("Km / h"); flag1 = 0; } int currSteps = trin;int trin = currSteps-preSteps; preSteps = currSteps; myStepper.step (trin); }
Her har vi reapRPM () -funktionen til at beregne RPM.
int readRPM () { if (REV> = 10 eller millis ()> = st + 1000) // DET OPDATERER AFETR HVER 10 LÆSNINGER eller 1 sekund i inaktiv { 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 (); flag1 = 1; } }
Endelig har vi afbrudt rutine, som er ansvarlig for at måle revolutionens genstand
ugyldigt RPMCount () { REV ++; hvis (led == LOW) { led = HIGH; } andet { led = LAV; } digitalWrite (ledPin, led); }
Sådan kan du simpelthen bygge et analogt speedometer ved hjælp af Arduino. Dette kan også bygges ved hjælp af Hall-sensor, og hastighed kan vises på smarttelefon, følg denne Arduino Speedometer-tutorial for det samme.