
Siapa sih yang nggak suka tempe? Makanan legendaris ini emang jadi comfort food nomor satu di Indonesia. Tapi, buat sobat yang pernah coba bikin tempe sendiri di rumah, pasti tahu kalau tantangan terbesarnya adalah menjaga suhu. Kadang kepanasan, kadang kedinginan, ujung-ujungnya jamurnya nggak tumbuh sempurna. Tricky banget, kan?
Nah, daripada pusing jagain box fermentasi seharian, kita bisa bikin solusi cerdas nih! Kita akan merakit alat fermentasi tempe otomatis menggunakan Arduino Uno dengan bantuan algoritma PID. Alat ini bakal jagain suhu supaya tetap stabil secara presisi, jadi kamu tinggal duduk manis nunggu tempenya jadi. Yuk, simak cara bikinnya biar tempe kamu makin glow up!
Kenapa Suhu Fermentasi Tempe Penting Banget
Dalam proses pembuatan tempe, kita sebenarnya sedang “beternak” jamur bernama Rhizopus sp. yang ada pada ragi. Agar jamur ini tumbuh dengan subur dan menghasilkan tempe yang berkualitas, mereka butuh lingkungan yang pas.
Nah, kalau ngomongin teknisnya, suhu ideal untuk proses fermentasi ini umumnya berkisar antara 30-35°C. Kalau suhunya naik-turun nggak jelas, pertumbuhan jamur bakal terhambat, waktu fermentasi jadi lebih lama, dan kualitas tempe kamu bisa menurun drastis. Di sinilah otomatisasi berperan penting untuk menggantikan cara manual yang melelahkan dan sering nggak akurat.

Mengenal Rahasia Dibalik Kestabilan Suhu Kontrol PID
Mungkin kamu bertanya-tanya, kenapa nggak pakai saklar biasa saja yang mati kalau panas dan nyala kalau dingin? Jawabannya adalah karena kita ingin kestabilan tingkat tinggi tanpa fluktuasi yang tajam. Di proyek ini, kita pakai metode PID (Proportional-Integral-Derivative). Jangan bingung dulu sama namanya, bocoran dari para ahli, PID itu terdiri dari tiga komponen utama:
- Proportional (P): Tugasnya mempercepat respon sistem supaya suhu cepat naik menuju target.
- Integral (I): Tugasnya menghilangkan sisa kesalahan (error) yang masih ada agar suhu benar-benar pas di titik target.
- Derivative (D): Tugasnya menjaga stabilitas dan mencegah suhu kebablasan (overshoot).
Logika ini mirip banget dengan penerapan algoritma PID pada sistem kipas pintar yang bikin putaran kipas jadi lebih halus. Dengan PID, lampu pemanas nggak cuma sekadar nyala-mati kasar, tapi durasinya diatur secara pintar oleh Arduino.
Alat dan Bahan
Sebelum mulai merakit, siapkan dulu komponen-komponen berikut ini ya, sobat!
| Komponen | Jumlah | Keterangan |
| Arduino Uno | 1 Buah | Otak atau mikrokontroler utama |
| Relay 5V | 1 Buah | Saklar otomatis untuk lampu pemanas |
| Lampu Pijar 5W 220V AC | 1 Buah | Sumber panas utama |
| Breadboard Kecil | 1 Buah | Media untuk merangkai kabel |
| Fitting Lampu | 1 Buah | Dudukan lampu pijar |
| Sensor DS18B20 | 1 Buah | Sensor suhu presisi tinggi |
| Resistor 4.7K | 2 Buah | Resistor pull-up untuk sensor |
| LCD 16×2 (I2C) | 1 Buah | Layar untuk monitor status |
| Kabel | Secukupnya | Kabel jumper untuk koneksi |
Skematik Rangkaian
Proyek ini menggunakan tegangan tinggi 220V AC untuk lampu pijar. Pastikan sobat berhati-hati saat menyambungkan kabel listrik ke stopkontak. Selalu cek kembali sambungan sebelum dinyalakan!

