RPM ( devir/dakika)

Merhabalar. Kızıl ötesi sensörle obje algılama projemden bahsetmiştim. Tabi bunun sayı/dk olması gerekiyordu. Anlık olarak ekrana yansıtmalıydım. Birkaç teknik denedim fakat millis()'i count işlemiyle ilişkilendiremedim. Bunun için RPM Projectler olduğunu gördüm. Daha çok motorun devir sayısını ölçmek için yapıyorlar. Tabi ki motor çok hızlı dönüyor. Benim projemde, belirli frekanslarla obje hareket ediyor. Photo Interrupter’dan geçen objenin frekansını yüksek çözünürlüklü ekrana yansıtmam gerekiyor. Örn: dk’da 30; dk’da 30,1; dk’da 30,2; bu yaklaşık 150 ye kadar çıkıyor. Bir RPM Project’ten şu kodu buldum. int ledPin = 2; // IR LED connected to digital pin 13 volatile byte rpmcount; unsigned int rpm; // SONUÇLARI ONDALIK İSTEDİĞİM İCİN BURAYI FLOAT YAPMAK İSTEDİM AMA OLMADI unsigned long timeold; #include <liquidcrystal.h>

LiquidCrystal lcd(12, 11, 7, 6, 5, 4);

void rpm_fun()
{
//Each rotation, this interrupt function is run twice, so take that into consideration for
//calculating RPM
//Update count
rpmcount++;
}

void setup()
{
lcd.begin(16, 2); // intialise the LCD

//Interrupt 0 is digital pin 2, so that is where the IR detector is connected
//Triggers on FALLING (change from HIGH to LOW)
attachInterrupt(0, rpm_fun, FALLING);

//Turn on IR LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);

rpmcount = 0;
rpm = 0;
timeold = 0;
}

void loop()
{
//Update RPM every second
delay(1000);
//Don’t process interrupts during calculations
detachInterrupt(0);
//Note that this would be 60*1000/(millis() - timeold)rpmcount if the interrupt
//happened once per revolution instead of twice. Other multiples could be used
//for multi-bladed propellers or fans
rpm = 30
1000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;

//Print out result to lcd
lcd.clear();
lcd.print(“RPM=”);
lcd.print(rpm);

//Restart the interrupt processing
attachInterrupt(0, rpm_fun, FALLING);
}

Aldığım sonuçlar ise pek gerçekçi değil. Motor kadar hızlı hareket etmeyen bir objem olmasına rağmen doğru sonuç alamadım. 60geçiş /dk’da 58 olarak görünüyor. 30geçiş/dk obje hareket edince 29 sonucunu alıyorum. unsigned int rpm değişkeninden dolayı ondalık alamıyorum sanırım.. Birkaç tane daha rpm codu buldum ama gerçeğe en yakın değer veren buydu. isterseniz onları da yollayabilirim.</liquidcrystal.h>

Merhaba. Sizin diğer sorunuzda obje saydırmayla ilgiliydi ve sanırım siz encoder tarzı birşey yapmak istiyorsunuz? Aslında kuruduğunuz sistemin fotoğrafını paylaşsanız daha anlaşılır olabilir. Şuan biraz sistemi bilmeden cevap veriyorum ama belki sizin sisteminizin tepki süresinden dolayı tam değerleri alamıyor olabilirsiniz.

merhabalar, evet hepsi birbiriyle bağlantılı aslında. adım adım ilerlemek istediğimden takıldığım yerleri yazdım. şuan fotoğraf yükleme şansım yok ama basit bir şema çizdim onu yükleyebilirim. şekildeki gibi ok yönünde sürekli hareket eden bir obje var. Yüksek çözünürlüklü frekans ayarı yapılabiliyor. Sonuç olarak da devir/dk cinsinden veri alıyorum. RPM olayıyla aynı şey yani. veya takometre mantığı.. Sistemin tepki süresi, bir motor devrini hesaplamaktan daha kolay aslında. çünkü motor ucuna takılan pervaneyi kızıl ötesi alıcı ve verici içinden geçirince çok ama çok hızlı veri işleme yapmak gerekiyor. Benimkinde kat be kat daha yavaş çalışması gerekiyor. En yüksek frekansım dk’da 150.. max. 200.. şema şu şekilde..

üstteki link çalışmıyor.. doğrusu bu : http://l1304.hizliresim.com/18/j/m4tfd.jpg