Arduino Dijital Giriş ve Çıkış
Arduino'da dijital giriş ve çıkış pinlerini kullanma.
Dijital pinlerle giriş/çıkış (Input/Output - I/O) işlemleri, mikrodenetleyiciler (Arduino, ESP32, PIC, AVR vb.) aracılığıyla elektronik projelerin temelini oluşturur. Bu işlemler, mikrodenetleyicinin dış dünya ile binary (ikili) değerler (0 veya 1, yani düşük veya yüksek gerilim) üzerinden iletişim kurmasını sağlar.
İşlemleri iki ana kategoriye ayırabiliriz:
1. **Giriş (Input):** Mikrodenetleyicinin dış dünyadan bilgi alması. Örneğin bir butona basılıp basılmadığını, bir sensörden (hareket, ışık vb.) binary bir sinyal gelip gelmediğini okumak.
2. **Çıkış (Output):** Mikrodenetleyicinin dış dünyaya sinyal göndermesi. Örneğin bir LED'i yakıp söndürmek, bir röleyi açıp kapamak, bir motoru başlatmak veya durdurmak.
Şimdi bu işlemleri adım adım nasıl yapacağınızı açıklayalım, yaygın olarak kullanılan **Arduino** platformunu örnek alarak.
---
### Temel Kavramlar
* **Dijital Pin:** Mikrodenetleyici üzerindeki bir pindir. Sadece iki durumu algılayabilir veya oluşturabilir: `HIGH` (Yüksek, genellikle 3.3V veya 5V) veya `LOW` (Düşük, genellikle 0V).
* **HIGH / LOW:** Mantıksal 1 (HIGH) veya Mantıksal 0 (LOW) durumlarını ifade eder.
* **pinMode():** Bir pini giriş veya çıkış olarak yapılandırmak için kullanılır.
* **digitalWrite():** Bir çıkış pinine HIGH veya LOW sinyali göndermek için kullanılır.
* **digitalRead():** Bir giriş pinindeki HIGH veya LOW sinyalini okumak için kullanılır.
---
### Adım Adım Uygulama
#### 1. Donanım Bağlantısı
Dijital I/O işlemleri için donanım bağlantıları oldukça basittir.
**a) Çıkış Örneği: LED Kontrolü**
Bir LED'i yakıp söndürmek için:
* Arduino dijital pini (örn: Pin 13)
* LED (Uzun bacak Anot (+), kısa bacak Katot (-))
* Akım sınırlayıcı direnç (genellikle 220 Ohm - 1 kOhm arası, LED'i korumak için)
**Bağlantı Şekli:**
Arduino Pin 13 --(Direnç)--> LED'in Anot bacağı (+) -- LED'in Katot bacağı (-) --> Arduino GND (Toprak)
**b) Giriş Örneği: Buton Okuma**
Bir butona basılıp basılmadığını okumak için:
* Arduino dijital pini (örn: Pin 2)
* Buton (genellikle 2 veya 4 bacaklı)
* Pull-up veya Pull-down direnci (Gerekli, pinin boşta (floating) kalmasını engellemek için. Arduino'da dahili pull-up dirençleri kullanılabilir.)
**Bağlantı Şekli (Dahili Pull-up ile):**
Arduino Pin 2 --(Buton)--> Arduino GND
Bu durumda buton basıldığında pin LOW olur, serbest bırakıldığında dahili pull-up direnci sayesinde HIGH olur.
**Bağlantı Şekli (Harici Pull-down ile):**
Arduino 5V --(Buton)--> Arduino Pin 2
Arduino Pin 2 --(10k Ohm Direnç)--> Arduino GND
Bu durumda buton basıldığında pin HIGH olur, serbest bırakıldığında pull-down direnci sayesinde LOW olur.
---
#### 2. Yazılım Ortamı
Arduino IDE'yi bilgisayarınıza kurun. Bu, kod yazıp Arduino kartınıza yüklemenizi sağlar.
---
#### 3. Pin Yapılandırması (pinMode())
Herhangi bir dijital pini kullanmadan önce, o pini giriş mi yoksa çıkış mı olarak kullanacağınızı belirtmeniz gerekir. Bu işlem `setup()` fonksiyonu içinde bir kere yapılır.
**Sözdizimi:** `pinMode(pinNumarası, MOD);`
* `pinNumarası`: Kullanılacak dijital pinin numarası (örn: 2, 13).
* `MOD`: Pin'in çalışma modu.
* `OUTPUT`: Pini çıkış olarak ayarlar.
* `INPUT`: Pini giriş olarak ayarlar.
* `INPUT_PULLUP`: Pini giriş olarak ayarlar ve dahili pull-up direncini etkinleştirir. Bu, harici bir pull-up direncine ihtiyaç duymadan buton okuma işlemlerini kolaylaştırır.
**Örnek:**
```cpp
void setup() {
pinMode(13, OUTPUT); // Pin 13'ü çıkış olarak ayarla (LED için)
pinMode(2, INPUT_PULLUP); // Pin 2'yi giriş olarak ayarla ve dahili pull-up direnci etkinleştir (Buton için)
}
void loop() {
// Pin işlemlerini burada yapacağız
}
```
---
#### 4. Çıkış İşlemi (digitalWrite())
Bir pini `OUTPUT` olarak yapılandırdıktan sonra, o pinden `HIGH` veya `LOW` sinyali gönderebilirsiniz.
**Sözdizimi:** `digitalWrite(pinNumarası, DEĞER);`
* `pinNumarası`: Sinyal gönderilecek dijital pinin numarası.
* `DEĞER`: `HIGH` (pini yüksek gerilime getirir) veya `LOW` (pini düşük gerilime getirir).
**Örnek: LED Yakıp Söndürme (Blink)**
```cpp
const int ledPin = 13; // LED'in bağlı olduğu pin
void setup() {
pinMode(ledPin, OUTPUT); // ledPin'i çıkış olarak ayarla
}
void loop() {
digitalWrite(ledPin, HIGH); // LED'i yak (pini HIGH yap)
delay(1000); // 1 saniye bekle
digitalWrite(ledPin, LOW); // LED'i söndür (pini LOW yap)
delay(1000); // 1 saniye bekle
}
```
---
#### 5. Giriş İşlemi (digitalRead())
Bir pini `INPUT` veya `INPUT_PULLUP` olarak yapılandırdıktan sonra, o pindeki mevcut sinyal durumunu (HIGH veya LOW) okuyabilirsiniz.
**Sözdizimi:** `digitalRead(pinNumarası);`
* `pinNumarası`: Durumu okunacak dijital pinin numarası.
* Fonksiyon, pindeki mevcut durumu (`HIGH` veya `LOW`) döndürür.
**Örnek: Buton ile LED Kontrolü**
```cpp
const int buttonPin = 2; // Butonun bağlı olduğu pin
const int ledPin = 13; // LED'in bağlı olduğu pin
void setup() {
pinMode(ledPin, OUTPUT); // LED pinini çıkış olarak ayarla
pinMode(buttonPin, INPUT_PULLUP); // Buton pinini giriş olarak ayarla ve dahili pull-up'ı etkinleştir
Serial.begin(9600); // Seri Portu başlat (debug için)
}
void loop() {
int buttonState = digitalRead(buttonPin); // Butonun durumunu oku
// Buton dahili pull-up ile bağlı olduğu için, basıldığında LOW, serbest bırakıldığında HIGH olur.
if (buttonState == LOW) { // Eğer buton basılıysa (pin LOW ise)
digitalWrite(ledPin, HIGH); // LED'i yak
Serial.println("Buton Basılı!");
} else { // Eğer buton serbest bırakıldıysa (pin HIGH ise)
digitalWrite(ledPin, LOW); // LED'i söndür
Serial.println("Buton Serbest.");
}
delay(50); // Buton sıçramasını (debounce) azaltmak için kısa bir gecikme
}
```
---
### Önemli Hususlar ve Ek Bilgiler
* **Floating Input (Boşta Giriş):** Giriş olarak ayarlanmış bir pin, hiçbir şeye bağlı değilse veya uygun bir dirençle (pull-up/down) bağlanmamışsa "boşta" kalır. Bu durumda, pin rastgele bir değer (HIGH/LOW) okuyabilir ve bu durum hatalı çalışmaya yol açar. Bu nedenle, giriş pinlerini her zaman ya bir dirençle VCC'ye (HIGH) ya da GND'ye (LOW) bağlamak gerekir. `INPUT_PULLUP` bu sorunu Arduino'da çözer.
* **Akım Sınırlama (Current Limiting):** Bir LED'i doğrudan dijital pine bağlamak, LED'in ve/veya mikrodenetleyici pininin zarar görmesine neden olabilir. Her zaman akım sınırlayıcı bir direnç kullanılmalıdır.
* **Debouncing (Sıçrama Giderme):** Mekanik butonlar basıldığında veya bırakıldığında anlık olarak birden fazla kez açılıp kapanabilir. Bu duruma "sıçrama" (bounce) denir. `digitalRead()` bu sıçramaları algılar ve birden fazla tetikleme hatasına yol açabilir. Yazılımsal (kısa delay'ler, özel kütüphaneler) veya donanımsal (RC filtreleri) yöntemlerle bu sıçramalar giderilebilir.
* **Harici Kesmeler (Interrupts):** Giriş pinindeki bir değişikliğe anında yanıt vermek gerektiğinde, `digitalRead()` ile sürekli okuma (polling) yapmak yerine harici kesmeler (interrupts) kullanılabilir. Bu, mikrodenetleyicinin başka işler yaparken, pin durumundaki değişiklik olduğunda otomatik olarak belirli bir kodu çalıştırmasını sağlar.
* **Gerilim Seviyeleri (Voltage Levels):** Çoğu Arduino kartı 5V veya 3.3V mantık seviyeleriyle çalışır. ESP32 gibi kartlar genellikle 3.3V kullanır. Farklı gerilim seviyeleriyle çalışan cihazları bağlarken gerilim çeviriciler (level shifter) kullanmak önemlidir.
---
Dijital pinlerle giriş/çıkış işlemleri, elektronik projelerinizin temelini oluşturur ve bu prensipleri anladığınızda çok çeşitli uygulamalar geliştirebilirsiniz.
Son Paylaşımlar
-
Python Temelleri Genel Tekrar
14:39:24 - 13/12/2025 -
Python Performans İpuçları
14:38:59 - 13/12/2025 -
Python’da Temiz Kod Yazma
14:38:28 - 13/12/2025 -
Python Mini Proje: Sayı Tahmin Oyunu
14:37:58 - 13/12/2025 -
Python Mini Proje: Hesap Makinesi
14:37:31 - 13/12/2025