Dijital Pinleri Giriş Olarak Belirlemek

Arduino'da dijital pinleri giriş olarak kullanmak, buton okumaktan sensör verisi almaya kadar birçok etkileşimli projenin temelidir. Arduino'da bir dijital pini giriş olarak kullanmak için öncelikle o pinin giriş (INPUT) modunda olduğunu belirtmemiz gerekir. Bunu setup() fonksiyonu içinde, yani Arduino kartınız her başladığında bir kez çalışan bölümde yaparız.

0 ve 1 pinleri Rx ve Tx iletişim pinleridir. Arduino USB üzerinden iletişim için bu pinleri kullanır. Ayrıca bu pinleri kullanabilmemiz için dışarıya da çıkarılmıştır. Bu pinleri dijital giriş/çıkış için kullanabiliriz ama bu pinler usb iletişim için de kullanıldığı için Arduino'ya program yüklerken yada seri monitör kullanırken bu pinlerin boş olması gerekir. Yoksa usb iletişiminde yada bu pinlere bağlanan komponentlerin çalışmasında sorunlar çıkabilir. 

Dijital pinler üzerinden maximum 40mA'i geçmelidir.

Dijital pinleri giriş olarak kullanmak için 2 yol vardır:

- pinMode() Fonksiyonu İle

- Yön Kayıtçısına Erişim İle


1. pinMode() Fonksiyonu İle Pinleri Giriş Olarak Belirlemek

Bir pini giriş olarak ayarlamak için pinMode() fonksiyonunu kullanırız. Şu şekilde: 

pinMode(pinNumarası, MOD);

pinNumarası    : Ayarlamak istediğiniz dijital pinin numarasıdır (örneğin 2, 3, 13 vb.).

MOD                   Pin'in çalışma modunu belirtir. Giriş için INPUT (büyük harflerle) kullanırız.

Örnek:

void setup() 

{

      pinMode(7, INPUT);     // Pin 7'yi giriş olarak ayarla

}


void loop() 

{

      // Buraya kodunuzu yazacaksınız

}


2. Yön Kayıtçısına Erişim İle Pinleri Giriş Olarak Belirlemek

Arduino'da pinlerin giriş olarak belirlenmesi için "yön kayıtçısı" nı kullanabiliriz. Bunlar:

DDRB    : Port B yön kayıtçısı 

DDRC    : Port C yön kayıtçısı

DDRD    : Port D yön kayıtçısı

Bu kayıtçılara yükleyeceğimiz değerler ile Arduino portlarını giriş olarak belirleyebiliriz. Aşağıdaki örnekteki gibi:

DDRD = B00000000;        : Arduino D portunun tüm pinleri giriş yapıldı. Binary sayı kullanıldı.

DDRD = 0b00000000;     : Arduino D portunun tüm pinleri giriş yapıldı. Binary sayı kullanıldı.

DDRD = 0x00;                    Arduino D portunun tüm pinleri giriş yapıldı. 16 lık yani hexedecimal sayı kullanıldı.



Dijital Pinlerden Değer Okumak

Pini giriş olarak ayarladıktan sonra, o pinden yüksek (HIGH) veya düşük (LOW) bir voltaj değeri okuyabiliriz. Bunun için 2 yol vardır:

- digitalRead() Fonksiyonu İle

- Port Kayıtçısına Erişim İle


1. digitalRead() Fonksiyonu

Dijital bir pinden değer okumak için digitalRead() fonksiyonunu kullanırız. Şu şekilde:

okunan_deger = digitalRead(pinNumarası);

pinNumarası         : Değer okumak istediğiniz dijital pinin numarası.

okunan_deger     : Pinden okunan değerin atandığı değişken. Okunan değer ya "HIGH - 1" yada "LOW - 0" olur.


Örnek: Pin 2'den gelen değeri okuyup seri monitöre yazdırmak:

void setup() 

{

      Serial.begin(9600);     // Seri iletişimi başlat

      pinMode(2, INPUT);      // Pin 2'yi giriş olarak ayarla

}


void loop() 

{

      int butonDurumu = digitalRead(2);     // Pin 2'den değeri oku

      Serial.println(butonDurumu);               // Okunan değeri seri monitöre yazdır

      delay(100);              // Kısa bir bekleme

}



2. Port Kayıtçısına Erişim İle Pinlerden Değer Okuma

Arduino'da pinlerden değer okumak için "port kayıtçısı" nı kullanabiliriz. Bunlar:

PINB    : Port B kayıtçısı 

PINC    : Port C kayıtçısı

PIND    : Port D kayıtçısı

Bu kayıtçılardan okuyacağımız değerler ile Arduino pinlerindeki değerleri okuyabiliriz. Aşağıdaki örnekteki gibi:

port_oku = PINB;                            : PortB'ye ait tüm pinlerin değeri decimal olarak port_oku değişkenine atandı.

port_deger = (PINB & bit (3));    : PortB'ye ait 3. pinin decimal değeri port_deger değişkenine atandı.



1. Örnek Program Kodları

int buton = 0;

void setup()

{

      pinMode(2, INPUT);

      pinMode(12, OUTPUT);

}


void loop()

{

      buton = digitalRead(2);


      if(buton==1)

      {

            digitalWrite(12,HIGH);

      }

      else if(buton==0)

      {

            digitalWrite(12,LOW);

      }

}


1. Örnek Program Devre Şeması




2. Örnek Program Kodları

int port = 0;

void setup()

{

      Serial.begin(9600);

      DDRB = B00000000;     //Arduino B portu giriş yapıldı.

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

}


void loop()

