Pewaktu otomatis dengan arduino (aplikasi pemberi pakan ikan)

Pewaktu otomatis adalah perangkat bekerja menggunakan real time clock (RTC) sebagai basis waktu dan menghasilkan output aksi tepat pada waktu yang ditentukan.

setting waktu alarm

program ini akan setiap detik menmbandingkan/mencek apakah waktu alarm sama sama dengan waktu saat ini, untuk menentukan waktu alarm dalam contoh ini menggunakan 2 waktu alarm dengan cara mengatur variabel pada bagian ini :


#define waktuMakan1 DateTime(0, 1, 1, 8, 0, 0, 0)//jam 8 pagi
#define waktuMakan2 DateTime(0, 1, 1, 17, 0, 0, 0)//jam 5 sore

kelas date time diisi nilai tahun, bulan, tanggal, jam, menit, detik, hari.
namun untuk pengplikasian di sketch pemberi makanan ikan ini hanya diset bagian jam, menit dan detik dengan tujuan nilai waktu ini berulang setiap hari.

Waktu makan ikan

Pada contoh ini perangkat akan menggerakkan servo pemberi makan ikan pada jam 8 pagi dan jam 5 sore.

skema pemberi makan ikan menggunakan arduino :

 

koding/program feeder ikan berbasis arduino:

#define pinServoMakanan               A0
  
#define waktuBukaServo                1000//milidetik
#define servoBuka                     20//derajat
#define servoTutup                    60//derajat
  
#define waktuMakan1                   DateTime(0, 1, 1,  8, 0, 0, 0)//jam 8 pagi
#define waktuMakan2                   DateTime(0, 1, 1, 17, 0, 0, 0)//jam 5 sore
  
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "Sodaq_DS3231.h"
#include <Servo.h>
  
LiquidCrystal_I2C lcd(0x3F, 16, 2);//coba juga 0x27
Servo servoMakanIkan;
  
byte detikSebelumnya;
char buf[17];

  
void setup() {
  Serial.begin(9600);
  Serial.println("Pemberi pakan ikan otomatis");
  Serial.println("https://www.project.semesin.com");
    
  servoMakanIkan.attach(pinServoMakanan);
  servoMakanIkan.write(servoTutup);
  
  Wire.begin();
  rtc.begin();
  //DateTime dt(2011, 11, 10, 15, 18, 0, 5); // set tanggal dan waktu (format): tahun, bulan tanggal, jam, menit, detik, hari (1=minggu, 7=sabtu)
  //rtc.setDateTime(dt);
  
  Wire.beginTransmission(0x3F);
  if (Wire.endTransmission())
  {
    lcd = LiquidCrystal_I2C(0x27, 16, 2);
  }
  lcd.begin();
  
  lcd.backlight();
  
  lcd.print("Pemberi ");
  lcd.setCursor(0, 1);
  lcd.print("pakan ikan");
  delay(3000);
  lcd.clear();
  
  Serial.println("Sistem mulai");
  sprintf(buf, "Set waktu 1 = %02d:%02d (%lu)", waktuMakan1.hour(), waktuMakan1.minute(), waktuMakan1.get());
  Serial.println(buf);
  sprintf(buf, "Set waktu 2 = %02d:%02d (%lu)", waktuMakan2.hour(), waktuMakan2.minute(), waktuMakan2.get());
  Serial.println(buf);
}
  
