Arduino ve Processing ile RGB LED Kontrolü

Arduino ile temel iÅŸleri ilerlettikten sonra bir arayüzle kontrol edilebilen projeler dikkat çekmeye baÅŸlar. Arduino’da bulunan seri haberleÅŸme birimi ile herhangi bir programlama dili ile hazırlanmış ve bilgisayardaki seriport üzerinden haberleÅŸen arayüzleri birbirleriyle konuÅŸturmak mümkün.

Bu yazımda sizlere Arduino için kolayca arayüzler hazırlayabileceÄŸiniz bir programlama dili ve aynı zamanda geliÅŸtirme ortamı olan Processing’den bahsedeceÄŸim. Processing tümleÅŸik geliÅŸtirme ortamını (IDE) indirdikten sonra Arduino IDE’si ile oldukça benzediÄŸini göreceksiniz. Bunun sebebi Processing’in Arduino’ya esin kaynağı olması ve altyapı olarak Processing benzeri bir yapı kullanmasıdır. Yani Arduino programlamayı öğrendiÄŸinizde aynı dili Processing programlama için de kullanabilirsiniz.

Processing programlamaya yeni başlayanlar ve değişik görsel tasarımlar oluşturmak isteyenlere yönelik geliştirilmiş açık kaynaklı bir programlama dili ve geliştirme ortamıdır. Programlamaya giriş eğitimi, görsel tasarım ve yazılım protoipleme gibi birçok alanda yaygın olarak kullanılmaktadır.

Processing‘i http://www.processing.org web sitesinden ücretsiz olarak indirebilirsiniz.

Örnekte kullandığımız Control5p kütüphanesini de http://www.sojamo.de/libraries/controlP5/ adresinden indirebilirsiniz. Kütüphaneyi kullanabilmek için indirdiÄŸiniz zip dosyasını içerisinde gelen control5p klasörünü bilgisayarınızdaki “Belgelerim\Processing\libraries” klasörü altına koymalısınız.

AÅŸağıda Processing, Contol5p kütüphanesi, Arduino ve Arduino Türkiye Protoshield kullanılarak hazırlanmış bir RGB LED Kontrolü örneÄŸini görüyorsunuz. Bu arada Protoshield’imizin de üzerindeki ufak devre tahtası (breadboard) ile kullanıldığında ne kadar kullanışlı olduÄŸunu görebilirsiniz 🙂

Bu örneÄŸimizle beraber Processing‘in kullanılmasını, kütüphanelerin eklenmesini ve seri haberleÅŸme üzerinden kontrolü görmüş olacağız. Ä°lerleyen yazılarda Processing ve Arduino ile seri haberleÅŸmenin ayrıntılarına da gireceÄŸiz. Bizi izlemeye devam edin…

Projemizin Processing kodları:

/**
 * Processing ver ControlP5 Kütüphanesi ile
 * RGB LED Kontrolü 
 * Arduino Türkiye
 * http://www.arduinoturkiye.com
 */

import controlP5.*;
import processing.serial.*;

ControlP5 controlP5;
Serial myPort;  // Create object from Serial class

ColorPicker cp;
int redDeger;
int greenDeger;
int blueDeger;

void setup() {
  size(400,100);
  controlP5 = new ControlP5(this);
  cp = controlP5.addColorPicker("picker",0,0,255,20);
   String portName = Serial.list()[0];
 myPort = new Serial(this, portName, 9600);
}

void draw() {
  background(cp.getColorValue());
  redDeger = int(red(cp.getColorValue()));
  greenDeger = int(green(cp.getColorValue()));
  blueDeger = int(blue(cp.getColorValue()));
   println("RED "+redDeger + " GREEN "+greenDeger + " BLUE "+blueDeger);
  RGBGonder();
  delay(50);
}

void RGBGonder()
{
  myPort.write('R');
  myPort.write(redDeger);
  myPort.write(greenDeger);
  myPort.write(blueDeger); 
}

Projenin Arduino kodları:

/* 
  Seriport üzerinden RGB (red-green-blue) LED kontrolü
  Arduino Türkiye
  http://www.arduinoturkiye.com   
*/

// LED bağlatı pinleri
int rpin = 11;  // kırmızı
int gpin = 10; // yeÅŸil
int bpin = 9; // mavi

float h = 0; //hue (ton) deÄŸeri
int red=0, green=0, blue=0; // renk deÄŸerleri
int durum = 1;
int gelen = 0;

void setup()
{
  Serial.begin(9600);

}

void loop()
{

  while(Serial.available()>0)
  {
    gelen = Serial.read();
    switch(durum)
    {
      case 1:
      if(gelen == 'R'){
       durum = 2;
      }
      break;

      case 2:
      red = gelen;
      durum = 3;      
      break;

      case 3:
      green = gelen;
      durum = 4;
      break;

      case 4:
      blue = gelen;
      durum = 1;
      break;
    }
  }

  // Ortak katot için
  analogWrite(rpin, 255 - red);
  analogWrite(gpin, 255 - green);
  analogWrite(bpin, 255 - blue);

   // Ortak anot için
 /* 
  analogWrite(rpin, r);
  analogWrite(gpin, g);
  analogWrite(bpin, b);
*/
  delay(20);
}

LED Bağlantıları:

 

 

CoÅŸkun TaÅŸdemir

Elektronik mühendisi, gömülü sistemler meraklısı, Arduino kitabı yazarı

