Bu projede dönme hareketi yapan cisimlerin RPM mini ölçebilmek için arduino yardımı ile bir takometre yapacağım.
TAKOMETRE VE RPM NEDİR?
Takometre sabit bir eksen etrafında dönme hareketi yapan cisimlerin birim zamanda tamamladıkları tam tur sayısını gösterten bir saattir. Genelde birim zaman olarak 1 dakika kullanılır. RPM ile ifade edilir.
RPM min açılımı ise revolutions per minute (dakikadaki devir sayısı) anlamına gelmekte.
Örnek bir takometre cihazını görmek ister iseniz aşağıdaki linke tıklayarak ulaşabilirsiniz.
UNIT UT 372 Dijital El Tipi Optik Takometre
Bu proje için ihtiyacınız olan malzemeler:
- Arduino Nano
- TCRT5000 Kızılötesi Sensör
- Nokia 5110 Ekranı – 84×48 Grafik LCD
- Ayarlanabilir Voltaj Yükseltici Kart – MT3608
- TP4056 Type-C 1S 3.7V LiPo, Li-ion Pil Şarj Devresi
- IC125B S Mini Anahtar
- 1/4 W 10K Direnç
- 1/4 W 100 R Direnç
- 18650 Li-ion Şarjlı Pil
Takometre Bağlantı Şeması
LCD5110 Ekranın Kullanımı
Ekran 84×48 piksel büyüklüğünde bir grafik LCD ekran olup 3.3V ile besleniyor. LCD ekranı kullanmak için buradan LCD5110_Basic kütüphanesini indirip arduino/library/ klasörüne atmamız gerek.
Şimdi lcd ekranımızı kullanabilmemiz için gerekli olan Kütüphane fonksiyonlarına bakalım;
- myGLCD.InitLCD() LCD ekranı başlatır.
- myGLCD.setContrast(0-70 arasında bir değer girilmelidir) Kontrast ayarını yapar.
- myGLCD.setFont( ) LCD ekrana yazdırmak için kullanacağımız fontu ayarlar. Bu fonksiyonda parantez içerisine SmallFont, MediumNumbers, BigNumbers yazılabilir.
- myGLCD.clrScr(); Ekranı temizler,
- myGLCD.print(“yazılacak terim”,X,Y); çift tırnak içerisine terimi yazdıktan sonra x ve y değerlerini girerek yazılan terimin konumunu belirliyoruz. X yerine 0-83 arası değer girilebilirken Y yerine 8 in 40 a kadar olan katlarını (0,8,16,24,32,40) yazabiliriz. Yada x için LEFT,RIGHT veya CENTER değişkenleri kullanılabilir.
TCRT5000 Kızılötesi Sensör
0,2mm ile 15mm arasında sağlıklı şekilde çalışmaktadır. bu sensor de okuma hız artıkça tam lojik bir çıkış alamadığımı öğrendim yani karedalga formu bozuluyor. Osilaskop olsa idi bunu ekranda görebilirdik. Bu sorunu LMV358 kullanarak ya da üzerinde işlemsel yükselteç olan modülleri kullanarak halledebilirsiniz.
Ayarlanabilir Voltaj Yükseltici Kart – MT3608
step-up voltaj regülatörünü kullanma sebebimiz hem arduinoyu +5v ile beslemek hem de 18650 şarjlı pilin voltajının düşüşü sırasında arduinoya sabit bir gerilim vermektir.
Kodlar :
#include <LCD5110_Basic.h> LCD5110 myGLCD(7, 6, 5, 3, 4); extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; extern uint8_t BigNumbers[]; int sensor = 9; //9. pine bağlı olan senyörümüze isim verdik boolean sensordurum; // sensor durum değişikleri için değişken tanımlaması int eskidurum; // karşılaştırma yapmak için değişken tanımlaması unsigned long sure; unsigned long oncekisure; unsigned long rpm = 0; void setup() { myGLCD.InitLCD(); myGLCD.setContrast(65); eskidurum = LOW; oncekisure = 0; pinMode(sensor, INPUT); } void loop() { sensordurum = digitalRead(sensor); if (eskidurum != sensordurum) { // eskidurum sensor durumuna eşit değil ise koşulun altındaki if e geçilecek yani hazırda bekleyecek if (sensordurum == LOW) { //sensör beyaz yüzey ile karşılaşınca millis komutu milisaniye olarak saymaya başlayıp oncekisureden fark alıyor sure = (millis() - oncekisure); rpm = (60000 / sure); //rpm hesabı için frekansı 1/T yi kullandık, frekans birimi sn olduğu için 60 ile genişletildi dk cinsinden yazmak için oncekisure = millis(); // ve millis komutu mili saniye olarak saydığı için 1000 ile çarpılıp 1 saniye cinsine çevrildi } myGLCD.clrScr(); } eskidurum = sensordurum; myGLCD.setFont(SmallFont); myGLCD.print("RPM", CENTER, 0); myGLCD.setFont(BigNumbers); myGLCD.printNumI(rpm, CENTER, 24); }
Güzel çalışma. Tebrikler.
Yüksek devirlerde kare dalganın bozulmasını engellemek için schmitt trigger (SN74LVC1G17DBVR -tekli) veya Arduino dahili karşılaştırıcısı kullanılabilir.
Dahili karşılaştırıcı ile ilgili şöyle bir çalışma yapmıştım.
https://elektrokod.wordpress.com/2018/10/06/arduino-dahili-analog-karsilastirici-built-in-analog-comparator/