Untuk merangkainya, hubungkan sensor suhu DS18B20 ke Pin D2 pada Arduino. Jangan lupa pasang resistor pull-up 4.7K di antara pin data dan VCC agar pembacaan suhu stabil. Selanjutnya, pasang Relay ke Pin A0. Relay ini bertindak sebagai pemutus jalur salah satu kabel 220V yang menuju ke lampu pijar—persis seperti saklar lampu di rumahmu, tapi dikontrol oleh Arduino. Terakhir, gunakan modul I2C untuk menghubungkan LCD 16×2 ke pin SCL dan SDA pada Arduino supaya hemat kabel dan nggak ribet.
Langkah Pemrograman
Setelah rangkaian fisik beres, saatnya kita masukkan “nyawa” berupa kode program. Berikut adalah kodenya:
#include <PID_v1.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Konfigurasi Pin
#define HEATER_PIN A0
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel PID
double SetpointSuhu = 36.0; // Target suhu diatur ke 36C
double InputSuhu = 30.0;
double OutputPID;
double SteadyStateError;
double Kp = 10.00; double Ki = 3.53; double Kd = 49.78;
PID myPID(&InputSuhu, &OutputPID, &SetpointSuhu, Kp, Ki, Kd, DIRECT);
int WindowSize = 5000; // Siklus waktu 5 detik
unsigned long windowStartTime;
unsigned long lastLCDUpdateTime = 0;
unsigned long lastSensorRequest = 0;
unsigned long lastSerialPlotterTime = 0;
void setup() {
Serial.begin(9600);
sensors.begin();
sensors.setWaitForConversion(false);
sensors.setResolution(10);
lcd.init();
lcd.backlight();
pinMode(HEATER_PIN, OUTPUT);
digitalWrite(HEATER_PIN, LOW);
myPID.SetOutputLimits(0, WindowSize);
myPID.SetMode(AUTOMATIC);
windowStartTime = millis();
}
void loop() {
unsigned long now = millis();
// 1. PEMBACAAN SENSOR
if (now - lastSensorRequest >= 1000) {
double data = sensors.getTempCByIndex(0);
if (data > 0 && data < 80) InputSuhu = data;
sensors.requestTemperatures();
lastSensorRequest = now;
}
// 2. PERHITUNGAN PID
myPID.Compute();
SteadyStateError = SetpointSuhu - InputSuhu;
if (now - windowStartTime > WindowSize) windowStartTime += WindowSize;
// Logika PWM untuk Relay
digitalWrite(HEATER_PIN, (OutputPID > (now - windowStartTime)) ? HIGH : LOW);
// 3. MONITORING LCD
if (now - lastLCDUpdateTime >= 500) {
lastLCDUpdateTime = now;
lcd.setCursor(0, 0); lcd.print("Suhu:"); lcd.print(InputSuhu, 2);
lcd.print("C");
lcd.setCursor(12, 0); lcd.print("S:"); lcd.print((int) SetpointSuhu);
lcd.setCursor(0, 1); lcd.print("PID:");
lcd.print((int)((OutputPID/WindowSize)*100)); lcd.print("% ");
lcd.setCursor(9, 1); lcd.print("Err:"); lcd.print(SteadyStateError, 1); lcd.print(" ");
}
// 4. SERIAL PLOTTER
if (now - lastSerialPlotterTime >= 200) {
lastSerialPlotterTime = now;
Serial.print("Suhu:"); Serial.print(InputSuhu);
Serial.print(","); Serial.print("Target:"); Serial.print(SetpointSuhu);
Serial.print(","); Serial.print("Daya_PID:");
Serial.println((OutputPID/WindowSize)*100);
}
}
Penjelasan Singkat Logika Program:
- Kenapa Setpoint 36.0? Mungkin sobat bingung, katanya idealnya 35°C? Nah, kita pasang di 36°C untuk kompensasi thermal loss (kehilangan panas) saat box dibuka atau karena isolasi box yang kurang sempurna. Pro move, kan?
- Logika “Relay Click”: Karena kita pakai relay (yang cuma bisa ON/OFF), kita menggunakan siklus 5 detik (
WindowSize = 5000). Kalau PID minta daya 50%, maka relay akan nyala selama 2.5 detik dan mati 2.5 detik. Jadi jangan kaget kalau dengar bunyi klik setiap beberapa detik ya! - Konstanta PID: Nilai Kp, Ki, dan Kd sudah disesuaikan agar respon pemanas pas, nggak terlalu lambat tapi juga nggak bikin suhu melonjak liar.
Cara Kerja Alat dan Pengujian

Setelah alat dinyalakan, sistem akan bekerja secara otomatis dalam empat tahap berkelanjutan:
- Membaca Sensor: Sensor DS18B20 mendeteksi suhu aktual di dalam box secara real-time.
- Menghitung PID: Arduino menghitung selisih (error) antara target (36°C) dan suhu saat ini.
- Mengontrol Pemanas: Arduino menentukan berapa lama lampu harus menyala dalam jendela waktu 5 detik tadi.
- Monitoring: Kamu bisa lihat progresnya di LCD.
Pro-Tip: Mau lihat grafik suhu yang keren? Hubungkan Arduino ke laptop, lalu buka Arduino IDE dan klik menu Tools > Serial Plotter. Di sana sobat bisa melihat grafik kestabilan suhu secara visual!
Kesimpulan
Membuat alat fermentasi tempe otomatis berbasis Arduino PID adalah solusi cerdas buat sobat yang pengen hasil tempe skala rumahan yang konsisten dan berkualitas. Dengan sistem ini, suhu di dalam ruang fermentasi tetap terjaga stabil pada titik ideal meskipun kondisi lingkungan di luar lagi nggak menentu. Proses fermentasi jadi lebih optimal dan tentu saja bikin kerjaan kamu jadi lebih ringan. Selamat berkreasi dan selamat menikmati tempe buatan sendiri yang mantap!
