İçeriğe geç

Arduino ile Led Şerit kontrolü ve Uygulaması

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?

  1. Arduino nano veya uno
  2. Kızılötesi alıcı – Infrared receiver
  3. 100 uF kondansatör
  4. 10kR x 2
  5. 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).
  6. Televizyon kumandası

Devre çizimi ve kodlama

1.kısım – Breadboard’a devre kurulumu

Arduino Nano ile Led Şerit kontrolcüsü

Ü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.

IRrecvDemo hazır şablonu ile kumandanın kullanmadığımız tuşlarının hex değerlerini öğrenip, belirlediğimiz tuşlara arduino racılığıyla görev atayacağız.

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…

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir