Arduino ile Analog Sinyal Okuma

Bu yazımızda arduino programlama dili yani arduino komutları kullanarak arduino ile analog sinyal okuma işleminin nasıl yapılacağını öğreneceksiniz.

Öncelikle bilmemiz gereken, analog ve dijital(digital) olmak üzere iki sinyal vardır.

Analog sinyal aslında yaşadığımız her an duyu organlarımızla alıp işlediğimiz verilerdir. Mesela gözlerimiz sonsuz rengi ayırt edebilir, kulaklarımızın duyabileceği sonsuz ses tonu vardır, burnumuzla koklayabileceğimiz sonsuz sayıda koku olabilir. Analog sinyaller sonsuz çeşitliliktedir.

Dijital sinyal ise, belirli sınırları olan sinyal çeşididir. 

Çok iyi anlaşılmadı değil mi? Şimdi görsellerle ve örneklerle ayrımı daha iyi anlayacaksınız.

Yukarıda görüldüğü üzere analog sinyal belirli aralıkta sınırlı olsa da, bu aralıkta sonsuz değer alabiliyor. Örneğin, 0-5v arasında bir analog sinyal, 1 volt, 2volt gibi değerler alabileceği gibi 3.1volt, 4.9volt, 2,333volt gibi daha ayrıntılı değerler de alabilir.

Yukarıda görüldüğü üzere dijital sinyaller sonlu olası değerler alabilir. Örneğin, yaygın olarak kullanılan 0-5v arasındaki bir dijital sinyal, ya 0 volt değeri alır ya da 5 volt değeri alır. 

Analog sinyali ve  dijital sinyali öğrendik. Şimdi gelelim, Arduino ile bu sinyallerin nasıl kullanığına. Örnekler üzerinden gitmek daha anlamlı olacaktır diye düşünüyorum.

Örneğin arduino ile bir led yakmak istiyorsunuz fakat potansiyometre(pot) ile ledin parlaklığını  da ayarlamak istiyorsunuz. Peki potansiyometreden ayarları her değiştiğinde arduino bunu nasıl algılayacak? İşte burada yapılacak işlem, arduino’nun analog pinlerinden bir tanesine potansiyometreyi bağlamak ve potansiyometredeki değeri analog olarak okumak. Okunan değere göre de lede gönderilecek voltajı değiştirerek ledin parlaklığını ayarlamak mümkün olacak.

Bir örnek daha vermek istiyorum. Otomatik bahçe sulaması yaptığımız bir projemiz olsun. Topraktaki nemi algılayıp, su pompasını çalıştıracağımız bir proje olacak. Toprak nem sensörü, topraktaki nem değerini yine bir analog pin vasıtasıyla arduinoya iletecek ve bizde arduino kodları kullanarak hangi nem değerinde sulama yapmasını istiyorsak, su pompasına çalış emri göndereceğiz

AnalogRead Komutu

AnalogREAD() komutu Arduinonun analog pinlerinden analog sinyalleri okur. Bu sinyal 0-5v arasında değişen bir sinyaldir.

Arduino da 10-bitlik analog dijital dönüştürücü bulunmaktadır. Bu, 0 ile 5 volt arasındaki analog giriş gerilimlerini 0 ile 1023 arasında tamsayı değerlere dönüştürür. Yani Arduino’nun analog pinlerinden okunan değerler 0-1023 arasında olur. 5 volt değeri, 10bit dönüştürücü(2 üzeri 10 değerinden dolayı 1024 sayısı elde edilir) ile dönüştürüldüğünden 5/ 1024 birim veya birim başına 0,0049 volt (4,9 mV) okuma değerleri arasında bir çözünürlük sağlar.

AnalogRead() Kullanımı

.
analogRead(pinNumarasi)
.

Eğer analogRead ile sinyal okuduğunuz pine bir şey bağlı değilse, bu pinden okunan değer genellikle yaklaşık 0 civarındadır, ancak çevresel faktörler ve Arduino’nun iç devresindeki gürültü nedeniyle küçük dalgalanmalar görülebilir.

void setup() {            
  Serial.begin(9600);     
}

void loop() {
  int sensorDegeri= analogRead(A0);
  Serial.println(sensorDegeri);
  delay(5);  
}

Şimdi aşama aşama kodları açıklayalım.

void setup() {            
  Serial.begin(9600);     
}

Setup fonksiyonunun temel görevi, yapacağımız proje için Arduino’nun ön ayarların yapılmasını yani kurulumunun yapılmasını sağlamaktır. Setup fonksiyonu ile ilgili daha fazla bilgi almak istiyorsanız Arduino Programlama Dili ve Arduino Programlama yazımızı okuyabilirsiniz.

Setup fonksiyonunda Serial.begin(9600) yazılmış. Bu komut Arduino ile bilgisayarın usb portunun seri haberleşme yapmasının yani veri gönderip almasının başlatıldığını belirten komuttur. 

Serial.begin() komutu yazılmadan seri haberleşme yapılamaz.

Arduino IDE deki SERİ MONİTÖR Arduino ‘dan gelen verileri görmek için kullanılır. Klavye kısayolundan açmak isterseniz CTRL + SHIFT + M tuşlarına basabilirsiniz ya da Tools Menüsünden Serial Monitor’e tıklayabilirsiniz.

void loop() {
  int sensorDegeri= analogRead(A0);
  Serial.println(sensorDegeri);
  delay(5);  
}

Loop fonksiyonunun temel görevi,  Arduino çalıştığı sürece, içerisindeki komutları sürekli olarak tekrar eder. Loop fonksiyonu ile ilgili daha fazla bilgi almak istiyorsanız Arduino Programlama Dili ve Arduino Programlama yazımızı okuyabilirsiniz.

Loop fonksiyonu içerisinde “int sensorDegeri= analogRead(A0);” kod satırını açıklayalım. int tamsayı değişken oluşturmak için kullanılır. “sensorDegeri” bizim değişkene verdiğimiz bir isim. 

“analogRead(A0)” komutu 0 numaralı analog pinden analog sinyal okur. Okunan veri ya da sinyal sensorDegeri adlı değişkene kaydedilir.

Son olarak  “Serial.println(sensorDegeri);” komutuyla seri port ekranına sensorDegeri isimli değişkenin içindeki veri yazılır. Yani analog pinden okunan değer ekranda görünür.

Reply