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-up | Pull-down | |
|---|---|---|
| Resistor ke | VCC | GND |
| Tombol ke | GND | VCC |
| Saat tombol tidak ditekan | HIGH | LOW |
| Saat tombol ditekan | LOW | HIGH |
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.
