Temeller · 12 dk okuma

Gerilim Bölücü Nedir? Formül, Direnç Seçimi ve Arduino ile Ölçüm

Gerilim bölücü nedir? Vout = Vin × R2 / (R1 + R2) formülü, direnç seçimi, yük etkisi, Arduino ile 12 V ölçme, 5 V'u 3,3 V'a indirme, LDR ve NTC okuma.

Gerilim bölücü, seri bağlı iki dirençle bir gerilimi daha küçük ve hesaplanabilir bir gerilime indiren en basit devredir. Çıkış gerilimi Vout = Vin × R2 / (R1 + R2) formülüyle bulunur: R1 kaynağa, R2 toprağa (GND) bağlıdır ve çıkış ikisinin birleştiği orta noktadan alınır. Örneğin 10 kΩ'luk iki direnç 12 V'u tam yarıya, 6 V'a böler. Arduino ile 12 V'luk bir aküyü ölçmekten 5 V'luk bir sensör sinyalini ESP32'nin 3,3 V'luk pinine uygun hale getirmeye, LDR ve NTC gibi sensörleri okumaya kadar sayısız devrenin temelinde bu iki direnç vardır.

Bu yazıda formülün nereden geldiğini, direnç değerlerini nasıl seçeceğini ve bölücüye bir şey bağladığında çıkışın neden düştüğünü (yük etkisi) gerçek sayılarla göreceksin. Ardından Arduino Uno, ESP32 ve Raspberry Pi Pico ile pil ve akü gerilimi ölçen kodları adım adım kuracak, 5 V'u 3,3 V'a indirmek için doğru direnç çiftlerini seçecek ve LDR ile NTC'yi bölücüyle okuyacağız. Son olarak gerilim bölücünün neden asla bir güç kaynağı yerine kullanılmaması gerektiğini açıklayacağız.

Gerilim bölücü için dirençler
Bir gerilim bölücü için iki direnç yeterlidir; hassas ölçümlerde %1 toleranslı metal film dirençler daha doğru sonuç verir.

Gerilim bölücü nedir, nasıl çalışır?

Gerilim bölücünün formülü doğrudan Ohm kanunundan çıkar. Kaynakla toprak arasına seri bağlanan R1 ve R2'den aynı akım geçer: I = Vin / (R1 + R2). R2'nin üzerindeki gerilim, yani çıkış, bu akımla R2'nin çarpımıdır: Vout = I × R2 = Vin × R2 / (R1 + R2). Kısacası kaynak gerilimi dirençler arasında değerleriyle orantılı olarak paylaşılır; büyük direncin üzerine büyük pay düşer. Çıkış her zaman girişten küçüktür, çünkü R2 / (R1 + R2) oranı 1'den küçüktür. Seri devrelerde gerilimin nasıl paylaşıldığını seri ve paralel direnç hesaplama yazısında daha ayrıntılı bulabilirsin.

HesaplananFormülÖrnek (Vin = 12 V, R1 = 22 kΩ, R2 = 10 kΩ)
Çıkış gerilimiVout = Vin × R2 / (R1 + R2)12 × 10 / 32 = 3,75 V
Bölme oranık = R2 / (R1 + R2)10 / 32 = 0,3125
Çıkıştan girişi bulmakVin = Vout × (R1 + R2) / R23,75 × 3,2 = 12 V
İstenen orana göre R1R1 = R2 × (Vin / Vout − 1)10 kΩ × (12 / 3,75 − 1) = 22 kΩ
Bölücü akımıI = Vin / (R1 + R2)12 / 32 kΩ = 0,375 mA
Toplam güçP = Vin² / (R1 + R2)144 / 32 kΩ = 4,5 mW
Çıkış direnci (Thevenin)Rth = R1 × R2 / (R1 + R2)22 × 10 / 32 = 6,875 kΩ

Ters yönden de düşünebilirsin: 12 V'u 3,3 V'a indirmek istiyorsan ve R2 olarak 10 kΩ seçtiysen R1 = 10 × (12 / 3,3 − 1) ≈ 26,4 kΩ çıkar. Bu değer piyasada olmadığı için bir üstteki standart değer olan 27 kΩ'u seçersin; çıkış 12 × 10 / 37 ≈ 3,24 V olur. R1'i yukarı yuvarlamak çıkışı biraz düşürür, bu da pin için güvenli taraftır. Bir potansiyometre de aslında ayarlanabilir bir gerilim bölücüdür: orta ucu, direnç yolunu R1 ve R2 olarak ikiye ayırır. Hesabı elle yapmak istemezsen gerilim bölücü hesaplayıcısı giriş gerilimine ve dirençlere göre çıkışı anında verir. Elektronikte gerilim bölücüyü en çok şu işlerde görürsün:

  • Yüksek gerilim ölçmek: 12 V'luk bir akü ya da 7,4 V'luk bir lityum paket gibi kaynakları analog girişin ölçebileceği aralığa indirmek.
  • Seviye düşürmek: 5 V'luk bir sinyali ESP32 ve Raspberry Pi Pico'nun 3,3 V'luk girişlerine uygun hale getirmek.
  • Direnci değişen sensörleri okumak: LDR, NTC, esneme (flex) sensörü ve kuvvet sensörü (FSR) gibi elemanların direnç değişimini gerilime çevirmek.
  • Tek pinden birçok buton okumak: Farklı dirençlerle kurulan bir direnç merdiveni her butona farklı bir gerilim verir ve beş butonu tek bir analog pinde toplar.
  • Regülatör geri beslemesi: LM317 ve ayarlı LM2596 gibi regülatörler çıkış gerilimini bir bölücüyle ölçerek sabit tutar; LM317'de Vout = 1,25 × (1 + R2 / R1) olur.
  • Referans gerilimi üretmek: Op-amp devrelerinde besleme geriliminin yarısını referans olarak üretmek.

