Televizyonlarımızın uzaktan kumandası üzerinde yer alan düğmelerden bazılarının işe yaramadığını farketmişsinizdir. Bu düğmelere bir kullanım alanı bulmak ister miydiniz? Gelin Arduino ile kuracağımız basit bir devre ile bu düğmeleri işe yarar hale getirelim.

Bu projemizde Arduino Dersleri 16: Kızılötesi Kumanda Kullanımı isimli dersimizde de kullanmış olduğumuz kızılötesi kumanda alıcısını Arduino’muza bağlayarak şerit LED süreceğiz.

Gerekli malzemelerimiz:

Arduino derslerimizde de bahsettiğimiz gibi kısaca kızılötesi kumandaların çalışma prensiplerinden bahsetmek gerekirse:

“Kumanda üzerinde bir kızılötesi (infrared, ir) LED bulunur. Bu LED, kumanda üzerindeki herhangi bir tuşa bastığımızda önceden belirlenmiş bir kod verecek şekilde belirli bir frekansta yanıp söner. Çoğu kumanda için bu frekans 38 kHz’tir. 38 kHz’lik taşıyıcı sinyale her bir tuş için farklı bir kod oluşturacak şekilde modülasyon uygulanır. Her marka için farklı modülasyon ve kodlama teknikleri mevcuttur. Projede kullandığımız 38 kHz kızılötesi alıcı, aldığı sinyali demodüle ederek Arduino’ya doğrudan basılan buton ile ilgili kodu göndermektedir. Bu sayede farklı marka ve model kumandaları 38 kHz taşıyıcı sinyale sahip olduğu sürece bu alıcı ile kullanabilmekteyiz.”

Öncelikle Arduino ile kızılötesi kumandayı kullanabilmemiz için bir kütüphaneye ihtiyaç duyuyoruz. Bu kütüphaneyi aşağıdaki adresten indirebiliriz:

https://github.com/z3t0/Arduino-IRremote

Kumandamızdaki tuşları kullanabilmemiz için öncelikle tuşlara ait kodları öğrenmemiz gerekli. Kütüphaneyi yükledikten sonra örnek kodlar içerisinde yer alan IRrecvDemo isimli programı Arduino’muza yüklememiz gerekiyor. Dosya -> Örnekler -> IRremote -> IRrecvDemo adımlarını takip ederek gerekli koda ulaşabiliriz. Alıcımızı aşağıdaki devre şemasına göre Arduino kartımıza bağlıyoruz:

NOT: Sizin kızılötesi alıcı kartınızdaki pin dizilimi farklı olabilir, bu durumda bağlantıyı aşağıdaki şekilde yapmanız gereklidir:

Arduino -> Alıcı:

5V -> VCC

GND -> GND

Dijital Pin 11 -> DO

Kodu yükledikten sonra bilgisayarımızdan seri monitörü açıyor, kumandamızı da devredeki alıcıya doğru tutarak kullanmak istediğimiz tuşlara sırasıyla basıyoruz. Seri monitörden aşağıdaki gibi tuşların kodlarını görebiliyor olmamız gerekli:

Bu ekranda görmüş olduğumuz 20DF4EB1 ve 20DF8E71 kumandamız üzerindeki tuşların kodlarıdır. Bu kodları not ediyoruz, çünkü bir sonraki adımda bu kodları Arduino’muzda işlev atamak için kullanacağız.

Devremizden kısaca bahsetmek gerekirse, temel olarak bir kızılötesi alıcı ve LED şeritimizin parlaklık kontrolü için gerekli bir MOSFET’ten oluşumakta.

LED şeritler, büyük çoğunlukla 12V gerilim ile kullanılmaya hazır olarak akım limitleyici dirençler ile birlikte hazırlanırlar. Böylelikle besleme gerilimini 0-12V arasında değiştirerek LED şeritimizin istediğimiz parlaklık seviyesinde yanmasını sağlayabiliriz. Bu işlem için motor sürme dersimizden de hatırlayabileceğiniz gibi transistör kullanmanız gerekiyor. Bu işlem için IRFZ44N MOSFET kullanıyoruz. MOSFET’in düzgün şekilde çalışabilmesi için, ayrıca bir NPN tipinde transistöre ihtiyaç duymaktayız. Bunun sebebi, kullanmış olduğumuz MOSFET’in, lojik seviyesi (3.3V veya 5V) sinyaller ile tetiklemeye uygun olmamasıdır. Arduino’dan alacağımız PWM çıkışı BC547 NPN transistöre 10kΩ değerinde direnç ile bağlıyoruz ve bu çıkışı güçlendirerek daha büyük yükleri anahtarlayabileceğimiz MOSFET’imizi sürüyoruz.

Devre şemamızı aşağıdaki şekilde kuruyoruz:

Kodumuzu Arduino’muza yüklüyoruz:

/*
         `://////////////////////////////-`        
       -/////////::////////////:://///////-       
       ://///-`     `://////:`     `-/////:       
       :////..:///:.  `////`.:///:.  .////:       
       :////:///////-  ////////////-  ////:       
       :///++///////: `////////////- `////:       
       ://///-.////-`.//////.-////-`-/////:       
       :////////::-:///////////::-:///////:       
       -//////////////////////////////////-       
        -////////////////////////////////-        
  `------::////////////////////////////::------`  
 :/--////////////////////////////////////////--/- 
`:/:://::::::://////////////////////::::::://::/:`
./////-     `////////////////////////`     -/////.
./////-    `//////////////////////////`    -/////.
./////-   `////////////////////////////`   -/////.
///////: `//////////////////////////////` :///////
////////`////////////////////////////////`////////
//////////////////////////////////////////////////
---.---.//////////////////////////////////.---.---
        .://////////////////////////////:.        
 `-:///////:::::::::::::..:::::::::::::///////:-` 
 ://////////////////////////////////////////////: 
 ://////////////////////////////////////////////: 
 ://////////////////////////////////////////////: 
 .//////////////////////:://////////////////////. 

Bu kod, 24/07/2017 tarihinde maker.robotistan.com için hazırlanmıştır.  
 */

#include 

int RECV_PIN = 11;
int led = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
int parlaklik = 255;

#define yukari 0x20DF4EB1
#define asagi 0x20DF8E71

void setup()
{
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
  analogWrite(led, parlaklik);
}
void loop() {

  if (irrecv.decode(&results))
  {
    if (results.value == yukari)
      parlaklik = parlaklik + 25;
    if (results.value == asagi)
      parlaklik = parlaklik - 25;
    if (parlaklik >= 250)
      parlaklik = 255;
    if (parlaklik <= 0)
      parlaklik = 0;
    analogWrite(led, parlaklik);
    Serial.println(parlaklik);
    irrecv.resume();
  }
}

Alternatif olarak kodu bu sayfadan da indirebilirsiniz: https://zerobin.net/?f675ea953e8b0309#KUH659wt2r/R2QQpUutGp3hTilFCOFnOkq93xmPETRQ=

Kodda yer alan yukari ve asagi olarak tanımlanmış kodları kendi kumandamıza ait kodlar ile değiştirmeyi unutmayalım!

Bu kodda yer alan yukari olarak tanımlanmış tuşa bastığımızda LED şeritimizin parlaklığı artacak, asagi olarak tanımlı tuşa bastığımızda ise parlaklık azalacaktır.

