Arduino

Resistor Pull-up dan Pull-down: Fungsi, Nilai, dan Pull-up Internal Arduino/ESP32

Rangkaian ESP32 dengan tombol dan sensor

Resistor pull-up menarik pin input ke tegangan HIGH saat tidak ada sinyal, sedangkan pull-down menariknya ke LOW. Tanpa salah satunya, pin input "mengambang" (floating) dan membaca nilai acak. Nilai yang umum adalah 10 kΩ, dan Arduino maupun ESP32 sudah punya pull-up internal yang bisa diaktifkan dengan INPUT_PULLUP.

Apa itu pin floating?

Pin input mikrokontroler sangat sensitif. Kalau tidak tersambung ke apa pun, ia seperti antena kecil yang menangkap gangguan dari sekitar, termasuk dari jarimu yang mendekat. Hasilnya, digitalRead() berganti-ganti antara HIGH dan LOW tanpa sebab. Resistor pull-up atau pull-down memberi pin "posisi diam" yang pasti.

Pull-up vs pull-down

Pull-upPull-down
Resistor keVCCGND
Tombol keGNDVCC
Saat tombol tidak ditekanHIGHLOW
Saat tombol ditekanLOWHIGH

Pull-up lebih sering dipakai karena mikrokontroler umumnya menyediakan pull-up internal, dan tombol cukup disambung ke GND.

Memakai pull-up internal

const int TOMBOL = 4;

void setup() {
  pinMode(TOMBOL, INPUT_PULLUP);   // aktifkan pull-up internal
  Serial.begin(115200);
}

void loop() {
  if (digitalRead(TOMBOL) == LOW) {   // LOW = ditekan
    Serial.println("Tombol ditekan");
  }
}

Perhatikan logikanya terbalik: ditekan berarti LOW. Untuk menghindari pembacaan ganda karena pantulan kontak tombol, pelajari juga debounce tombol.

Berapa nilai resistornya?

  • 10 kΩ adalah nilai serbaguna untuk tombol dan input digital.
  • Terlalu kecil (misalnya 220 Ω) membuang arus saat tombol ditekan.
  • Terlalu besar (misalnya 1 MΩ) membuat pin kembali rawan gangguan, terutama dengan kabel panjang.
  • Pull-up internal nilainya puluhan kΩ, cukup untuk tombol di board, tapi untuk kabel panjang atau lingkungan berisik sebaiknya tambahkan resistor eksternal yang lebih kecil, misalnya 4,7–10 kΩ.

Catatan khusus ESP32

  • Pin GPIO34–39 adalah input saja dan tidak punya pull-up/pull-down internal. Pakai resistor eksternal.
  • Beberapa pin adalah strapping pin yang memengaruhi proses boot, sehingga pull-up atau pull-down eksternal di pin itu harus hati-hati. Baca pin ESP32 yang aman dipakai.

Pull-up di jalur I2C

Jalur I2C (SDA dan SCL) wajib punya pull-up karena outputnya open-drain. Nilai umum 4,7 kΩ ke tegangan logika. Banyak modul sensor sudah membawa pull-up sendiri, jadi kalau memasang banyak modul sekaligus, perhatikan pull-up yang terpasang paralel.

Kesimpulan

Setiap input digital butuh posisi diam yang pasti. Pakai INPUT_PULLUP untuk tombol sederhana, resistor eksternal 4,7–10 kΩ untuk kabel panjang atau pin tanpa pull-up internal, dan jangan lupa pull-up di jalur I2C. Praktikkan langsung lewat Proyek Siap Pakai SALTECH.

Pertanyaan yang sering muncul

Apakah INPUT_PULLUP selalu cukup?

Untuk tombol di dekat board, umumnya cukup. Untuk kabel panjang atau lingkungan berisik, tambahkan resistor eksternal dengan nilai lebih kecil.

Kenapa tombol saya terbaca berkali-kali?

Itu efek pantulan kontak mekanis (bounce), bukan masalah pull-up. Atasi dengan debounce di program.

Tanya via WhatsApp