Direnç değerleri nasıl seçilir?

Formül yalnızca oranla ilgilenir: 1 kΩ + 1 kΩ ile 100 kΩ + 100 kΩ aynı oranda, yani tam yarı yarıya böler. Ama pratikte mutlak değerler de önemlidir. Küçük dirençler bölücüden fazla akım geçirir; bu akım boşa harcanan enerjidir ve pilli projelerde pili gereksiz yere tüketir. Büyük dirençler ise çok az akım çeker, fakat çıkışları zayıf olur: bağlanan bir yük ya da analog girişin içindeki örnekleme kondansatörü çıkış gerilimini kolayca bozar, kablolardan gelen gürültü de daha kolay işler. Doğru seçim bu iki uç arasında bir dengedir:

Toplam direnç (R1 + R2)12 V'ta akımArtısıEksisiTipik kullanım
100 Ω – 1 kΩ12–120 mAYükten neredeyse etkilenmez, çok hızlıdırIsınır, fazla akım harcarÖlçüm devrelerinde neredeyse hiç
1 kΩ – 30 kΩ0,4–12 mAADC için ideal çıkış direnci, hızlı sinyallere uygunPilli projede sürekli akım5 V → 3,3 V sinyal dönüştürme, Arduino ile ölçüm
30 kΩ – 300 kΩ40–400 µAPil dostu, ısınma yokAnalog girişe 100 nF kondansatör gerekebilirPil ve akü izleme
1 MΩ ve üzeri12 µA'den azNeredeyse hiç akım çekmezGürültüye açık, ADC doğru okuyamaz, multimetre bile yüklerYalnızca op-amp tamponla
  1. En yüksek giriş gerilimini belirle. 12 V'luk bir kurşun asit akü şarj olurken 14,4 V'a çıkabilir; ölçeceğin gerilimin en kötü durumunu al ve üstüne %10 pay ekle.
  2. Pinin kabul ettiği en yüksek gerilimi belirle. Arduino Uno'da 5 V, ESP32 ve Pico'da 3,3 V; güvenli hedef olarak Uno'da yaklaşık 4,5 V, ESP32'de 2,5 V, Pico'da 3,0 V seç.
  3. Oranı hesapla: k = hedef çıkış / en yüksek giriş. Örneğin 4,5 / 14,4 ≈ 0,31.
  4. R2'yi seç (çoğu durumda 10 kΩ iyi bir başlangıçtır) ve R1'i R1 = R2 × (1 / k − 1) ile bul. Sonucu standart direnç değerleri arasından bir üst değere yuvarla.
  5. Akımı ve gücü kontrol et: I = Vin / (R1 + R2) ve P = Vin² / (R1 + R2). Pilli projelerde akımı mikroamper düzeyinde tutmaya çalış.
  6. Çıkış direncini kontrol et: R1 × R2 / (R1 + R2), Arduino Uno için 10 kΩ'un altında olmalı; değilse analog pin ile GND arasına 100 nF kondansatör ekle.
  7. Gerçek oranı koda yaz: Seçtiğin standart değerlerle oranı yeniden hesapla, devreyi kurduktan sonra multimetreyle ölçüp kalibre et.
Direnç toleransı oranı doğrudan bozar. 22 kΩ ve 10 kΩ'luk %5 toleranslı iki direnç, en kötü durumda oranı 0,291 ile 0,334 arasında herhangi bir yere, yani yaklaşık ±%7 kaydırabilir; 12 V'u 11,2 V ya da 12,8 V olarak okursun. %1 toleranslı metal film dirençlerle bu hata ±%1,4'e iner, multimetreyle yapılan tek bir kalibrasyonla da neredeyse sıfırlanır.

Yük etkisi: Bölücüye bir şey bağlarsan ne olur?

Formül, çıkıştan hiç akım çekilmediğini varsayar. Çıkışa bir yük bağladığın anda bu yük R2'ye paralel hale gelir, alt koldaki eşdeğer direnç küçülür ve çıkış gerilimi düşer. Bunu hesaplamanın kolay yolu bölücüyü Thevenin eşdeğeri olarak düşünmektir: bölücü, yük yokken ölçtüğün gerilime (Vth) ve Rth = R1 × R2 / (R1 + R2) iç direncine sahip bir kaynak gibi davranır. RL yükü bağlandığında çıkış Vth × RL / (Rth + RL) olur. Aşağıdaki tabloda 10 V'luk bir kaynağı 10 kΩ + 10 kΩ ile böldüğümüzü (Vth = 5 V, Rth = 5 kΩ) ve çıkışa farklı yükler bağladığımızı görüyorsun:

Çıkıştaki yük (RL)Çıkış gerilimiHata
Yük yok5,00 V%0
1 MΩ4,98 V%0,5
100 kΩ4,76 V%4,8
10 kΩ3,33 V%33
1 kΩ0,83 V%83

Pratik kural şu: yükün direnci bölücünün çıkış direncinin (Rth) en az 100 katı olursa hata %1'in altında kalır. Yük daha küçükse ya dirençleri küçültürsün ya da araya bir op-amp gerilim izleyici (tampon) koyarsın. Mikrodenetleyicinin analog girişi kendisi çok yüksek dirençlidir, ama içinde her ölçümde şarj edilen küçük bir örnekleme kondansatörü vardır (ATmega328P'de yaklaşık 14 pF). Veri sayfası bu yüzden kaynağın çıkış direncinin yaklaşık 10 kΩ ya da daha düşük olmasını önerir. Daha büyük dirençli bir bölücü kullanıyorsan analog pin ile GND arasına 100 nF'lık bir kondansatör ekle: kondansatör, örnekleme anında gereken yükü hazır tutar. Birden fazla analog pini sırayla okuyorsan her pinde ilk okumayı atmak da kanal değişiminden kalan hatayı temizler.

Gerilim bölücü neden güç kaynağı olarak kullanılmaz?

Yeni başlayanların en sık düştüğü tuzak, 12 V'luk bir adaptörden iki dirençle 5 V elde edip Arduino'yu ya da bir modülü bununla beslemeye çalışmaktır. Kâğıt üzerinde 7 kΩ ve 5 kΩ'luk bir bölücü 12 V'tan tam 5 V verir, ama yalnızca çıkıştan akım çekilmezken. 50 mA çeken bir kart yaklaşık 100 Ω'luk bir yük gibi davranır; 5 kΩ'luk R2'ye paralel bağlandığında alt kol 98 Ω'a iner ve çıkış 0,17 V'a çöker. Dirençleri 70 Ω ve 50 Ω'a küçültürsen bu kez devre hiçbir şey bağlı değilken bile 100 mA çeker ve 1,2 W ısı üretir; yük bağlandığında çıkış yine 3,9 V'a düşer ve kartın çektiği akım her değiştiğinde (Wi-Fi, servo, röle) gerilim de oynar. Üstelik yük çıkarıldığında gerilim yeniden yükselir ve hassas parçalar zarar görebilir.

Bir devreyi beslemek için gerilim bölücü değil regülatör kullan. Küçük akımlar için 7805 voltaj regülatörü (3,3 V için AMS1117), yüksek akım ve verim için LM2596 gibi bir buck dönüştürücü, çıkışı yük ne olursa olsun sabit tutar. Gerilim bölücüyü yalnızca ölçüm ve sinyal için kullan; 220 V şebeke gerilimini de asla basit bir bölücüyle Arduino'ya bağlama, bunun için yalıtımlı modüller vardır.

Arduino ile 12 V akü ve pil gerilimi ölçme

Arduino Uno'nun analog girişleri en fazla 5 V okuyabilir; 12 V'luk bir aküyü doğrudan bağlamak pini yakar. Çözüm 22 kΩ (R1) ve 10 kΩ'luk (R2) bir bölücüdür: oran 0,3125 olduğundan 14,4 V'luk şarj gerilimi pine 4,5 V olarak ulaşır ve devre en fazla 16 V'a kadar ölçebilir. Bölücü 12 V'ta yalnızca 0,375 mA çeker, 6,9 kΩ'luk çıkış direnci de önerilen 10 kΩ sınırının altındadır. 10 bitlik ADC her adımda yaklaşık 4,9 mV ayırt eder; bölücüyle bu, girişte yaklaşık 15,6 mV'luk bir çözünürlüğe karşılık gelir. ESP32 ve Pico 3,3 V ile çalıştığı için onlarda daha büyük bir R1 (56 kΩ) kullanıyoruz:

BağlantıArduino UnoESP32Raspberry Pi Pico
R1 (üst direnç)22 kΩ56 kΩ56 kΩ
R2 (alt direnç)10 kΩ10 kΩ10 kΩ
R1'in üst ucuKaynağın artısı (+12 V)Kaynağın artısı (+12 V)Kaynağın artısı (+12 V)
Orta nokta (R1–R2)A0GPIO 34 (ADC1)GP26 (ADC0, pin 31)
R2'nin alt ucu ve kaynağın eksisiGNDGNDGND (ör. pin 38)
14,4 V'ta pindeki gerilim4,50 V2,18 V2,18 V
Ölçülebilen en yüksek giriş16 VYaklaşık 16 V (doğru ölçüm bölgesi)Yaklaşık 21 V
Kaynağın eksisi ile Arduino'nun GND'si mutlaka birbirine bağlı olmalıdır; ortak toprak olmadan ölçülen gerilimin bir referansı kalmaz ve değerler anlamsızca oynar (ayrıntılar için GND nedir? yazısına bak). Dirençleri ters takmak da tehlikelidir: 10 kΩ üstte, 22 kΩ altta olursa 12 V'un 8,25 V'u pine gider. Devreyi mikrodenetleyiciye bağlamadan önce orta noktayı multimetreyle ölç.
C++ (Arduino IDE)
1// 12 V akü gerilimini gerilim bölücüyle ölçme / Measuring a 12 V battery with a voltage divider
2// Kaynak + -> 22k (R1) -> A0 -> 10k (R2) -> GND / Source + -> 22k (R1) -> A0 -> 10k (R2) -> GND
3// Kaynağın eksisi Arduino GND'sine bağlı / Source minus is tied to the Arduino GND
4const int VIN_PIN = A0;
5const float VREF = 5.0;      // 5V pininde ölçtüğün gerilim / voltage you measured on the 5V pin
6const float R1 = 22000.0;    // üst direnç (ohm) / top resistor (ohms)
7const float R2 = 10000.0;    // alt direnç (ohm) / bottom resistor (ohms)
8const float CAL = 1.000;     // kalibrasyon: gerçek / okunan / calibration: real / measured
9const float LOW_V = 11.8;    // düşük akü eşiği (V) / low battery threshold (V)
10
11float readInputVoltage() {
12  analogRead(VIN_PIN);                        // ilk okumayı at / discard the first reading
13  long sum = 0;
14  for (int i = 0; i < 16; i++) {              // 16 ölçümün ortalaması / average of 16 readings
15    sum += analogRead(VIN_PIN);
16    delay(2);
17  }
18  float vPin = (sum / 16.0) * VREF / 1024.0;  // pindeki gerilim / voltage at the pin
19  return vPin * (R1 + R2) / R2 * CAL;         // bölücüden önceki gerilim / voltage before the divider
20}
21
22void setup() {
23  Serial.begin(9600);
24  pinMode(LED_BUILTIN, OUTPUT);
25}
26
27void loop() {
28  float v = readInputVoltage();
29  Serial.print(F("Giris / Input: "));
30  Serial.print(v, 2);
31  Serial.println(F(" V"));
32  digitalWrite(LED_BUILTIN, v < LOW_V ? HIGH : LOW);  // akü zayıfsa LED yanar / LED on when the battery is low
33  delay(1000);
34}

Kod, ADC'nin örnekleme kondansatörü otursun diye ilk okumayı atar, ardından 16 ölçümün ortalamasını alarak gürültüyü azaltır. Okunan sayı önce pindeki gerilime çevrilir (ATmega328P'nin veri sayfasına göre ADC = Vin × 1024 / Vref olduğu için 1024'e bölüyoruz), sonra (R1 + R2) / R2 = 3,2 ile çarpılarak bölücüden önceki gerilim bulunur. En büyük hata kaynağı Vref'tir: USB'den beslenen bir Uno'nun 5V pini çoğu zaman 4,7–5,1 V arasındadır. Bu yüzden 5V pinini multimetreyle ölçüp VREF'e yaz; ardından akünün gerçek gerilimini multimetreyle ölç, Serial Monitor'deki değerle karşılaştır ve CAL = gerçek / okunan katsayısını koda gir. Bu tek adım Vref ve direnç toleransı hatalarını birlikte düzeltir. Bölücüyü cihazın açma/kapama anahtarından sonra bağlarsan cihaz kapalıyken akım çekmez; 0,375 mA günde yaklaşık 9 mAh eder, bu bir otomobil aküsü için önemsizdir ama küçük bir pilde hissedilir. Farklı kaynaklar için uygun direnç çiftleri şöyle:

Ölçülecek kaynakGerilim aralığıArduino Uno (5 V): R1 + R2ESP32 / Pico (3,3 V): R1 + R2
Tek hücre Li-ion / LiPo (1S)3,0–4,2 VBölücü gerekmez (4,2 V < 5 V)100 kΩ + 100 kΩ → en fazla 2,10 V
2S Li-ion paket6,0–8,4 V10 kΩ + 10 kΩ → en fazla 4,20 V100 kΩ + 33 kΩ → en fazla 2,08 V
3S LiPo paket9,0–12,6 V22 kΩ + 10 kΩ → en fazla 3,94 V56 kΩ + 10 kΩ → en fazla 1,91 V
12 V kurşun asit akü10,5–14,4 V22 kΩ + 10 kΩ → en fazla 4,50 V56 kΩ + 10 kΩ → en fazla 2,18 V
24 V sistem21–29 V56 kΩ + 10 kΩ → en fazla 4,39 V120 kΩ + 10 kΩ → en fazla 2,23 V

ESP32 ile gerilim ölçme

ESP32'de ADC 12 bittir (0–4095), ama iki önemli farkı vardır. Birincisi, Wi-Fi açıkken ADC2 pinleri okunamaz; bölücüyü mutlaka ADC1'e ait GPIO 32–39'dan birine bağla (GPIO 34–39 yalnızca giriş olarak çalışır ve bu iş için idealdir). İkincisi, ADC uçlarda doğrusal değildir: Espressif, varsayılan 11 dB zayıflatmada en doğru ölçüm aralığı olarak yaklaşık 150–2450 mV'u önerir. Pin 3,1 V civarına kadar bir değer gösterse de bu bölgede hata büyür. Bu yüzden 56 kΩ + 10 kΩ'luk bölücüyü seçtik: 14,4 V pine 2,18 V olarak ulaşır ve doğru bölgede kalır. Ham analogRead() yerine, yongaya üretimde yazılan kalibrasyon verisini kullanarak doğrudan milivolt döndüren analogReadMilliVolts() fonksiyonunu kullanıyoruz:

C++ (Arduino IDE)
1// ESP32: 56k + 10k bölücüyle 12 V ölçme / ESP32: measuring 12 V with a 56k + 10k divider
2const int VIN_PIN = 34;        // ADC1_CH6, Wi-Fi açıkken de çalışır / ADC1_CH6, works with Wi-Fi on
3const float R1 = 56000.0;      // üst direnç (ohm) / top resistor (ohms)
4const float R2 = 10000.0;      // alt direnç (ohm) / bottom resistor (ohms)
5const float CAL = 1.000;       // multimetreyle ayarla / tune with a multimeter
6
7void setup() {
8  Serial.begin(115200);
9  analogReadResolution(12);    // 0-4095 (varsayılan / default)
10}
11
12void loop() {
13  uint32_t mv = 0;
14  for (int i = 0; i < 32; i++) {
15    mv += analogReadMilliVolts(VIN_PIN);     // kalibre edilmiş milivolt / calibrated millivolts
16  }
17  float vPin = mv / 32.0 / 1000.0;           // pindeki gerilim (V) / voltage at the pin (V)
18  float vIn = vPin * (R1 + R2) / R2 * CAL;   // bölücüden önceki gerilim / voltage before the divider
19  Serial.printf("Pin: %.3f V  Giris / Input: %.2f V\n", vPin, vIn);
20  delay(1000);
21}

Raspberry Pi Pico ile gerilim ölçme (MicroPython)

Raspberry Pi Pico'da analog girişler GP26, GP27 ve GP28'dir (ADC0–ADC2). MicroPython'daki read_u16() fonksiyonu 12 bitlik ölçümü 0–65535 aralığına ölçekler; referans ise kartın 3,3 V'undan gelen ADC_VREF'tir. Pico'nun ADC'si 3,3 V'a kadar ölçebildiği için 56 kΩ + 10 kΩ ile yaklaşık 21 V'a kadar çıkabilirsin. İlginç bir ayrıntı: Pico'nun kendisi de bir gerilim bölücü kullanır. Kart üzerindeki bölücü VSYS besleme gerilimini üçe böler ve GP29'a (ADC3) bağlar; ADC(29) ile okuduğun gerilimi 3 ile çarparak kartın besleme gerilimini görebilirsin (Pico W'de GP29 kablosuz yongayla paylaşıldığı için bu yöntem doğrudan çalışmaz).

MicroPython
1from machine import ADC
2import time
3
4adc = ADC(26)            # GP26 = ADC0 (pin 31)
5VREF = 3.3               # ADC_VREF; multimetreyle ölçüp düzelt / measure and correct with a multimeter
6R1 = 56000               # üst direnç (ohm) / top resistor (ohms)
7R2 = 10000               # alt direnç (ohm) / bottom resistor (ohms)
8CAL = 1.000              # kalibrasyon katsayısı / calibration factor
9
10
11def read_input_voltage(samples=32):
12    total = 0
13    for _ in range(samples):
14        total += adc.read_u16()                  # 0-65535
15    v_pin = total / samples * VREF / 65535       # pindeki gerilim / voltage at the pin
16    return v_pin * (R1 + R2) / R2 * CAL          # bölücüden önceki gerilim / voltage before the divider
17
18
19while True:
20    v_in = read_input_voltage()
21    print("Giris / Input: {:.2f} V".format(v_in))
22    time.sleep(1)

5 V sinyali 3,3 V'a indirme (ESP32 ve Pico için)

ESP32 ve Pico'nun pinleri 5 V'a dayanıklı değildir. HC-SR04'ün ECHO çıkışı, bir Arduino Uno'nun TX pini ya da 5 V ile beslenen bir modülün dijital çıkışı bu kartlara doğrudan bağlanırsa girişteki koruma diyotları zorlanır ve pin zamanla bozulabilir. Tek yönlü sinyallerde en ucuz çözüm bir gerilim bölücüdür. Hedef, 3,3 V'u aşmayan ama kartın HIGH olarak algılayacağı kadar yüksek bir gerilimdir: ESP32, besleme geriliminin %75'ini (yaklaşık 2,5 V), Pico'daki RP2040 ise 2,0 V'u HIGH için alt sınır kabul eder. Bu yüzden 3,0–3,3 V arası bir çıkış iki kart için de rahat bir paydır. HC-SR04 mesafe sensörü yazısında ECHO pinini 3,3 V'luk kartlara bağlarken önerilen yöntem de budur.

R1 (sinyal tarafı)R2 (GND tarafı)5 V girişte çıkışÇıkış direnciDeğerlendirme
1 kΩ2 kΩ (iki 1 kΩ seri)3,33 V667 ΩKlasik seçim; hızlı sinyallere de uygun
1,2 kΩ2,2 kΩ3,24 V776 ΩStandart E12 değerleriyle 3,3 V'un hemen altı
10 kΩ20 kΩ3,33 V6,7 kΩAz akım çeker; UART ve HC-SR04 için yeterli
2,2 kΩ3,3 kΩ3,00 V1,3 kΩEn güvenli pay; iki kart da HIGH olarak okur
4,7 kΩ10 kΩ3,40 V3,2 kΩSınırda; 5 V hattı 5,25 V'a çıkarsa 3,57 V olur, önerilmez

Bölücü, pinin kendi kapasitansıyla birlikte küçük bir RC filtre oluşturur. 10 kΩ + 20 kΩ'luk bölücünün 6,7 kΩ'luk çıkış direnci, pin ve breadboard'un yaklaşık 15 pF'lık kapasitansıyla 100 ns civarında bir zaman sabiti verir; 115200 baud'luk bir UART (bit süresi 8,7 µs) bundan etkilenmez, ama birkaç MHz'lik SPI sinyallerinin kenarları yuvarlanır. Hızlı hatlarda 1 kΩ + 2 kΩ'u tercih et. Bölücünün yalnızca tek yönde, yüksek gerilimden alçak gerilime doğru çalıştığını da unutma. Ters yönde çoğu zaman bir şey yapman gerekmez: Arduino Uno 3,0 V'un üstünü HIGH sayar, bu yüzden ESP32'nin 3,3 V'luk çıkışını küçük bir payla da olsa okuyabilir. I2C gibi iki yönlü hatlarda ise bölücü işe yaramaz; orada MOSFET'li bir lojik seviye dönüştürücü kullanılır.

LDR ve NTC'yi gerilim bölücüyle okumak

LDR (foto direnç) ışık sensörü
LDR'nin direnci ışıkla değişir; bir sabit dirençle gerilim bölücü kurduğunda bu değişim Arduino'nun okuyabileceği bir gerilime dönüşür.

Mikrodenetleyiciler direnci doğrudan ölçemez, yalnızca gerilim ölçer. LDR ve NTC gibi direnci değişen sensörleri bir sabit dirençle seri bağlayıp gerilim bölücü kurduğunda, direnç değişimi orta noktada gerilim değişimine dönüşür. Sabit direncin değeri ölçümün hassasiyetini belirler. En büyük gerilim farkını almak için sabit direnç, sensörün ölçmek istediğin aralıktaki en küçük ve en büyük dirençlerinin geometrik ortalaması olmalıdır: R = √(Rmin × Rmax). Örneğin aydınlıkta 1 kΩ, loş ortamda 100 kΩ olan bir LDR için √(1 k × 100 k) = 10 kΩ çıkar. 5 V'ta 10 kΩ ile çıkış 4,09 V'luk bir aralıkta değişirken 1 kΩ ya da 100 kΩ ile bu aralık 2,45 V'a iner. Başlangıç setlerindeki 10 kΩ'un sebebi budur. Bir avantaj daha var: hem bölücü hem ADC aynı 5 V'tan beslendiği için hesaplanan direnç besleme geriliminden bağımsızdır (oransal ölçüm); bu yüzden aşağıdaki kodda Vref değerine bile gerek yoktur.

C++ (Arduino IDE)
1// LDR ve NTC'yi gerilim bölücüyle okuma / Reading an LDR and an NTC with voltage dividers
2// A0: 5V -> LDR -> A0 -> 10k -> GND
3// A1: 5V -> 10k -> A1 -> NTC 10k (B = 3950) -> GND
4const float R_FIXED = 10000.0;  // sabit dirençler (ohm) / fixed resistors (ohms)
5const float R0 = 10000.0;       // NTC'nin 25 °C direnci / NTC resistance at 25 °C
6const float BETA = 3950.0;      // NTC B katsayısı / NTC beta coefficient
7const float T0 = 298.15;        // 25 °C kelvin cinsinden / 25 °C in kelvin
8
9void setup() {
10  Serial.begin(9600);
11}
12
13void loop() {
14  analogRead(A0);                         // kanal değişti, ilk okumayı at / channel changed, discard first reading
15  int ldrRaw = analogRead(A0);
16  analogRead(A1);
17  int ntcRaw = analogRead(A1);
18  if (ldrRaw < 1) ldrRaw = 1;             // sıfıra bölmeyi önle / avoid division by zero
19
20  // Oransal ölçüm: besleme gerilimi hesaptan düşer / ratiometric: the supply voltage cancels out
21  float rLdr = R_FIXED * (1024.0 / ldrRaw - 1.0);
22  float rNtc = R_FIXED * ntcRaw / (1024.0 - ntcRaw);
23  float tempC = 1.0 / (1.0 / T0 + log(rNtc / R0) / BETA) - 273.15;  // Beta denklemi / Beta equation
24
25  Serial.print(F("LDR: "));
26  Serial.print(rLdr / 1000.0, 1);
27  Serial.print(F(" kOhm   NTC: "));
28  Serial.print(rNtc / 1000.0, 2);
29  Serial.print(F(" kOhm   "));
30  Serial.print(tempC, 1);
31  Serial.println(F(" C"));
32  delay(1000);
33}

Kodda LDR üstte olduğu için ışık arttıkça okunan değer de artar; LDR'nin direnci R = 10 kΩ × (1024 / ADC − 1) ile bulunur. NTC ise altta durur ve sıcaklık arttıkça direnci, dolayısıyla okunan gerilim düşer. 25 °C'de 10 kΩ olan ve B katsayısı 3950 olan yaygın NTC'ler için sıcaklık Beta denklemiyle hesaplanır: 1 / T = 1 / T0 + ln(R / R0) / B (sıcaklıklar kelvin cinsinden). Sabit direnç NTC'nin 25 °C'deki direnciyle aynı seçildiği için oda sıcaklığında çıkış besleme geriliminin tam yarısıdır ve hassasiyet en yüksek bu bölgededir. Geniş bir sıcaklık aralığında daha yüksek doğruluk için Steinhart-Hart denklemini ve NTC'nin kendi kendini ısıtmasını NTC termistör yazısında ele alıyoruz.

