Pada tutorial sebelumnya, kita sudah mempelajari cara menyalakan relay saat tombol ditekan dan mematikannya ketika tombol dilepaskan. Namun, pada banyak proyek Arduino, kita sering membutuhkan sistem yang bekerja seperti sakelar rumah, yaitu sekali tekan untuk menyalakan perangkat dan sekali tekan lagi untuk mematikannya. Konsep ini disebut sebagai toggle relay.
Dalam tutorial ini, kita akan mempelajari cara membuat tombol sebagai sakelar toggle relay menggunakan Arduino UNO. Dengan metode ini, relay tidak akan aktif hanya selama tombol ditekan, tetapi status relay akan berubah setiap kali tombol ditekan satu kali. Teknik ini sangat berguna untuk berbagai proyek otomatisasi seperti kontrol lampu, kipas, pompa air, motor DC, hingga perangkat elektronik rumah tangga lainnya.
Tutorial ini juga membahas dua metode yang umum digunakan, yaitu mengontrol relay dengan tombol tanpa debouncing dan mengontrol relay dengan tombol menggunakan debouncing. Metode debouncing sangat penting karena tombol mekanis sering menghasilkan pembacaan ganda saat ditekan. Tanpa debounce, satu kali tekan bisa terbaca sebagai beberapa kali penekanan sehingga relay dapat berkedip atau berubah status secara tidak stabil.
Baca juga: Arduino Button Relay - Cara Mengontrol Relay Menggunakan Push Button pada Arduino Uno
Wiring Diagram Arduino Button Toggle Relay
Perangkat Keras yang Dibutuhkan
- Arduino UNO R3
- Kabel USB
- Breadboad
- Kabel jumper
- Push button / tombol tekan
- Modul push button (opsional)
- Modul relay
- Motor DC
- Battery 9V
Relay dapat digunakan untuk mengontrol berbagai perangkat seperti motor DC, lampu, pompa air, maupun perangkat AC. Jika menggunakan tegangan tinggi, selalu berhati-hati saat melakukan pengkabelan.
Cara Kerja Toggle Relay dengan Tombol
Pada sistem toggle, relay akan berubah status setiap kali tombol ditekan:
- Tekanan pertama → relay menyala
- Tekanan kedua → relay mati
- Tekanan ketiga → relay menyala kembali
Arduino akan membaca perubahan status tombol dari HIGH ke LOW karena kita menggunakan mode INPUT_PULLUP. Saat perubahan terdeteksi, Arduino akan membalik status relay menggunakan logika toggle.
Kode Program Arduino Toggle Relay Tanpa Debouncing
Berikut kode dasar untuk membuat relay toggle menggunakan tombol tanpa debounce.
// constants won't change
const int BUTTON_PIN = 7; // Arduino pin connected to button's pin
const int RELAY_PIN = 3; // Arduino pin connected to relay's pin
// variables will change:
int relayState = LOW; // the current state of relay
int lastButtonState;
int currentButtonState;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
currentButtonState = digitalRead(BUTTON_PIN);
}
void loop() {
lastButtonState = currentButtonState;
currentButtonState = digitalRead(BUTTON_PIN);
if(lastButtonState == HIGH && currentButtonState == LOW) {
Serial.println("The button is pressed");
// toggle relay state
relayState = !relayState;
// update relay output
digitalWrite(RELAY_PIN, relayState);
}
}
Penjelasan Kode Program
Pada bagian awal program, kita menentukan pin yang digunakan untuk tombol dan relay.
const int BUTTON_PIN = 7;
const int RELAY_PIN = 3;
Kemudian dibuat variabel relayState untuk menyimpan kondisi relay saat ini, apakah menyala atau mati.
int relayState = LOW;
Arduino membaca kondisi tombol secara terus-menerus menggunakan digitalRead().
currentButtonState = digitalRead(BUTTON_PIN);
Saat tombol berubah dari HIGH menjadi LOW, Arduino menganggap tombol sedang ditekan.
if(lastButtonState == HIGH && currentButtonState == LOW)
Baris berikut digunakan untuk membalik status relay.
relayState = !relayState;
Kode tersebut setara dengan:
if(relayState == LOW)
relayState = HIGH;
else
relayState = LOW;
Terakhir, status relay diperbarui menggunakan digitalWrite().
digitalWrite(RELAY_PIN, relayState);
Kelemahan Program Tanpa Debouncing
Meskipun program di atas terlihat sederhana dan bekerja dengan baik, pada praktiknya tombol mekanis sering menghasilkan noise atau bouncing. Akibatnya, relay bisa berubah status beberapa kali dalam satu penekanan, relay tampak berkedip, dan sistem menjadi tidak stabil. Oleh karena itu, penggunaan debounce sangat disarankan pada proyek nyata.
Kode Program Arduino Toggle Relay dengan Debouncing
Untuk mengatasi masalah bouncing, kita dapat menggunakan library ezButton. Library ini membuat proses debounce menjadi jauh lebih mudah.
#include <ezButton.h>
// constants won't change
const int BUTTON_PIN = 7;
const int RELAY_PIN = 3;
ezButton button(BUTTON_PIN);
// variables will change:
int relayState = LOW;
void setup() {
Serial.begin(9600);
pinMode(RELAY_PIN, OUTPUT);
button.setDebounceTime(50);
}
void loop() {
button.loop();
if(button.isPressed()) {
Serial.println("The button is pressed");
// toggle relay state
relayState = !relayState;
// update relay output
digitalWrite(RELAY_PIN, relayState);
}
}
Penjelasan Debouncing dengan ezButton
Library ezButton akan membantu Arduino menyaring noise dari tombol mekanis sehingga satu kali tekan hanya terbaca satu kali.
Bagian berikut digunakan untuk membuat objek tombol:
ezButton button(BUTTON_PIN);
Kemudian debounce time diatur menjadi 50 milidetik.
button.setDebounceTime(50);
Fungsi berikut wajib dipanggil pada setiap loop:
button.loop();
Arduino akan mendeteksi tombol ditekan menggunakan:
button.isPressed()
Dengan metode ini, sistem menjadi jauh lebih stabil dan akurat.
Langkah Pengujian
Setelah semua rangkaian selesai dibuat, lakukan langkah berikut:
1. Hubungkan Arduino ke komputer menggunakan kabel USB.
2. Buka Arduino IDE.
3. Pilih board dan port yang sesuai.
4. Salin kode program ke Arduino IDE.
5. Klik tombol Upload.
6. Tekan tombol beberapa kali.
7. Perhatikan perubahan status relay.
Relay akan berubah ON dan OFF setiap kali tombol ditekan.
Aplikasi Toggle Relay dengan Arduino
Konsep toggle relay sangat sering digunakan dalam berbagai proyek elektronik dan otomasi, seperti:
- Sistem lampu otomatis
- Smart home sederhana
- Kontrol pompa air
- Pengontrol kipas
- Sistem keamanan
- Kontrol motor
- Sistem kendali perangkat listrik
Dengan relay, Arduino dapat mengontrol perangkat bertegangan lebih tinggi yang tidak bisa langsung dikendalikan dari pin Arduino.
Baca juga: Arduino Button Toggle LED - Cara Menyalakan dan Mematikan LED dengan Satu Tombol
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino


0 on: "Arduino Button Toggle Relay dengan dan tanpa Debouncing"