Tutorial Belanja komponen

Tutorial › Proyek Gabungan

Kandang Ayam Pintar: Suhu + Lampu Pemanas

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINVCCDATAGNDDHT22 (AM2302)SRD-05VDCL HDC+DC−INNOCOMNCRelay 1 ch 5V (jumper H)

Anak ayam (DOC) butuh kandang hangat yang suhunya turun bertahap setiap minggu. Pilih umur ayam di HP, dan ESP32 mengatur lampu pemanas lewat relay supaya suhu kandang sesuai: 32 °C di minggu pertama, lalu makin sejuk sampai minggu keempat.

Inti proyek ini termostat (seperti proyek 069), tetapi targetnya diambil dari tabel suhu per minggu umur. Peternak cukup menggeser slider Umur, dan target langsung berubah. Lampu menyala kalau suhu 1 °C di bawah target dan mati 1 °C di atas target.

Ada keputusan keselamatan yang berbeda dari proyek akuarium. Di sini, kalau sensor gagal dibaca 3 kali berturut-turut, lampu justru dinyalakan, karena anak ayam lebih cepat mati kedinginan daripada kepanasan sesaat. Pengaman yang benar selalu bergantung pada apa yang dijaga.

Keamanan: lampu pemanas 220V harus dipasang dengan fitting dan kabel yang layak, jauh dari sekam kering, oleh orang yang paham listrik.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Sensor DHT22 (AM2302) + kabel1Rp32.000
Modul relay 1 channel 5V1Rp17.000
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 61Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp127.500
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
DHT22 (AM2302) VCC→3V3merah
DHT22 (AM2302) DATA→D4 GPIO4hijau
DHT22 (AM2302) GND→GNDhitam
Relay 1 ch 5V (jumper H) DC+→VINoranye
Relay 1 ch 5V (jumper H) DC−→GNDhitam
Relay 1 ch 5V (jumper H) IN→D26 GPIO26biru

Langkah 2: Siapkan dashboard Klenik

Umur Ayam (minggu)ichibot/budi1234/p148/minggu
11 of 4
0 detik lalu
Suhu Kandangichibot/budi1234/p148/suhu
204031.6°C
0 detik lalu
Target Suhuichibot/budi1234/p148/target
20 – 4032°C
0 detik lalu
Lampu Pemanasichibot/budi1234/p148/lampu
MENYALA
0 detik lalu
Kelembapanichibot/budi1234/p148/lembap
0 – 10062%
0 detik lalu
Peringatanichibot/budi1234/p148/log
Kandang terlalu panas: 37.4 °C
0 detik lalu

Cara cepat: unduh p148.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
Slider Output
Umur Ayam (minggu)
ichibot/KODE/p148/minggu1–4
Gauge
Suhu Kandang
ichibot/KODE/p148/suhu20–40 °C
Gauge
Target Suhu
ichibot/KODE/p148/target20–40 °C
Indikator Boolean
Lampu Pemanas
ichibot/KODE/p148/lampuON = 1 “MENYALA”, OFF = 0
Gauge
Kelembapan
ichibot/KODE/p148/lembap0–100 %
Text Log
Peringatan
ichibot/KODE/p148/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).

p148.inoUnduh .ino
// Proyek 148 - Kandang Ayam Pintar: Suhu + Lampu Pemanas
// 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_LAMPU  = "ichibot/budi1234/p148/lampu";
const char* TOPIK_TARGET = "ichibot/budi1234/p148/target";
const char* TOPIK_MINGGU = "ichibot/budi1234/p148/minggu";
const char* TOPIK_LOG    = "ichibot/budi1234/p148/log";
const char* TOPIK_SUHU   = "ichibot/budi1234/p148/suhu";
const char* TOPIK_LEMBAP = "ichibot/budi1234/p148/lembap";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
DHT dht(4, DHT22);
const int LAMPU = 26;
// suhu ideal anak ayam (DOC) per minggu umur: minggu 1 = 32 °C lalu turun ±3 °C per minggu
const float SUHU_MINGGU[] = {32, 29, 26, 24};
int minggu = 1;
bool lampu = false;
int gagalBaca = 0;
unsigned long terakhir = 0;

float target() { return SUHU_MINGGU[constrain(minggu, 1, 4) - 1]; }

void aturLampu(bool v) {
  if (v == lampu) return;
  lampu = v;
  digitalWrite(LAMPU, v ? HIGH : LOW);
  mqtt.publish(TOPIK_LAMPU, v ? "1" : "0", true);
}

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  minggu = constrain(p.toInt(), 1, 4);
  mqtt.publish(TOPIK_TARGET, String(target(), 0).c_str(), true);
}

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

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(LAMPU, OUTPUT); dht.begin(); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 10000) return; terakhir = millis(); float suhu = dht.readTemperature(), lembap = dht.readHumidity(); if (isnan(suhu)) { if (++gagalBaca == 3) { // sensor rusak: lampu dinyalakan supaya anak ayam tidak kedinginan aturLampu(true); mqtt.publish(TOPIK_LOG, "Sensor suhu tidak terbaca! Lampu dinyalakan untuk jaga-jaga, mohon dicek"); } return; } gagalBaca = 0; if (suhu < target() - 1) aturLampu(true); else if (suhu > target() + 1) aturLampu(false); if (suhu > target() + 5) mqtt.publish(TOPIK_LOG, ("Kandang terlalu panas: " + String(suhu, 1) + " °C").c_str()); mqtt.publish(TOPIK_SUHU, String(suhu, 1).c_str()); mqtt.publish(TOPIK_LEMBAP, String(lembap, 0).c_str()); }

Langkah 4: Pahami kodenya

  1. Tabel target per minggu. Angka ini panduan umum, jadi sesuaikan dengan saran penyuluh atau pemasok DOC-mu.
  2. Keputusan "gagal aman" (fail-safe) yang disesuaikan dengan kebutuhan hewan.
  3. Minggu 1-4 diubah ke nomor array 0-3. constrain() menjaga supaya tidak keluar dari tabel.