2 Haziran 2014 Pazartesi

Leap Motion Arduino Sevo Kontrol

Bu yazımızda Leap Motion ve arduino uno ile 4 adet servonun el hareketlerine simetrik olarak kontrol edilmesini inceleyeceğiz. Leap Motion üzerinde 2 adet IR kamera 3 adet kızılötesi led bulunmaktadır. Kızılötesi ledlerden yayılan kızılötesi sinyaller leap motion görüş alanı içerisinde bir cisimden yansıdığında bunlar kameralar vasıtası ile tespit edilmektedir. Yani sinyalin yansıma özelliğinden ve giden sinyal ile gelen sinyal arasındaki süre ölçülerek mesafenin tespit edilmesi yönteminden yararlanılmaktadır. Radar sistemlerine oldukça benzemekteler aslında (Şekil 1).


arduino leap motion servo
Şekil 1. Infrared Led Yansıma Prensibi


Leap motion sensörünü kullanmak için çeşitli platformlar, geliştirme ortamları mevcuttur. Ancak Arduino ile benzerliği açısından biz bu çalışmada Processing-Wiring dilini kullanacağız. 

Processing kurulumunu arduino ide kurulumu gibi basit bir şekilde bilgisayarınıza yaptıktan sonra, Projessing klasörü içerisindeki "lib" klasörüne LeapMotionP5 kütüphanesini kopyalıyorsunuz. Bu sayede Leap Motion kütüphanesi' ni Projessing' e yüklemiş olacaksınız. 

Leap Motion bilgisayara USB kablosu ile bağlanmaktadır. Servolar arduino kartına bağlı olduğu için Processing içerisinde arduino seri portunu tanıtmak gerekmektedir. Bu Processing içerisinde setup bloğu içerisine "new Serial(this, portName, 9600); " kodunu ekleyerek yapılmaktadır.

Arduino çıkış akımı kullanılan servoları besleyemeyeceği için, 5V ile çalışan servolara harici kaynaktan enerji sağlamalısınız. Bunu arduino ve servoları aynı pilden beslemek isterseniz 5V regulatör devresi kullanarak yapabilirsiniz. Ancak servolarınızın toplam çekeceği akım 1A üstünde ise farklı elemanlar kullanmanız gerekmektedir. Çünkü 7805 entegresi üzerinden maksimum 1A akım geçirebilmektedir.

Bu çalışmada arduino ile uzaktan haberleşme için Xbee modemleri kullanılmıştır. Siz direk arduino kartınızı bilgisayara bağlayarak da bu çalışmayı yapabilirsiniz. İleriki günlerde Xbee modemlerinin arduino ile nasıl kullanılacağı konusunda yazı paylaşacağım.

Çalışma videosu :  http://www.youtube.com/watch?v=ysL_c9gI2Os

Processing Kodu:

//Leap motion ve arduino ile servo kontrolü

import com.onformative.leap.LeapMotionP5; //Leap Motion kütüphanesi
import com.leapmotion.leap.Finger;
LeapMotionP5 leap;

int aci;
int deger;
float deger1;

import processing.serial.*;
Serial port;

public void setup() {

  size(720, 720, P3D);  //ekran boyutu
  noFill();
  stroke(255); //parmakların modellemesi beyaz olarak ekranda gösterilecek

  leap = new LeapMotionP5(this);  //leap motion usb portu

  println("Seri porta baglanti var:"); //leap motion bağlantısının durumunu ekrana yansıtır

  String portName = Serial.list()[0]; //arduino yada kablosuz modemin bağlı olduğu porta bağlanır
  port = new Serial(this, portName, 9600);
}

public void draw() {
  background(0);
  fill(255);
  for (Finger f : leap.getFingerList())
  {
    PVector position = leap.getTip(f);
 
    ellipse(position.x, position.y, 10, 10);
 
    deger1=map(position.x,250,400,0,180); //leap motion x ekseninde okunan değerler 0-180 arasına //maplenir

    deger=int(deger1); //float deger1 deskeni integer a donusturulur
    port.write(deger); //Seri porttan arduino ya gönderilen deger
    print("deger:  ");
    println(deger); //100-400 arasi

 
  }
}

  public void stop() {
  leap.stop();
}



Arduino Kodu:

#include<Servo.h>

Servo s;
Servo s1;
Servo s2;
Servo s3;

int deger=0;

