Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

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.
Potansiyometre, mekanik olarak ayarlanabilen değişken bir dirençtir. Üç bacağı bulunur:
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.

ESP32’de analog okuma işlemi yalnızca ADC (Analog-to-Digital Converter) destekleyen pinlerde yapılabilir. Bu projede kullanılan pin:
Ö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.
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.


Arduino IDE’yi açın ve aşağıdaki ayarları kontrol edin:
analogSetAttenuation() kullanılırAş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);
}
map() fonksiyonu yalnızca tam sayılarla çalışır.floatMap() fonksiyonu, ondalıklı değerler için lineer ölçeklendirme yapar.(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_minSerial.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.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.Kod yüklendikten sonra:
Temel işlevi tamamladıktan sonra projeyi aşağıdaki şekilde genişletebilirsiniz:
analogReadResolution() ile çözünürlüğü 9-12 bit arasında ayarlayın.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.