{

      port = PINB;          //PortB'ye ait pinlerin değeri port değişkenine atandı.

      Serial.print("PortB = "); 

      Serial.println(port);           //PORTB'nin decimal değeri ekrana yazdırıldı.

      Serial.print("PortB'nin 4. pin değeri=  "); 

      Serial.println(port & bit(4));      //PORTB'nin 4. bitinin decimal değeri ekrana yazdırıldı. 

      delay(1000);

}


2. Örnek Program Devre Şeması




Arduino Giriş Pinlerinde Pull-up ve Pull-down Durumları

Pull-up ve pull-down dirençleri, elektronik devrelerde, özellikle mikrodenetleyicilerle çalışırken dijital giriş pinlerinin kararlı bir durumda olmasını sağlamak için kullanılan temel bileşenlerdir. Pinlerin "havada kalmasını" (floating state) ve belirsiz değerler okumasını engellerler.


Havada Kalma (Floating State) Nedir?

Bir dijital giriş pini ne HIGH (yüksek voltaj, mantıksal 1) ne de LOW (düşük voltaj, mantıksal 0) seviyesine aktif olarak bağlanmadığında "havada kalır". Bu durumda, pin çevreden gelen elektriksel gürültüden etkilenebilir ve rastgele, tutarsız değerler okuyabilir. Bu da devrenizin beklenmedik şekilde çalışmasına neden olabilir. İşte pull-up ve pull-down dirençleri bu sorunu çözmek için kullanılır.


1. Pull-Up Bağlantısı

Pull-up direnci, bir dijital giriş pinini varsayılan olarak yüksek mantıksal seviyede (HIGH) tutmak için kullanılır. Direncin bir ucu genellikle VCC'ye (devrenin pozitif güç kaynağına, örneğin 5V veya 3.3V) bağlanırken, diğer ucu dijital giriş pinine bağlanır.


Nasıl Çalışır?

Normal Durum (Butona Basılmadığında): Pull-up direnci sayesinde dijital giriş pini sürekli olarak VCC'ye bağlı kalır ve HIGH (mantıksal 1) değerini okur. Direnç, VCC'den pine akan akımı sınırlar.

Aktif Durum (Butona Basıldığında): Genellikle bir buton veya anahtar, bu pini doğrudan veya dolaylı olarak GND'ye (toprak, 0V) bağlar. Butona basıldığında, pin VCC yerine GND'ye çekilir ve mikrodenetleyici bu pini LOW (mantıksal 0) olarak okur. Akımın çoğu GND'ye yönlendirilir ve direnç sayesinde VCC'den GND'ye doğrudan bir kısa devre oluşumu engellenir.


2. Pull-Down Bağlantısı

Pull-down direnci, bir dijital giriş pinini varsayılan olarak düşük mantıksal seviyede (LOW) tutmak için kullanılır. Direncin bir ucu genellikle GND'ye (toprak, 0V) bağlanırken, diğer ucu dijital giriş pinine bağlanır.


Nasıl Çalışır?

Normal Durum (Butona Basılmadığında): Pull-down direnci sayesinde dijital giriş pini sürekli olarak GND'ye bağlı kalır ve LOW (mantıksal 0) değerini okur. Direnç, pinin GND'ye bağlanmasını sağlar.

Aktif Durum (Butona Basıldığında): Genellikle bir buton veya anahtar, bu pini doğrudan veya dolaylı olarak VCC'ye (pozitif güç kaynağı) bağlar. Butona basıldığında, pin GND yerine VCC'ye çekilir ve mikrodenetleyici bu pini HIGH (mantıksal 1) olarak okur.



Pull-up ve Pull-down Direnç Değerleri

Pull-up ve pull-down dirençleri için genellikle 1kΩ ile 10kΩ arasında değerler kullanılır. Bu değerler, devrenin ihtiyaçlarına, akım tüketimine ve elektriksel gürültüye karşı hassasiyetine göre seçilir.

Çok düşük bir direnç değeri, gereksiz yere daha fazla akım çekilmesine neden olabilir.

Çok yüksek bir direnç değeri ise, pini gürültüye karşı daha hassas hale getirebilir ve pinin durumunu net bir şekilde belirleyememesine yol açabilir.


Arduino Dahili Pull-up

Arduino'da INPUT_PULLUP kullanımı, dijital giriş pinlerini daha basit ve etkili bir şekilde kontrol etmenizi sağlayan çok önemli bir özelliktir. Temel olarak, harici bir direnç bağlama ihtiyacını ortadan kaldırır.

Arduino'nun çoğu mikrodenetleyicisi (örn. ATmega328P gibi), dahili olarak yapılandırılabilen çekme (pull-up) dirençlerine sahiptir. Bu dirençler, dijital bir pini giriş olarak ayırdığınızda etkinleştirilebilir ve pinin varsayılan olarak HIGH (yüksek) mantık seviyesinde olmasını sağlar. Şu şekilde kullanılır:

pinMode(buton, INPUT_PULLUP);


Örnek Programlama Kodları

Dahili pull-up ile 2 nolu pine sürekli 1 gelir. Pin toprağa götürüldüğünde ekrana "butona basıldı" yazısı yazdırılır.


#define buton 2

void setup()

{

      Serial.begin(9600);

      pinMode(buton, INPUT_PULLUP);     //porta sürekli 1 geldiği durum.

}


void loop()

{

      if (digitalRead(buton) == 0)

      {

            while(digitalRead(buton) == 0)

            {

                  Serial.println("butona basıldı.");

                  delay(500);

            }

      }

}


Devre Şeması




______________________________________________________________________________________________________________________________________________________


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