Merhaba,
Yaklaşık 2 sene önce yaptığım ve kullanmaya devam ettiğim elektronik devreyi paylaşmak istedim.
Kısaca bahsetmek gerekirse tv ünitesinin arka kısmına bağladığım led şeritleri bir arduino nano yardımıyla tv kumandası üzerinden kontrol edebiliyorum. Evde kullandığım versiyonda kontrol kısmını tv kumandasından değil, android telefon/tablet üzerinden gerçekleştiriyorum. Burada beraber gerçekleştireceğimiz versiyonda tv kumandasının kullanılmayan tuşlarına görev atayacağız.
Neler gerekli?
- Arduino nano veya uno
- Kızılötesi alıcı – Infrared receiver
- 100 uF kondansatör
- 10kR x 2
- Led şeride güç sağlamak için 12V 2 amper güç kaynağı ve IRLZ44N mosfet, Led şeridin uzunluğuna göre çekeceği güç artacağı için güç kaynağı seçerken bu değerler hesaplanmalıdır.(bizim projede led şerit kısa olacağı ve en fazla 500 mA güç çekeceği için mosfet yerine tip122 kullanılmıştır).
- Televizyon kumandası
Devre çizimi ve kodlama
1.kısım – Breadboard’a devre kurulumu

Üstte KiCad’de hazırladığım devre şematiği yer almaktadır. Nano dahili linelar regulatör sayesinde 12V’luk gerilimle besleseniz bile kendi çalışma voltajına regüle olacak ve çalışacaktır. Led şeritlerin çalışma voltajı 12V olduğu için Nano’yu da 12V ile besleyeceğiz. Programlama yaparken yani Nano bilgisayara bağlıyken harici güç bağlantısını kesiniz.

Arduino üzerinde kullandığımız Kızılötesi Alıcı’yı kontrol edebilmemiz için IRremote kütüphanesinin arduino kütüphanesine eklenmesi gerekmektedir. IRremote isimli kütüphaneye aşağıdaki bağlantıda ulaşabilirsiniz.
.zip dosyasını kütüphanemize ekledikten sonra üstte görselini paylaştığım taslak programı nano’ya gönderiyoruz. Bu taslak program sayesinde kumandanın kullanılmayan tuşlarının hex değerlerini öğreneceğiz. Daha sonra bu değerler aracılığıyla nano’yu programlayıp led şeriti kontrol edeceğiz. 3 tuş belirleyip HEX değerlerini öğrenelim.

TV kumandam kızılötesi ile çalışmadığı için evde atıl bulunan herhangi bir kumandayı kullandım. 1 numaralı tuş ile sistemi açıp kapatabileceğiz. 2 ve 3 numaraları tuşlara da led şerit-ışık parlaklığını ayarlayacağız. Siz evde tv kumadanızın kullanmadığınız tuşlarını belirleyerek bunlara vereceğiniz görevleri not edin. Aşağıdaki görselde sırasıyla bastığım tuşların hex değerlerinin arduino ide üzerindeki serial monitorden görüntüsü yer almaktadır.

Açma kapama fonkisyonu için –> 687CBC0
Parlaklığı artırmak için –> 687CBD2
Parlaklığı azaltmak için –> 687CBF2 kodlarını kullanarak programımızın nihai halini kodlayalım.
2.Kısım – programın yazılması ve test edilmesi
/* Arduino led şerit kontrol devresi */ #include <IRremote.h> //kızılötesi kütüphanesi int durum; // sistemin açık oup olmadığını durum değişkeninde tutacağız int parlaklik; // parlaklık ayarı bu değşkende tutulacak int oku; // bu değeri sadece parlaklık ayarı parlaklık artımak ve azaltmak işlemleri yaparken döngüye sokmak için kıllanacağız const int RECV_PIN = 11; // kızılötesi alıcı girişi const int out = 9; // mosfet - power transistörün base bacağına gidecek çıkış const int degisim = 6; // led şerit parlaklık değişim hesabı IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // alıcıyı etkinleştir durum = 0; parlaklik = 255; pinMode(out, OUTPUT); } void loop() { if (irrecv.decode(&results)) { if (results.value == 0x687CBC0) { Serial.println(durum); if (durum == 0) { digitalWrite(out, HIGH); for (parlaklik = 0; parlaklik < 255; parlaklik++) // geçiş efekti için döngüye sokuyoruz. İlk açılışta led şerit %100 parlaklıkta yanacak { analogWrite(out, parlaklik); delay(5); // her 5 milisaniyede birer birer 0'dan 255'e değerler atanacak ve led şerit gerçişli bir şeklilde yanacaktır. } Serial.println(parlaklik); // debug amaçlı durum = 1; // sistem etkin Serial.println(durum); // debug amaçlı } else { for (parlaklik; parlaklik > 0; parlaklik--) // eğer açma kapama düğmesine basıldığında sistem kapalı değilse açık demektir. { // bu durumda ışığı yine geçişli olarak söndüreceğiz. Döngü parlaklık değerinden 0'a inene kadar devam edecek. analogWrite(out, parlaklik); delay(5); } digitalWrite(out, LOW); durum = 0; // sistem kapalı. Serial.println(durum); // debug amaçlı parlaklik = 255; } } if (results.value == 0x687CBF2 && durum == 1) { // eğer ışığı kısma tuşuna basılmışsa ve sistem etkinse geçişli olarak azalt Serial.println(parlaklik); // debug amaçlı if (parlaklik - 255 / degisim < 0) { // eğer yanabilecek en alt ışık seviyesinde yanmıyorsa parlaklığı azalt //analogWrite(out, parlaklik); // bu koda gerçekten gerek var mı? Kontrol et. } else { oku = parlaklik - 255 / degisim; for (parlaklik; oku < parlaklik; parlaklik--) { analogWrite(out, parlaklik); delay(10); } } Serial.println(parlaklik); // debug amaçlı } if (results.value == 0x687CBD2 && durum == 1) { Serial.println(parlaklik); // debug amaçlı if (parlaklik + 255 / degisim > 255) { /* analogWrite(out, parlaklik); // bu koda gerçekten gerek var mı? Kontrol et. */ } else { oku = parlaklik + 255 / degisim; for (parlaklik; oku > parlaklik; parlaklik++) { analogWrite(out, parlaklik); delay(10); } } Serial.println(parlaklik); // debug amaçlı } irrecv.resume(); } delay(100); }
Artık sistemi kontrol edebiliriz. Sorularınız için yorum yazabilirsiniz. Sağlıcakla kalın…