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 = 301000/(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>
