Tutorial Belanja komponen

Tutorial › Gas & Udara

Kualitas Udara Ruangan MQ-135

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVIN1K2KVCCGNDDOAOMQ-135 + pembagi 1K/2K di AO

MQ-135 peka terhadap gas yang membuat udara ruangan terasa pengap: napas banyak orang, asap rokok, bau cat, amonia. Klenik menampilkan indeks udara dan grafiknya sepanjang hari, beserta status Baik, Sedang, atau Buruk.

MQ-135 bekerja seperti MQ-2 (proyek 071), tetapi lapisannya lebih peka terhadap CO2, amonia, benzena, alkohol, dan asap. Sensor ini tidak bisa membedakan gas mana yang naik. Karena itu yang ditampilkan adalah indeks relatif: berapa persen tegangan sensor naik dibanding patokan udara bersih.

Patokan diambil otomatis 2 menit setelah alat menyala. Kalau saat itu udara ternyata tidak bersih, bawa alat ke dekat jendela terbuka lalu tekan switch Kalibrasi untuk mengambil patokan baru. Indeks di bawah 20 dianggap Baik, 20-60 Sedang, dan di atas 60 Buruk. Batas ini bisa kamu ubah sesuai pengamatan sendiri.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
MQ-135 Sensor Kualitas Udara NH3 NOx CO2 Benzene1Rp23.500
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 31Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp110.475
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-135 + pembagi 1K/2K di AO VCC→VINmerah
MQ-135 + pembagi 1K/2K di AO GND→GNDhitam
MQ-135 + pembagi 1K/2K di AO AO→D34 GPIO34hijau

Langkah 2: Siapkan dashboard Klenik

Indeks Udaraichibot/budi1234/p073/indeks
0 – 10018
0 detik lalu
Kalibrasiichibot/budi1234/p073/kalibrasi
Ambil patokan
0 detik lalu
Grafik Udaraichibot/budi1234/p073/indeks
9
0.012 titik100.0
0 detik lalu
Statusichibot/budi1234/p073/log
Udara Baik (indeks 8)
Udara Sedang (indeks 27)
Udara Baik (indeks 14)
0 detik lalu

Cara cepat: unduh p073.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
Gauge
Indeks Udara
ichibot/KODE/p073/indeks0–100
Switch
Kalibrasi
ichibot/KODE/p073/kalibrasipayload ON / OFF
Chart
Grafik Udara
ichibot/KODE/p073/indeks0–100
Text Log
Status
ichibot/KODE/p073/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). 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).

p073.inoUnduh .ino
// Proyek 073 - Kualitas Udara Ruangan MQ-135
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.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_LOG       = "ichibot/budi1234/p073/log";
const char* TOPIK_KALIBRASI = "ichibot/budi1234/p073/kalibrasi";
const char* TOPIK_INDEKS    = "ichibot/budi1234/p073/indeks";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_UDARA = 34;             // AO MQ-135 lewat pembagi 1K/2K
const unsigned long PEMANASAN = 120000;
int dasar = 0;
bool siap = false;
String statusTadi = "";
unsigned long terakhir = 0;

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

String status(int indeks) {
  if (indeks < 20) return "Baik";
  if (indeks < 60) return "Sedang";
  return "Buruk";
}

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  if (p == "ON") {
    dasar = max(bacaUdara(), 50);     // jadikan udara sekarang patokan bersih
    mqtt.publish(TOPIK_LOG, ("Patokan udara bersih baru: " + String(dasar)).c_str());
    mqtt.publish(TOPIK_KALIBRASI, "OFF");
  }
}

void langganan() {
  mqtt.subscribe(TOPIK_KALIBRASI);
}

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); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 5000) return; terakhir = millis(); int mentah = bacaUdara(); if (!siap) { if (millis() < PEMANASAN) return; dasar = max(mentah, 50); siap = true; } int indeks = constrain((mentah - dasar) * 100 / dasar, 0, 200); Serial.printf("Mentah %d, dasar %d, indeks %d\n", mentah, dasar, indeks); mqtt.publish(TOPIK_INDEKS, String(indeks).c_str()); String s = status(indeks); if (s != statusTadi) { statusTadi = s; mqtt.publish(TOPIK_LOG, ("Udara " + s + " (indeks " + String(indeks) + ")").c_str()); } }

Langkah 4: Pahami kodenya

  1. MQ-135 dipanaskan 2 menit sebelum patokan diambil. Seperti MQ-2, sensor baru perlu menyala beberapa jam pertama sebelum stabil.
  2. Switch Kalibrasi mengambil patokan baru kapan saja. Lakukan saat udara memang bersih, misalnya pagi hari dengan jendela terbuka.
  3. Tiga kategori dari indeks. Angka 20 dan 60 adalah titik awal. Amati beberapa hari, lalu sesuaikan dengan kondisi ruanganmu.