Merhaba arkadaşlar!
Arduino dersleri serimizde bolca uygulama yapmaya devam ediyoruz. Bu yazımızda kurduğumuz devredeki INPUT değerine göre OUTPUT çıkışının otonom olarak nasıl değiştiğini göreceğiz.
Yani bir sensör-aktüatör algoritması yazacağız.
Daha önceki yazımızda for döngüsünden bahsetmiştik >> For Döngüsü ile Kara Şimşek Uygulaması Yapalım !
Kısaca LDR Modülüne Bakalım
LDR ‘Light Dependent Resistor’ tamlamasının kısaltmasından gelmektedir ve anlamı ışığa bağımlı dirençtir.
LDR ayrıca foto direnç olarak da adlandırılır. Bir direnç çeşidi olmasının yanında aynı zamanda bir pasif sensör olan LDR, ışık şiddetine bağlı olarak yapısında değişiklik gösterir.
Bu Ortamdan aldığı fiziksel değişimden faydalanarak çıkışında da bir değişiklik gösterebildiği için sensör görevi gördüğünü söyleyebiliriz.
Elektronik devrelerde LDR’yi tekli halde yukarıdaki şekilde görüldüğü gibi kullanabiliriz. Ayrıca LDR ile bir kontrolcünün daha kolay kullanımı için geliştirilen LDR modüllerini de aşağıdaki şekildeki gibi inceleyebiliriz.
LDR hakkında daha detaylı bilgi edinmek istiyorsanız yazımızı inceleyebilirsiniz >> LDR Nedir? Foto Dirençlerin Çalışma Mantığı
Arduino ile LDR Kullanımı
Bu yazımızda karanlıkta çalışan LDR devresi uygulaması yapacağız. Yani aslında LDR ile ışık kontrolü yapmış olacağız. Hemen gerekli malzeme listesini inceleyelim ve uygulamaya başlayalım.
Gerekli malzemeler: ( Not: Arduino ile LDR Kullanımı ve 10. Derse Kadar Olan Dersleri “Arduino Başlangıç Seti” İle Yapabilirsiniz. Malzemeler Bu Sette! >)
Karanlıkta LED Yakan LDR Devresini Kuralım
LDR LED devresi için ihtiyacımız olan malzemeler hazır ise aşağıdaki gibi devremizi kuralım.
Devremiz de hazır ise Arduino LDR kodunu aşağıdaki gibi yazabiliriz. Hem kod satırlarında hem de videomuzda kodun detaylı anlatımını inceleyebilirsiniz.
#define led 3 //3.Pinde LED olduğunu tanımlıyoruz void setup() { pinMode(led, OUTPUT); //LED'in çıkış elemanı olduğunu belirtiyoruz Serial.begin(9600); //9600 Baundluk bir seri haberleşme başlatıyoruz } void loop() { int isik = analogRead(A0); //Işık değişkenini A0 pinindeki LDR ile okuyoruz Serial.println(isik); //Okunan değeri seri iletişim ekranına yansıtıyoruz delay(50); if (isik > 900) { //Okunan ışık değeri 900'den büyük ise digitalWrite(led, LOW); //LED yanmasın } if (isik < 850) { //Okunan ışık değeri 850'den küçük ise digitalWrite(led, HIGH); //LED yansın } }
Arduino ile Işık Seviyesi Ölçmek
Gerekli malzemeler:
- Arduino UNO
- Breadboard
- 4 adet LED
- 4 adet 330Ω direnç
- 1 adet 10kΩ direnç
- 1 LDR (fotosel)
- İki ucu erkek jumper kablo
Bu uygulamamızda da 4 adet LED’imiz, LDR’nin algıladığı ışık miktarına göre değişik sayılarda yanarak ışık seviyesi göstergesi gibi çalışacak.
Kartımızın bağlantı şeması şu şekilde:
Kodumuz ise şu şekilde:
int ledler[] = { 4, 5, 6, 7 }; int led_sayisi = 4; int ldr_pin = A0; int deger = 0; void setup() { for (int i = 0; i < led_sayisi; i++) { pinMode(ledler[i], OUTPUT); } } void loop() { deger = analogRead(ldr_pin); if (deger > 0 && deger <= 255) { digitalWrite(ledler[0], HIGH); digitalWrite(ledler[1], LOW); digitalWrite(ledler[2], LOW); digitalWrite(ledler[3], LOW); } if (deger > 256 && deger <= 511) { digitalWrite(ledler[0], HIGH); digitalWrite(ledler[1], HIGH); digitalWrite(ledler[2], LOW); digitalWrite(ledler[3], LOW); } if (deger > 512 && deger <= 767) { digitalWrite(ledler[0], HIGH); digitalWrite(ledler[1], HIGH); digitalWrite(ledler[2], HIGH); digitalWrite(ledler[3], LOW); } if (deger > 768 && deger <= 1023) { digitalWrite(ledler[0], HIGH); digitalWrite(ledler[1], HIGH); digitalWrite(ledler[2], HIGH); digitalWrite(ledler[3], HIGH); } delay(100); }
Bu uygulamamızda, analog giriş kullanarak LDR’nin algıladığı ışık seviyesini sayısal bir değere dönüştürdük. Bu sayısal değer 0 ile 1023 arasında değiştiğinden, her 255 adımda bir fazla LED’in yanmasını sağladık.
Merhaba, çalışmalarınızı ilgi ile takip ediyorum. Verdiğiniz emek için teşekkürler. Arduino -Ldr ile 2 ledi kontol etmek istiyorum. Örneğin; Ldr ışık aldığında yeşil led sürekli açık kırmızı led kapalı olacak. Ldr ışık almadığında Yeşil led sönecek kırmızı led yanacak. Bunu arduino ile nasıl yapabilirim?
if(deger<=10){
digitalWrite(kirmizi,HIGH);
digitalWrite(yesil,LOW);
}
else{
digitalWrite(yesil,HIGH);
digitalWrite(kirmizi,LOW);
yeşille kırmızıyı tanımladıktan sonra değere de
int deger=analogRead(A0);
yaptığında doğru devre bağlantısıyla yapabilirsin
hatta kırmızıya delay ve low kodlarını girersen yanıp yanıp sönebilir daha güzel olur.
/* “Merhaba, çalışmalarınızı ilgi ile takip ediyorum. Verdiğiniz emek için teşekkürler. Arduino -Ldr ile 2 ledi kontol etmek istiyorum. Örneğin; Ldr ışık aldığında yeşil led sürekli açık kırmızı led kapalı olacak. Ldr ışık almadığında Yeşil led sönecek kırmızı led yanacak. Bunu arduino ile nasıl yapabilirim?” diyen arkadaşa!!!!*/
#define kirmizi 3 //3.pinde kirmizi led
#define yesil 4 //4.pinde yesil led
void setup() {
pinMode(kirmizi, OUTPUT);
pinMode(yesil, OUTPUT);
}
void loop() {
int isik = analogRead(A0); //Analog A0 sensor bagli
delay(50);
//Bu 900 sayisini duruma gore degistirebilirsiniz
int seviye = 900;
if(isik >= seviye ){ //isik siddeti seviyeden buyuk isik alma
digitalWrite(kirmizi, LOW); //kirmizi yanma
digitalWrite(yesil, HIGH); //yesil yan
}
if(isik < seviye ){ //isik siddeti seviyeden kucuk isik almama
digitalWrite(kirmizi, HIGH); //kirmizi yan
digitalWrite(yesil, LOW); //yesil yanma
}
}
bende ldr devre halinde 3 tane çıkışı var vcc,gng,output bunun devre kurulumu nasıl olacak
vcc +besleme
gnd –
out çıkış ucun
yalnız cıkışın(out) digital mi analog mu kartı görmek gerekir
#define kirmizi 3 //3.pinde kirmizi led
#define yesil 4 //4.pinde yesil led
void setup() {
pinMode(kirmizi, OUTPUT);
pinMode(yesil, OUTPUT);
}
void loop() {
int isik = analogRead(A0); //Analog A0 sensor bagli
delay(50);
//Bu 900 sayisini duruma gore degistirebilirsiniz
int seviye = 900;
if(isik >= seviye ){ //isik siddeti seviyeden buyuk isik alma
digitalWrite(kirmizi, LOW); //kirmizi yanma
digitalWrite(yesil, HIGH); //yesil yan
}
if(isik < seviye ){ //isik siddeti seviyeden kucuk isik almama
digitalWrite(kirmizi, HIGH); //kirmizi yan
digitalWrite(yesil, LOW); //yesil yanma
}
}
rip murrayımı coh ozledim bana onu getirrr çaabbbbukkkkk.
dışardan gördüğün gibi değil
bir kez olsun buradan bakmadın
üzüldüm zannediyorsan şunu bil
canım yandı geçti çok yakmadın
yaz gelir içimi sarar aynı telaşlar
kim bilir belki de bir aşk başlar
dalgalanır deniz ne çıkar durur yavaşlar
kim bilir belki de bir aşk başlar
ben özledim galiba seni
bu yüzden bu kadar sitemlerim
sen üzülme acıdan bu sözlerim
karşımda görsem dolar gözlerim
of deme OHHHHHH de
ne alaka sfşkfaas
MERHABA ::)))
Ya aynı devreyi yaptım kodu kopyaladım olmuyor
ÇALIŞMIYO
LDR ile 2 ledi sırasıyla yakma istiyorum
LDR değeri 800 değerine eşit ve üstündeyken mavi, 800 değerinin altındayken kırmızı led yanan devrenin kodunu yaza bilen yada bilen var mı? yanyana iki adet led olacak şekilde biri mavi, diğeri kırmızı
Kardeşim bunu bi tek ben yaparım sor
Arduino kartına bağlı olan LDR’den alınan değer 750’nin üzerinde ise 2 numaralı pine bağlı LED yanacak, I2C modüllü LCD ekranda KARANLIK yazacak, değilse LED sönecek AYDINLIK yazacaktır. Uygulamanın kodları, devre şeması ve mümkünse simülasyonu (Proteus üzerinde olabilir) istenmektedir. (750 değeri ortama göre değişebilir)
kodları buna göre ayarlayabilecek bi babayiğit varmı beyler
Bende çalışmadı
bendede
TAKILDIM KALDIM YENİ BAŞLADIGIM İÇİN.LDR İLE NORMAL OLARAK LEDİ YAKIYORUM FAKAT BEN İSTİYORUM Kİ ENERJİ TASARRUFU İÇİN GECE LAMBAM 30DK YANSIN 30DK BEKLEME MODUNA GECSİN..GÜNDÜZ OLUNCAYA KADAR YANİ AYDINLIK OLUNCAYA KADAR SÜRSÜN GİTSİN..KOŞULU YAPAMADIM.
arkadaşlar ben bu kodu kullandım çalıştı…
// LDR kapatinca isik yanar
#define led 3
void setup() {
pinMode (led, OUTPUT);
Serial.begin(9600);
}
void loop() {
int isik=analogRead(A0);
Serial.println(isik);
delay(200);
if (isik>850){ //bu degeri deneme yanilma ile bul
digitalWrite(led,LOW);
}
else{
digitalWrite(led,HIGH);
}
}
merhaba arduıno da lcd ekrana kapı 15 sn ye acık kalırsa kapı acık diye yanmasını kapalı iken kapı kapalı yazdıran kod ve şemayı nereden bulabilirim yapamıyorum.
Hocam exit status 1 hatası veriyor. Acaba neden olduğunu öğrenebilir miyim?
ortamda ışık şiddeti arttıkça ledin ışık şiddetinin azaldığı, ortamdaki ışık şiddeti azaldıkça ledin ışık şiddetinin arttığı kodu nasıl yazmam gerekiyor yardımcı olur musunuz?
if ve else kısımlarında bulunan kodları tam tersi olacak şekilde değiştirirseniz, dediğinizi yapmış olacaksınız 🙂
Ben analog çıkış vererek ışığın seviyesini ortamdaki ışığa göre ayarlayabilen bi proje için sormuştum yani okunan değerin aynısını led e vermek yerine okunan deger arrtıkça lede verilen değerin azalmasını nasıl sağlarım bunu öğrenmek istiyorum?
int led=11;
int ldr=0;
void setup() {
pinMode(led,OUTPUT);
}
void loop() {
ldr=analogRead(A0);
ldr=map(ldr,0,1023,0,255);
ldr=255-ldr;
analogWrite(led,ldr);
}
merhaba ben bu kodu denedim herşeyi doru yaptım ama olmadı yardım edermisiniz
A0 da geçici değişikliklerde (örneğin gece araba farı gelmesi) durum değişikliğine sebep olmasın istiyorum. A0 rın ilk değişikliğini (10sn pulse – gibi) arkada bir timer çalıştırıp giriş işareti geçici ise (10 sn eşit veya daha az ise konum değiştirmeyecek. Eğer giriş işareti 10 sn den büyük ise sürekli işaret olarak algılayıp konum değiştirecek.
Bu konu üzerinde yardımlarınızı bekliyorum .
Saygılarımla