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

Arduino DC Motor Hız Ölçer Yapımı

Yazar : Murat Duran7 Temmuz 2018

DC motorların hız ölçümü projelerde yaşanan en büyük sorunlardan birisidir , bu projemizde hız ölçer yapımını göstereceğiz.Motorların bazıları patinaj yaptığından dolayı arabalarda düz gitmeme sorunu yaşanmaktadır.Bu sorunu dc motorun hızını ölçerek ve motorların birbirine eşitleme algoritmasını kullanarak çözebiliriz.

Kullanılacak sensör kızılötesi IR sensördür.Bu sensörün temelde çalışma mantığı çok basittir.DC motor üzerine yerleştirilen delikli disk sensörün görebileceği şekilde konumlandırılır.Temel mantık delik saymadır.Örneğin diskinizde 20 delik olsun sensör 20 kez delik gördüğünde motor 1 tur atmış demektir.1 turu kaç sanayinede attığını hesaplar ve motorun hızını bulur.

Projemizde Kullanılan Malzemeler

Sensörün çalışma mantığı:

Sensör kızılötesi iletişim metodunu kullanarak, verici ile alıcı arasına engel girdiğinde çıkış low, engel olmadığında ise high verir. Yani bir buton gibi devreyi açıp kapatır diyebilir. Bu high low durumları bir yorumlayıcı ile işlenerek saydırma işlemi yapılır ve  motorun hızı,  devri ölçülür.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
   
LiquidCrystal_I2C lcd(0x3f, 16, 2);

int in1 = 9; 
int in2 = 5; 
int ena = 6;
const int dataIN = 2; 

unsigned long prevmillis; 
unsigned long duration;
unsigned long lcdrefresh; 

int rpm; 

boolean currentstate; 
boolean prevstate;
  
void setup() 
{
Serial.begin(9600);
lcd.begin();  
lcd.backlight();
pinMode(in1, OUTPUT); 
pinMode(in2, OUTPUT); 
pinMode(ena, OUTPUT);

digitalWrite(in1, HIGH); 
digitalWrite(in2, LOW); 
pinMode(dataIN,INPUT);
prevmillis = 0;
prevstate = LOW;  
} 
  
void loop()
{

  currentstate = digitalRead(dataIN); 
 if( prevstate != currentstate)
   {
     if( currentstate == HIGH ) 
       {
         duration = ( micros() - prevmillis ); 
         rpm = (6000000/duration); 
         prevmillis = micros(); 
       }
   }
  prevstate = currentstate; 
  
  if( ( millis()-lcdrefresh ) >= 100 )
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Motor Hizi");
      lcd.setCursor(0,1);
      lcd.print("RPM = ");
      lcd.print(rpm);         
      lcdrefresh = millis();   
    }
  
 int pot_deger = analogRead(1); 
 int motor_hizi = map(pot_deger, 0, 1023, 255, 0);
 analogWrite(ena, motor_hizi); 
  
}

SİZCE NASIL OLMUŞ?
Beğendim
50%
İlginç
0%
Eh İşte
0%
Anlamadım
0%
Kötü
0%
Berbat
50%
YAZAR HAKKINDA
Murat Duran
Murat Duran
Açık kaynak donanım ve yazılım geliştiricisiyim , mekanik ve robotik sistemler üzerinde çalışmalar yapmaktayım.Ayrıca bir start-up firması olan Proje Hocam 'ın kurucuyum.
YORUMLAR

YORUM YAP