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


}

9 Şubat 2014 Pazar

Arduino Nedir?

           Arduino, Processing/Wiring dili ile uygulamaların oluşturulduğu fiziksel programlama platformudur. Aslında bir çeşit geliştirme kartıdır. Basit bir arayüz sayesinde kolayca programlanabilen bir şekilde dizayn edilmişlerdir. Uno, Mega, ADK, ProMini, Micro, Esplora gibi farklı işlemci ve giriş çıkış sayılarına sahip birçok çeşidi bulunmaktadır (Şekil 1).






Şekil 1

         Arduino geliştirme kartları basit olarak, Atmel AVR Mikrodenetleyici, giriş-çıkış pinleri, 16 MHz osilatör, flash memory, programlama için gerekli elemanlar ve regüle devresini barındırırlar. Microdenetleyicilere önceden yazılmış bootloader yazılımı sayesinde ek bir programlama cihazına ihtiyaç duymadan kolaylıkla Arduino IDE ile programlanabilirler. Bu arayüz www.arduino.cc sitesinden yüklenir. Kullanılan geliştirme kartı bilgisayara ilk takıldığında sürücüsü yüklenmelidir. Bu driver indirilen IDE içerisindedir ve manuel olarak kurulmalıdır. 
        Arduino IDE, JAVA programlama dili ile yazılmış, kod editörü ve derleyici olarak görev yapan, derlenen kodun geliştirme kartına yüklenmesini sağlayan bir arayüzdür/uygulamadır. Arduino  IDE sahip olduğu birçok kütüphane ve basit yazılım platformu ile değişik alanlarda kullanılabilmektedir. Donanım ve yazılım olarak açık donanım ve açık kaynak kod prensibine dayanmaktadır. Geliştirme ortamının kaynak kodu ve Arduino kütüphane kodları GPLv2 lisansıyla lisanslanmıştır.
        Arduino IDE içerisinde programlamanın anlaşılabilmesi için çeşitli örnekler mevcuttur. Buna sırasıyla "File-Examples" konumlarına giriş yaparak ulaşabilirsiniz. Meşhur led yakıp söndürme örneği Şekil 2 de mevcuttur.


Şekil 2

              Şekil 2' deki örnekte Arduino geliştime kartının 13. pinine bağlı led 1sn aralıklar ile yanıp sönecektir. Kod incelendiğinde yazılımın çok basit olduğu görülecektir. Çalışma videosu altta mevcuttur.