16 comments

  1. emin orhan dedi ki:

    arkadaslar
    Kütüphaneyi kullanabilmek için indirdiğiniz zip dosyasını içerisinde gelen control5p klasörünü bilgisayarınızdaki ?BelgelerimProcessinglibraries? klasörü altına koymalısınız.
    burda anlatılan uzak bir olay vardı ben bunu duzeltmek ıstıyorum yukardakı adrese koydugunuz zaman kutuphaneyı gormeyecektır onun yerıne zıp

    actıgınız klasorde modes\java\libraries e kopyalarsanız programın calıştıgını goreceksınız ıyı eylenceler

  2. emin orhan dedi ki:

    çoşkun bey bende mega 2560 var yukardakı programı kutuphanesı ıle yerlestırmem bıraz zaman aldı yaptım ekranda Processing programının ekranı cıktı baglantı bacaklarını kontrol ederek mega ıle baglantısınıda yaptım yanlız hicbır tepkı vermıyor

  3. Halit dedi ki:

    Ubuntu kullanan kişiler seçtikleri sketchbook klasörünün içerisine libraries klasörü açsın ve içine control5p klasörünü eklesinler.Bunu yaptıktan sonra tüm gereksiz dosyaları silip ideyi kapatıp açtığınızda eklendiğini göreceksiniz.İyi günler.

  4. CoÅŸkun TaÅŸdemir dedi ki:

    Merhaba,
    Arduino’dan veriler geliyor mu önce bunu kontrol etmelisiniz. Processing penceresinde gelen veriler görüntülenecektir.

  5. hamza dedi ki:

    bana bu programın c# arayüzü kontrolü için c# program kodları lazım atarsanız sevinirim

  6. kaanceyhan dedi ki:

    Hamza bu sistemi c# ile kullanmak için tek yapman gereken visual studio’yu açmak ve seri porttan arduino’na baÄŸlanan kodu yazmak.
    Hepsi bu kadar.
    http://www.burakozkan.net/c-serial-port-bileseni/

  7. Osman dedi ki:

    ben bu devreyi kurdum ama led renk renk yanmadı processing control5p den yapılan ilerleme olmuyor nasıl yapabilirim onu

  8. CoÅŸkun TaÅŸdemir dedi ki:

    LED’ler arayüz olmadan çalışıyor mu peki, direk analogWrite ile deÄŸerler yazınca?

  9. mustafa dedi ki:

    program gayet güzel örnek için teÅŸekkür ederim.yalnız 8×8 rgb matrix dipslay devresi tasarlamam lazım.arduino nun 6 tane anolog çıkışı var sadece.64 tane rgb hücreyi tek bi analog çıkışından mı yakacağız?

  10. hakanerbaÅŸ dedi ki:

    merhaba çoşkun bey ,
    arduino ile processing programına aynı anda 8 değer göndermek istiyorum ama bir değer gönderebildim. bana yardımcı olur musunuz?

  11. Murat dedi ki:

    Ben bunu c# da yapmak istesem devrede nasıl bi değişiklik yapmam lazım. Teşekkürler

    • CoÅŸkun TaÅŸdemir dedi ki:

      C# için devrede bir deÄŸiÅŸiklik yapmaya gerek yok. Processing kodlarını c#’a uyarlayacaksınız sadece.

  12. Enes dedi ki:

    Mega kullanan ve processing ile iletişimde problem yaşayanlar(13. pindeki ledin sürekli yanması gibi) meganın 5v pini ile reset pini(güç pinlerinin olduğu sıra) arasına kapasitör koyarak bu sorunu aşabilirler.Benim kullanıdığım 1uF idi.Aşağıdaki linkten faydalanabilirsiniz.
    http://forum.arduino.cc/index.php?PHPSESSID=smk5n1nfscf8hqtdfd5u7h3gb7&topic=50151.15

  13. ibrahim dedi ki:

    merhaba coÅŸkun bey ,
    arduino kitabınızda sy 179 da rgb ledleri anlatmışsınız fakat kitabınızda burda yazdığınızı açıklayan bi bölüm yok .
    void h2rgb(float H, int&R,int&G,int&B){
    int var_i;
    float S=1,V=1,var_1,var_2,var_3,var_h,var_r,var_g,var_b;
    if (S==0){
    R=V*255;
    G=V*255;
    B=V*255;}
    }else…..
    burası ne anlatıyo hiç bi ÅŸey anlamadım .”var_” lar ne?
    devamında “if …else …else if ….else if “gibi yapılar var.

    kodun en sonunda ise “R=(1-var_r)*255; “

  14. tahsin dedi ki:

    iyi günler CoÅŸkun hocam. ben de arduinoya yeni baÅŸladım. kitabınızda sf.179’daki RGB LED sürme örnek projenizi yazdım ve devreyi kurarak RGB LED’i sorunsuz çalıştırdım. Ama benden önce yorum yazan Ä°brahim Bey’in takıldığı yeri ben de anlamadım. H2RGB dönüşüm fonksiyonunun neyi nasıl yaptığını detaylı anlatan biÅŸey de bulamadım. Programınızın geri kalanını da anlamadım. Ben ardiuno kullanarak renk algılayıcı sensörden gelen bilgileri LABVIEW ortamına aktaran bir çalışma yapacağım. Ama program bilgimi artırmaya çalışıyorum. Bu kapsamda sf.179-180’deki konularda yardımcı olabilirseniz sevinirim.

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal AÄŸlar