Arduino İle Dijital Veri Nasıl Okunur?
Bu yazımızda arduino ile dijital veri nasıl okunur bunu öğreneceğiz. Dijital veri okuma işlevini buton kullanımı ile yapacağız. Arduino ile butonların kullanımı çok kolaydır ancak bu eğitimde anlatacağım Pull Up direncini kullanmak veya Pull Down direncini kullanmak gibi birkaç şeye dikkat etmeniz gerekiyor. Bu şeyler olmadan, düğme düzensiz davranacaktır.
İlk önce düğmeyi Arduino’ya bağlayacağız ve düğmenin olağandışı davranışını gözlemleyeceğiz. Daha sonra size bu sorunun ne zaman olduğunu anlatacağım ve Arduino’nun harici Pull Up ve Pull Down direncini veya dahili Pull Up direncini kullanarak bu sorunu nasıl aşacağımızı anlatacağız.
Daha sonra bir örnek yaparak ilerleyeceğiz. Düğmeye iki kez basıldığında LED’i yakacak, düğmeye bir kez basıldığında LED’i söndürecek bir örnek yapacağız.
Buton Örneği İçin Gerekli Malzemeler
- Arduino Uno
- Buton
- Led
- 10k Direnç
- 220 Ohm Dİrenç
- Jumper Kablolar
- Breadboard
Basit Düğme Bağlantısı (Olağandışı Davranış)
Arduino’dan gelen 5V’yi düğmenin bir tarafına ve düğmenin diğer tarafını Arduino’nun Pin 2’sine bağlayın.Ardından Arduino’nun 13 pinini LED’in pozitif tarafına bağlayın ve LED’in diğer tarafını 220 ohm direnç üzerinden GND’ye bağlayın.
Şimdi LED’in düzensiz davranacağını göreceksiniz çünkü butona basılmadığında pin 2 hiçbir şeye bağlanmayacak ve yüzer pin haline gelecek. Bu nedenle, bir dizi kararsız ‘1’ ve ‘0’ elde edeceğiz.
Dikkat: ‘Bir giriş pinine bağlı hiçbir şeyinizin olmaması, bunun mantıksal bir sıfır olduğu anlamına gelmez.’
Bu sorunun üstesinden gelmek için, düğmeye basılmadığında DÜŞÜK(Low) almamıza yardımcı olacak bir Pull Down veya Pull Up direnci kullanmamız gerekecek. Yazının sonunda açıklanan dahili bir Pull Up direnci de kullanabiliriz.
Kararsız Çalışan Buton Kodu
Çıkışı seri monitörde yazdırdık ve butonun çıkışını görebilmemiz için gecikme kodu(delay) ekledik. Düğme durumu o kadar hızlı değişir ki gecikme olmadan göremeyiz.
// pin numaralarını ayarlıyoruz:
const int buttonPin = 2; // Buton pini
const int ledPin = 13; // led pini
// variables will change:
int buttonState = 0; // buton durumunu tutacağımız değişken
void setup() {
Serial.begin(9600);
// LED pinini çıkış olarak başlatın:
pinMode(ledPin, OUTPUT);
// düğme pinini bir giriş olarak başlatın:
pinMode(buttonPin, INPUT);
}
void loop() {
// buton durumunu okutuyoruz
buttonState = digitalRead(buttonPin);
// buton durumunu seri monitörde gösteriyoruz
Serial.println(buttonState);
// butuna basılırsa
// Butona basılmış(HIGH) ise
if (buttonState == HIGH) {
// Ledi yak
digitalWrite(ledPin, HIGH);
} else {
// ledi söndür
digitalWrite(ledPin, LOW);
}
// sonucu görebilmemiz için bekleme kodu ekliyoruz
delay(100);
}
Sistemin çalışma videosu:
Harici Pull Down Direncini Kullanma
Devreyi bu şekilde bağladığımızda butona basılmadığında DÜŞÜK(LOW), butona basıldığında YÜKSEK(HIGH) bir durum elde edeceğiz. Devre bir öncekinin aynısı, değiştirmeniz gereken tek şey 10k direnci Arduino’nun pin 2’sini bağladığınız butonun o tarafına ve bu 10k direncinin diğer tarafını Arduino’nun toprağına bağlamak.
Şimdi butona bastığınızda HIGH alacaksınız çünkü Arduino’nun 5V pininden gelen akım Arduino’nun pin 2’sine akacak ve butona basılmadığında DÜŞÜK alacaksınız çünkü şimdi pin 2 10k direnç üzerinden GND’ye bağlanacaktır.
Kod olarak aynı kodu kullandık.
Devrenin çalışma videosu:
Harici Pull UP Direnci Kullanma
Pull Up direnci, düğmenin ilk durumunu YÜKSEK(HIGH) olarak tutacaktır. Yani düğmeye basılmadığında YÜKSEK(HIGH), düğmeye basıldığında DÜŞÜK(LOW) alacağız. Bu devre için butonun bir tarafını Arduino’nun pin 2’sine bağlayın ve aynı tarafı 10k direnç üzerinden Arduino’nun 5V’una bağlayın. Düğmenin diğer tarafını Arduino’nun GND’sine bağlayın. Ardından LED’i bağlayın.
Butona basılmadığında Arduino’nun 5V’luk pininden akım Arduino’nun pin 2’sine akacak ve Arduino YÜKSEK(HIGH) bir durum okuyacak ve butona basıldığında akım dirençten GND’ye akacaktır. ve giriş pini DÜŞÜK okuyacaktır. Bu durumda, 10k direnç kullanılmamışsa, düğmeye basıldığında 5V doğrudan GND’ye bağlanacaktır ki bu çok kötü. Başka bir deyişle, kısa devre olacaktır.
Arduino kodu aynısıdır.
Devrenin çalışma videosu:
Dahili Pull Up Direncini Kullanma
Pull Up dirençleri çok yaygın olduğundan, Arduino dahil birçok mikrodenetleyicide, harici çekme dirençlerini kullanmaktan kaçınmak için kod aracılığıyla etkinleştirebileceğimiz veya devre dışı bırakabileceğimiz dahili Pull Up dirençleri bulunur.
Arduino’nun sadece Pull Up direncine sahip olduğunu unutmayın. Direnci Pull Down yapmayın.
Dahili pull up direncini kullanmak için, butonun bir tarafını Arduino’nun pin 2’sine, diğer tarafını ise Arduino’nun toprağına bağlayın. Ardından LED’i Arduino ile bağlayın.
Şimdi buton açık durumdayken LED yanacak ve butona basıldığında DÜŞÜK(LOW) olacaktır.
Dahili Pull Up Dirençli Arduino Devre Kodu
// pinleri ayarlama
const int buttonPin = 2; // buton pinini ayarlıyoruz
const int ledPin = 13; // led pinini ayarlıyoruz
// değişecek değişken
int buttonState = 0; // butonun durumunun tutulacağı değişken
void setup() {
Serial.begin(9600);
// LED pinini çıkış olarak başlatın:
pinMode(ledPin, OUTPUT);
// buton pinini giriş olarak ayarlıyoruz:
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// buton durumunu okuyoruz
buttonState = digitalRead(buttonPin);
// buton durumunu seri monitörde gösteriyoruz
Serial.println(buttonState);
// butonun basıldığını kontrol ediyoruz
// butone basılmış ise
if (buttonState == HIGH) {
// ledi yak:
digitalWrite(ledPin, HIGH);
} else {
// ledi söndür
digitalWrite(ledPin, LOW);
}
// buton durumunu görebilmemiz için bekleme komutu ekliyoruz
delay(100);
}
Devrenin çalışma videosu: