ESP32 ile Potansiyometre ile Voltaj Ölçme

Bu rehber, ESP32 geliştirme kartı kullanarak bir potansiyometreden analog değer okuma ve bu değeri voltaj cinsine dönüştürme işlemini adım adım açıklar. Potansiyometre konumuna göre değişen analog sinyalin ADC (Analog-to-Digital Converter) ile okunup Serial Monitor üzerinde görüntülenmesi prensibine dayanan bu proje, analog giriş okuma ve veri işleme konularını öğrenmek için temel bir uygulamadır.

Adım 1 – Potansiyometreyi Tanıyın

Potansiyometre, mekanik olarak ayarlanabilen değişken bir dirençtir. Üç bacağı bulunur:

  • VCC (3.3V): Potansiyometrenin bir uç bacağına bağlanır.
  • GND: Potansiyometrenin diğer uç bacağına bağlanır.
  • Sinyal (Wiper): Ortadaki ayarlanabilir bacak, analog giriş pinine bağlanır.

Mil çevrildikçe, sinyal bacağı ile GND/VCC arasındaki direnç oranı değişir ve bu sayede 0V ile 3.3V arasında değişen bir analog voltaj üretilir.

Adım 2 – GPIO Pin Atamaları

ESP32’de analog okuma işlemi yalnızca ADC (Analog-to-Digital Converter) destekleyen pinlerde yapılabilir. Bu projede kullanılan pin:

  • GPIO 36 (VP/ADC1_CH0): Potansiyometre sinyal ucu için analog giriş pini

Önemli: ESP32’de GPIO 34, 35, 36 ve 39 pinleri yalnızca giriş (input) olarak kullanılabilir ve dahili pull-up/pull-down dirençleri bulunmaz.

Adım 3 – Devre Bağlantısı

Potansiyometre Bağlantısı:

  1. Potansiyometrenin bir uç bacağını ESP32 3.3V pinine bağlayın.
  2. Potansiyometrenin diğer uç bacağını GND (Toprak) pinine bağlayın.
  3. Potansiyometrenin orta (sinyal) bacağını ESP32 GPIO 36 pinine bağlayın.

Not: Potansiyometrenin uç bacaklarının yerleri değiştirilebilir; bu durumda mil çevirme yönüne göre voltaj artışı/azalışı tersine dönecektir.

Adım 4 – Arduino IDE Hazırlığı

Arduino IDE’yi açın ve aşağıdaki ayarları kontrol edin:

  • Board: ESP32 geliştirme kartınızın modeli
  • Port: ESP32’nin bağlı olduğu COM portu
  • ESP32 Paketi: Board Manager’dan “esp32” paketinin yüklü olduğundan emin olun
  • ADC Ayarları: ESP32 ADC’si varsayılan olarak 0-1V aralığında en iyi çözünürlüğe sahiptir; daha geniş aralık için analogSetAttenuation() kullanılır

Adım 5 – Kodu Yükleyin

Aşağıdaki kodu Arduino IDE editörüne yapıştırın ve ESP32 kartınıza yükleyin:

/*
 * ESP32 Potansiyometre Okuma ve Voltaj Hesaplama Projesi
 * Potansiyometre GPIO36 (ADC1_CH0) pinine bağlıdır
 * ADC çözünürlüğü: 12-bit (0-4095)
 * Referans voltaj: 0V - 3.3V
 */

// Özel map fonksiyonu: float değerler için ölçeklendirme yapar
// x: dönüştürülecek değer
// in_min, in_max: giriş aralığı
// out_min, out_max: çıkış aralığı
float floatMap(float x, float in_min, float in_max, float out_min, float out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

// Kurulum fonksiyonu: reset atıldığında bir kez çalışır
void setup() {
  // Serial iletişim hızını 9600 baud olarak ayarla
  Serial.begin(9600);

  // ADC giriş zayıflatmasını 11 dB olarak ayarla
  // Bu ayar, ADC'nin ~3.3V'a kadar giriş voltajlarını okuyabilmesini sağlar
  // Varsayılan ayar (0 dB) yalnızca ~1V'a kadar doğru okuma yapar
  analogSetAttenuation(ADC_11db);
}

// Ana döngü fonksiyonu: sürekli tekrarlanır
void loop() {
  // GPIO36 pininden analog değeri oku (12-bit çözünürlük: 0-4095)
  int analogValue = analogRead(36);

  // Okunan analog değeri 0-4095 aralığından 0-3.3V aralığına dönüştür
  // floatMap fonksiyonu ile lineer ölçeklendirme yapılır
  float voltage = floatMap(analogValue, 0, 4095, 0, 3.3);

  // Analog değeri Serial Monitor'e yazdır
  Serial.print("Analog: ");      // "Analog: " etiketini ekrana yaz
  Serial.print(analogValue);     // Okunan ham analog değeri yaz
  Serial.print(", Voltage: ");   // ", Voltage: " etiketini ekrana yaz
  Serial.println(voltage);       // Hesaplanan voltaj değerini yaz ve satır sonu ekle

  // 1 saniye bekle (1000 milisaniye)
  // Bu gecikme, Serial Monitor'de okunabilir veri akışı sağlar
  delay(1000);
}

Kod Nasıl Çalışır

floatMap Fonksiyonu

  • Arduino’nun standart map() fonksiyonu yalnızca tam sayılarla çalışır.
  • floatMap() fonksiyonu, ondalıklı değerler için lineer ölçeklendirme yapar.
  • Formül: (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
  • Bu fonksiyon, 0-4095 aralığındaki ADC değerini 0.0-3.3 aralığındaki voltaj değerine dönüştürür.

Setup Fonksiyonu

  • Serial.begin(9600): Serial iletişim hızını 9600 baud olarak başlatır; veri aktarımı için gereklidir.
  • analogSetAttenuation(ADC_11db): ADC giriş zayıflatmasını 11 dB olarak ayarlar. Bu sayede ADC, 0V ile yaklaşık 3.3V arasındaki voltajları doğru şekilde okuyabilir. Varsayılan ayar (0 dB) yalnızca ~1V’a kadar güvenilir sonuç verir.

Loop Fonksiyonu

  • analogRead(36): GPIO 36 pininden 12-bit çözünürlükte analog değer okur (0-4095 arası).
  • floatMap(...): Okunan ham değeri voltaj cinsine dönüştürür.
  • Serial.print/println: Ham analog değer ve hesaplanan voltaj Serial Monitor’e yazdırılır.
  • delay(1000): Her okuma arasında 1 saniye bekleme sağlar; veri akışını düzenler.

Adım 6 – Test Edin

Kod yüklendikten sonra:

  1. Arduino IDE’de Serial Monitor’ü açın (9600 baud).
  2. Potansiyometre milini yavaşça çevirin.
  3. Serial Monitor’de “Analog: [değer], Voltage: [voltaj]” formatında güncellenen verileri gözlemleyin.
  4. Analog değer 0-4095 aralığında, voltaj değeri 0.0-3.3 aralığında değişmelidir.
  5. Değerler sabit kalıyorsa bağlantıları ve pin atamasını kontrol edin.

İsteğe Bağlı Geliştirmeler

Temel işlevi tamamladıktan sonra projeyi aşağıdaki şekilde genişletebilirsiniz:

  • LED Parlaklık Kontrolü: Potansiyometre değerini PWM ile bir LED’in parlaklığını ayarlamak için kullanın.
  • ADC Çözünürlük Değişimi: analogReadResolution() ile çözünürlüğü 9-12 bit arasında ayarlayın.
  • Ortalama Alma: Okuma değerlerinde oluşan gürültüyü azaltmak için birden fazla okumanın ortalamasını alın.
  • Eşik Değer Kontrolü: Belirli bir voltaj eşiği aşıldığında bir işlem tetikleyin (Örn: röle aktivasyonu).
  • Grafiksel Gösterim: Serial Plotter kullanarak voltaj değişimini gerçek zamanlı grafik olarak izleyin.

ESP32 Potansiyometre Projesi SSS

S: Analog değerler neden 0-4095 aralığında?
C: ESP32 ADC’si 12-bit çözünürlüğe sahiptir. 2^12 = 4096 farklı seviye (0-4095) mümkündür. Bu değer analogReadResolution() ile değiştirilebilir.

S: Voltaj değerleri neden tam olarak 3.3V’u göstermiyor?
C: ESP32 ADC’si mutlak doğruluk yerine göreceli ölçüm için tasarlanmıştır. Referans voltajı, sıcaklık ve donanım toleransları küçük sapmalara neden olabilir. Hassas ölçümler için harici referans veya kalibrasyon gerekebilir.

S: analogSetAttenuation(ADC_11db) ne işe yarar?
C: ADC giriş sinyalinin zayıflatılma seviyesini ayarlar. 11 dB ayarı, ADC’nin ~3.9V’a kadar voltajları okuyabilmesini sağlar. Daha düşük attenuasyon değerleri daha yüksek çözünürlük ancak daha düşük maksimum voltaj sunar.

S: GPIO 36 yerine başka bir pin kullanabilir miyim?
C: Evet, ADC1 kanalına ait GPIO 32, 33, 34, 35, 36, 39 pinleri analog giriş olarak kullanılabilir. Ancak GPIO 34, 35, 36 ve 39 yalnızca giriş modunu destekler; çıkış olarak kullanılamaz.

S: Serial Monitor’de değerler neden titriyor?
C: Analog sinyallerde gürültü, potansiyometre kalitesi veya güç kaynağı dalgalanmaları değerlerde küçük değişimlere neden olabilir. Yazılımsal ortalama alma veya donanımsal filtreleme (kapasitör) ile bu etki azaltılabilir.

S: Potansiyometre tam tersi yönde çalışıyor.
C: Potansiyometrenin VCC ve GND bağlantılarını değiştirerek yönü tersine çevirebilirsiniz. Alternatif olarak kodda floatMap(analogValue, 0, 4095, 3.3, 0) şeklinde çıkış aralığını ters tanımlayabilirsiniz.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir