Materi 7 dari 12 · Stasiun 3
ADC: membaca sensor analog
Setelah materi ini, kamu bisa:
- Bisa menjelaskan ADC sebagai pengubah tegangan menjadi angka.
- Bisa mengubah hasil analogRead() menjadi volt, lalu menjadi besaran fisik seperti suhu.
- Bisa menjelaskan keterbatasan ADC ESP32 dan pentingnya kalibrasi.
Sebaiknya sudah belajar:
Dari 0 dan 1 ke angka bertingkat
digitalRead hanya tahu dua keadaan. Tapi pembagi tegangan dengan termistor (lihat Sensor analog: LDR dan termistor) menghasilkan tegangan yang berubah halus, misalnya 1,47 V atau 1,65 V. Untuk membacanya, mikrokontroler butuh ADC.
ADC (Analog-to-Digital Converter) mengukur tegangan lalu memberikan angka.
ADC ESP32
Ketuk satu per satu.
- 12 bit
- Hasilnya bilangan bulat 0 sampai 4095. ADC ESP32 memakai 12 bit, dan 12 bit bisa menyimpan 2¹² = 4.096 nilai berbeda (0 sampai 4095).
- Rentang tegangan
- Dengan pengaturan bawaan Arduino-ESP32, sekitar 0 V sampai sekitar 3,1–3,3 V dipetakan ke 0–4095.
- analogRead(pin)
- Fungsi untuk membaca. Pakai pin ADC1 (GPIO 32–39) supaya tetap bekerja saat WiFi aktif.
- Tidak lurus sempurna
- Di dekat 0 V dan dekat batas atas, hasilnya kurang akurat. Dokumentasi Espressif (pembuat ESP32) menyarankan rentang sekitar 0,15–2,45 V untuk hasil terbaik pada ESP32 klasik, jadi rancang pembagi teganganmu supaya sinyal berada di tengah.
Tebak dulu
- analogRead menghasilkan 2048. Berapa kira-kira tegangannya (anggap 4095 = 3,3 V)?
- 2048 V
- Sekitar 1,65 V
- Sekitar 3,3 V
Jawaban
Sekitar 1,65 V. 2048 kira-kira setengah dari 4095, jadi tegangannya kira-kira setengah dari 3,3 V. Angka ADC bukan volt.
Termistor, pembagi, dan ADC
Termistor NTC 10 kΩ di bawah, resistor 10 kΩ di atas, Vin 3,3 V. Geser suhunya dan perhatikan angka analogRead. Kartu terbuka setelah kamu mencoba tiga rentang suhu.
Simulasi interaktif tersedia saat JavaScript aktif.
Makin panas, angka ADC makin kecil, karena hambatan NTC turun. Pada 25 °C angkanya sekitar 2048. Program harus membalik rantai ini, dari angka ADC ke volt, ke hambatan, lalu ke suhu.
Dari angka ke suhu
Untuk ESP32, ada juga analogReadMilliVolts() yang sudah memakai data kalibrasi pabrik dan memberi hasil dalam milivolt.
const int PIN_NTC = 34;
void loop() {
int adc = analogRead(PIN_NTC);
float v = adc * 3.3 / 4095.0;
float r = 10000.0 * v / (3.3 - v);
float t = 1.0 / (1.0 / 298.15 + log(r / 10000.0) / 3950.0) - 273.15;
Serial.println(t);
delay(1000);
} - Baris 4: Angka ADC → volt. Pakai 4095.0 (desimal) supaya pembagiannya tidak dibulatkan (lihat [[p2]]).
- Baris 5: Volt → hambatan termistor, dari rumus pembagi tegangan (lihat [[k2]]) yang diubah (lihat [[m3]]).
- Baris 6: Hambatan → suhu dengan rumus nilai B (3950) dari lembar data. Hasilnya °C.
Hitung sendiri
Anggap 4095 = 3,3 V dan hubungannya lurus.
- analogRead = 1241. Berapa volt?
Jawaban
1 V. 1241 × 3,3 ÷ 4095 ≈ 1,00 V.
- Tegangan 2,5 V. Berapa kira-kira analogRead?
Jawaban
3102 angka. 2,5 ÷ 3,3 × 4095 ≈ 3102.
- Sensor suhu analog memberi 10 mV per °C (0 V pada 0 °C). ADC membaca 0,31 V. Berapa suhunya?
Jawaban
31 °C. 0,31 V = 310 mV. 310 ÷ 10 = 31 °C. (Sensor seperti LM35 bekerja dengan pola ini.)
Benar atau salah?
- "Nilai ADC adalah tegangan dalam volt."
- Benar
- Salah
Jawaban
Salah. Nilai ADC adalah angka 0–4095. Untuk mendapat volt, kalikan dengan tegangan acuan lalu bagi 4095.
- "Membaca sensor analog di GPIO 25 tetap aman walau WiFi aktif."
- Benar
- Salah
Jawaban
Salah. GPIO 25 adalah pin ADC2, yang tidak bisa dipakai saat WiFi aktif di ESP32 klasik. Pakai pin ADC1 (GPIO 32–39).
- "Hasil ADC sebaiknya dibandingkan dengan termometer yang dipercaya untuk kalibrasi."
- Benar
- Salah
Jawaban
Benar. ADC, resistor, dan termistor punya toleransi. Kalibrasi menyesuaikan rumusmu dengan kenyataan.
Selesai
- ADC mengubah tegangan menjadi angka. ESP32 memberi 0–4095.
- Rantai konversi: angka ADC → volt → hambatan → besaran fisik.
- Pakai pin ADC1 bersama WiFi, dan kalibrasi hasilnya.
Pancingan
Sekarang papanmu bisa membaca suhu. Kalau ia juga bisa mengatur kecerahan LED atau kecepatan kipas, bukan hanya nyala-mati? Itu PWM: kecerahan dan kecepatan. Kalau ingin mengirim suhu ke HP, itu stasiun 4.
Berikutnya
Referensi
- Espressif, ESP32 Series Datasheet, bagian ADC (resolusi, atenuasi, ketidaklinearan).
- Dokumentasi Arduino-ESP32, ADC API (analogRead, analogReadMilliVolts, analogSetAttenuation).
- Lembar data termistor NTC 10 kΩ B3950.
Draf AI. Belum direview manusia. Rentang tegangan ADC bergantung pada atenuasi dan versi core Arduino-ESP32, wajib dicek.
Kode materi p6 · versi 0.1 · 2026-10-06