2 Mayıs 2020 Cumartesi

Arduino ile foto direnç ve analogRead komutu kullanımı


Bu Arduino programlama dersinde asıl amaç analogRead komutu ile birlikte analog girişlerin çalışmasını inceleyeceğiz. Bunun için elektronik devre elemanlarından LDR adında foto direnç olarak bilinen hatta ışık sensörü de denilen bir direnç kullanacağız.






Yandaki resimde gördüğünüz bileşen bir LDR yani foto dirençtir. Çalışma mantığı çok basit ve uçlarında artı-eksi yön yoktur. Üzerine düşen ışığa göre bir direnç değeri verir. Işık çok ise direnç çok, ışık az ise direnç az mantığında çalışır.

Yukarıda hareketli resimde görüldüğü gibi çok ışık verince led az aralıklı yanıp sönüyor ya da led hiç yanmıyor. Foto direnç üzerinde ışık azaldıkça led sık aralıklarla yanıyor. Parmak ile foto direnç üzerine dokununca foto direnç çok az ışık alıyor ve led de hızlı yanıp sönüyor. Şimdi bunu Arduino ile nasıl yaparız ve nasıl kodlarız ona bakalım.



Önce devreyi kurmamız gerekir. Çalışma tahtasına Arduino Uno kartımızında elektriği kırmızı ve mavi hatlara çekiyoruz. Kırmızı hatta kırmızı kablo ile 5V, mavi hatta gri kablo ile GND bağlıyoruz. Çalışma tahtası üzerine bir led ve direnç, bu ledi aşağıda resimde görüldüğü gibi 8 numaralı dijital pine bağlıyoruz. Foto direncin bir ucuna elektrik vermek için kırmızı hattan elektrik alıyoruz yani + değer veriyoruz. Foto direncin diğer ucunuda 1Kohm diğerinde direnç ile - hatta bağlıyoruz. Bunun nedeni foto direnç sağlıklı bir şekilde çalışsın. Ayrıca bu uçtan mor kablo ile analog pinlerden öylesine seçtiğimiz A1 pinine bağlantı sağlıyoruz. Foto dirençteki değeri okutmak için analog pine bağlamış olduk.


Hatırlarsanız daha önceki çalışmamızda digitalRead komutu ile dijital okutma yapmıştık. Bu komut ile pine ya 0 (LOW) ya da 1 (HIGH) gelir. Bu 2 duruma göre programı yazabiliriz. Ama direnç değerleri sonsuzdur. Bu foto direnç üzerindeki ışığa göre sonsuz değer verir. Ancak Arduino Uno bu sonsuz değeri 0 ile 1023 arasında sınırlandırmıştır. Yani direnç üzerinde hiç ışık yok ise 0 çok ışık var ise 1023 olacak şekilde düşünebiliriz. İşte bu çoklu değerden dolayı analog pinleri kullanmak zorundayız. 

Analog pinlere gelen sinyali analogRead(pinadı) komutu ile kontrol edebiliriz. Foto dirençteki anlık değer A1 analog pininde olacak. Bu değer ışığın gücüne göre 0-1023 arasında değişecek. Peki biz bu değeri nereden bileceğiz. Mesela parmağımızla foto direncin üzerini kapatınca değer ne olacak? Foto direnç üzerine ışık tutunca direnç değeri ne olacak? Bu değerleri izlemek için Arduino'da bir komut ve program üzerinde bir pencere var. Bu komut Serial.println(); komutudur. Parantez içine analogRead ile okutacağımız pin değeri yazılır. Bu komutu kodlarımıza eklediğimiz takdirde Arduino programında Araçlar / Seri Port Ekranı kısmından açınca aşağıda göründüğü gibi bir pencerede değerler görünür. Bu değerlere göre foto direnç üzerindeki ışığa göre direnç aralığını görmüş oluruz.


Bu komutu kullanmak için programda setup bölümünde Serial.begin(9600); komutunu yazmalıyız. Bu yazdığımız komut sayesinde Arduino programımız kendini seri haberleşme yapmak için hazırlıyor. Geleim program için kodlara;

void setup()
{ pinMode(8, OUTPUT);
  Serial.begin(9600);}
void loop()
{int fotodirenc = analogRead(A1);
Serial.println(fotodirenc);
delay(100);  
 if(fotodirenc<=150)
 {digitalWrite(8, HIGH);
  delay(100);
  digitalWrite(8, LOW);
  delay(100);}
 else if (fotodirenc<=350)
 {digitalWrite(8, HIGH);
  delay(300);
  digitalWrite(8, LOW);
  delay(300);}
  else if (fotodirenc<=700)
 {digitalWrite(8, HIGH);
  delay(500);
  digitalWrite(8, LOW);
  delay(500);}
 else{digitalWrite(8, LOW);}
}

Yukarıdaki kodları kısaca özetleyelim. Loop bölümünde fotodirenc adı ile int türünde tanıtılan değişken hemen analogRead ile A1 pininden gelen bilgiye eşitleniyor. Bir alttaki satırda bu bilgiyi seri port ekranında göstermek için Serial.println komutu devreye giriyor ve ekranda kısa aralıklarla (delay(100); komutu bu kısa aralıkları simgeler. Eğer delay ile bekletme yapmazsak seri port ekranında bilgiler çok hızlı bir şekilde görünür) bu değer görünüyor.
Sonra bu değere göre led yakıp söndürme işlemini yapacağız. Bunun için fotodirenc değişkenini kendi istediğimiz aralıklar ile kıyaslayıp lede istediğimiz aralıklarla HIGH-LOW göndereceğiz. Ben burada 700'den küçük olacak şekilde 350 ve 150 ara değerlerini kullandım. İsterseniz bu else-if komutlarını artırarak bu değer aralıklarını çoğaltarak daha hassas bir program yapabilirsiniz. En sondaki else ise direnç değeri 700'den büyük ise yani çok ışık var ise led yanmasın anlamına geliyor.


Hiç yorum yok:

Yorum Gönder