Arduino Ldr İle Rgb Gece Lambası

0
5177
Arduino Ldr İle Rgb Gece Lambası
Arduino Ldr İle Rgb Gece Lambası

Arduino Ldr İle Rgb Gece Lambası

Ldr’nin üzerine gelen ışık yoğunluğuna göre devreye analog değer veren bir elektronik eleman olduğunu biliyoruz. Rgb ise İngilizce Red-Green-Blue kelimelerinin baş harflerini alarak oluşturulmuş bir terimdir. Rgb özellikli led lambalar, devrenin ihtiyacına göre tek tek veya aynı anda kırmızı, yeşil, mavi renkleri kullanan bir üründür.

Ldr ile rgb gece lambası projemizde, Idr ile dış ortamın ışık yoğunluğunu alıp, gece lambasında renk cümbüşü oluşturacağız. Hangi zamanda hangi rengin yanacağına ise ldr üzerine düşen ışığın açısal hesaplamasını yaparak karar vereceğiz.

Kullanılan Malzemeler

  • Arduino Uno Kartı,
  • LDR,
  • 120 kiloohm direnç,
  • 3 adet kırmızı, yeşil, mavi led’ler veya 1 adet RGB özellikli led,
  • Çeşitli kablo ve devre elemanları.

Tasarım

Projemizde her zaman olduğu gibi ilk malzememiz Arduino Uno kartıdır. Kartın Analog-0 girişine Idr’nin bir ucu bağlıdır. Ldr’nin diğer ucu ise kartını 5 volt değerindeki pozitif beslemesindedir. Analog-0 ucuna aynı zamanda 120 kiloohm direnç bağlanmış ve yine aynı direnç topraklama ile kartın Gnd ucuna birleştirilmiştir. Artık devremiz dışarıdan gelen ışık yoğunluğunu alabilmektedir. Çıkış birimlerimiz ise ya 3 adet KYM led‘ler ya da 1 adet RGB özellikli led’dir. Her hâlükârda da çıkış pinleri aynıdır. Kırmızı bacak Dijital-11 yeşil Dijital-10 ve mavi Dijital-9 pinlerine bağlanacaktır. Led’lerin kısa bacağı ise topraklama şeklinde kartın Gnd ucundadır.

İsterseniz led’lerin üzerine şeffaf bir yapı yerleştirerek daha güzel bir gece lambası oluşturabilirsiniz. Dikkat etmeniz gereken, yapının düşük led ışıklarını yansıtabilecek kadar şeffaf, ldr’nin ise ışık alımını engellemeyecek şekilde uzak olmasıdır.

Kodlar

Kod mantığımız daha önce hiç çalışmadığımız şekilde olacaktır. Ldr üzerine gelen ışık açısını matematiksel sinüs, sin() fonksiyonu ile hesaplayarak 3 led’den çeşitli zamanlarda çeşitli renk çıkışları alacağız. Diğer kod açıklamaları kodların yanında bulunmaktadır.

// Renklerin parlaklığı aşağıdaki denklemlerdeki gibi olacaktır.

// ldr üzerine gelen ışığın açısına göre renkler yanıp sönecektir.

// bu açıyı hesaplamak için sin() fonksiyonu kullanılmıştır.

// aşağıdaki PI terimi ldr'yi dairesel bir eleman olarak kabul edip

// dairesel alana düşen ışının hesaplanması için kullanılmıştır.

// kırmızı = sin(x)

// yesil = sin(x + PI/3)

// mavi = sin(x + 2PI/3)





float RGB[3]; // RGB adından içinde 3 adet eleman tutan değişken tanımlandı.



int ldrPin = 0;     // ldr'nin bağlı olduğu analog-0 pini tanımlandı.

int ldr_deger;      // ldr'nin algıladığı ışık yoğunluğu tanımlandı.

int led_kirmizi   = 11;  // kırmızı led dijital 11 pininde.

int led_yesil = 10;  // yeşil led dijital 10 pininde.

int led_mavi  = 9;   // mavi led dijital 9 pininde.



void setup(){

  pinMode(led_kirmizi,OUTPUT);    //kırmızı led çıkış elemanı 

  pinMode(led_yesil,OUTPUT);      //yeşil led çıkış elemanı

  pinMode(led_mavi,OUTPUT);       //mavi led çıkış elemanı

 

  // ilk başta hiç bir led yanmayacak.

  digitalWrite(led_kirmizi,LOW);

  digitalWrite(led_yesil,LOW);

  digitalWrite(led_mavi,LOW);

}



void loop()

{

  //x ile tanımlanan açı yarım daire(PI)'ye kadar çok küçük oranda artacak.

  for (float x=0;x<PI;x=x+0.00001) 

  {

    //abs() fonksiyonu, eksi sonuç çıkmaması,mutlak değer içindir.

    RGB[0]=255*abs(sin(x*(180/PI)));           

    // artma işlemi sırasında kırmızı led'in parlaklığı hesaplanıyor. 

    RGB[1]=255*abs(sin((x+PI/3)*(180/PI)));    

    // artma işlemi sırasında yeşil led'in parlaklığı hesaplanıyor. 

    RGB[2]=255*abs(sin((x+(2*PI)/3)*(180/PI)));

    // artma işlemi sırasında mavi led'in parlaklığı hesaplanıyor. 

    ldr_deger=analogRead(ldrPin); // ldr'ye düşen ışık kaydediliyor.

    if(ldr_deger>600)

    { 

      // ldr'ye düşen ışık miktarı bizim belirlediğimiz

      // 600 değerinden büyükse

      // işte o zaman yapılan hesaplamaya göre

      // led'leri yak.

      analogWrite(led_kirmizi,RGB[0]);

      analogWrite(led_yesil,RGB[1]);

      analogWrite(led_mavi,RGB[2]);

    }

    else

    {

      //parlaklık düşükse

      //başlangıçta hepsini sönük bırak.

      digitalWrite(led_kirmizi,LOW);

      digitalWrite(led_yesil,LOW);

      digitalWrite(led_mavi,LOW);

    }

    //led'ler arasında çok küçük bir zaman gecikmesi yaparak

    //renklerin daha net gözükmesini sağlayan

   // rastgele değerlerin eşik olarak belirlendiği for döngüsü

    for(int i=0;i<3;i++)

    {

      if(RGB[i]<1){

        delay(100);

      }

      if(RGB[i]<5)

      {

        delay(50);

      }

      if(RGB[i]<10)

      {

        delay(10);

      }

      if(RGB[i]<100)

      {

        delay(5);

      }

    }

    delay(1);

  }

}

 

CEVAP VER

Please enter your comment!
Please enter your name here