LDR ve RGB LED kullanarak karanlık ortamlarda yanan ve renk değiştiren bir devre yapacağım bu yazımda.
Malzemeler
– 1 adet Arduino Uno
– 7 adet Jumper kablolar
– 1 adet RGB LED
– 1 adet LDR
– 1 adet 10K ohm direnç
-1 adet 330 ohm direnç
– Breadboard
– A4 veya istediğiniz rulo yapabileceğiniz bir adet kağıt
Çalışma Prensibi
Devremizde amacımız karanlık bir ortamda lambanın otomatik olarak yanması ve belirli sürelerde rengini değiştirmesidir. LDR karanlık bir ortamda bulunduğunda direnç miktarı azalacak ve bu sayede LED yanacak. LDR’nin çalışma prensibi hakkında daha fazla bilgi edinmek için LDR Nedir ? yazımıza bakmayı unutmayın . Haydi devremizi yapmaya başlayalım !
Devre
- Adım : LDR’yi breadboarda yerleştiriyoruz.
LDR’nin bir bacağından arduino üzerinde bulunan GND pinine bağlantımızı sağlıyoruz.
Diğer bacağından ise arduino üzerinde A0 ile birleştirdikten sonra tekra aynı bacağa 10K ohm direnç takıyoruz ve direncin boşta kalan bacağını ise arduino üzerinde bulunan 5V ile birleştiriyoruz.
2. Adım: RGB LED’i yerleştiriyoruz.
Öncelikle uzun bacağına 330 ohm’luk direncimizi yerleştiriyoruz ardından direncin boşta kalan bacağını arduino üzerinde bulunan GND pini ile değiştiriyoruz.
Daha sonrasında RGB’nin kırmızı bacağını( yani fotoğrafta gözüken bir numaralı bacağı) arduino üzerinde 11 numaralı pin ile
Mavi bacağını ( fotoğaraftaki 4. pin ve unutmayınız bazı RGB LED’ler de yeşil ve mavi bacağın yeri farklı olabilir.) 9. pin ile
En son da yeşil ( yani fotoğraftaki 3. bacak) bacağını arduino üzerinde bulunan 10. pinle birleştirdik ve devremiz tamamlandı.
A4 kağıdını kullanacağımız yere geldik . A4 kağıdını rulo yapıp ışığın daha iyi yayılması için RGB LED’in etrafına yerleştirin.
Kod
float RGB[3];
int ldrPin = 0; // LDR’nin bağlı olduğu pin
int ambientLight; //ortam ışığının değişkenini tanımlıyoruz
int redLed = 11; //kırmızı bacağın bağlı olduğu pin
int greenLed = 10; // yeşil bacağın bağlı olduğu pin
int blueLed = 9; // mavi bacağın bağlı olduğu pin
void setup(){
pinMode(redLed,OUTPUT); // RGB LED’in bacaklarını çıkış olarak ayarladık
pinMode(greenLed,OUTPUT);
pinMode(blueLed,OUTPUT);
digitalWrite(redLed,LOW);
digitalWrite(greenLed,LOW);
digitalWrite(blueLed,LOW);
}
void loop(){
for (float x=0;x<PI;x=x+0.00001){
RGB[0]=255*abs(sin(x*(180/PI))); // ışığın seviyesini ölçüyoruz kırmızı led için
RGB[1]=255*abs(sin((x+PI/3)*(180/PI))); // ışığın seviyesini ölçüyoruz yeşil led için
RGB[2]=255*abs(sin((x+(2*PI)/3)*(180/PI)));// ışığın seviyesini ölçüyoruz mavi led için
ambientLight=analogRead(ldrPin); // ortamdaki ışık seviyesini okuma
if(ambientLight>600){ // eğer ortamdaki ışık çok düşükse ise aşağaki komutlar uygulanıyor
analogWrite(redLed,RGB[0]);
analogWrite(greenLed,RGB[1]);
analogWrite(blueLed,RGB[2]);
}
else{
digitalWrite(redLed,LOW);
digitalWrite(greenLed,LOW);
digitalWrite(blueLed,LOW);
}
for(int i=0;i<3;i++){
if(RGB[i]<1){
delay(100); // bekleme
}
if(RGB[i]<5){
delay(50);
}
if(RGB[i]<10){
delay(10);
}
if(RGB[i]<100){
delay(5);
}
}
delay(1);
}
}