Arduino ile LDR’ den alınan Analog sinyalleri okuma
Güncelleme 30/03/2020
Bu uygulamada Arduinonun 12,11,10,9,8. pinlerine bağlı 5 tane LED’i LDR’nin üzerine düşen ışık şiddetine göre kontrol edeceğiz. Işık azaldıkça, ışığın azalma derecesine göre LED’ler sırayla birer birer yanacak. Işık iyice azaldığında tüm LED’ler yanacak. Işık şiddeti arttıkça LED’ler sırayla birer birer sönecek.
Devre Şeması:
Arduino Programı: /* "LDR'den Analog sinyal okuma" ışık arttıkça LED’leri birer birer söndüren, ışık azaldıkça LED’leri birer birer yakan program. diyot.net */ const int LED1=12; //8,9,10,11,12.pinleri isimlendir. const int LED2=11; const int LED3=10; const int LED4=9; const int LED5=8; const int LDRpin=A0; //A0 pinini LDRpin olarak isimlendir. int LDRdurum; //LDRdurum adında bir değişken tanımla. void setup() { pinMode(LED1,OUTPUT); //LED bağlı pinleri çıkış yap. pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); Serial.begin(9600); // seri haberleşme başlat } void loop() { LDRdurum=analogRead(LDRpin); Serial.print("LDR'nin durumu:"); Serial.println(LDRdurum); //ışık artıp-azaldıkça 0-1023 arasında değerler görüntülenir. delay(30); if(LDRdurum >= 1023) //değer 1023ten büyükse LEDlerin hepsi sönük. { digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); } else if((LDRdurum >=800) & (LDRdurum<1023)) //değer 800-1023 arasındaysa sadece LED1 yanık. { digitalWrite(LED1,HIGH); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); } else if((LDRdurum >=600) & (LDRdurum<800)) //değer 600-800 arasındaysa LED1 ve LED2 yanık. { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); } else if((LDRdurum >=400) & (LDRdurum<600)) //değer 400-600 arasındaysa LED1-LED2-LED3 yanık. { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); } else if((LDRdurum >=200) & (LDRdurum<400)) //değer 200-400 arasındaysa LED1-LED2-LED3-LED4 yanık. { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,LOW); } else //değer 200den küçükse tüm LEDler yanık. { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); } }
LDR(Foto direnç) aydınlıkta az direnç, karanlıkta yüksek direnç gösteren devre elemanıdır. Başka bir deyişle LDR’nin üzerine düşen ışık değerine göre gösterdiği direnç değişimi ters orantılıdır. LDR iki bacaklı bir elemandır, ortamdaki ışığı algılar ve analog değerlerde raporlar. LDR devreye bağlanırken 10K’ lık Pull-Down direnci ile birlikte bağlanır.
LDR’nin üzerine düşen ışık şiddetine göre 0 ile 1023 arasında değişen sayısal değerler oluşur. analogRead komutuyla raporlanan bu sayısal değerler LDRdurum adlı değişkene kaydedilir.
if komutuyla LDRdurum değişkenine kaydedilen sayısal değerin 1023’ten büyük ve eşit olduğu durumlarda tüm LED’lerin sönük olması sağlanır.
else if komutuyla sayısal değer 800-1023 arasındaysa sadece LED1 yanması sağlanır.
Sonraki else if komutuyla sayısal değer 600-800 arasındaysa LED1 ve LED2’nin yanması sağlanır.
Sonraki else if komutuyla sayısal değer 400-600 arasındaysa LED1-LED2-LED3’ün yanması sağlanır.
Sonraki else if komutuyla sayısal değer 200-400 arasındaysa LED1-LED2-LED3-LED4’ün yanması sağlanır.
En son else komutuyla sayısal değer 200’den küçükse tüm LED’lerin yanması sağlanır.
LDR’nin üzerine düşen ışık şiddetine bağlı olarak oluşan ve LDRdurum adlı değişkene kaydedilen 0 ile 1023 arasında değişen sayısal değerleri eş zamanlı olarak bilgisayar ekranında görebilmek için Serial.begin(9600);komutuyla seri haberleşme başlattık ve Serial.println(LDRdurum);komutunu yazarak bu değerleri Seri Port Ekranından gözlemledik. Değerleri görebilmek için programı Arduinoya yükledikten sonra Seri Port Ekranına tıklamanız gerekir.
Bu uygulamada LDR üzerine düşen ışık şiddetine bağlı olarak 5 tane LED’in sırasıyla yanmasını ve sönmesini sağladık. LDR üzerine düşen ışık şiddetine göre 1 tane LED’in parlaklığını arttırıp azaltabilirsiniz. Veya BUZZER’in ses şiddetini arttırıp azaltabilirsiniz. Bunu yapabilmek için devre bağlantısında ve Arduino programında küçük değişiklikler yapılması gerekir.
Devre Şeması:
Arduino Programı: /* "LDR'den Analog sinyal okuma" ışık değişimine bağlı olarak LED’in parlaklığını arttırıp azaltan program. diyot.net */ const int LED=13; //13.pini LED olarak isimlendir. const int LDRpin=A0; //A0 pinini LDRpin olarak isimlendir. int LDRdurum; //LDRdurum adında bir değişken tanımla. int yenidurum; void setup() { pinMode(LED,OUTPUT); //LED bağlı pini çıkış yap. Serial.begin(9600); // seri haberleşme başlat. } void loop() { LDRdurum=analogRead(LDRpin); Serial.print("LDR'nin durumu:"); Serial.println(LDRdurum); //ışık artıp-azaldıkça 0-1023 arasında değerler görüntülenir. delay(30); yenidurum = map(LDRdurum,0,1023,255,0); // 0-1023 aralığını 0-255 arasına daraltma işlemi yapılır. Serial.print("Daraltilan yeni degerler:"); Serial.println(yenidurum); //ışık artıp-azaldıkça 0-255 arasında değerler görüntülenir. analogWrite(LED,yenidurum); //LED'in parlaklığı LDR üzerine düşen ışıkla ilişkilendilir. }
Arduinonun 13 nolu pinine bağlı olan LED’in parlaklığı LDR üzerine düşen ışık şiddetine bağlı olarak değişiyor. analogRead komutuyla LDR üzerine düşen ışık oranına göre 0 ile 1023 arasında değişen sayısal değerler elde ediliyor ve LDRdurum adlı değişkene kaydediliyor. Bu değerleri mapkomutuyla 0 ile 255 arasına daraltıyoruz. Ve bu oluşan yeni sayısal değerleri yenidurum adlı değişkene kaydediyoruz. analogWrite komutuyla da LED’in parlaklığını LDR üzerine düşen ışık miktarı ile ilişkilendiriyoruz. Bu programda LDR üzerine düşen ışık arttıkça LED’in parlaklığı da artıyor. LDR üzerine düşen ışık azaldıkça LED’in parlaklığı azalıyor.
LED ve direnci söküp, yerine BUZZER takarsanız LDR üzerine düşen ışık miktarına bağlı olarak BUZZER’in ses şiddetinin artıp azaldığını gözlemleyebilirsiniz.
yenidurum = map(LDRdurum,0,1023,255,0); komutunda 0 ile 255 sayılarının yerlerini değiştirip programı bu haliyle Arduinoya tekrar yüklerseniz bu sefer yenidurum değişkenine kaydedilen sayısal değerlerin karanlıkta LED’in daha parlak yanmasını, aydınlıkta daha sönük yanmasını sağladığını gözlemleyebilirsiniz.