Sensör Dirençlerini Neden Gerilime Dönüştürmemiz Gerekir?
Arduino, ESP32, Raspberry Pi Pico gibi popüler geliştirme kartları ve mikrodenetleyiciler, çevrelerindeki dünyayı algılamak için çeşitli sensörler kullanırlar. Elektronik dünyasında sıcaklık, ışık, nem veya kuvvet gibi fiziksel büyüklükleri algılayan sensörlerin büyük bir çoğunluğu (örneğin LDR yani ışığa duyarlı dirençler veya termistörler yani sıcaklığa duyarlı dirençler), dış etkenlere bağlı olarak sadece direnç değerlerini değiştirirler.
Ancak burada temel bir sorun karşımıza çıkar: Mikrodenetleyicilerin Analog-Dijital Dönüştürücü (ADC) pinleri (örneğin Arduino Uno'daki A0, A1 pinleri) direnç okuyamazlar. Onlar sadece üzerlerine düşen gerilimi (voltajı) okuyabilir ve bu voltajı dijital bir sayıya dönüştürebilirler. İşte tam bu noktada, sensörün değişen direnç değerini mikrodenetleyicinin anlayabileceği değişen bir voltaj değerine dönüştürmemiz gerekir. Bunu yapmanın en basit, en ucuz ve en yaygın yolu bir gerilim bölücü devresi kurmaktır.
Bu yazımızda, Arduino projelerinizde sensör okumak için neden gerilim bölücülere ihtiyaç duyduğunuzu ve doğru dirençleri nasıl hesaplayacağınızı öğreneceksiniz. Kendi devrelerinizi kurarken zamandan tasarruf etmek için, hesaplamalarınızı Gerilim Bölücü Hesaplama aracı ile hızlıca doğrulayabilirsiniz.
Arduino Analog Pinlerinin (ADC) Çalışma Mantığı
Arduino Uno'nun kalbinde yer alan ATmega328P mikrodenetleyicisi, 10-bit çözünürlüğe sahip bir ADC (Analog-to-Digital Converter) modülü barındırır. Bu, A0 pinine uyguladığınız 0 ile 5 Volt arasındaki bir gerilimi, 0 ile 1023 arasında dijital bir sayıya dönüştüreceği anlamına gelir.
Eğer pindeki voltaj 0V ise, Arduino analogRead() fonksiyonu ile 0 değerini okur.
Eğer pindeki voltaj tam 5V ise, 1023 değerini okur.
Eğer voltaj tam ortadaysa, yani 2.5V ise, yaklaşık 512 değerini okur.
Sensörümüzün değişen direncini, 0-5V arasında değişen bir gerilime dönüştürmeyi başarırsak, sensörden gelen veriyi Arduino kodlarımız içerisinde rahatça anlamlandırabiliriz.
LDR ve Termistör ile Gerilim Bölücü Tasarımı
Bir gerilim bölücü devresi temelde seri bağlı iki dirençten oluşur. Bu dirençlerden biri sabit (bilinen bir değerde), diğeri ise bizim sensörümüz olacaktır.
Temel gerilim bölücü formülünü hatırlayalım:
Vout = Vin · [ R2 / (R1 + R2) ]
Bu devreyi kurarken sensörü nereye koyacağınız tamamen size kalmıştır, ancak koyduğunuz yere göre okuyacağınız voltajın davranışı değişecektir.
Durum 1: Sensör Üstte (R1), Sabit Direnç Altta (R2)
Eğer LDR'yi (Işığa duyarlı direnç) R1 olarak (5V tarafına) bağlar ve R2'ye sabit bir direnç bağlarsanız formülümüz: Vout = 5V * [ R_Sabit / (R_LDR + R_Sabit) ] olur.
LDR'nin özelliği, ışık arttıkça direncinin düşmesidir. Işık arttıkça R_LDR küçülecektir. Formüldeki payda (R_LDR + R_Sabit) küçüldüğü için sonucun değeri büyüyecektir.
Sonuç: Işık şiddeti arttıkça, Arduino'nun okuduğu Vout (voltaj) değeri ARTAR.
Durum 2: Sabit Direnç Üstte (R1), Sensör Altta (R2)
Eğer sabit direnci R1 olarak (5V tarafına) bağlar ve LDR'yi R2 olarak (GND tarafına) bağlarsanız formülümüz: Vout = 5V * [ R_LDR / (R_Sabit + R_LDR) ] olur.
Işık arttıkça R_LDR küçülecektir. Formülün hem payında hem de paydasında bulunan R_LDR küçüldüğünde (matematiksel orantı gereği), toplam kesrin değeri küçülür.
Sonuç: Işık şiddeti arttıkça, Arduino'nun okuduğu Vout (voltaj) değeri AZALIR.
Genellikle Durum 1 (Işık arttıkça voltajın/değerin artması) kodlama açısından insan algısına daha yatkın olduğu için tercih edilir. Ancak devrenizin veya projenizin ihtiyacına göre iki yöntem de tamamen geçerlidir ve doğrudur.
Sabit Direnç (R) Değerini Nasıl Seçmeliyiz?
Sensör ile birlikte kullanacağınız sabit direncin seçimi kritik bir adımdır. Çok büyük veya çok küçük bir sabit direnç seçerseniz, sensörünüzün okuma aralığı (hassasiyeti) daralır ve Arduino'dan sadece çok kısıtlı bir aralıkta (örneğin sadece 900-950 arası) değerler okursunuz.
En iyi hassasiyeti (en geniş voltaj değişim aralığını) elde etmek için genel kabul gören bir kural vardır: Sabit direnç değeri, sensörünüzün normal çalışma koşullarındaki (veya ölçmek istediğiniz orta noktasındaki) direncine yakın olmalıdır.
Örnek bir LDR Kalibrasyonu:
- Odanız tamamen karanlıkken LDR'nin direncini bir multimetre ile ölçtünüz: 100kΩ (100.000 Ohm)
- Odanız çok aydınlıkken ölçtünüz: 1kΩ (1.000 Ohm)
- Normal, loş bir oda ışığında (ölçmek istediğiniz referans noktasında) ölçtünüz: 10kΩ (10.000 Ohm)
İşte bu durumda R_Sabit olarak 10kΩ değerinde standart bir direnç kullanmanız size en dengeli okuma aralığını sunacaktır. Hangi direnç değerinde hangi voltaj aralığını elde edeceğinizi önceden simüle etmek isterseniz Gerilim Bölücü Hesaplama aracıyla denemeler yapabilirsiniz.
Arduino Kod Örneği
Devremizi kurduk (LDR 5V'a bağlı (R1), 10k Sabit direnç GND'ye bağlı (R2), orta noktaları ise A0 pinine bağlı). İşte bu veriyi okumak için gereken basit Arduino kodu:
const int sensorPin = A0; // Gerilim bölücünün orta noktasının bağlandığı pin
int sensorValue = 0; // Sensörden okunan dijital değer (0-1023)
float voltage = 0.0; // Hesaplanan voltaj değeri (0.0 - 5.0)
void setup() {
Serial.begin(9600); // Seri haberleşmeyi başlat (Sonuçları bilgisayarda görmek için)
}
void loop() {
// 1. ADC değerini oku
sensorValue = analogRead(sensorPin);
// 2. Okunan değeri gerçek voltaja dönüştür
// 5.0V referans voltajını 1023'e bölersek voltaj oranını buluruz
voltage = sensorValue * (5.0 / 1023.0);
// 3. Değerleri ekrana yazdır
Serial.print("Okunan Deger: ");
Serial.print(sensorValue);
Serial.print(" | Voltaj: ");
Serial.print(voltage);
Serial.println(" V");
delay(500); // 500 ms bekle
}
Bu kod sayesinde LDR'nin anlık değişimlerini doğrudan voltaj olarak izleyebilirsiniz. Kodun hesapladığı voltaj değerleri, Vout = Vin·R₂/(R₁+R₂) formülüne ve sensörün o anki direncine göre şekillenecektir.
Sınırlamalar ve Dikkat Edilmesi Gerekenler
Sensörleri gerilim bölücü ile okumak son derece pratik olsa da, özellikle hassas ölçümler gerektiren endüstriyel veya tıbbi (örneğin hassas NTC termistörler) projelerde bazı sınırlamalar ortaya çıkabilir.
- ADC'nin İç Direnci (Yük Etkisi): Arduino'nun ADC pini, devrenin orta noktasına bağlandığında aslında devreye paralel bağlanmış bir direnç (yaklaşık 100MΩ) gibi davranır. LDR gibi direnci 100kΩ altında olan sensörlerde bu çok büyük iç direnç sorun yaratmaz (etkisi ihmal edilebilirdir). Ancak çok yüksek dirençli sensörler (örneğin MegaOhm mertebesinde) kullanıyorsanız, ADC'nin iç direnci ölçümünüzü saptıracaktır (Loading Effect). Böyle durumlarda devrenin arasına bir Op-Amp tamponu (Voltage Follower / Buffer) eklemek gerekir.
- Güç Tüketimi (Kendi Kendine Isınma): Özellikle termistör (sıcaklık sensörü) okurken dikkat edilmelidir. Gerilim bölücü üzerinden sürekli bir akım geçer. Eğer direnç değerlerini çok küçük (örneğin 100 Ohm) seçerseniz, termistörün üzerinden yüksek akım geçecek ve içindeki güç tüketimi (P = I^2 * R) nedeniyle termistör kendi kendine ısınacaktır. Bu da ortam sıcaklığını olduğundan yüksek okumanıza sebep olur. Sensör üreticilerinin datasheetlerinde belirttiği akım sınırlarına uymak çok önemlidir.
- Referans Voltajı (Vin) Dalgalanmaları: Formülümüzde de görüldüğü üzere
Vout = Vin · Oran. Eğer Arduino'yu beslediğiniz 5V gerilim hattında gürültü varsa veya voltaj USB kaynağına göre 4.8V - 5.2V arasında dalgalanıyorsa, okuduğunuz Vout değeri de doğrudan etkilenecektir. Hassas ölçümlerde her zaman temiz ve regüle edilmiş bir Vin (veya özel AREF - Analog Referans voltajı) kullanılmalıdır.
Sonuç
Arduino ve mikrodenetleyiciler dünyasına adım atan herkesin, direnç tabanlı sensörlerin dilinden konuşabilmek için gerilim bölücü mantığını kavraması şarttır. LDR'ler ile karanlıkta yanan ışıklar yapmaktan, termistörler ile ortam sıcaklığını ölçmeye kadar sayısız projede bu basit Vout = Vin·R₂/(R₁+R₂) matematiğini kullanacaksınız. Tasarımlarınızda en uygun direnç değerini seçerken yanılmamak ve deneme-yanılma süresini kısaltmak için Gerilim Bölücü Hesaplama aracımızı mutlaka araç kutunuzda bulundurun. İyi tasarımlar!