DIY Alat Fermentasi Tempe Otomatis Berbasis Arduino dan PID

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:

  1. Proportional (P): Tugasnya mempercepat respon sistem supaya suhu cepat naik menuju target.
  2. Integral (I): Tugasnya menghilangkan sisa kesalahan (error) yang masih ada agar suhu benar-benar pas di titik target.
  3. 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!

KomponenJumlahKeterangan
Arduino Uno1 BuahOtak atau mikrokontroler utama
Relay 5V1 BuahSaklar otomatis untuk lampu pemanas
Lampu Pijar 5W 220V AC1 BuahSumber panas utama
Breadboard Kecil1 BuahMedia untuk merangkai kabel
Fitting Lampu1 BuahDudukan lampu pijar
Sensor DS18B201 BuahSensor suhu presisi tinggi
Resistor 4.7K2 BuahResistor pull-up untuk sensor
LCD 16×2 (I2C)1 BuahLayar untuk monitor status
KabelSecukupnyaKabel 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:

  1. Membaca Sensor: Sensor DS18B20 mendeteksi suhu aktual di dalam box secara real-time.
  2. Menghitung PID: Arduino menghitung selisih (error) antara target (36°C) dan suhu saat ini.
  3. Mengontrol Pemanas: Arduino menentukan berapa lama lampu harus menyala dalam jendela waktu 5 detik tadi.
  4. 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!

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *

Mau Cetak PCB Custom? Cek Biaya