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);
 
  }


}

3 Mart 2014 Pazartesi

Eclipse ile Android Uygulama Geliştirme

İlk olarak Eclipse açılır. Sağ üstte “File>New>Android Application Project” seçilir. Açılan sayfaya uygulama adı girilir. Oluşturulacak uygulamanın hangi sürümler için kullanılacağı seçilir. Aynı sayfadan kullanılacak tema da seçilebilir. İleri butonuna tıklanır. Yapılacak uygulamanın kayıt edileceği alan Location kısmından seçilir. İleri butonuna tıklanır. Açılan sayfadan uygulama sağ üst kısmında simgelenecek iconun resmi ve boyutları seçilir. Farklı bir resim konulmak istenirse bu “İmage File” yanındaki “Browse” butonuna tıklanarak yapılır. İleri butonuna tıklanır. Şimdilik Blank Activity seçimine ellemeyerek ileri butonuna tıklanır ve açılan sayfada “Finish” butonuna tıklanarak ilk uygulama yapılmaya başlanır.

Eclipse üzerinde açılan çalışma sayfasının sağ tarafında “Package Explorer” kısmı altında oluşturulan uygulama ile ilgili kaynak dosyalar bulunur. Bunların içerisinden sırasıyla “res>layout>……xml” dosyası seçilir. Bu kısmın yanında bir ekran açılır (Şekil 1). Açılan bu ekrana sol kısımda “Palette” linki altındaki elemanlar sürüklenerek yerleştirilir. Böylece uygulama sayfası oluşturulur.

eclipse android sdk kurulumu

Şekil 1





Şekil 2: Örnek Android Uygulaması

Eclipse üzerinde oluşturulan uygulamaların çeşitli aygıtları kontrol edebilmesi için, uygulamada kullanılan butonlara, side sticklere, slide barlara çeşitli pinler yada numaralar atanmalıdır. Bu işlem res klasörü altındaki activitymain.xml dosyası içerisinde kod yazarak yapılır. Bir buton ve slide bar içeren kod şu şekilde yazılabilir.



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >



<TextView

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello_world" />



<Button

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/textView1"

android:layout_below="@+id/textView1"

android:layout_marginLeft="47dp"

android:layout_marginTop="21dp"

android:text="@string/Button" />



<ProgressBar

android:id="@+id/progressBar1"

style="?android:attr/progressBarStyleLarge"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/button1"

android:layout_marginTop="56dp"

android:layout_toRightOf="@+id/button1" />

</RelativeLayout>



Yukarıdaki kodta kullanılacak elemanlar ile ilgili tanımlamalar yapılmıştır. Bu tanımlamalar kullanılacak elemanın genişliği, boyu, rengi, ekranın hangi kısmında olacağı vs. ile ilgilidir.

Oluşturulan uygulamanın Android bir telefon yada emulator denilen bilgisayar üzerinde oluşturulan sanal telefon ekranında oynatılması için Eclipse araç çubuklarından sırasıyla “Run>Run As>Run Configuration” seçilir. Açılan ekrandan derlenecek ve çalıştırılacak proje seçilir. Target kısmından emulatorde oynatmak için “Automatically pick compatible device: Always…” seçilir, telefonda oynatmak için “ Always prompt to pick device” seçilir ve sırasıyla “Apply>Run” tıklanır. Telefonda uygulamanın çalıştırılması için telefonun bilgisayara bağlantılı olması yeterlidir.

Şekil 3 ve 4 de Eclipse üzerinde yazılan android kontrol ugulamaları mevcuttur. Şekil 4.5 de quadrocopterin androidle kontrolü için oluşturulacak devre tasarımı bulunmaktadır. Kontrolcü olarak Arduino Mega ADK kullanılan bu çizimde android telefon ile haberleşme xbee üzerinden yapılmaktadır. Arduino Mega ADK arduino geliştirme kitlerinin android telefonlar ile uyumlu, USB girişine sahip 2560 işlemcili bir versiyonudur. Xbee düşük güçlü veri aktarım cihazıdır. İki nokta arası yada ikiden fazla nokta arası haberleşme için kullanılırlar.


Şekil 3: Android Lamba Kontrol Uygulaması




Şekil 4: Android Araba Kontrol Uygulaması





Şekil 5: Quadrocopter Bağlantı Şeması