Arduino İle Motor Hız Sensörü Kullanımı

Motor hız sensörü, motor hızı tespiti, darbe sayısı, konum sınırı vb. için kullanılan bir modüldür. Prensipte, herhangi bir olayın meydana geliş hızını ölçer. Genellikle bu, belirli bir süre (entegrasyon aralığı) için olayları sayarak ve ardından hızı elde etmek için olay sayısını zamana bölerek yapılır. Motor hız sensörü denildiğine bakmayın bu sensör çoğunlukla motor hızı tespiti için kullanıldığı için böyle adlandırlmaktadır. Bu modül bir çok farklı projede sayaç ve benzeri amaçlarda kullanabilirsiniz.

Motor Hız Sensörü

Temel olarak, optik sensörün bir tür yarıklı tekerlek veya benzeri bir mekanizma tarafından fiziksel olarak kesildiğinde işlenmiş darbe dizileri veren basit bir cihazdır (optik sensör genellikle bir ışık yayıcıdan oluşur). Aydınlatmayı sağlayan diyot ve bu aydınlatmanın varlığını veya yokluğunu algılayan bir fototransistörden oluşur. Burada kullanılan iletici optik sensör, bir kızılötesi ışık yayan diyot ve bir fototransistörden oluşur. Bu, hem dış ışık kaynaklarından gelen paraziti önler hem de iki bileşenin belirli bir radyasyon frekansı için eşleştirilmesiyle, istenmeyen parazitlere karşı daha da verimli çalışmasını sağlar.

Motor Hız Sensörü Özellikleri

  • Yarık ölçüsü: 10 mm
  • Çalışma gerilimi: 3.3 – 5V 
  • Kart boyutu: 23 mm x 20 mm
  • LM393 komparatör entegresini kullanır

Motor Hız Sensörünün Devre Şeması

Devre, kalibre edilmiş darbeleri mikrodenetleyici tabanlı bir takometre veya benzer devre/cihaza göndermek için kullanılabilir. Devrenin kalbinde, fototransistör çıkışlı (OC1) OS25B10 geçirgen optik sensör bulunur.

Diğer bir eleman ise basit bir Schmitt tetikleyicisi olarak yapılandırılmış LM393 ikili karşılaştırıcı çip (IC1) bulunur (schmitt tetikleyicileri, çeşitli kullanımları olan temel devrelerdir; biri sinyal işlemedir, dijital verileri bazı aşırı gürültülü ortamlardan çekebilirler). Yeşil gösterge (LED1) uygulanan voltajın varlığını gösterir ve kırmızı gösterge (LED2) motor hız sensörü modülünün çıkışını izler. Modülün önerilen çalışma voltajı 4,5 ila 5,5 volt dc’dir.

Motor Hız Kontrol Modülü Devresi

OS25B10 optik sensör (OC1) içindeki ışık yayan diyotun çalışma akımını sınırlamak için burada bir 180R direncinin (R1) kullanıldığını unutmayın. Prototipinizde bu değeri değiştirmeniz gerekebilir. Benzer şekilde, gerçek yaşam uygulamanıza dayalı olarak iyi bir voltaj salınımı elde etmek için 10K direncinin (R2) değerini değiştirmeye çalışın. Son 10K direnç (R7) isteğe bağlı bir Pull Up direncidir.

Kodlayıcı(Encoder) Disk

Optik sensörün bir tarafında ışık yayan diyot, diğer tarafında ise foto transistör bulunduğunu söylemiştik. Görsel yol engellenmezse, fototransistör iletecek, ancak bir şey engellediğinde foto transistöre düşen ışığı iletmeyecektir. Böylece, bağlı bir tekerleğin/motorun dönüş hızını saymak için optik sensörün yuvasına bir kodlayıcı disk (uygun bir kodlayıcı çözünürlüğüne sahip) yerleştirilebilir.

Kodlayıcı Disk(Encoder)

Yukarıdaki görüntüdeki kodlayıcı diskte (dizin çarkı olarak da bilinir) birden fazla delik(yuva) bulunur. Paslanmaz çelikten veya sert plastikten kendi kodlayıcı diskinizi kolayca üretebilirsiniz. Yalnızca hız algılama (konum algılama değil) uygulamasıyla ilgileniyorsanız, görev için bir yuva seti yeterlidir.

Kodlayıcı Disk Çözünürlüğü

Motor Hız Sensörü Bağlantı Şeması ve Kodu

Arduino ile Motor Hız Sensörü Bağlantı Şeması
int encoder_pin = 2; // modülden sinyal çıkış pini
unsigned int rpm; // rpm tutan veri
volatile byte pulses; // sinyal sayısı
unsigned long timeold;
// devir başına sinyal sayısı
// kodlayıcı diskinize göre
unsigned int pulsesperturn = 12;
void counter()
{
   //sayımı arttır
   pulses++;
}
void setup()
{
   Serial.begin(9600);
   pinMode(encoder_pin, INPUT);
   //Interrupt 0 is digital pin 2
   //boşlukta tetikleme olur (YÜKSEK'ten DÜŞÜK'e değiştirin)
   attachInterrupt(0, counter, FALLING);
   // başlat
   pulses = 0;
   rpm = 0;
   timeold = 0;
}
void loop()
{
   if (millis() - timeold >= 1000) {
      //Hesaplamalar sırasında kesintileri işlemeyin
      detachInterrupt(0);
      rpm = (60 * 1000 / pulsesperturn )/ (millis() - timeold)* pulses;
      timeold = millis();
      pulses = 0;
      Serial.print("RPM = ");
      Serial.println(rpm,DEC);
      //Kesinti işlemeyi yeniden başlatın
      attachInterrupt(0, counter, FALLING);
   }
}

Sensörün örnek kullanım videosu aşağıdadır: