Arduino Hız Göstergesi Yapımı

Arduino Hız Göstergesi Yapımı

20 Mayıs 2019 0 Yazar: Onur Cici

Bu projede yabancı bir kaynaktan alıntı yapacağım , gerçekten çok hoş yapılmış bir proje analog olarak motor hızı ölçebilmektedir.Genelde motor hız ölçüm projelerinde IR sensör kullanılmaktadır.Ancak bazı projelerde hall efeckt sensörü ile mıknatıs kullanılarak yapılabilir.

Projenin devre şemalarını site paylaşmış bende burada detayları paylaşacağım takıldığınız yer olursa site aldından yorum yazarak bana ulaşabilirsiniz elimden geldiğince anladığım yerlerde yardımcı olmaya çalışırım.

Malzeme Listesi

  • Arduino UNO
  • A polar step motor 4 pinli
  • L298n motor sürücü
  • IR Sensör Modülü
  • 16×2 LCD Ekran
  • 2.2k Direnç
  • Jumper Kablo
  • Bredboard
  • Güç Kaynağı
  • Hız Ölçer İçin Kağıt Çıktısı

16×2 LCD nin bağlantı uçları aşağıdaki gibidir.

RS – A5
RW – GND
EN – A4
D4 – A3
D5 – A2
D6 – A1
D7 – A0

Kullanılacak sensör ve motor 

#include<LiquidCrystal.h>
LiquidCrystal lcd(A5,A4,A3,A2,A1,A0);
#include <Stepper.h>
const int stepsPerRevolution = 200;
 // change this to fit the number of steps per revolution
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
volatile byte REV;
unsigned long int rpm,RPM;
unsigned
 long st=0;unsigned
 long time;int
 ledPin = 13;
int led = 0,RPMlen , prevRPM;int flag = 0;
int flag1=1;#define bladesInFan 2float radius=4.7;
 // inchint preSteps=0;
float stepAngle= 360.0/(float)stepsPerRevolution;
float minSpeed=0;float maxSpeed=280.0;
float minSteps=0;float maxSteps=maxSpeed/stepAngle;
void setup(){myStepper.setSpeed(60);
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
lcd.begin(16,2);
lcd.print("Speedometer");
delay(2000);
attachInterrupt(0, RPMCount, RISING);

}void loop(){readRPM();
radius=((radius * 2.54)/100.0);
 // convering in meterint Speed= ((float)RPM * 60.0 * (2.0 * 3.14 * radius)
/1000.0);
// RPM in 60 minute, diameter of tyre (2pi r) r is radius, 1000 to convert in kmint Steps=map(Speed, minSpeed,maxSpeed,minSteps,maxSteps);
if(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("Speed: ");lcd.print(Speed);
lcd.print(" Km/h ");flag1=0;}int currSteps=Steps;
int steps= currSteps-preSteps;preSteps=currSteps
;myStepper.step(steps);

}int readRPM(){if(REV >= 10 or millis()>=st+1000) 

// IT WILL UPDATE AFETR EVERY 10 READINGS or 1 second in idle{if(flag==0)flag=1;rpm = (60/2)*(1000/(millis() - time))*REV/bladesInFan;
time = millis();REV = 0;int x= rpm;while(x!=0){x = x/10;RPMlen++;

}Serial.println(rpm,DEC);RPM=rpm;delay(500);st=millis();flag1=1;

}}void RPMCount(){REV++;if (led == LOW){led = HIGH;}else{led = LOW;

}digitalWrite(ledPin, led);}