Arduino
OKUDUĞUNUZ KONU
Arduino Analog Hız Ölçer Yapımı
0

Arduino Analog Hız Ölçer Yapımı

Yazar : Eda Baysal6 Kasım 2018

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 2
float radius=4.7; // inch
int 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 meter
int 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 km
int 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);
}

SİZCE NASIL OLMUŞ?
Beğendim
100%
İlginç
0%
Eh İşte
0%
Anlamadım
0%
Kötü
0%
Berbat
0%
YAZAR HAKKINDA
Eda Baysal
Bilgisayar mühendisiyim , gömülü sistemler ve IoT üzerinde çalışmalar yapmaktayım.Proje Hocam sitesini uzun zamandır takip ediyordum ve bu oluşumun içerisinde olmak istedim.Bu sitede yazılarımı paylaşıp sizlere yararlı olmak istiyorum
YORUMLAR

YORUM YAP