Arduino Analog Giriş
Arduino ile analog sensör verilerini okumayı öğrenin.
Arduino ile analog pinlerden veri okuma, çeşitli sensörlerden (potansiyometre, LDR, sıcaklık sensörü vb.) gelen sürekli değişen voltaj değerlerini dijital verilere dönüştürüp Arduino'ya aktarmanın temel yoludur. Bu verileri daha sonra çeşitli amaçlar için kullanabiliriz.
### Analog Pinler Nedir?
Dijital pinler sadece iki durum (AÇIK/KAPALI, YÜKSEK/DÜŞÜK, 0V/5V) arasında ayrım yaparken, analog pinler belirli bir voltaj aralığındaki (genellikle 0V ile 5V arası) *sürekli* değerleri okuyabilir. Arduino üzerindeki çoğu kartta A0'dan A5'e kadar işaretlenmiş analog giriş pinleri bulunur. (Bazı kartlarda daha fazla olabilir, örneğin Mega'da A0-A15).
Arduino'da bir **Analog-Dijital Dönüştürücü (ADC)** bulunur. Bu dönüştürücü, analog giriş pinine uygulanan voltajı, Arduino'nun anlayabileceği dijital bir sayıya çevirir.
#### Çözünürlük
Arduino Uno, Nano, Mega gibi kartlardaki ADC'ler genellikle **10-bit** çözünürlüğe sahiptir. Bu, 0 ile 5 volt arasındaki voltaj aralığının $2^{10} = 1024$ farklı adıma bölündüğü anlamına gelir. Yani okunan değer 0 ile 1023 arasında bir tam sayı olacaktır:
* **0 Volt** $\rightarrow$ **0** değeri
* **5 Volt** $\rightarrow$ **1023** değeri
* Ara değerler buna oranla değişir. Örneğin 2.5 Volt $\rightarrow$ yaklaşık 511-512 değeri.
**Voltaj Hesaplama Formülü:**
Okunan analog değeri voltaja çevirmek isterseniz:
`Gerçek Voltaj = (Okunan Değer / 1023.0) * Referans Voltajı`
Varsayılan referans voltajı 5V'tur (bazı kartlarda 3.3V olabilir).
### `analogRead()` Fonksiyonu
Arduino'da analog pinlerden veri okumak için kullanılan ana fonksiyon `analogRead()` fonksiyonudur.
**Söz Dizimi (Syntax):**
`int sensorValue = analogRead(pinNumarası);`
* `pinNumarası`: Okumak istediğiniz analog pinin numarasıdır (örneğin A0, A1, vb.).
* `sensorValue`: Fonksiyonun döndürdüğü, 0-1023 arasında değişen tam sayı değeridir. Bu değeri tutmak için bir `int` değişkeni kullanırız.
### Uygulama Örneği: Potansiyometreden Değer Okuma ve Seri Port'ta Görüntüleme
Bu örnekte, bir potansiyometrenin değerini okuyup Seri Monitör'de hem ham analog değeri hem de karşılık gelen voltaj değerini göstereceğiz.
#### Gerekli Malzemeler:
* Arduino Kartı (Uno, Nano vb.)
* USB Kablosu
* Bredboard (isteğe bağlı)
* 10k Ohm Potansiyometre
* Bağlantı Kabloları (Jumper Wires)
#### Devre Şeması:
1. **Potansiyometrenin bir dış bacağını** Arduino'daki **5V** pinine bağlayın.
2. **Potansiyometrenin diğer dış bacağını** Arduino'daki **GND** pinine bağlayın.
3. **Potansiyometrenin orta bacağını (silecek)** Arduino'daki **A0** analog giriş pinine bağlayın.
(Görselleştirme: Bir potansiyometrenin 3 bacağı vardır. Sağ ve sol uçlar güç için, orta uç ise çıkış içindir.)
#### Arduino Kodu:
```arduino
// Potansiyometrenin bağlı olduğu analog pini tanımlayalım
const int analogPin = A0;
// Okunan analog değeri ve hesaplanan voltajı tutacak değişkenler
int sensorValue = 0;
float voltage = 0.0; // Voltaj ondalıklı olabileceği için float kullanıyoruz
void setup() {
// Seri iletişimi başlatıyoruz, böylece değerleri bilgisayarımıza gönderebiliriz.
// 9600, veri gönderme hızıdır (baud rate).
Serial.begin(9600);
// A0 pini otomatik olarak giriş olarak ayarlanır,
// ancak belirtebiliriz de: pinMode(analogPin, INPUT);
}
void loop() {
// analogRead() fonksiyonu ile A0 pinindeki analog değeri okuyoruz
sensorValue = analogRead(analogPin);
// Okunan değeri voltaja dönüştürüyoruz
// 1023.0 kullanmamız önemli, aksi halde tam sayı bölmesi yaparız ve hassasiyet kaybolur.
voltage = (sensorValue / 1023.0) * 5.0;
// Seri Monitör'e ham analog değeri yazdırıyoruz
Serial.print("Analog Deger: ");
Serial.print(sensorValue);
// Tab karakteri ile biraz boşluk bırakalım
Serial.print("\t");
// Seri Monitör'e hesaplanan voltaj değerini yazdırıyoruz
Serial.print("Voltaj: ");
Serial.print(voltage);
Serial.println(" V"); // Bir sonraki okumanın yeni satırdan başlaması için "ln" ekliyoruz
// Okumalar arasında kısa bir gecikme ekleyelim ki Seri Monitör çok hızlı dolmasın
delay(100);
}
```
Bu kodu Arduino kartınıza yükledikten sonra Arduino IDE'deki "Seri Monitör"ü açın (sağ üst köşedeki büyüteç simgesi). Potansiyometrenin düğmesini çevirdikçe, Seri Monitör'de hem "Analog Deger"in 0-1023 arasında değiştiğini hem de "Voltaj"ın 0-5V arasında değiştiğini göreceksiniz.
### Okunan Veriyi Kullanma Örnekleri:
Analog pinlerden okuduğunuz veriyi sadece Seri Monitör'de göstermenin ötesinde birçok farklı amaç için kullanabilirsiniz:
1. **LED Parlaklığını Kontrol Etme (PWM):**
* Potansiyometreden okuduğunuz 0-1023 değerini `map()` fonksiyonu ile 0-255 aralığına çevirerek bir LED'in parlaklığını kontrol edebilirsiniz (`analogWrite()` fonksiyonu ile).
* Örn: `int ledBrightness = map(sensorValue, 0, 1023, 0, 255); analogWrite(9, ledBrightness);`
2. **Servo Motor Kontrolü:**
* Potansiyometreden okuduğunuz 0-1023 değerini 0-180 derece aralığına çevirerek bir servo motorun açısını kontrol edebilirsiniz.
* Örn: `int angle = map(sensorValue, 0, 1023, 0, 180); myServo.write(angle);`
3. **Eşik Değer Kontrolü:**
* Okunan analog değer belirli bir eşik değerin altına düşerse veya üstüne çıkarsa bir eylemi tetikleyebilirsiniz. Örneğin, LDR (ışık sensörü) ile ortam karardığında bir lambayı açmak.
* Örn: `if (sensorValue < 300) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); }`
4. **Sıcaklık Kontrolü:**
* LM35 gibi sıcaklık sensörlerinden okunan analog değerleri voltaja çevirip daha sonra sıcaklık derecesine (Celsius, Fahrenheit) dönüştürerek ortam sıcaklığını ölçebilir ve belirli sıcaklık aralıklarında farklı eylemler gerçekleştirebilirsiniz.
5. **Veri Kaydı ve Analiz:**
* Okunan verileri bir SD karta kaydedebilir veya bir bilgisayar programına (Processing, Python) göndererek daha detaylı analizler ve görselleştirmeler yapabilirsiniz.
6. **Geribildirim Sistemleri:**
* Kullanıcı girdisine (örneğin bir joystick veya dokunmatik sensör) tepki veren sistemler oluşturmak.
### Önemli Notlar ve İpuçları:
* **`analogReference()`:** Varsayılan olarak Arduino, kendi 5V (veya 3.3V) beslemesini referans olarak kullanır. Ancak, `analogReference()` fonksiyonu ile bu referans voltajını değiştirebilirsiniz (örneğin daha düşük voltajlı sensörler için harici bir referans). Bu, okumaların hassasiyetini artırabilir.
* **Gürültü:** Analog sinyaller çevredeki elektrik gürültüsünden etkilenebilir. Daha kararlı okumalar için birden fazla okuma yapıp ortalamasını alabilir veya pasif filtreler (direnç-kondansatör) kullanabilirsiniz.
* **`map()` Fonksiyonu:** `map(value, fromLow, fromHigh, toLow, toHigh)` fonksiyonu, bir değeri bir aralıktan başka bir aralığa orantılı olarak dönüştürmek için çok kullanışlıdır. Yukarıdaki LED ve servo örneklerinde gördüğünüz gibi.
Analog pinlerden veri okuma, Arduino projelerinin temelidir ve çeşitli sensörlerle etkileşime girmenizi sağlar. Bu yeteneği kullanarak çok çeşitli interaktif ve otomatik sistemler 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