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.
Bağlantıları breadboard’a yaptıktan sonrak görünüm şu şekilde:
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.
Nasıl çalıştığına dair örnek bir video:
arduinonun rx ledi yanıp sonmesine ragmen rgb led yanmıyor arduino çıkış vermiyor
BaglantilariniZda sorun olabilir. Rx yanıyor ise çıkış vardır. Doğru pinlere bagladiginiza emin olun.
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.
ç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 ?
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.
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.
Merhabalar ben iktisat öğrencisiyim ama elektroniğe fazlasıyle meraklı biriyim tek sıkıntı bu konuda kodlama arduino ile uzun bir süredir uraşıyorum ama processing mantığını çözemedim mönitör bölme konusunda yardımcı olursanız çok sevinirim.
Arduino:1.8.5 (Windows 10), Kart:”Arduino/Genuino Uno”
sketch_aug06a:7: error: ‘import’ does not name a type
import java.awt.Robot;//ekran renklerini alan Robot sınıfı
bu hatayı alıyorum sebebı nedır ?
Processing programını arduinoya atmaya çalışıyorsunuz. Üstte paylaştığım Processing programı için yazılmış olan kod. Bu kodu Processing adlı programa yapıştırıp çalıştıracaksınız. Arduino kodunu arduinoda. Processing ekran renklerini arduinoya gondererek ışık renklerini ayarlayacak.