Gerilim bölücü ile proje fikirleri

  • Akü izleme ve düşük pil alarmı: Karavan ya da güneş enerjisi sistemindeki aküyü izle, gerilim 11,8 V'un altına inince buzzer çalsın; pilli projelerde besleme seçenekleri için Arduino'yu pille çalıştırma yazısına bak.
  • Dijital voltmetre: Ölçtüğün gerilimi LCD ya da OLED ekranda göster; adımlar Arduino voltmetre yapımı yazısında.
  • Otomatik gece lambası: LDR'li bir bölücüyle ortam kararınca LED'leri ya da bir röleyi devreye al.
  • Güneş takip sistemi: İki LDR bölücüsünün gerilimlerini karşılaştırarak paneli ışığa çevir (güneş takip sistemi).
  • Tek pinde beş buton: Farklı dirençlerden bir merdiven kur, hangi butona basıldığını analog değerden anla (buton bağlantısı).
  • Termostat: NTC bölücüsüyle sıcaklığı ölç, belirlediğin sıcaklıkta fanı ya da ısıtıcıyı bir röleyle aç.

Sık yapılan hatalar ve çözümleri

BelirtiOlası sebepÇözüm
Değerler anlamsız ve sürekli oynuyorKaynağın eksisi Arduino'nun GND'sine bağlı değilOrtak GND bağla
Pindeki gerilim beklenenden çok yüksekR1 ile R2 yer değiştirmişBüyük direnç kaynak tarafında (üstte) olmalı; bağlamadan önce multimetreyle ölç
Ölçüm gerçek değerden %5–10 farklı%5 toleranslı dirençler ya da Vref 5,00 V değil%1 metal film direnç kullan, kodda VREF ve CAL ile kalibre et
Modül bağlanınca çıkış düşüyorYük etkisi: yük R2'ye paralelYükü Rth'nin en az 100 katı yap, dirençleri küçült ya da op-amp tampon kullan
Yüksek dirençli bölücüde değer kayıyorADC'nin örnekleme kondansatörü dolamıyorPine 100 nF kondansatör ekle, ilk okumayı at
ESP32'de Wi-Fi açılınca okuma çalışmıyorBölücü bir ADC2 pinine bağlıGPIO 32–39 (ADC1) kullan
Pil, cihaz kapalıyken de boşalıyorBölücü pilden sürekli akım çekiyorBölücüyü anahtardan sonra bağla, yüksek değerli dirençler seç
Bölücüden beslenen modül çalışmıyorBölücü bir güç kaynağı değildir7805, AMS1117 ya da LM2596 gibi bir regülatör kullan
I2C hattı bölücüyle çalışmıyorBölücü tek yönlüdür, I2C iki yönlüdürMOSFET'li lojik seviye dönüştürücü kullan
Yeni bir bölücü kurduğunda onu mikrodenetleyiciye bağlamadan önce kaynağı aç ve orta noktadaki gerilimi multimetreyle ölç. Değer, gerilim bölücü hesaplayıcısının verdiği sonuçla birkaç yüzde içinde uyuşuyorsa kabloyu analog pine taşı. Bu on saniyelik kontrol, ters takılmış bir direncin kartını yakmasını önler.

Gerilim bölücü yalnızca iki direnç ve tek bir formülden ibarettir, ama ölçüm yapan hemen her projenin bir yerinde karşına çıkar. Oranı formülle, mutlak değerleri akım ile çıkış direnci arasındaki dengeyle seçer, yük etkisini hesaba katar ve sonucu multimetreyle kalibre edersen güvenilir ölçümler alırsın. Analog okumanın arka planını ADC nedir? yazısında okuyabilirsin. BlueGrays uygulamasında LDR ile ışık şiddeti okuma, LDR'li gece lambası, LCD ekranlı dijital voltmetre, NTC ile sıcaklık ölçümü ve ESP32 ile HC-SR04 mesafe ölçer gibi projeleri devre şemaları ve kodlarıyla adım adım bulabilirsin.

Sıkça sorulan sorular

Gerilim bölücü formülü nedir?

Çıkış gerilimi Vout = Vin × R2 / (R1 + R2) ile hesaplanır; R1 kaynak tarafındaki, R2 toprak tarafındaki dirençtir. Örneğin 9 V'u 10 kΩ ve 10 kΩ ile bölersen 4,5 V elde edersin. Formül yalnızca çıkıştan akım çekilmediğinde tam doğrudur.

Gerilim bölücü ile 12 V 5 V'a düşürülür mü?

Ölçüm ya da sinyal için evet: 22 kΩ ve 10 kΩ ile 12 V'u 3,75 V'a indirip Arduino'nun analog girişiyle okuyabilirsin. Bir kartı ya da modülü beslemek için hayır; yük akım çektiği anda çıkış gerilimi çöker. Besleme için 7805 gibi bir regülatör ya da LM2596 gibi bir buck dönüştürücü kullan.

5 V'u 3,3 V'a düşürmek için hangi dirençler kullanılır?

En yaygın çift sinyal tarafında 1 kΩ, GND tarafında 2 kΩ'dur ve 5 V'u 3,33 V'a indirir. Aynı oranı 10 kΩ ve 20 kΩ ile de elde edebilirsin, ama hızlı sinyallerde küçük değerler daha iyidir. Elinde 2 kΩ yoksa 2,2 kΩ ve 3,3 kΩ ile 3,0 V elde edersin; ESP32 ve Pico bunu yine HIGH olarak okur.

Gerilim bölücüde direnç değerleri nasıl seçilir?

Önce en yüksek giriş gerilimine ve pinin sınırına göre oranı belirle, sonra R2'yi (genellikle 10 kΩ) seçip R1'i hesapla. Toplam direnç küçükse bölücü fazla akım harcar, çok büyükse yük etkisi ve ADC hatası artar. Arduino'da çıkış direncinin 10 kΩ'un altında olması, pilli projelerde ise toplam direncin 100 kΩ civarında olması iyi bir denge sağlar.

