Sezer Çoban

Bir İki Şey Biliyorum, Üç Dört Şey Ekliyorum.

Arduino İle RGB Led Şeridi Ambiyans Efekti

Arduino ile 3 renkli RGB Led şeridi ile bilgisayar ekranındaki renk yoğunluğuan göre değişen ambiyans efektli Led uygulamasını anlatacağım.

Uygulamanın fikir vermesi açısından videosu:

Uygulamada kullanılacak ekipmanlar:

  • Arduino (Uno versiyonunu kullandım)
  • 3 Ana renge sahip 1m uzunluğunda RGB Led Şerit (Elektrikçilerden bile bulabilirsiniz.
  • ULN2003A Transistör. Led’lerin kontrolünü gerçekleştirecek transistör (Elektronikçilerde mevcut)
  • 12V adaptör. Arduino sadece 5V gerilim verdiği için Led şeridi dışardan beslemek için ihtiyaç duyacağız.
  • Arduino usb kablosu ve Renkli Jumper kablolar.
  • Arduino ve Processing yazılımı.

Öncelikle breadboard’un üzerine ULN2003A transistörü yerleştirip aşağıdaki şemadaki gibi bağlantıları yapalım. Dikkat edilmesi gereken adaptörden gelen 12V’luk gerilimi doğrudan arduinoya vermememiz. Arduinoda kalıcı hasara yol açacaktır.
rgb led

Bağlantıları breadboard’a yaptıktan sonrak görünüm şu şekilde:

rgb-led1

Görüldüğü gibi, Arduino’nun 9,10 ve 11 numaralı pinleri transistörün sol üst 3 pinine bağlı. Tam karşılarına ise sırasıyla şeridin kırmızı, yeşil ve mavi girişleri bağlı. Led şeridin güç kablosuna adaptörden gelen + ucu bağlayıp – ucu ise arduino’nun gnd pini ile transistörün soldaki 8 numaralı pinine paralel olacak şekilde bağlıyoruz.

Processing Programlama

Processing programı üzerinde, bilgisayarımızın ekranını anlık olarak takip edecek ve renklerin ortalamasını alarak seri haberleşme ile arduinoya gönderecek bir programa ihtiyacımız var. Açıklamalı olarak processing kodları:

/*
Arduino Monitor Ambians Şeridi
www.sezercoban.com
*/

//gerekli sınıfları
import java.awt.Robot;//ekran renklerini alan Robot sınıfı
import java.awt.AWTException;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.awt.Rectangle;
import java.awt.Dimension;
import processing.serial.*; //Seri Haberleşme
Serial port; //Seri Haberleşme sınıfı
Robot robby; //Robot sınıfı

//----değişkenler
 String comport = "COM3"; //Arduino'nun bağlı olduğu com portu
 int r_width = 1600; //Ekran çözünürlüğünüzün
 int r_height = 900;
//----
void setup()
{

 port = new Serial(this, comport,9600);
 size(100, 100); //ortalama rengi gösterecek pencere
 try
 {
 robby = new Robot();
 }
 catch (AWTException e)
 {
 println("Robot sınıfı desteklenmiyor");
 exit();
 }
}

void draw()
{
 int pixel;
 float r=0;
 float g=0;
 float b=0;

 //robot sınıfı ile çözünürlüğe göre ekran resmi alınır
 BufferedImage screenshot = robby.createScreenCapture(new Rectangle(new Dimension(r_width,r_height)));
 int i=0;
 int j=0;
 for(i =0;i<r_width; i=i+2){
 for(j=0; j<r_height;j=j+2){
 pixel = screenshot.getRGB(i,j); //ekran resminin renkleri ayrılıp ortalamaları hesaplanır
 r = r+(int)(255&(pixel>>16)); //kırmızılar
 g = g+(int)(255&(pixel>>8)); //yeşiller
 b = b+(int)(255&(pixel)); //maviler
 }
 }
 r=r/(684*464);
 g=g/(684*464);
 b=b/(684*464);
 //processing konsoluna bilgi amaçlı arduinoya gönderilecek veriler yazdırılır
 println("r:" +r);
 println("g:"+g);
 println("b:"+b);

 port.write(0xff); //her bir veri paketi için senkronizasyon verisi
 port.write((byte)(r)); //kırmızı değeri
 port.write((byte)(g)); //yeşil değeri
 port.write((byte)(b)); //mavi değeri
 delay(10);

 background(r,g,b); //processing penceresi ortalama rengi alır
}

Processing kodlarında değişkenler bölümünde port ve çözünürlük kısmını kendinize göre ayarlamayı unutmayın.

Arduino Programlama

Processing’den gelen verileri işleyip led’e gönderecek kodlar:


/*
Arduino Monitor Ambians Şeridi
www.sezercoban.com
*/
int red, green, blue;
int RedPin = 9; //kırmızı rengin bağlı oldugu pin
int GreenPin = 10; //yeşil rengin bağlı oldugu pin
int BluePin = 11; //mavi rengin bağlı oldugu pin
void setup()
{

Serial.begin(9600);
 int red = 255;
 int blue = 255;
 int green = 255;
}

void loop()
{

/*
eğer seri haberleşme açıksa ve4 karakter geliyor ise,
senkronizasyo verisi her geldiğinde renkleri oku
*/
if (Serial.available()>=4) {
 if(Serial.read() == 0xff){
 red = Serial.read();
 green= Serial.read();
 blue = Serial.read();
 }
}
//okunan renkleri led e gönder
analogWrite (RedPin, red);
analogWrite (GreenPin, green);
analogWrite (BluePin, blue);
delay(10);
}

Arduino kodunuda gönderdikten sonra geriye processing programını çalıştırmak kalıyor. Bilgisayarınızın arkasına koyduğunuzda özellikle film izlerken ortamı oldukça etkikeyecektir.

Geliştirme

Processing ile monitörü 2 ya da daha fazla bölüme ayırarak her bölüm için ayrı bir renkte led yanmasını sağlayabilirsiniz.

Bir board üzerine transistör ve header lehimleyerek bu sistemi sabit hale getirebilirsiniz.

rgb-led-2

Nasıl  çalıştığına dair örnek bir video:

Category: Arduino, Projelerim
  • hasan says:

    arduinonun rx ledi yanıp sonmesine ragmen rgb led yanmıyor arduino çıkış vermiyor

    • Sezer says:

      BaglantilariniZda sorun olabilir. Rx yanıyor ise çıkış vardır. Doğru pinlere bagladiginiza emin olun.

  • Fatih says:

    Devrenin tam şemasını verebilirmisiniz.
    Uln2003 e 5v elektriği hangi pininden verdiniz.
    Son olarak bu devre kaç metre şerit led çalıştırır.
    Teşekkürler.

  • Tuna says:

    çok teşekkür ederim çalışıyor fakat yanan renklerle ilgili sıkıntım var kırmızı rengi çok az yanıyor genelde mani tonları daha çok belli oluyor sebebi ne olabilir ?

    • Sezer says:

      bağlantılarınızı kontrol edin, kımızı renginin bağlı oldugu ayakta sıkıntı olabilir, yetersiz gerilim uygulanıyor olabilir. Ya da yazılımsal olabilir, ekrana kırmızı renk deseni actıgınızda da mı kırmızı cok az kontrol edin.

  • Erkan says:

    Merhaba, bu güzel paylaşımın ve desteğin için öncelikle teşekkür etmek isterim. Yaşamış olduğum problemi paylaşmak isterim.
    5 adet 50cm uzunluğunda şerit ledleri birbirine seri bağladım ve ULN2003 üzerinden 7*5 = 35 şerit lede ayrı ayrı bacaklara girerek açma kapama işlemi yaptırıyorum.
    5 adet şerit led 2A çekiyor ve ULN2003’ün desteklediği bacak başına akım 400mA olarak görünmekte fakat ölçümlerimde 540mA akım çekiyor ve buda ledlerin parlaklığını kısıyor.Benim problemimde bu noktada başlıyor.Nasıl bir işlem yapmalıyım ki akımı artırıp parlaklığı sağlayabilirim. Bu konuda ki önerilerinizi sabırsızlıkla bekliyorum.Teşekkürler.

    Not : 35 adet led 7 bacak üzerinden 5’er li gruplar halinde çalışıyor.Ama parlaklıklar 550mA akımla sağlanıyor.

Your email address will not be published. Required fields are marked *

*