Alat Pemberi Pakan Otomatis Berbasis ESP8266

Memberi pakan hewan secara teratur merupakan hal penting, baik untuk hewan peliharaan di rumah maupun ternak skala kecil. Namun, kesibukan sehari-hari sering membuat jadwal pemberian pakan menjadi tidak konsisten. Untuk mengatasi hal tersebut, kita dapat memanfaatkan teknologi IoT.

Pada blog post ini, kita akan membahas cara membuat Alat Pemberi Pakan Otomatis menggunakan ESP8266 dan servo motor. Sistem ini mampu mengeluarkan pakan secara otomatis dan menampilkan informasi melalui LCD 16×2, serta dapat dipantau melalui dashboard web tanpa koneksi internet.

Seperti proyek-proyek sebelumnya, ESP8266 dijalankan dalam mode Access Point (AP) dan menggunakan Async Web Server, sehingga sistem tetap sederhana dan mudah diterapkan.

Alat pemberi pakan otomatis ini bekerja dengan menggerakkan servo motor untuk membuka dan menutup wadah pakan berdasarkan jadwal waktu tertentu. Penentuan waktu dilakukan menggunakan RTC (Real Time Clock) sehingga jadwal pemberian pakan tetap akurat meskipun ESP8266 dimatikan atau kehilangan daya. ESP8266 bertugas membaca waktu dari RTC, mengontrol servo sesuai jadwal, menampilkan status sistem pada LCD 16×2, serta menyediakan halaman web yang dapat diakses melalui HP atau laptop untuk memantau proses pemberian pakan.

Alat dan Bahan yang Dibutuhkan

Nama KomponenGambar Komponen
NodeMcu ESP8266
Servo SG-90
LCD 16×2 I2C
RTC DS1307
Kabel Jumper
Breadboard

Gambar Rangkaian

ESP8266Servo
Pin D4Kabel orange
Vin / VuKabel Merah
GNDKabel Cokelat
ESP8266 LCD I2C
D5SCL
D6SDA
Vin / VUVCC
GNDGND
ESP8266RTC DS1307
D5SCL
D6SDA
Vin / VUVCC
GNDGND

Cara Kerja Sistem

Cara kerja alat pemberi pakan otomatis ini adalah sebagai berikut:

  1. ESP8266 menginisialisasi sistem dan servo motor.
  2. Servo berada pada posisi awal (tertutup).
  3. Ketika sistem dijalankan, servo berputar untuk membuka wadah pakan.
  4. Setelah beberapa detik, servo kembali ke posisi awal.
  5. Status pemberian pakan ditampilkan pada LCD 16×2.
  6. Informasi status juga ditampilkan pada halaman web.

Library yang Digunakan

Pastikan library berikut sudah terpasang pada Arduino IDE:

  • ESP8266WiFi.h
  • ESPAsyncWebServer.h
  • ESPAsyncTCP.h
  • LiquidCrystal_I2C.h
  • Servo.h
  • RTClib.h

Code

#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <RTClib.h>

#define SERVO_PIN D4

LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo feederServo;
RTC_DS1307 rtc;
AsyncWebServer server(80);

const char* ssid = "SmartFeeder_AP";
const char* password = "12345678";

bool feeding = false;
bool alreadyFed = false;

int feedHour = 7;      // jam pemberian pakan
int feedMinute = 0;    // menit pemberian pakan
unsigned long feedStartMillis = 0;
const unsigned long feedDuration = 3000; // 3 detik

String feedingStatusText() {
  String text = "";

  if (feeding == true) {
    text = "PAKAN AKTIF";
  } else {
    text = "SIAP";
  }

  return text;
}

String htmlPage() {
  String html = "";
  html += "<!DOCTYPE html><html><head>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  html += "<title>Smart Feeder</title>";
  html += "</head><body>";
  html += "<h1>Smart Feeder ESP8266</h1>";
  html += "<p>Status: ";
  html += feedingStatusText();
  html += "</p>";
  html += "<p>Jadwal: 07:00</p>";
  html += "</body></html>";
  return html;
}

void setup() {
  lcd.init();
  lcd.backlight();

  feederServo.attach(SERVO_PIN);
  feederServo.write(0);

  rtc.begin();
  // SET WAKTU SEKALI SAJA JIKA RTC BARU
  // rtc.adjust(DateTime(2026, 2, 5, 7, 0, 0));

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/html", htmlPage());
  });

  server.begin();
}

void loop() {
  DateTime now = rtc.now();

  /* === Trigger Pakan === */
  if (feeding == false &&
      alreadyFed == false &&
      now.hour() == feedHour &&
      now.minute() == feedMinute) {

    feeding = true;
    feedStartMillis = millis();
    feederServo.write(90);
  }

  /* === Stop Servo === */
  if (feeding == true && millis() - feedStartMillis >= feedDuration) {
    feederServo.write(0);
    feeding = false;
    alreadyFed = true;
  }

  /* === Reset flag setelah menit berlalu === */
  if (now.minute() != feedMinute) {
    alreadyFed = false;
  }

  /* === LCD === */
  lcd.setCursor(0, 0);
  lcd.print("Time: ");
  lcd.print(now.hour());
  lcd.print(":");
  if (now.minute() < 10) {
    lcd.print("0");
  }
  lcd.print(now.minute());
  lcd.print("   ");

  lcd.setCursor(0, 1);
  lcd.print("Status: ");
  lcd.print(feedingStatusText());
  lcd.print("   ");

  delay(1000);
}

Cara Menggunakan Sistem

  • Pasang servo motor pada wadah pakan sehingga dapat membuka dan menutup dengan baik.
  • Rangkai servo dan LCD sesuai dengan skema koneksi.
  • Unggah program ke ESP8266 menggunakan Arduino IDE.
  • Nyalakan sistem dan pastikan servo bergerak dengan benar.
  • Hubungkan HP atau laptop ke jaringan WiFi SmartFeeder_AP.
  • Buka browser dan akses alamat IP 192.168.4.1 untuk memantau status sistem.