Community project
Etalase Higienis Otomatis
Evan Hutabarat
Published August 8, 2026 · Updated August 11, 2026
Generated with AIThe Etalase Higienis Otomatis is an automated climate control system for display cases that maintains optimal temperature and humidity conditions. Built around an ESP32 microcontroller, it uses a DHT22 sensor to monitor environmental conditions and automatically activates a 12V exhaust fan and heating lamp through a dual-channel relay module to keep the display space clean and properly conditioned.
This guide provides a complete wiring diagram, parts list, and step-by-step assembly instructions for building the system. The included firmware implements hysteresis-based control logic that prevents relay chatter while maintaining humidity below 65% and temperature between 24–26°C, making it ideal for preserving sensitive products in retail or laboratory display cases.
Wiring diagram
Interactive · read-only
Pan and zoom to explore the wiring. Remix the project to edit it in your own workspace.
Parts list
Bill of materials| Component | Qty | Notes |
|---|---|---|
| DHT22DHT22 | 1 | Digital temperature and humidity sensor |
| Modul Relay 2-Kanal 5 V, input kompatibel 3,3 V2 kanal 5 V | 1 | Modul sakelar terisolasi yang membolehkan ESP32 menghidupkan kipas dan lampu DC bertegangan rendah. |
| Kipas exhaust mini 12 V DC12 V DC | 1 | Kipas kecil yang membuang udara lembap dari etalase saat kelembapan terlalu tinggi. |
| Lampu pemanas 12 V DC12 V DC | 1 | Lampu pemanas DC bertegangan rendah untuk simulasi penghangat etalase tanpa membawa listrik PLN ke rangkaian siswa. |
| 12V Barrel-Jack Adapter12 V 2 A | 1 | 12 V / 2 A wall adapter with a 5.5 mm / 2.1 mm barrel jack. Used to power motor drivers, LED strips, or boards that need a higher rail. |
| 24v Buck Converterkeluaran 5 V | 1 | LM2596-based adjustable step-down buck converter module. Commonly used to regulate a higher battery rail, such as a 2S 18650 pack, down to 5V for Arduino logic. It is a regulator, not a charger or battery protection board. |
Assembly
6 stepsMatikan adaptor sebelum merakit
Letakkan ESP32, DHT22, modul relay, kipas 12 V, lampu pemanas 12 V, modul LM2596, dan adaptor di meja. Jangan sambungkan adaptor ke stopkontak saat memasang kabel supaya tidak terjadi hubungan singkat.
- Tip: Pasang semua komponen di luar ruang etalase yang lembap; hanya sensor yang ditempatkan di dalam ruang etalase.
- Tip: Gunakan lampu pemanas 12 V DC, bukan bohlam 220 V.
- ⚠ Kabel yang salah pada adaptor dapat merusak ESP32 atau modul relay.
Hubungkan sensor suhu dan kelembapan
Sambungkan VCC DHT22 ke pin 3V3 ESP32 (daya), GND DHT22 ke GND ESP32 (ground), dan DATA DHT22 ke GPIO4 ESP32 (sinyal). Tempatkan DHT22 di bagian tengah etalase, jauh dari hembusan kipas dan lampu agar pembacaannya tidak bias.
- Tip: Jika DHT22 berupa sensor telanjang berkaki empat, tambahkan resistor 10 kΩ antara VCC dan DATA agar sinyal stabil.
- ⚠ Jangan tukar VCC dan GND — daya terbalik dapat merusak sensor.
Siapkan jalur daya 5 V
Atur keluaran modul LM2596 menjadi tepat 5 V menggunakan multimeter sebelum menghubungkannya ke ESP32. Sambungkan +12V adaptor ke VIN+ LM2596 (daya masuk) dan GND adaptor ke VIN− LM2596 (ground). Sambungkan VOUT+ LM2596 ke pin VIN/5V ESP32 dan VOUT− ke GND ESP32 (daya dan ground).
- Tip: Putar sekrup kecil LM2596 perlahan saat mengatur tegangan; ukur dulu, baru hubungkan ESP32.
- Tip: Semua kabel ground harus saling tersambung agar sinyal relay dapat terbaca.
- ⚠ Jangan masukkan 12 V langsung ke pin VIN/5V ESP32 — ESP32 dapat rusak.
Hubungkan modul relay ke ESP32
Sambungkan VCC relay ke keluaran 5 V LM2596 (daya), GND relay ke GND ESP32 (ground), IN1 relay ke GPIO13 ESP32 (sinyal kipas), dan IN2 relay ke GPIO14 ESP32 (sinyal lampu). Pilih modul relay 5 V yang inputnya benar-benar dapat dikendalikan sinyal 3,3 V dari ESP32.
- Tip: Banyak modul relay menyala saat pin IN diberi LOW; program ini sudah memakai pola tersebut.
- Tip: Jika relay selalu aktif saat ESP32 baru menyala, cek apakah modul relay Anda bertipe active-LOW.
- ⚠ Modul relay 5 V yang tidak kompatibel dengan sinyal 3,3 V mungkin tidak mau menyala; jangan memaksa dengan memberi 5 V langsung ke GPIO ESP32.
Pasang kipas dan lampu 12 V melalui kontak relay
Sambungkan +12V adaptor ke COM1 relay dan COM2 relay (daya masuk). Sambungkan NO1 relay ke FAN+ kipas (daya kipas saat aktif) dan NO2 relay ke LAMP+ lampu (daya lampu saat aktif). Sambungkan FAN− kipas serta LAMP− lampu ke GND adaptor (jalur balik).
- Tip: NO berarti beban mati secara normal dan hanya menerima daya ketika relay aktif.
- Tip: Gunakan kabel yang terisolasi dan kencangkan sekrup terminal relay agar kabel tidak lepas.
- ⚠ Jangan gunakan terminal relay ini untuk kabel PLN 220 V pada proyek essay/simulasi ini — gunakan semua beban 12 V DC agar aman.
Uji fungsi etalase higienis
Periksa sekali lagi bahwa tidak ada serabut kabel menyentuh terminal lain. Nyalakan adaptor, lalu sambungkan ESP32 lewat USB. Sistem menyalakan kipas saat kelembapan mencapai 70% dan mematikannya kembali pada 65%; lampu pemanas menyala pada suhu 24 °C atau lebih rendah lalu mati pada 26 °C.
- Tip: Untuk demonstrasi, dekatkan tangan atau udara lembap ke sensor untuk melihat perubahan pembacaan.
- Tip: Sebelum memasukkan makanan, gunakan komponen yang bersih dan pisahkan kipas/lampu dari area kontak pangan.
- ⚠ Jika ada komponen panas berlebihan, bau gosong, atau kabel hangat, segera cabut adaptor dari stopkontak.
Pin assignments
Board wiring reference| Pin | Connection | Type |
|---|---|---|
| 3V3 | dht22_1 VCC | power |
| GND | dht22_1 GND | ground |
| GPIO 4 | dht22_1 DATA | data |
| EXT | adapter_12v_1 +12V → 24v Buck Converter VIN+ | power |
| EXT | adapter_12v_1 +12V → Modul Relay 2-Kanal 5 V, input kompatibel 3,3 V COM1 | power |
| EXT | adapter_12v_1 +12V → Modul Relay 2-Kanal 5 V, input kompatibel 3,3 V COM2 | power |
| EXT | adapter_12v_1 GND → 24v Buck Converter VIN- | ground |
| GND | adapter_12v_1 GND | ground |
| 5V | buck_5v_1 VOUT+ | power |
| EXT | buck_5v_1 VOUT+ → Modul Relay 2-Kanal 5 V, input kompatibel 3,3 V VCC | power |
| GND | buck_5v_1 VOUT- | ground |
| GND | relay_2ch_1 GND | ground |
| GPIO 13 | relay_2ch_1 IN1 | digital |
| GPIO 14 | relay_2ch_1 IN2 | digital |
| EXT | relay_2ch_1 NO1 → Kipas exhaust mini 12 V DC FAN+ | power |
| EXT | relay_2ch_1 NO2 → Lampu pemanas 12 V DC LAMP+ | power |
| GND | fan_12v_1 FAN- | ground |
| GND | lamp_12v_1 LAMP- | ground |
Firmware
ESP32#include <Arduino.h>
#include <DHT.h>
// Forward declarations
void setRelay(uint8_t pin, bool on);
void updateOutputs(float temperatureC, float humidity);
constexpr uint8_t DHT_PIN = 4;
constexpr uint8_t RELAY_FAN_PIN = 13;
constexpr uint8_t RELAY_LAMP_PIN = 14;
constexpr uint8_t DHT_TYPE = DHT22;
// Most 5 V relay boards are active-LOW: LOW turns the relay on.
constexpr uint8_t RELAY_ON = LOW;
constexpr uint8_t RELAY_OFF = HIGH;
constexpr float HUMIDITY_FAN_ON = 70.0f;
constexpr float HUMIDITY_FAN_OFF = 65.0f;
constexpr float TEMPERATURE_LAMP_ON = 24.0f;
constexpr float TEMPERATURE_LAMP_OFF = 26.0f;
constexpr unsigned long READ_INTERVAL_MS = 2500;
DHT dht(DHT_PIN, DHT_TYPE);
bool fanOn = false;
bool lampOn = false;
unsigned long lastReadMs = 0;
void setRelay(uint8_t pin, bool on) {
digitalWrite(pin, on ? RELAY_ON : RELAY_OFF);
}
void updateOutputs(float temperatureC, float humidity) {
// The gap between limits prevents fast relay clicking near a limit.
if (!fanOn && humidity >= HUMIDITY_FAN_ON) fanOn = true;
if (fanOn && humidity <= HUMIDITY_FAN_OFF) fanOn = false;
if (!lampOn && temperatureC <= TEMPERATURE_LAMP_ON) lampOn = true;
if (lampOn && temperatureC >= TEMPERATURE_LAMP_OFF) lampOn = false;
setRelay(RELAY_FAN_PIN, fanOn);
setRelay(RELAY_LAMP_PIN, lampOn);
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_FAN_PIN, OUTPUT);
pinMode(RELAY_LAMP_PIN, OUTPUT);
setRelay(RELAY_FAN_PIN, false);
setRelay(RELAY_LAMP_PIN, false);
dht.begin();
Serial.println("Etalase higienis siap.");
}
void loop() {
const unsigned long now = millis();
if (now - lastReadMs < READ_INTERVAL_MS) return;
lastReadMs = now;
const float humidity = dht.readHumidity();
const float temperatureC = dht.readTemperature();
if (isnan(humidity) || isnan(temperatureC)) {
Serial.println("DHT22 belum terbaca; periksa kabel DATA, 3V3, dan GND.");
return;
}
updateOutputs(temperatureC, humidity);
Serial.printf("Suhu: %.1f C | Kelembapan: %.1f %% | Kipas: %s | Lampu: %s\n",
temperatureC, humidity,
fanOn ? "NYALA" : "MATI",
lampOn ? "NYALA" : "MATI");
}“Deploy to device” opens this project in Schematik, where you can flash it to your board over USB.
Remix this project
Make it yours in one click
Open a full copy of this project in your own Schematik workspace — diagram, code, parts, and assembly steps included. Swap the sensor, add features, or redesign the whole thing with AI. The author's original stays untouched.