10 Mayıs 2014 Cumartesi

RC Receiver Değerlerinin Arduino ile Okunması

Multikopter sistemleri yada modelcilikte kumanda alıcı verici sistemleri yaygın olarak kullanılmaktadır. Çeşitli frekans değerlerinde çalışan bu sistemlerden en yaygın kullanılanı 2.4 GHz frekans değerine sahip olanlardır. Kumandalar pwm (pulse width modulation) yada ppm (pulse position modulation)  modülasyon özellikleri ile çalışmaktadır. PWM yada PPM sistemlerini ileriki çalışmalarda detaylı bir şekilde inceleyeceğiz. Bu çalışmada kumandanın nasıl bir sinyal gönderdiğini ve bu sinyalin hangi değerler arasında olduğunu inceleyeceğiz.

Kumanda üzerinde bulunan joystick yada switchler kanallara atanmıştır. Bazılarında ise kanallara atama olayını kullanıcılar yapar. Bir multikopterin kontrol edilebilmesi için en az 4 kanallı kumandaya ihtiyaç vardır.

Kanallardan gelen sinyallere çoğu çalışmada ihtiyaç duyulmaktadır. Multikopterin farklı kontrol çalışmalarında, android kontrollerinde bu verilere ihtiyaç duyulmaktadır. Bu veriler basit bir şekilde arduino kartları ile okunabilmektedir. İlgili kod aşağıda bulunmaktadır. Receiverdan gelen değer analogRead fonksiyonu ile okunamaz. Çünkü PWM yada PPM sinyali ile çalışılır. Yani okunması gereken sinyalin HIGH yada LOW olma süresi okunmalıdır. Bunu okuyabilmek için arduino da özel bir fonksiyon vardır. Aşağıdaki kodda "pulseIn" fonksiyonu sinyalin HIGH olduğu durumları saymaktadır.

Kod:

int pin = 7;     // değeri okunmak istenen receiver pini
unsigned long duration;

void setup()
{
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop()
{
  duration = pulseIn(pin, HIGH);   // pulse' in HIGH olması durumunda sayar
  Serial.println(duration);
}