void loop() {
  
  DateTime now = rtc.now();
  if (detikSebelumnya != now.second())
  {
    sprintf(buf, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    lcd.setCursor(4, 0);
    lcd.print(buf);
    Serial.print(buf);
  
    detikSebelumnya = now.second();
  
    uint32_t epoch = now.get() % 86400;//hanya jam menit detik
  
    if ((epoch == waktuMakan1.get()) ||
        (epoch == waktuMakan2.get()))
    {
      char buf[17];
      sprintf(buf, "Pakan = %02d:%02d", now.hour(), now.minute());
      lcd.setCursor(0, 1);
      lcd.print(buf);
      Serial.println(buf);
  
      servoMakanIkan.write(servoBuka);
      delay(waktuBukaServo);
      servoMakanIkan.write(servoTutup);
  
    }
  }
}

 

Library pemberi pakan ikan otomatis :

112 thoughts on “Pewaktu otomatis dengan arduino (aplikasi pemberi pakan ikan)

  1. Mas apa LiquidCrystal-I2C dan sodaq_ds3231 apa hrs download per artikel atau cukup download di salah satu artikel bisa buat di artikel lain mas….trims

    1. buka menu File -> Examples -> Sodaq_DS3231 -> adjust
      ubah tanggal dan waktu yang sesuai
      DateTime dt(2011, 11, 10, 15, 18, 0, 5);
      upload

      Update: setting waktu sudah ditambahkan pada sketch di artikel ini

  2. servo gk mau muter cuman per beberapa detik muter dikit tapi pas penjadwalan gk muter 60 itu gmn ya atur waktunya agak bingung buat ngatur waktunya mas tolong pencerahan

  3. bang kalo arduinonya mati jamnya ko ikut ke reset asalnya ya? gimana caranya agar jamnya masih lanjut kalau arduinonya mati?

    1. jika menggunakan sketch ini, pastikan baris 32-33 ‘di komen’

        //DateTime dt(2011, 11, 10, 15, 18, 0, 5); // set tanggal dan waktu (format): tahun, bulan tanggal, jam, menit, detik, hari (1=minggu, 7=sabtu)
        //rtc.setDateTime(dt);
      
      

      alternatif lain, cek baterai

  4. bang kalo settingan jam nya di setting lewat tombol berarti butuh library buat tombol juga ngga bang,trus untuk source code di ketikan setelah perintah rtc apa gimana bang..

    1. setting lewat tombol: bisa menggunakan library (kalo ada yang cocok) atau bisa saja di buat sendiri
      source code di ketikan: sebaiknya setelah rtc, boleh sebelum rtc sesuai kebutuhan

  5. bang nambahin waktu makan ikannya kok di bagian (epoch == waktuMakan3.get()) kok ada tulisan gini “exit status 1
    expression cannot be used as a function” gini ya bang?

    1. langkah:
      1. uncomment baris 32-33, sesuaikan data tanggal dan waktunya, kemudian upload (set rtc)
      2. comment lagi baris 32-33, dan upload (running)

      agak ribet karena menggunakan library rtc yang sederhana

  6. Bang, klo sy g pake lcd dari program d atas, baris berapa aja yg harus d hilangkan?
    Sy niatnya cuma pake arduino, rtc dan servo saja

  7. Terimakasih bang,
    Kalau mau mengganti Arduinonya ke node mcu,yang harus di ganti apa aja ya bg?
    SCL dan SDA nya RTC di hubungkan ke mana ya?

  8. Bang kok di LCD nya ada tulisan 45:165:165, saya udah cek RTC juga udah sesuai, dan sketch ini bisa untuk setiap hari? kalau tidak bagaimana caranya supaya bisa?

  9. Untuk yg menggunakan node mcu tadi bang,
    saya udah jalan sistemnya,tapi servonya ga bergerak,apa pengaruh di baris pertama ,saya ubahnya ke D7

  10. saya sudah mecoba dengan librari ds1302 namun ada masalah saat jam sudah di set aksinya buka pakan tapi servo muter terus,

    if(myRTC.hours == 14 & myRTC.minutes == 00 & myRTC.seconds == 1){
    Serial.print(“Waktunya Makan”);
    servoku.write(90);
    delay(1000);
    servoku.write(180);
    delay(1000);

  11. Setelah jamnya servo kok muter terus gan

    #include //librari rtc
    #include //librari servo

    virtuabotixRTC myRTC(6, 7, 8); //pin rtc
    Servo myservo;

    int pos = 0;

    void setup() {
    Serial.begin(9600);
    //myRTC.setDS1302Time(00, 9, 13, 2, 20, 02, 2018);
    myservo.attach(9); //pin servo
    }

    void loop() {
    myRTC.updateTime();
    Serial.print(“Tanggal / Waktu: “);
    Serial.print(myRTC.dayofmonth);
    Serial.print(“/”);
    Serial.print(myRTC.month);
    Serial.print(“/”);
    Serial.print(myRTC.year);
    Serial.print(” “);
    Serial.print(myRTC.hours);
    Serial.print(“:”);
    Serial.print(myRTC.minutes);
    Serial.print(“:”);
    Serial.println(myRTC.seconds);

    if (myRTC.hours == 13 & myRTC.minutes == 27 & myRTC.seconds == 1) {
    Serial.println(“Waktunya Makan”);
    readservo();
    delay(2000);
    }

    }

    void readservo()
    {
    for (pos = 0; pos = 0; pos -= 5) { // goes from 180 degrees to 0 degrees
    myservo.write(pos); // tell servo to go to position in variable ‘pos’
    delay(10); // waits 15ms for the servo to reach the position
    }

    }

  12. Permisi bng, izin nanya, kenapa detik yang ditmpilkan pada lcd tampil sekali 2 detik, missal 1,3,5,7,9,11,13,15, seharusnya jarak tampil detik yaitu sekali 1 datik, missal 1,2,3,4,5,6,7,8,9,10..
    Kalau seperti itu gimana solusinya bng, apakah salah dikodingan atau ada yg salah pada komponen?? Mohon pencerahannya🙏

  13. maaf mas mau tanya, kalau saya mau buat skemanya di proteus gmana ya? apa bisa pakai program ini? soalnya saya cari gaada rtc ds3231 dan saya juga gaterlalu ngerti

  14. Kang kenapa saat pakai nodemcu servo nya tidak bergerak saat jamnya ya, padahal sistem udah berjalan dan tidak ditemukan error, mohon pencerahan kang

Leave a Reply

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