Arduino ve Processing ile RGB LED Kontrolü
CoÅŸkun TaÅŸdemir // 25 Åžubat 2012 // 16 yorum // kategori: Arduino ProjeleriArduino 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ı:
Etiketler: Arduino LilyPad > Arduino Türkiye Protoshield > arduinoya giriş > Processing
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
ç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
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.
Merhaba,
Arduino’dan veriler geliyor mu önce bunu kontrol etmelisiniz. Processing penceresinde gelen veriler görüntülenecektir.
bana bu programın c# arayüzü kontrolü için c# program kodları lazım atarsanız sevinirim
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/
ben bu devreyi kurdum ama led renk renk yanmadı processing control5p den yapılan ilerleme olmuyor nasıl yapabilirim onu
LED’ler arayüz olmadan çalışıyor mu peki, direk analogWrite ile deÄŸerler yazınca?
evet arayüz haricinde çalışıyor
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?
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?
Ben bunu c# da yapmak istesem devrede nasıl bi değişiklik yapmam lazım. Teşekkürler
C# için devrede bir deÄŸiÅŸiklik yapmaya gerek yok. Processing kodlarını c#’a uyarlayacaksınız sadece.
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
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; “
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.