Analog Girişler

Bu konuda analog girişlerden okuduğumuz bilgileri görüntülemek için Seri Monitör’ü kullanmaya başlayacağız ve bu uygulamayı,Arduino ile Karaşimşek Uygulaması konusundaki sekiz LED’li devreyi kullanarak genişleteceğiz. Ayrıca, bir potansiyometre ile yanan LED sayısını kontrol edebileceğiz.

1

 

İhtiyacımız olan malzemeler ;8 adet led, 8 adet 270 ohm direnç, 1 adet 74HC595 entegresi, 1 adet 10K potansiyometre.

LED’li devreye geçmeden önce, yalnızca bir adet potansiyometre (kısaca ‘pot’ olarak da adlandırılır) olarak bilinen değişken direnç ve Arduino Seri Monitör kullanarak biraz deneme yapacağı.
Aşağıda gösterilen devreyi kuralım:

2

 

Daha sonra aşağıdaki programı arduinomuza yükleyelim.

/*
Analog Girişler
*/
int potPin = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int reading = analogRead(potPin);
Serial.println(reading);
delay(500);
}

yükleme tamamlandıktan sonra Seri Monitörü açalım, burada bazı rakamlar göreceksiniz.

3

Potansiyometreyi çevirdiğinizde 0 ile 1023 arasında sayı değişimlerini seri monitörde göreceksiniz. Burada gördüğümüz değerler, Analog 0 (A0) girişinde okunan ve potansiyometreden gelen voltajın dijitale dönüştürülmüş halidir.
Seri Monitörde gösterilen değer için A0 (potPin)’da yapılan analog okuma aşağıdaki satırı kullanarak gerçekleştirilir:

int reading = analogRead(potPin);

A0’da okunan voltaj, 0 ile 1023 arasında bir değere dönüştürülür. Burada 10 bitlik bir ADC (Analog-Digital Conversion) işlemi gerçekleştirilir. Bu işlem sonucunda potansiyometreden A0 girişine gelen 0-5V arası analog bilgiler, 0-1023 değerleri arasındaki dijital bilgilere dönüştürülür. ADC dönüştürme ile ilgili konuyu buradan ayrıca okuyabilirsiniz.

 

4

Potansiyometrenin bir direnç görevi gören dairesel bir izi vardır,  bizim devremizde kullandığımız potansiyometrenin içindeki bu izin 10 kΩ’luk bir direnci var. Bununla birlikte, bir potansiyometrenin ‘sürgü’ adı verilen ve ortada bulunan bir pini vardır. Potansiyometreyi döndürdüğünüzde bu pinin bağlı olduğu sürgü döndürülür ve bu orta uçta gördüğümüz direnç değeri değişir. Eğer potansiyometrenin bir baştaki ucunu 5V’a, diğer baştaki ucunu da GND’ye bağlarsanız, potanssiyometreyi döndürdüğünüzde sürgü ucunun bağlı olduğu ortadaki pinde okuduğunuz voltaj 0 ila 5V arasında değişir.

Şimdi bu bilgileri de kullanarak başka bir devre kuralım. Aşağıdaki devre “Arduino ile Karaşimşek Uygulaması” konusunu anlatırken kullandığımız devreye benzer bir devre. Tek fark bu devreye ilave olarak bir potansiyometre eklenmiş olması.

5

Devremizi kurduktan sonra aşağıdaki programı Arduinomuza yükleyelim;

/*
Analog Girişler – LED’li
*/
int potPin = 0;
int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
int leds = 0;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop()
{
int reading = analogRead(potPin);
int numLEDSLit = reading / 114; //1023 / 9
leds = 0;
for (int i = 0; i < numLEDSLit; i++)
{
bitSet(leds, i);
}
updateShiftRegister();
}
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}

Ledlerin nasıl kontrol edildiğini hatırlamak için “Arduino ile Karaşimşek Uygulaması” konusuna tekrar bir göz atabilirsiniz.

Analog girişler sözkonusu olduğunda programın kilit noktası potansiyometrenin sürgü bacağını bağlayacağımız analog pini tanımladığımız kısımdır:

int potPin = 0;

Bir analog girişin pin modunu ayarlamak için ‘setup()’ ta herhangi bir ayar yapmamız gerekmediğini unutmayın. Analog pin kullanacaksak herhangi bir şey yapmıyoruz.

loop() fonksiyonunda, analog değeri şöyle okuyoruz:

int reading = analogRead(potPin);

Fakat 0 ile 1023 arasındaki bu okumanın, 0 ila 8 arasında bir dizi LED ışığına dönüştürülmesi gerekir. 0 ila 8 arasındaki sayı aralığı aslında 9 değerdir (0’ı da hesaba kattığımızda). Bu yüzden 1023’ün 9′ a  böldüğümüzde 114 elde ederiz. Yani “reading” değişkenini 114’e böldüğümüzde, 9 kez 114  elde etmiş oluruz.

int numLEDSLit = reading / 114;

Doğru LED’leri aydınlatmak için, ‘for’ döngüsünü, sıfırdan başlayıp ‘numLEDSLit’ sayılarına kadar sayarak, sırası ile her biti ilgili konumda set ederiz.

leds = 0;
for (int i = 0; i < numLEDSLit; i++)
{
bitSet(leds, i);
}

Yukarıdaki 2 kod şunu yapar;

for döngüsü içindeki i değişkeni, (reading değerinin 114’e bölümünden elde edilen) numLEDSLit içindeki tam sayıdan küçük olduğu sürece leds değişkeni içindeki “i” ile belirtilen bitini set eder.

reading değeri 114 olduğunuda numLEDs=1 olur ve leds değişkeninin ilk biti olan 0. bit set edilir,

reading değeri 228 olduğunuda numLEDs=2 olur ve leds değişkeni 1. bit set edilir,

reading değeri 342 olduğunuda numLEDs=3 olur ve leds değişkeni 2. bit set edilir,

reading değeri 456 olduğunuda numLEDs=4 olur ve leds değişkeni 3. bit set edilir,

reading değeri 570 olduğunuda numLEDs=5 olur ve leds değişkeni 4. bit set edilir,

reading değeri 684 olduğunuda numLEDs=6 olur ve leds değişkeni 5. bit set edilir,

reading değeri 798 olduğunuda numLEDs=7 olur ve leds değişkeni 6. bit set edilir,

reading değeri 912 olduğunudanumLEDs=8 olur ve leds değişkeni 7. bit set edilir,

reading değeri 1023 olduğunuda numLEDs=9 olur ve leds değişkeni 8. bit set edilir,

Daha sonra da,

updateShiftRegister();

fonksşyonu çağrılarak hc 595 entegresi çıkışları update edilerek çıkşların son hali görüntülenir.


 

Arduino için kullanılan Atmega denetleyicileri, yerleşik bir 6 kanallı analogtan dijital (A / D) dönüştürücü içerir. Dönüştürücünün 0 bitten 1023’e kadar tam sayı döndüren 10 bitlik çözünürlüğü vardır. Arduino analog pinlerin ana işlevi analog sensörleri okumak olsa da, analog pinler ayrıca genel amaçlı giriş / çıkış (GPIO) pinlerinin tüm işlevselliğine sahiptir (Dijital pim 0 – 13 ile aynıdır).

Sonuç olarak, bir kullanıcının daha fazla giriş çıkış pinine ihtiyacı varsa ve analog pinlerin tümü kullanılmıyorsa, analog pinler GPIO için kullanılabilir.

Pin ayarlama

Analog pinlere A0 (analog giriş 0 için), A1 vb. takma adlarını kullanarak sayısal pimlerle aynı şekilde kullanılabilir. Örneğin, kod, analog pin 0’ı bir dijital çıkış olarak ayarlamak ve onu YÜKSEK olarak ayarlamak için aşağıdaki gibi olacaktır :

pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);

Pullup Dirençleri

Analog pinlerin, aynı zamanda, dijital pinler üzerindeki pullup dirençleriyle aynı şekilde çalışan pullup dirençleri vardır. Aşağıdaki gibi bir komut vererek etkinleşirler.

digitalWrite(A0, INPUT_PULLUP); //  analog pin 0 üzerindeki pullup                        

                                                                       //direncini etkinleştirir  

 

Bununla birlikte, bir pullup direncini etkinleştirmenin, analogRead () tarafından bildirilen değerleri etkileyeceğini unutmayın.

 

Yorum bırakın