void setup()
{
  Serial.begin(9600);
  s.attach(5);
  s1.attach(6);
  s2.attach(7);
  s3.attach(8);
}

void loop()
{
   if(Serial.available())
  {
 
    deger=Serial.read();
 
    s.write(deger);
    s1.write(deger);
    s2.write(deger);
    s3.write(deger);
 
  }


}

16 Şubat 2014 Pazar

Fırçasız (Brushless) Motorlar

Elektrik motorları elektriğin manyetik alan özelliğini kullanarak elektrik enerjisini mekanik enerjiye dönüştüren makinelerdir. Fırçasız motorlar adından da anlaşılacağı gibi fırça olmadan elektronik aksamlar içeren motorlardır. Bunların, fırçalı motorlardan farkı akım çeviricilerin fırça değil elektronik olmasıdır. Daha sessiz çalışmaları, fırçaların meydana getirdiği sürüklemenin ve ısıdan kaynaklanan kayıpların, fırçaların meydana getirdiği kıvılcımların olmaması, kolay soğutulabilmeleri fırçalı motorlara göre  üstünlükleridir.

Fırçasız motorlar diğer DC motorlar gibi direk bataryaya bağlanarak çalıştırılamazlar. Böyle bir yanlışlığın yapılması motorun yanmasına neden olur. Bu sebepten fırçasız motorların çalıştırılabilmesi için ESC’lere ihtiyaç duyulur.
Fırçasız motorlar inrunner ve outrunner olmak üzere ikiye ayrılırlar. Inrunner motorlar, rotoru motorun merkezinde olan sabit sargıları dış kısımda bulunan motorlardır. Yani motorun dış çeperi sabitken iç kısmı hareket eder. Outrunner motorlarda ise motor sargıları motorun merkezinde ve sabitken, rotor üzerinde mıknatısları da barındıracak şekilde motorun dış çeperindedir.Yani motorun dış kısmı hareket ederken iç kısmı sabittir. Genellikle multikopter sistemlerinde kullanılan fırçasız motor tipleri outrunnerdır (Şekil 1).
           



Şekil 1

            Motor etiket bilgileri
Motorların özelliklerini içeren bazı parametreler vardır. Bunlardan ilki V kısaltmasıyla anılan elektrik akımının basıncı olarak tanımlanan potansiyel farktır. Yani kısaca gerilim değerini gösterir. Modelcilikte kullanılan motorlar üzerinde ya da özellik tablosunda genellikle voltaj değerleri lipo pil hücre sayısına göre verilir.
İkinci parametre akım değeridir. A kısaltmasıyla anılan amper bir noktadan birim sürede akan elektrik yük miktarını gösterir. Yani birim zamandaki yük miktarına akım denir. Bu parametreye göre ESC ve pil simi yapılır.
Üçüncü parametre güç değeridir. W kısaltmasıyla anılan watt motorun pervaneyi çevirebilmesi için ihtiyaç duyacağı gücü ifade eder. Akım ve gerilimin çarpılmasıyla elde edilir.
Kv değeri fırçasız elektrik motorları için geçerli olan devir katsayısını gösteren değerdir. Voltaja göre devir sayısının hesaplanmasını sağlar. Yani motorun 1V başına 1 dakikada çevireceği devir sayısını gösteren parametredir. Örneğin 10 V ile çalışan bir motorun Kv değeri 700 ise bu motorun dakikadaki devir sayısı= 10x700=7000 devir/dakika’ dır. Genellikle dev/dakika yerine rpm (revolution per minute) kullanılır.
Diğer bir parametre Kt değeri diye tabir edilen tork katsayısıdır. Bu değer bir motorun amper başına vereceği tork değerini ounce-inch cinsinden ifade eder. Örneğin 0,60 oz-inc/A Kt değerine sahip bir motor 10 A de 6 oz-inc tork verir.
Kv değeri ile Kt değeri arasında ters orantı vardır. Yani Kv değeri yüksek olan bir motorun amper başına vereceği tork değeri düşük olur. Bu sebepten yüksek Kv değerli motorlarda tork değerinin artırılması için küçük pervaneler ya da ek dişli sistemleri kullanılmalıdır.
Fırçasız motorların etiketlerinde ya da özellikler tablosunda optimum verim için kullanılması gereken pervane ölçütleri de belirtilir. Kullanılacak pervanelerin bu özellikler dahilinde olması verimi artırmaktadır.