Arduino Hız Ölçer Devresi

Merhaba, Bu yazımızda “Arduino Hız Ölçer” yapımından bahsedeceğiz.

Bu proje içerisinde kullandığınız motorun hızını analog olarak ölçebilirsiniz. Motor hızı ölçüm projelerinde tasarımcılar genel olarak IR Sensörü projelerine dahil ederler. Bazı durumlarda motora ait hız bilgisi hall effect sensörü yani mıknatıslanma ile de yapılabilir.

arduino hız ölçer

Arduino Hız Ölçer

Bu projede, hem analog hem de dijital biçimde hız bilgisini ekran üzerinde göstereceğiz. Bu projeyi yaparak, Arduino ve Step motoru öğrenme konusundaki becerilerimizi biraz daha artıracağız, çünkü bu proje Interrupts ve Timers kullanımını da öğrenmemizde faydalı olacaktır.

Bu projenin sonunda, dönen herhangi bir nesnenin hızını ve mesafesini hesaplayabilecek ve bunları 2X16 LCD ekranda dijital ve analog olarak görüntüleyebileceksiniz. Bu projeyi net bir şekilde kavradığımız zaman, Arduino Hız Ölçer ve Arduino ile Kilometre Sayacı Devresini uygulayabileceğiz.

Arduino Hız Ölçer 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ı

arduino hız ölçer

Arduino Hız Ölçer Hız Hesabı

IR Sensörü, önünde bir nesnenin varlığını tespit edebilen bir cihazdır. Bu projede İki bıçak rotoru (fan) kullanıldı. IR sensörünün yanlarında ki bıçaklar, her döndüğünde IR sensörünü algılayacak şekilde yerleştirildi. Ardından, motorun tam bir dönüşü için harcanan zamanı hesaplamak için Arduino’daki zamanlayıcılar ve kesmelerden faydalanıldı.

Bu projede hızı tespit etmek için en yüksek öncelikli kesmeyi kullandık ve yükselme modunda yapılandırdık. Böylece sensör çıkışı 0’dan 1 olduğunda RPMCount () fonksiyonu yürütülür ve iki bıçaklı rotor kullandığımızdan, fonksiyonun bir devir için 4 kez çağrılacağı anlamına gelir.

Alınan zaman bilgisi bilindiğinde, aşağıdaki formülleri kullanarak RPM’yi hesaplayabiliriz. Alınan 1000 / zaman bize RPS (saniyede devir) sayısını verecek ve bunu 60’la çarpmak bize RPM (dakika başına devir)sayısını verecektir.

rpm = (60/2)*(1000/(millis() – time))*REV/bladesInFan;

RPM aldıktan sonra, hız verilen formülle hesaplanabilir:

Speed = rpm * (2 * Pi * radius) / 1000

Pi = 3.14 ve yarıçapın 4.7 inç olduğunu biliyoruz. Ama önce yarıçapı inç cinsinden metreye dönüştürmeliyiz:

radius = ((radius * 2.54)/100.0) meters

Speed= rpm * 60.0 * (2.0 * 3.14 * radius)/ 1000.0) in kilometers per hour

Burada, rpm’yi rph’ye (saat başına devir) dönüştürmek için rpm’yi 60 ile çarptık ve metre / saati kilometre / saat’e dönüştürmek için 1000’e böldük.

Kmh hızını aldıktan sonra bu değerleri doğrudan LCD üzerinden dijital formda gösterebiliriz ancak analog formdaki hızı göstermek için bir hesaplama daha yapmamız gerekir.

Devir başına 200 derece 1.8 adım olan analog metre için 4 telli bir bipolar step motor daha kullandık.

arduino hız ölçer

Şimdi hızölçerde 280 Kmh göstermek zorundayız. Yani 280 Kmh step motorun 280 derece hareket etmesi gerektiğini gösterir.

Bu yüzden maksimum hızımız = 280

Ve maxSteps aşağıda ki formül ile hesaplanır.

maxSteps = 280/1.8 = 155 steps

Şimdi Arduino kodumuzda, burada hızları adımlarla eşlemek için kullanılan bir veri dosyasına sahibiz.

Steps = map(speed,0,maxSpeed,0,maxSteps);

Yani elimizde;

steps=map(speed,0,280,0,155);

Adımları hesapladıktan sonra, adım motorunu hareket ettirmek için bu adımları doğrudan adım motoru üzerinde kullanmalıyız. Ayrıca, verilen hesaplamaları kullanarak mevcut adımlara veya step motorun açısına dikkat etmemiz gerekir.

currSteps=Steps

steps= currSteps-preSteps

preSteps=currSteps

Burada currSteps son hesaplamadan gelen mevcut adımlardır ve preSteps son gerçekleştirilen adımlardır.

Arduino Hız Ölçer Devre Şeması

Arduino’nun aşağıdaki analog pinlerine 2X16 LCD bağlanır.

 #  RS – A5

 #  RW – GND

 #  EN – A4

 #  D4 – A3

 #  D5 – A2

 #  D6 – A1

 #  D7 – A0

 

arduino kilometre sayacı

LCD’nin parlaklığını ayarlamak için 2,2k direnç kullanılır. Burada L293N modülü olan bir step motor sürücüsü kullandık. Step motor sürücüsünün IN1, IN2, IN3 ve IN4 pinleri, doğrudan Arduino’nun D8, D9, D10 ve D11’lerine bağlanır. Kalan bağlantılar Devre Şemasında verilmiştir.

Arduino Hız Ölçer Program Açıklaması

Arduino Hız Ölçer için tam kodu yazının sonunda ki video vasıtası ile edinebilirsiniz. Programlama bölümünde, step motorlu kütüphane, LiquidCrystal LCD kütüphane ve bunlar için belirtilmiş pinler gibi gerekli tüm kütüphaneleri bulabileceksiniz.

#include<LiquidCrystal.h> 

LiquidCrystal lcd(A5,A4,A3,A2,A1,A0);

#include <Stepper.h> const int

StepsPerRevolution = 200; // bunu, devir başına

atılacak adım sayısına uyacak şekilde değiştirin

Stepper myStepper

(stepsPerRevolution, 8, 9, 10, 11);

Sizde Arduino’yu kullanarak basit bir şekilde Arduino hız ölçer devresi yapabilirsiniz.

Arduino Hız Ölçer Videosu

Aşağıda ki video vasıtası ile devrenin çalışma yapısı ve ilgili kod parçacıklarını görüntüleyebilirsiniz.

Arduino Hız Ölçer Kodları

#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);
 }

Kaynak : Circuitdigest

Yazımızı beğendiyseniz hemen alttaki Sosyal medya butonlarından arkadaşlarınızla paylaşabilirsiniz. Öneri veya eleştirilerinizi alttaki yorumlar bölümünden yapabilirsiniz. Elektronik Tasarımlar ailesi olarak bir çok yeni içerik eklemeye devam edeceğiz. Bizi takip etmeyi unutmayın. Okuduğunuz için teşekkür ederiz.

İlginizi Çekebilir!!!



Paylaşın, Herkes Faydalansın!

Bir Yorum

Yorum Ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir