Tutorial Belanja komponen

Tutorial › Gas & Udara

Stasiun Udara: Gas + Api + Suhu

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVIN1K2KVCCGNDDOAOMQ-2 + pembagi 1K/2K di AOAOG+DOSensor api KY-026VCCDATAGNDDHT11

Penutup bab Gas & Udara: tiga sensor dalam satu alat untuk dapur, gudang, atau ruang panel. MQ-2 mencium gas dan asap, KY-026 melihat api, dan DHT11 mengukur suhu. Dashboard menampilkan satu status ringkas: AMAN, PANAS, GAS/ASAP, atau API!

Setiap sensor dibaca seperti di proyeknya masing-masing (071, 075, dan 021). Yang baru adalah cara menggabungkannya. Daripada tiga indikator yang harus dilihat satu per satu, ESP32 menentukan satu status dengan urutan prioritas: api paling berbahaya, lalu gas atau asap, lalu suhu tinggi. Kalau ada api, status langsung API! walaupun sensor lain normal.

Indikator BAHAYA menyala untuk status apa pun selain AMAN, dan Text Log hanya mencatat saat status berubah. Gauge gas dan suhu tetap tampil, supaya kamu bisa melihat penyebabnya.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Sensor Gas MQ-2 Asap Smoke LPG Methane Gas Detec1Rp21.340
Sensor Api Infrared KY-026 Flame Detection Modul1Rp5.500
Modul sensor DHT111Rp12.000
Resistor 1K (isi 10)isi 10, terpakai 11Rp1.800
Resistor 2K (isi 10)isi 10, terpakai 11Rp1.800
Breadboard mini 170 titik1Rp4.875
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 101Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp125.815
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
MQ-2 + pembagi 1K/2K di AO VCC→VINmerah
MQ-2 + pembagi 1K/2K di AO GND→GNDhitam
MQ-2 + pembagi 1K/2K di AO AO→D34 GPIO34hijau
Sensor api KY-026 DO→D18 GPIO18ungu
Sensor api KY-026 +→3V3merah
Sensor api KY-026 G→GNDhitam
DHT11 VCC→3V3merah
DHT11 DATA→D4 GPIO4biru
DHT11 GND→GNDhitam

Langkah 2: Siapkan dashboard Klenik

Keselamatanichibot/budi1234/p080/bahaya
BAHAYA
0 detik lalu
Gas/Asapichibot/budi1234/p080/gas
0 – 2008%
0 detik lalu
Suhuichibot/budi1234/p080/suhu
06031.5°C
0 detik lalu
Riwayat Statusichibot/budi1234/p080/log
Status: AMAN
Status: GAS/ASAP
Status: AMAN
0 detik lalu

Cara cepat: unduh p080.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
Keselamatan
ichibot/KODE/p080/bahayaON = 1 “BAHAYA”, OFF = 0
Gauge
Gas/Asap
ichibot/KODE/p080/gas0–200 %
Gauge
Suhu
ichibot/KODE/p080/suhu0–60 °C
Text Log
Riwayat Status
ichibot/KODE/p080/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary), DHT sensor library (Adafruit), Adafruit Unified Sensor. Board di Arduino IDE: ESP32 Dev 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).

p080.inoUnduh .ino
// Proyek 080 - Stasiun Udara: Gas + Api + Suhu
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.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_GAS    = "ichibot/budi1234/p080/gas";
const char* TOPIK_SUHU   = "ichibot/budi1234/p080/suhu";
const char* TOPIK_BAHAYA = "ichibot/budi1234/p080/bahaya";
const char* TOPIK_LOG    = "ichibot/budi1234/p080/log";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
DHT dht(4, DHT11);
const int PIN_GAS = 34, API_DO = 18;  // MQ-2 AO lewat pembagi, KY-026 DO
const unsigned long PEMANASAN = 60000;
const int BATAS_GAS = 40;
const float BATAS_SUHU = 45;
int dasar = 0;
bool siap = false;
String statusTadi = "";
unsigned long terakhir = 0;

int bacaGas() {
  long jumlah = 0;
  for (int i = 0; i < 20; i++) { jumlah += analogRead(PIN_GAS); delay(5); }
  return jumlah / 20;
}

void langganan() {}

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(API_DO, INPUT); dht.begin(); sambungWiFi(); mqtt.setServer(BROKER, 1883); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 2000) return; terakhir = millis(); bool api = digitalRead(API_DO) == LOW; float suhu = dht.readTemperature(); int mentah = bacaGas(); if (!siap && millis() > PEMANASAN) { dasar = max(mentah, 50); siap = true; } int gas = siap ? constrain((mentah - dasar) * 100 / dasar, 0, 500) : 0; mqtt.publish(TOPIK_GAS, String(gas).c_str()); if (!isnan(suhu)) mqtt.publish(TOPIK_SUHU, String(suhu, 1).c_str()); // satu status ringkas, urut dari yang paling berbahaya String status = "AMAN"; if (api) status = "API!"; else if (gas > BATAS_GAS) status = "GAS/ASAP"; else if (!isnan(suhu) && suhu > BATAS_SUHU) status = "PANAS"; mqtt.publish(TOPIK_BAHAYA, status == "AMAN" ? "0" : "1", true); if (status != statusTadi) { statusTadi = status; mqtt.publish(TOPIK_LOG, ("Status: " + status).c_str()); } }

Langkah 4: Pahami kodenya

  1. Status dimulai AMAN, lalu ditimpa oleh kondisi berbahaya. Urutan if ... else if menentukan prioritas: yang pertama cocok yang dipakai.
  2. Selama pemanasan MQ-2, angka gas dianggap 0 supaya status tidak salah. Sensor api dan suhu tetap bekerja sejak awal.
  3. Sensor api hanya memakai DO di sini, jadi AO-nya dibiarkan tidak tersambung. Pin ADC1 (34) tetap untuk sensor gas analog.