21 Yorumlar

  1. maalesef aynen sistemi yaptım. kumanda kodlarını kendime uyarladım ama şerit led sürekli yanıyor. Serial monitörden parlıklığı da bastığım kumanda kodunu da görüyorum ama olmadı…

  2. sizin dediğiniz şekilde değil de sadece irfz44n kullanarak ikinci transistör kullanmadan direnç de dahil sistem kodlarınızla çok güzel çalıştı.
    benim yaptığım da uzun süre kullanımda sorun yaratır mı? ve ikinci transistöre neden ihtiyaç ver ki ben de çalışmadı…

    • İkinci transistörü kullanmamızın sebebi, IRFZ44N’nin gate geriliminin Arduino’dan gelecek 5V’tan daha yüksek olmasıdır. Eğer 5V ile çalışabilen bir MOSFET kullanırsanız doğrudan Arduino’ya bağlantı yapabilirsiniz.

      • Yanıtınız için teşekkürler. Sistemimi en son mesajda dediğim şekilde yaptım. 2. Transistörü sonradan denemedim belki ben hata yaptım. Ama yazınızda IRFZ44N’nun tetiklenmesi için 3.3v veya 5v yeterli gelmemekte dediniz ama benim sistemimde 5v ile güzel çalışmakta….

  3. elimde 20 metre rgb şerit led var 12 v 30 Amperlik trafo ile besliyorum bunu arduino ile nasıl konrol ederbilirim trafoyu nasıl bağlamalıyım

    • Trafoyu devrede gösterilen 12V LED şerit beslemesi ile gösterilen kısma bağlayabilirsiniz. Fakat bu durumda Arduino’nun Vin pininden vereceğiniz gerilim AC olacağından, Arduino’yu beslemek için ayrı bir 9-12V adaptöre ihtiyaç duyacaksınız.

  4. İyi günler, rgb led şerit için toplam led sayısına göre regülatör mü seçmem gerekiyor? 60 led için 60*60= 3.6 amper doğru mudur? Bir de ses sensörlü vumeter için kodlama kısmında her lede ayrı kod mu yazmam lazım?

    Teşekkürler.

    • Regülatörden ziyade, RGB LED’deki her bir renk için ayrı sürücü devresine ihtiyaç duyacaksınız. Yani basitçe gördüğünüz devre x3 olacak. Şeritteki her bir LED’in tek bir renginin 20mA çektiğini düşünecek olursak, her LED’de 3 tane renk olduğunu ve şeritte toplamda 60 tane LED yer aldığını varsayarsak, yaptığını hesaplamanın doğru olduğunu görüyoruz. Bu demektir ki, LED şeridinizi maksimum parlaklıkta ve beyaz renkte (her bir LED’deki 3 renk te tam parlaklıkta yanar durumda) 3.6A çekecektir. Güvenlik payını da hesaba katarsanız en azından 12V’ta 4A akım sağlayabilen bir güç kaynağı kullanmanız mantıklı olacaktır.

  5. Merhaba her şeyi anlatıldığı gibi yapmama rağmen kumandanın tuşlarının kodlarını çıkartamıyorum. Tuşlara basınca hiçbir kod çıkmıyor. Neyi yanlış yapıyor olabilirim. Ayrıca IR alıcı çok fazla ısınıyor bu normal mi ?

  6. Merhaba. Okulda bir yarışmaya katıldık ve bi anda arduino nun içinde bulduk kendimizi ancak su an projemızde duraklama yasıyoruz çünkü;
    LDR kullanarak şerit led yakmamız gerekiyor ama bir türlü yapamıyoruz. Ledi yakmayı becerdik ama cok az yanıyor güç veremıyoruz lutfen 12 voltu sadece kumandasız LDR ile nasıl yakabılecegımız hakkında bilgi verin.YARDIMCI OLURSANIZ COK SEVINIRIZ 😀 😀

    • Dersimizdeki şerit LED devresini kızılötesi kumanda alıcısı olmadan kurun. Arduino kodunda da buradaki örneğimize benzer şekilde bir yöntem izleyeceğiz. loop() fonksiyonunda analogRead() komutu ile LDR’nin değerini ölçün. Bu size 0-1024 arasında bir değer verecektir. Bizim analogWrite() fonksiyonunda kullanabilmemiz için bu değerin 0-255 arasında olması gerekiyor. Aldığınız değeri 4’e bölerek bu aralığa taşıyabilirsiniz. Son olarak analogWrite() komutu ile değeri transistörün base bacağının bağlı olduğu pine gönderin.

  7. Öncelikle tebrik ederim sitenizi keşfedince herşeye geri hobime geri döndüm(30 yaşındayım) beni bol ve güzel projeleriniz var .
    Şöylede ricam olucaktı 2 ayrı ledi kontrol etmek istiyorum fakat parlaklık ları aynı anda oluyor ayrı ayrı tuşlar da bağımsız 2 ledi kontrol etme şansım varmı 2 aynı devreden kurup tabiki.

CEVAP VER

Please enter your comment!
Please enter your name here