Berikan donasi untuk mendukung pengembangan konten Arduino berkualitas yang lebih baik

Lampu Otomatis dengan Sensor Suara (Tepuk Tangan)

Cara membuat lampu yang bisa dinyalakan dan dimatikan hanya dengan suara tepuk tangan menggunakan Arduino Uno, sensor suara KY-038, dan relay.

Komponen yang Dibutuhkan Untuk Proyek Ini

6 item

Di bawah ini Anda akan menemukan semua komponen yang diperlukan untuk menyelesaikan tutorial Arduino ini. Setiap komponen mencakup tautan afiliasi ke berbagai marketplace tempat Anda dapat membelinya.

Arduino Uno

Arduino Uno

Mikrokontroler

Mikrokontroler populer untuk berbagai proyek elektronik.

Rp 58.980
Harga terbaik di Shopee
Sensor Suara KY-038

Sensor Suara KY-038

Sensor

Sensor untuk mendeteksi suara seperti tepuk tangan.

Rp 10.000
Harga terbaik di Shopee
Relay Module

Relay Module

Output

Modul untuk mengendalikan perangkat listrik berdaya tinggi seperti lampu.

Rp 7.200
Harga terbaik di Shopee
Lampu

Lampu

Output

Beban listrik yang dikendalikan oleh relay, misalnya lampu bohlam.

Rp 23.400
Harga terbaik di Shopee
Mangkok Lampu

Mangkok Lampu

Aksesoris

Aksesoris pelindung dan penyangga lampu.

Rp 3.380
Harga terbaik di Shopee
Kabel Jumper Male-to-Female

Kabel Jumper Male-to-Female

Kabel

Kabel untuk menghubungkan komponen ke Arduino.

Rp 9.980
Harga terbaik di Shopee

Kode Sumber

SmartLamp.ino
cpp
81 lines
3678 characters
// Definisi pin
const int soundSensorPin = 2; // Pin untuk output Digital (DO) dari sensor suara LM393
const int relayPin = 3;       // Pin untuk mengontrol relay

// Variabel untuk deteksi tepukan
int clapCount = 0;
unsigned long lastClapTime = 0;       // Waktu tepukan terakhir terdeteksi
unsigned long firstClapTime = 0;      // Waktu tepukan pertama dalam urutan
bool relayState = false;              // Status relay: false = OFF, true = ON

// Pengaturan waktu (dalam milidetik)
const unsigned long debounceTime = 50;         // Waktu untuk mengabaikan pantulan sensor setelah deteksi awal
const unsigned long maxTimeBetweenClaps = 700; // Waktu maksimal antara tepukan pertama dan kedua untuk dianggap double clap
const unsigned long singleClapTimeout = 800;   // Waktu tunggu setelah tepukan pertama untuk memutuskan itu single clap
                                               // (harus sedikit lebih lama dari maxTimeBetweenClaps)
void setup() {
  Serial.begin(9600); // Mulai komunikasi serial untuk debugging

  pinMode(soundSensorPin, INPUT); // Set pin sensor suara sebagai INPUT
  pinMode(relayPin, OUTPUT);      // Set pin relay sebagai OUTPUT

  // Matikan relay di awal (asumsi relay aktif LOW, jadi HIGH untuk mematikan)
  digitalWrite(relayPin, HIGH);
  relayState = false;
  Serial.println("Sistem siap. Relay OFF.");
  Serial.println("1 Tepukan untuk ON, 2 Tepukan untuk OFF.");
}

void loop() {
  int sensorValue = digitalRead(soundSensorPin); // Baca nilai dari sensor suara

  // Sensor suara LM393 biasanya memberikan output LOW ketika suara terdeteksi
  if (sensorValue == LOW) {
    // Debouncing: Pastikan ini adalah deteksi baru dan bukan pantulan dari deteksi sebelumnya
    if (millis() - lastClapTime > debounceTime) {
      lastClapTime = millis(); // Catat waktu deteksi suara ini

      if (clapCount == 0) {
        // Ini adalah tepukan pertama yang terdeteksi dalam suatu urutan
        firstClapTime = lastClapTime;
        clapCount = 1;
        Serial.println("Tepukan pertama terdeteksi...");
      } else if (clapCount == 1) {
        // Ini adalah tepukan kedua, periksa apakah dalam rentang waktu untuk double clap
        if (lastClapTime - firstClapTime < maxTimeBetweenClaps) {
          Serial.println("Tepukan kedua terdeteksi (double clap)!");
          // Aksi untuk dua tepukan: Matikan relay jika sedang ON
          if (relayState == true) {
            digitalWrite(relayPin, HIGH); // Matikan relay (aktif LOW)
            relayState = false;
            Serial.println("Relay DIMATIKAN.");
          } else {
            Serial.println("Relay sudah MATI. Tidak ada aksi.");
          }
          clapCount = 0; // Reset hitungan tepukan
        } else {
          // Tepukan kedua terlalu lambat, anggap ini sebagai tepukan pertama dari urutan baru
          firstClapTime = lastClapTime;
          clapCount = 1;
          Serial.println("Tepukan kedua terlalu lambat, dianggap tepukan pertama baru...");
        }
      }
    }
  }

  // Cek apakah sudah waktunya memutuskan untuk aksi single clap
  // Ini terjadi jika sudah ada 1 tepukan terdeteksi dan waktu tunggu (singleClapTimeout) telah berlalu
  // tanpa adanya tepukan kedua.
  if (clapCount == 1 && (millis() - firstClapTime >= singleClapTimeout)) {
    Serial.println("Single clap dikonfirmasi.");
    // Aksi untuk satu tepukan: Nyalakan relay jika sedang OFF
    if (relayState == false) {
      digitalWrite(relayPin, LOW); // Nyalakan relay (aktif LOW)
      relayState = true;
      Serial.println("Relay DINYALAKAN.");
    } else {
      Serial.println("Relay sudah NYALA. Tidak ada aksi.");
    }
    clapCount = 0; // Reset hitungan tepukan
  }
}

Skema/Diagram Rangkaian

Petunjuk Langkah demi Langkah

Siapkan Komponen

Siapkan Arduino Uno, sensor suara KY-038, relay module, kabel jumper male-to-female, dan lampu.

Rangkai Sensor Suara

Hubungkan ground sensor suara ke GND Arduino, output ke pin 2, dan VCC ke 5V.

Rangkai Relay dan Lampu

Hubungkan VCC relay ke 5V Arduino, GND ke GND, input ke pin 3 Arduino. Kabel lampu dihubungkan ke terminal C dan NC pada relay.

Upload Kode ke Arduino

Sambungkan Arduino ke laptop, upload kode SmartLampu.ino yang sudah dibuat.

Uji Coba Smart Lampu

Tepuk tangan sekali, lampu akan menyala. Tepuk dua kali, lampu akan mati. Sensor menangkap suara, Arduino memproses dan relay mengendalikan lampu.

Nikmati Kemudahan

Sekarang kamu tidak perlu repot berjalan ke saklar untuk menyalakan atau mematikan lampu. Cukup tepuk tangan!

Video Hasil