- Material som krävs
- Beräknar hastighet och visar den på analog hastighetsmätare
- Kretsschema och anslutningar
- Programmeringsförklaring
Att mäta hastigheten / varvtalet för ett fordon eller en motor har alltid varit ett fascinerande projekt att prova. I det här projektet ska vi bygga en analog hastighetsmätare med Arduino. Vi använder IR-sensormodulen för att mäta hastigheten. Det finns andra sätt / sensorer för detta, som hallsensor för att mäta hastighet, men det är enkelt att använda en IR-sensor eftersom IR-sensormodulen är mycket vanlig enhet och vi kan få den enkelt från marknaden och den kan också användas på alla typer av motorfordon.
I detta projekt ska vi visa hastighet i både analog och digital form. Genom att göra detta projekt kommer vi också att förbättra våra färdigheter när det gäller att lära sig Arduino och Stepper motor eftersom detta projekt innefattar användning av avbrott och timers. I slutet av detta projekt kommer du att kunna beräkna hastigheten och avstånden som täcks av alla roterande objekt och visa dem på en 16x2 LCD-skärm i digitalt format och även på en analog mätare. Så låt oss börja med den här hastighetsmätaren och vägmätarkretsen med Arduino
Material som krävs
- Arduino
- En bipolär stegmotor (4-ledare)
- Stegmotorförare (L298n-modul)
- IR-sensormodul
- 16 * 2 LCD-skärm
- 2,2 k motstånd
- Anslutande ledningar
- Bakbord.
- Strömförsörjning
- Hastighetsmätare bildutskrift
Beräknar hastighet och visar den på analog hastighetsmätare
En IR- sensor är en enhet som kan upptäcka närvaron av ett objekt framför den. Vi har använt två bladrotorer (fläktar) och placerat IR-sensorn nära den på ett sådant sätt att IR-sensorn upptäcker den varje gång knivarna roterar. Vi använder sedan hjälp av timers och Interrupts i Arduino för att beräkna den tid det tar för en fullständig rotation av motorn.
Här i detta projekt har vi använt avbrott med högsta prioritet för att detektera varvtal och vi har konfigurerat det i stigande läge. Så att varje gång sensorns utgång går LÅG till Hög kommer funktionen RPMCount () att köras. Och eftersom vi har använt tvåbladsrotor betyder det att funktionen kommer att anropas fyra gånger i en varv.
När den tagna tiden är känd kan vi beräkna varvtalet med hjälp av nedanstående formler, där 1000 / tid som tas ger oss RPS (varv per sekund) och ytterligare multiplicering med 60 ger varvtalet (varv per minut)
rpm = (60/2) * (1000 / (millis () - tid)) * REV / bladesInFan;
Efter att ha fått RPM kan hastigheten beräknas med en formel:
Hastighet = varv / min * (2 * Pi * radie) / 1000
Vi vet att Pi = 3,14 och radien är 4,7 tum
Men först måste vi konvertera radie till meter från tum:
radie = ((radie * 2,54) /100,0) meter Hastighet = rpm * 60,0 * (2,0 * 3,14 * radie) / 1000,0) i kilometer per timme
Här har vi multiplicerat rpm med 60 för att konvertera rpm till rph (varv per timme) och dividerat med 1000 för att konvertera meter / timme till Kilometer / timme.
Efter att ha haft hastighet i kmh kan vi visa dessa värden direkt över LCD-skärmen i digital form men för att visa hastighet i analog form måste vi göra ytterligare en beräkning för att ta reda på nej. steg, bör stegmotorn flytta för att visa hastighet på analog mätare.
Här har vi använt en 4-tråds bipolär stegmotor för analog mätare, som har 1,8 graders medel 200 steg per varv.
Nu måste vi visa 280 km / h på hastighetsmätaren. För att visa stegmotorn på 280 km måste den röra sig 280 grader
Så vi har maxSpeed = 280
Och maxSteps kommer att vara
maxSteps = 280 / 1,8 = 155 steg
Nu har vi en funktion i vår Arduino kod nämligen kartfunktion som används för att kartlägga hastigheten i steg.
Steg = karta (hastighet, 0, maxSpeed , 0, maxSteps);
Så nu har vi gjort det
steg = karta (hastighet, 0,280,0,155);
Efter beräkning av steg kan vi direkt tillämpa dessa steg i stegmotorfunktion för att flytta stegmotor. Vi måste också ta hand om stegmotorns aktuella steg eller vinkel med hjälp av givna beräkningar
currSteps = Steps steg = currSteps-preSteps preSteps = currSteps
här currSteps är aktuella steg som kommer från senaste beräkning och preSteps är senast utförda steg.
Kretsschema och anslutningar
Kretsschemat för denna analoga hastighetsmätare är enkelt, här har vi använt 16x2 LCD för att visa hastighet i digital form och stegmotor för att rotera den analoga hastighetsmätaren.
16x2 LCD är ansluten till följande analoga stift av Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Ett 2,2 k motstånd används för att ställa in LCD-skärmens ljusstyrka. En IR-sensormodul, som används för att detektera fläktens blad för att beräkna varvtalet, är ansluten för att avbryta 0 betyder D2-stift av Arduino.
Här har vi använt en stegmotordrivrutin, nämligen L293N-modulen. IN1, IN2, IN3 och IN4 stift av stegmotordrivrutinen är direkt ansluten till D8, D9, D10 och D11 i Arduino. Resten av anslutningarna ges i kretsschemat.
Programmeringsförklaring
Komplett kod för Arduino Speedomete r ges i slutet, här förklarar vi några viktiga delar av den.
I programmeringsdelen har vi inkluderat alla nödvändiga bibliotek som stegmotorbibliotek, LiquidCrystal LCD-bibliotek och deklarerade stift för dem.
#omfatta
Efter detta har vi tagit några variabler och makron för att utföra beräkningarna. Beräkningar har redan förklarats i föregående avsnitt.
flyktiga byte REV; osignerad lång int varvtal, RPM; osignerad lång st = 0; osignerad lång tid; int ledPin = 13; int ledde = 0, RPMlen, prevRPM; int flagga = 0; int-flagga1 = 1; #define bladesInFan 2 float radius = 4.7; // tum int preSteps = 0; float stepAngle = 360.0 / (float) stepPerRevolution; float minSpeed = 0; flottör maxSpeed = 280,0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Efter detta initiera vi LCD, Serial, avbrott och Stegmotor i inställningsfunktion
ogiltig installation () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Hastighetsmätare"); fördröjning (2000); attachInterrupt (0, RPMCount, RISING); }
Efter detta läser vi varv i loopfunktion och utför en beräkning för att få hastighet och konvertera det till steg för att köra stegmotor för att visa hastighet i analog form.
ogiltig slinga () { readRPM (); radie = ((radie * 2,54) / 100,0); // konvertering i meter int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) / 1000.0); // RPM i 60 minuter, däckets diameter (2pi r) r är radie, 1000 för att konvertera i km int Steg = karta (Hastighet, minSpeed, maxSpeed, minSteps, maxSteps); if (flagga1) { 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"); flagga1 = 0; } int currSteps = Steps;int steg = currSteps-preSteps; preSteps = currSteps; myStepper.step (steg); }
Här har vi reapRPM () -funktionen för att beräkna RPM.
int readRPM () { if (REV> = 10 eller millis ()> = st + 1000) // DET UPPDATERAR AFETR VARJE 10 LÄSNINGAR eller 1 sekund i viloläge { if (flagga == 0) flagga = 1; rpm = (60/2) * (1000 / (millis () - tid)) * REV / bladesInFan; tid = millis (); REV = 0; int x = rpm; medan (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; fördröjning (500); st = millis (); flagga1 = 1; } }
Slutligen har vi avbrottsrutin som är ansvarig för att mäta objektets revolution
ogiltig RPMCount () { REV ++; if (led == LOW) { led = HIGH; } annat { led = LOW; } digitalWrite (ledPin, led); }
Så här kan du helt enkelt bygga en analog hastighetsmätare med Arduino. Detta kan också byggas med hjälp av Hall-sensorn och hastigheten kan visas på smarttelefonen, följ denna Arduino Speedometer-handledning för detsamma.