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:

Beğen  
Yazar

Makine mühendisliği mezunu bir yazılım uzmanıyım. Otomasyon ve back-end programlama üzerine çalışmaktayım. .net, MVC, ve PHP ile web, masaüstü, ve mobil uygulamalar geliştirmekteyim.

Bir Cevap Yazın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yapılan Yorumlar ( 9 )