Arduino'da analog girişlerle çalışırken daha hassas veya farklı voltaj aralıklarında okuma yapmak istediğinizde devreye giren önemli bir fonksiyondur.

Arduino'nun Analog-Dijital Dönüştürücüsü (ADC), gelen analog voltajı dijital bir değere dönüştürürken bir referans voltajına ihtiyaç duyar. Bu referans voltajı, ADC'nin ölçebileceği maksimum voltajı belirler. Varsayılan olarak, çoğu Arduino kartı için bu referans voltajı 5V'tur (eğer USB'den veya regüle edilmiş bir kaynaktan besleniyorsa). Yani, 0V ile 5V arasındaki analog sinyalleri 0 ile 1023 arasındaki dijital değerlere dönüştürür.

Ancak, bazen sensörleriniz 5V'tan daha düşük bir voltaj aralığında çalışabilir (örneğin, 3.3V) veya daha yüksek bir hassasiyete ihtiyacınız olabilir. İşte tam bu noktada analogReference() komutu devreye girer. Bu komut, Arduino'nun ADC'sinin kullanacağı referans voltajını değiştirmenize olanak tanır.


Neden analogReference() Kullanmalıyız?

Daha Yüksek Hassasiyet: Eğer sensörünüzden gelen voltaj 0V-1V gibi küçük bir aralıkta değişiyorsa ve referans voltajı 5V olarak ayarlıysa, ADC'nin 1024 adımı bu 5V aralığına yayılır. Bu durumda, 1V'lık bir sinyal sadece 0-204 arasında bir değere dönüşür. Referans voltajını daha küçük bir değere ayarlayarak (örneğin, dahili 1.1V referans), aynı 1V'luk sinyal 0-1023 arasında bir değere dönüşerek ölçüm hassasiyetini artırır.

Voltaj Uyumluğu: Bazı sensörler 5V yerine 3.3V'ta çalışır ve çıkışları da 3.3V'a kadar çıkar. Eğer bu sensörü doğrudan 5V referanslı bir Arduino'ya bağlarsanız, 3.3V'luk maksimum çıkışınız sadece 1023 yerine yaklaşık 675 değerine karşılık gelir. Referansı 3.3V'a ayarlayarak, sensörün tam aralığını (0-1023) kullanabilirsiniz.



analogReference() Komutunun Kullanımı


1. analogReference(DEFAULT): Bu, Arduino kartının varsayılan referans voltajını kullanır.

5V Arduino'lar (Uno, Mega): 5V.

3.3V Arduino'lar (Due, Zero): 3.3V.

Bu, analogReference() komutunu hiç kullanmadığınızdaki varsayılan ayardır.

2. analogReference(INTERNAL): ATmega tabanlı kartlarda (Uno, Mega gibi), bu seçenek dahili, yerleşik bir referans voltajı kullanır.

Uno, Nano, Mini: 1.1V.

Mega2560: 1.1V veya 2.56V (kart tipine göre değişebilir, datasheet'e bakmak iyi olur).

Bu referans, harici voltaj dalgalanmalarından daha az etkilenen, nispeten kararlı bir kaynaktır ve daha yüksek hassasiyet gerektiğinde kullanışlıdır.

3. analogReference(INTERNAL1V1): Sadece Arduino Mega'da kullanılır: ATmega2560 tabanlı kartlarda 1.1V dahili referans.

4. analogReference(INTERNAL2V56): Sadece Arduino Mega'da kullanılır ATmega2560 tabanlı kartlarda 2.56V dahili referans.

5. analogReference(EXTERNAL): Bu seçenek, Arduino'nun AREF pinine dışarıdan sağladığınız bir voltajı referans olarak kullanır. Bu voltaj 0V ile 5V (veya Arduino'nun besleme voltajı) arasında olmalıdır.

ÖNEMLİ UYARILAR: 

EXTERNAL referansı kullanırken AREF pinine bağladığınız voltajı ASLA 0V'tan düşük veya 5V'tan yüksek yapmayın (veya kartınızın çalışma voltajından yüksek). Aksi takdirde, Arduino'nuza kalıcı hasar verebilirsiniz.

AREF pininde harici bir referans kullanıyorsanız, analogRead() çağırmadan önce analog referansı EXTERNAL olarak ayarlamanız gerekir. Aksi takdirde, aktif referans voltajını (dahili olarak üretilen) ve AREF pinini kısa devre yaparak Arduino kartınızdaki mikro denetleyiciye zarar verebilirsiniz.

AREF pinine bağladığınız voltaj kararlı olmalı ve bir direnç aracılığıyla bağlanmalıdır (genellikle 2.2k ile 4.7k ohm arası bir direnç). Direncin referans olarak kullanılan voltajı değiştireceğine dikkat edilmelidir. Çünkü AREF pininde dahili bir 32K direnç vardır. AREF pininden toprağa gider. İki direnç bir voltaj bölücü görevi görür. 

Örneğin; 2,5 voltluk harici referans voltajını, AREF pinine, 5K direnç üzerinden bağlayacak olursak, bizim harici referans voltajımız şöyle olur:

Analog Referans Voltajı = 2.5 * 32 / (32 + 5) = ~ 2.2V olur.


Ya da aşağıdaki resimdeki gibi R1 ve R2 dirençleriyle bir gerilim bölücü yapılarak da AREF pininden referans voltajı verilebilir.




Örnek Program Kodları:

void setup()

{

  analogReference(EXTERNAL);     //Analog giriş işlemleri için referans voltaj değeri olarak AREF pininden verilen voltaj kullanıldı.

  DDRD = B11111111;     //D portu çıkış yapıldı.

}


void loop()

{

  PORTD = analogRead(A0);     //A0 pininden okunan analog voltaj digital değere dönüştürülerek portD'ye gönderildi.

}



________________________________________________________________________________________________________________________________________________________


0 comments:

Yorum Gönder

Toplam Sayfa Görüntüleme Sayısı

Seri İletişim Protokolleri

Sensörlerin Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com