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üphanesiArduino 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