Skip to content

Membuat Dispenser Makanan Kucing dari 0 Hanya Berbekal ChatGPT โ€“ Hari 2


๐Ÿพ [Jurnal Hari 2] Merakit Otak Dispenser: Arduino, RTC, Servo, dan Tombol

https://chatgpt.com/share/687c732b-38b8-800b-ab2c-8631a24b3949

Hari ini Tia dan saya memulai langkah pertama membuat dispenser makanan kucing otomatis, langsung dari nol, hanya berbekal:

  • Arduino Uno
  • Servo motor
  • RTC DS3231
  • Sensor ultrasonik HC-SR04
  • Breadboard dan kabel jumper
  • Push button (tombol manual)

๐ŸŽฏ Tujuan Hari Ini:

  • Membuat sistem yang bisa:
    • Memberi makan otomatis saat jam tertentu
    • Deteksi apakah mangkuk sudah kosong atau belum
    • Bisa diberi makan manual lewat tombol

๐Ÿ”ง Proses Langkah demi Langkah

1. Menghubungkan RTC DS3231 dan Servo

RTC ini akan memberi waktu yang akurat untuk menentukan jam makan. Kami menggunakan jam 07:00 dan 17:00 sebagai waktu makan default. Ketika waktu itu tiba dan mangkuk kosong, maka servo akan bergerak membuka katup makanan.

2. Menambahkan Sensor Jarak HC-SR04

Sensor ini digunakan untuk mendeteksi apakah mangkuk kucing sedang kosong. Jika jaraknya terlalu pendek, berarti mangkuk masih penuh dan sistem tidak akan memberi makan agar tidak mubazir.

3. Menambahkan Tombol Manual

Kami menambahkan tombol dengan 4 kaki (push button standar). Setelah dites, sistem dapat mendeteksi saat tombol ditekan, dan memberi makan kapan pun pemilik menekan tombol itu โ€” sangat berguna kalau ingin memberi makan lebih awal dari jadwal.


๐Ÿง  Logika Program

Program Arduino ditulis agar:

  • Servo hanya bergerak jika jam tepat dan mangkuk kosong
  • Tombol bisa ditekan kapan pun untuk memberi makan manual
  • Setiap fitur tetap aktif tanpa saling mengganggu

๐Ÿงช Hasil Hari Ini

โœ… Sistem berhasil bekerja:

  • Waktu dikenali dengan tepat oleh RTC
  • Sensor jarak bisa membedakan mangkuk penuh/kosong
  • Tombol berfungsi baik dan responsif

๐Ÿšง Catatan & Rencana Lanjut

  • Tombol awalnya kurang responsif (butuh ditekan lama), jadi kode ditulis ulang agar mendeteksi tekan cepat dengan logika state change.
  • Rencana berikutnya: menambahkan LCD untuk menampilkan jam, status mangkuk, dan info aksi terakhir.
  • Setelah sistem kontrol beres, kami akan mulai mendesain mekanik katup makanan dan wadah untuk dicetak 3D.

๐Ÿ“ธ Dokumentasi Gambar/Video


โœ๏ธ Penutup

Hari pertama ini jadi pondasi utama sistem. Dengan sensor dan logika waktu yang sudah berfungsi, sistem ini siap dikembangkan jadi alat nyata yang bisa membantu pemilik kucing sibuk seperti saya.

Dispenser ini bukan hanya soal teknologi, tapi juga kenyamanan dan perhatian untuk teman berbulu kita. ๐Ÿ˜บ


#include <Wire.h>
#include <RTClib.h>
#include <Servo.h>

RTC_DS3231 rtc;
Servo myservo;

// Waktu makan
const int jamMakan1 = 7;
const int jamMakan2 = 17;
bool sudahKasihMakan = false;

// HC-SR04
const int trigPin = 7;
const int echoPin = 6;

// Tombol manual
const int tombolPin = 3;
bool tombolSudahDitekan = false;

void setup() {
  Serial.begin(9600);
  myservo.attach(9);
  rtc.begin();

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(tombolPin, INPUT_PULLUP); // tombol aktif LOW

  if (rtc.lostPower()) {
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

float bacaJarak() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  float distance = duration * 0.034 / 2;
  return distance;
}

void kasihMakan() {
  Serial.println("Memberi makan...");
  myservo.write(90);   // Buka
  delay(1000);         // Tunggu 1 detik
  myservo.write(0);    // Tutup
}

void loop() {
  DateTime now = rtc.now();
  float jarak = bacaJarak();
  bool mangkukKosong = jarak > 10.0;  // sesuaikan sesuai mangkukmu

  bool tombolSekarang = digitalRead(tombolPin) == LOW;

  Serial.print("Waktu: ");
  Serial.print(now.hour());
  Serial.print(":");
  Serial.print(now.minute());
  Serial.print(" | Jarak: ");
  Serial.print(jarak);
  Serial.print(" cm | Mangkuk kosong: ");
  Serial.print(mangkukKosong ? "Ya" : "Tidak");
  Serial.print(" | Tombol: ");
  Serial.println(tombolSekarang ? "DITEKAN" : "Lepas");

  // Otomatis kasih makan saat waktu tiba & mangkuk kosong
  if ((now.hour() == jamMakan1 || now.hour() == jamMakan2) &&
      !sudahKasihMakan && mangkukKosong) {
    kasihMakan();
    sudahKasihMakan = true;
  }

  // Reset status makan saat jam sudah berganti menit
  if (now.minute() != 0) {
    sudahKasihMakan = false;
  }

  // Manual via tombol - hanya sekali per tekan
  if (tombolSekarang && !tombolSudahDitekan) {
    kasihMakan();
    tombolSudahDitekan = true;
  }

  // Reset deteksi tombol setelah dilepas
  if (!tombolSekarang) {
    tombolSudahDitekan = false;
  }

  delay(100); // Cek tombol dan sensor tiap 0.1 detik
}
Tags: