Tutorial Belanja komponen

Tutorial › Suara & Bunyi

Detektor Suara Keras

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVINOUTGNDVCCSensor suara FC-04 (keluaran digital)

Modul mikrofon FC-04 memberi tahu dashboard setiap kali ada suara keras: pintu dibanting, barang jatuh, atau anjing menggonggong. Klenik juga mencatat berapa kali suara keras terjadi tiap menit.

FC-04 punya mikrofon dan komparator. Selama suara di bawah ambang, pin OUT bernilai HIGH. Begitu suara lebih keras dari ambang, OUT turun ke LOW sesaat dan LED kecil di modul ikut menyala. Ambangnya diatur dengan memutar trimpot biru di modul.

Satu tepukan atau benturan membuat OUT berkedip beberapa kali, jadi setelah satu deteksi ESP8266 mengabaikan sensor selama 300 ms. Indikator di dashboard menyala saat suara pertama dan baru padam 2 detik setelah suara terakhir. Setiap 60 detik jumlah suara keras dikirim ke gauge lalu dihitung ulang dari nol.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
Modul Sensor Suara FC-04 Sound Detector Module M1Rp8.245
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 31Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp53.745
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
Sensor suara FC-04 (keluaran digital) OUT→D7 GPIO13kuning
Sensor suara FC-04 (keluaran digital) VCC→3Vmerah
Sensor suara FC-04 (keluaran digital) GND→Ghitam

Langkah 2: Siapkan dashboard Klenik

Suara Kerasichibot/budi1234/p053/keras
BERISIK!
0 detik lalu
Suara Keras per Menitichibot/budi1234/p053/jumlah
0607x
0 detik lalu
Kejadianichibot/budi1234/p053/log
Ada suara keras!
Ada suara keras!
0 detik lalu

Cara cepat: unduh p053.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
Indikator Boolean
Suara Keras
ichibot/KODE/p053/kerasON = 1 “BERISIK!”, OFF = 0
Gauge
Suara Keras per Menit
ichibot/KODE/p053/jumlah0–60 x
Text Log
Kejadian
ichibot/KODE/p053/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: NodeMCU 1.0 (ESP-12E Module). Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).

p053.inoUnduh .ino
// Proyek 053 - Detektor Suara Keras
// Board: NodeMCU ESP8266 V3 | Dashboard: klenik.ichibot.id
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";

// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_KERAS  = "ichibot/budi1234/p053/keras";
const char* TOPIK_LOG    = "ichibot/budi1234/p053/log";
const char* TOPIK_JUMLAH = "ichibot/budi1234/p053/jumlah";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int SENSOR = D7;                // OUT FC-04: LOW saat suara melewati ambang
int jumlah = 0;                       // suara keras dalam menit ini
unsigned long terakhir = 0, awalMenit = 0, nyalaSampai = 0;

void langganan() {
  // proyek ini hanya mengirim, tidak berlangganan topic apa pun
}

sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)void sambungWiFi() { WiFi.begin(WIFI_NAMA, WIFI_PASS); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" OK, IP " + WiFi.localIP().toString()); } void sambungMQTT() { while (!mqtt.connected()) { if (mqtt.connect(WiFi.macAddress().c_str())) { Serial.println("Terhubung ke Klenik"); langganan(); } else { Serial.println("Broker gagal, coba lagi 3 detik"); delay(3000); } } }
void setup() { Serial.begin(115200); pinMode(SENSOR, INPUT); sambungWiFi(); mqtt.setServer(BROKER, 1883); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (digitalRead(SENSOR) == LOW && millis() - terakhir > 300) { terakhir = millis(); jumlah++; if (!nyalaSampai) { // awal rentetan suara: kabari sekali saja mqtt.publish(TOPIK_KERAS, "1"); mqtt.publish(TOPIK_LOG, "Ada suara keras!"); } nyalaSampai = millis() + 2000; // indikator padam 2 detik setelah suara terakhir } if (nyalaSampai && (long)(millis() - nyalaSampai) >= 0) { nyalaSampai = 0; mqtt.publish(TOPIK_KERAS, "0"); } if (millis() - awalMenit >= 60000) { awalMenit = millis(); mqtt.publish(TOPIK_JUMLAH, String(jumlah).c_str()); Serial.println("Suara keras menit ini: " + String(jumlah)); jumlah = 0; } }

Langkah 4: Pahami kodenya

  1. OUT dari FC-04 hanya HIGH atau LOW, jadi cukup pin digital biasa. Modul ini tidak bisa mengukur seberapa keras suaranya. Untuk itu pakai MAX4466 di proyek 054.
  2. Jeda 300 ms setelah tiap deteksi supaya satu benturan tidak terhitung berkali-kali.
  3. Pesan ke Text Log hanya dikirim di awal rentetan suara. Tanpa ini, satu menit ribut bisa mengirim puluhan pesan yang sama.
  4. Setiap 60 detik hitungan dikirim ke gauge, lalu diulang dari nol.