Arduino ile 12 V nasıl ölçülür?

Akünün artısını 22 kΩ üzerinden A0'a, A0'ı 10 kΩ üzerinden GND'ye, akünün eksisini de Arduino'nun GND'sine bağla. Kodda analogRead() değerini 5 / 1024 ile çarparak pindeki gerilimi, bunu da 3,2 ile çarparak akü gerilimini bul. Bu bölücüyle 16 V'a kadar güvenle ölçebilirsin.

Gerilim bölücü pili boşaltır mı?

Evet, bölücü sürekli I = Vin / (R1 + R2) kadar akım çeker. 32 kΩ'luk bir bölücü 12 V'ta 0,375 mA, yani günde yaklaşık 9 mAh harcar; bu otomobil aküsü için önemsiz, küçük bir pil için önemlidir. Pilli projelerde 100 kΩ civarında dirençler ve analog pine 100 nF kondansatör kullan ya da bölücüyü cihazın anahtarından sonra bağla.

Tüm projeleri gör
Ldr İle Işık Şiddeti Okuma
#11Başlangıç

Ldr İle Işık Şiddeti Okuma

Odanın ne kadar aydınlık olduğunu sayıyla görmek ister misin? Işığa duyarlı küçük bir parça olan LDR ortam ışığını ölçer ve Arduino bu değeri yarım saniyede bir bilgisayar ekranına yazar. Elinle üstün

4.6(81)
138
Ldr İle Gece Lambası
#12Başlangıç

Ldr İle Gece Lambası

Hava karardığında kendiliğinden yanan, sabah olunca sönen küçük bir gece lambası. Işık sensörü odadaki aydınlığı ölçer; Arduino ortam yeterince karanlıksa LED'i yakar, aydınlanınca söndürür. Sokak lam

4.8(102)
204
ESP32 LDR Modülü ile Işık Şiddeti Okuma
#113Başlangıç

ESP32 LDR Modülü ile Işık Şiddeti Okuma

LDR modülünün ham ADC değerini ve karanlık/aydınlık referanslarına göre hesaplanan göreli ışık yüzdesini Serial Monitor'da gerçek zamanlı izleme. Bu yüzde lux ölçümü değildir. Modülün kalibrasyon mantığını öğretir. Proje 10'un öncesinde yapılması ideal; çünkü eşik değerini belirlemek için kullanılır.

4.6(36)
55
LCD Ekran ile Dijital Voltmetre
#56Orta
Premium

LCD Ekran ile Dijital Voltmetre

Pilin ya da adaptörün ne kadar gerilim verdiğini kendi yaptığın ölçü aletiyle öğren. İki dirençten oluşan bir bölücü yüksek gerilimi kartın okuyabileceği seviyeye indirir, Arduino da gerçek değeri hes

4.5(27)
36
NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü
#44Başlangıç
Premium

NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü

Ortamın sıcaklığını küçük bir boncuk gibi görünen sensörle ölç. NTC adlı bu parça ısındıkça elektriği daha kolay geçirir; Arduino bu değişimi okuyup bir formülle santigrat dereceye çevirir ve iki satı

4.5(33)
44
ESP32 LDR ile Gece Lambası
#112Başlangıç
Premium

ESP32 LDR ile Gece Lambası

Karanlıkta LED'in otomatik yandığı, aydınlıkta söndüğü gece lambası. LDR Sensör Modülünün D0 (digital out) pini kullanılır — modülün üzerindeki küçük potansiyometre ile karanlık eşiği ayarlanır, modül kendisi HIGH/LOW çıkış üretir. ESP32 sadece digitalRead() ile bu sinyali okur, kod çok basit.

4.6(17)
30
ESP32 HC-SR04 Ultrasonik Mesafe Ölçer
#116Orta

ESP32 HC-SR04 Ultrasonik Mesafe Ölçer

HC-SR04 ultrasonik sensör, gönderdiği ses dalgasının nesneye çarpıp geri dönme süresini (Time of Flight) ölçerek mesafe hesaplar. Bu projede ESP32 ile TRIG pinine 10 mikrosaniyelik darbe gönderip, ECHO pininden gelen yankı süresini pulseIn() ile okuyacağız. Hesaplanan mesafeyi cm cinsinden 16x2 I2C LCD'de göstereceğiz. HC-SR04 5V çalıştığı için ECHO pinine gerilim bölücü zorunludur — aksi halde ESP32'nin 3.3V GPIO'su zarar görür.

4.9(28)
45
ESP32 Potansiyometre ile LED Parlaklık (Analog → PWM)
#115Orta
Premium

ESP32 Potansiyometre ile LED Parlaklık (Analog → PWM)

Bu projede bir potansiyometre ile LED parlaklığını analog olarak kontrol ediyoruz. ESP32'nin ADC pini potansiyometreden gelen 0-3.3V gerilimi okur, ardından bu değer PWM (Pulse Width Modulation) sinyaline çevrilerek LED'e gönderilir. Böylece potansiyometreyi çevirdikçe LED kademeli olarak parlar ve söner. Arduino Core 3.0+ ile analogWrite() doğrudan kullanılabilir; ESP32-S2/S3'te ADC çözünürlüğü 12-bit'e sabitlenir.

4.5(19)
32