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 :
bang kenapa pas di upload bagian si salah terus
coba detailkan lagi permasalahan saat upload/compile ???
apa librarynya sudah di install…
mau nanya itu format datetime (thn, bulan, tgl, jam,menit,detik, s) bukan ya?
dari librarynya
DateTime (uint16_t year, uint8_t month, uint8_t date,
uint8_t hour, uint8_t min, uint8_t sec, uint8_t wday);
bang bagian lcd.begin kenapa gak kebaca?
gunakan library LiquidCrystal-I2C.zip yang ada di artikel
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
secara keseluruhan menggunakan library yang sama,
tapi lebih baik (tapi tidak harus) gunakan library per atikel, karena kadang-kadang librarynya ada update tertentu
now was not declarated, gimana bang?
install library yang disertakan dalam artikel ini,
jika sudah ada library yang sama, backup/pindahkan dulu lalu diganti dengan library ini untuk kompabilitas
Mau tanya bg, jam nya knapa tidak benar ya bg
koding di artikel ini tidak bisa mengatur jam rtc.
untuk mengatur jam rtc gunakan program example rtc adjust yang ada di librarynya
bang kalo misal mau diset motor servo gerak tiap pukul 16:20, 22:20 gimana caranya ?
atur baris 7 dan 8
#define waktuMakan1 DateTime(0, 1, 1, 16, 20, 0, 0)//jam 8 pagi
#define waktuMakan2 DateTime(0, 1, 1, 22, 20, 0, 0)//jam 5 sore
maaf Bang, pemrogramanya udah sama sensor belum?
program di artikel ini tidak memakai sensor
jadi gerakan servo sesuai waktu rtc
Bang saya sudah upload tadi kok gak ada tampilan sama sekali di layar?
Apa yg didalam kurumg progam loop harus dibuat?
kemungkinan alamat i2cnya berbeda (umumnya 0x3f dan 0x27)
koding di artikel ini sudah diupdate agar bisa terhubung ke lcd i2c manapun, silahkan coba copy paste dan upload lagi
bang, kenapa codinganya ga langsung bisa?
tersus . library sodaq_Ds3231.zip dan liqud crystal-12c.zip untuk apa?
library adalah kumpulan fungsi-sungsi yang diperlukan dalam coding program/sketch
mesti di-install/pasang dulu
codinganya eror di lcd.begin()
instal library yang disertakan di artikel ini
codingnya udah bener, sekarang alatnya ga jalan bang
servonya ga jalan bang
servo hanya bekerja (membuka) pada waktu yang ditentukan selama 1000ms (waktuBukaServo)
waktu sudah ditentukan tapi ga jalan
dan cara ngatur waktunya agar sesuai WIB gimna bang ?
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
terimakasih banyak atas semuanya bang
tulisan di lcd cuman 45:165:165 mas giimana ya?
itu indikasi rtc tidak normal
cek pengkabelan rtc : terhubung, dan tidak terbalik pin2nya
bang, agar waktu makannya bisa empat kali gimana ?
Bang alat yg dibutuhkan apa saja ?
mas fungsi epoch pada coding di atas gunanya untuk apa ya ?
thanks
epoch disini bisa diartikan jumlah detik ~~ (jam*3600) + (menit*60) + detik
bang perintah epoch itu untuk apa ?
[copy]
epoch disini bisa diartikan jumlah detik ~~ (jam*3600) + (menit*60) + detik
perintah servo untuk aktif bagian mana ya ? setting waktu sudah benar tapi servonya ga mau aktif
servoMakanIkan.write(servoBuka);
servo tidak jalan:
:cek pengkabelan servo
:cek power supply untuk servo
:pastikan setting waktu dan rtc sudah benar
mas untuk menambahkan perintah pakannya agar sehari bisa 5 kali yg di tambahin bagian mana saja ya ?
tambahkan “waktuMakan” : waktuMakan1 – 5
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
Sebaiknya test terpisah dulu servonya (misal dengan koding example library servo)
Bang dapetin alat*nya dimana?
Kisaran harganya brapa bang?
Makasih
komponen bisa di beli di toko mikrokontroler / toko komponen elektronik
harga sangat bervariasi, bisa di cek sendiri
Bang.. kalau menggunakan LCD Keypad Shield dan nyeting waktunya ditombol lcd, penambahan programnya gimana bang?
mesti dibuatkan program untuk meng-handle tombol (guna menyetting jadwal)
lihat juga https://www.project.semesin.com/2018/03/17/pengaturan-alarm-dengan-arduino-dan-rtc-ds1307-melalui-4-tombol/
bang kalo arduinonya mati jamnya ko ikut ke reset asalnya ya? gimana caranya agar jamnya masih lanjut kalau arduinonya mati?
jika menggunakan sketch ini, pastikan baris 32-33 ‘di komen’
alternatif lain, cek baterai
Bang saya gak pakai I2C bisa engga yah
bisa, sesuaikan pin2 lcd dan deklarasi lcd.begin()
Mas mau tanya ngatur lama waktu bukanya servo gimana
pada baris 3, atur parameter ‘waktuBukaServo’
Library servo bawaan dari arduino IDE ya mas
betul
Saya kan mulai on alatnya jam 4 sore apakah nanti jam 5 servo nya berputar soalnya baru selesai pengerjaanya tadi
pastikan waktu di RTC sesuai dengan jam sekarang
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..
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
bang programnya error di #include Sodaq_DS3231.h” ini knapa ya bang,
Install librarynya, bisa di download pada link bagian bawah artikel
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?
cek lagi penulisannya
contoh:
if ((epoch == waktuMakan1.get()) ||
(epoch == waktuMakan1.get()) ||
(epoch == waktuMakan3.get()))
Program yang harus dihilangkan kalo cuman pake arduino sama servo apa saja bang?
lebih baik gunakan program example arduino+servo
Maaf bang kalau lcdnya di ganti pakai led buat indikatornya caranya gimana ya.??
pasang len di pin 7, kemudian sisipkan kode berikut :
pinMode(7, OUTPUT);
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(7, LOW);
Maaf mas mau tanya.. kalau di serial monitor keluarnya tanda tanya kenapa ya.?? Padahal setingan boudratenya sudah sama
sepertinya masalah yang unik, bisa jadi masalah di hardwarenya
Mengatur waktu agar sesuai dengan jam gimana Kang Asep?
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
Kalo saya mau menjalankan fungsi tiap minggu itu jadinya gimana yah? masukin fungsi tersebut ke void loop()?
sketch ini hanya untuk harian (24 jam)
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
35-48
63-64
76-77
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?
nodemcu :: sda – D2, scl – D1
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?
pembacaan rtc muncul 165 mengindikasikan rtc belum konek
sketch ini bisa untuk setiap hari
kalau menggunakan ds1302 bisa tidak mas dengan library ini
gak bisa, mesti pake library khusus ds1302
Ada contoh gak mas, yang pakai librari ds1302 soalnya sudah terlanjur beli. Mau tak pakai buat pakan ikan di aquarium ku
belum ada (jarang yang pake)
bisa saja dengan ds1302, coba mulai dengan example library ds1302
Untuk yg menggunakan node mcu tadi bang,
saya udah jalan sistemnya,tapi servonya ga bergerak,apa pengaruh di baris pertama ,saya ubahnya ke D7
sesuaikan dengan pin pemasangan servonya
set pinServoMakanan d7, dan pasang signal servo di pin d7
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);
apakah servo anda sudah berjalan lancar?tolong saya butuh bantuan,
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
}
}
periksa bagian
for (pos = 0; pos = 0; pos -= 5)
misalnya jadikan
for (pos = 180; pos >= 0; pos -= 1)
Ini cuma 24 jam aja yq bang? Kalo dibuat sampe seminggu ngulang tiap hari itu gmana bang?
betul, cuma 24 jam
untuk mingguan ganti epochnya
uint32_t epoch = now.get() % (7 * 24 * 60 * 60);
cat: perlu diperhatikan base minggunya, mesti dihitung berdasarkan penanggalan (jika diperlukan)
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🙏
koding asli di halaman ini sudah di test dan tampil normal
jika ada modifikasi periksa kemungkinan adanya delay
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
Gunakan komponen DS3232
kalau tidak pakai lcd gimana bang caranya ?
boleh ngga di pasang lcd-nya
koding/program di copy ke mana bang ?
saya baru mau belajar, mohon pencerahannya
arduino IDE
Servo nya ga gerak kira kira masalah dimana ya bang?
yang umum terjadi kekurangan arus/daya
coba servo-nya di beri daya dari power supply/adaptor langsung (ampere lebih besar lebih bagus)
bang gimana caranya, tampilin harinya juga bang?
tambahkan baris
char strNamaHari[7][7] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
lcd.setCursor(x,y);
lcd.print(strNamaHari[now.dayOfTheweek()]);
Bagaimana jika arduinonya diganti dengan nodemcu?
bisa saja tapi dengan beberapa penyesuaian
Kang kenapa saat pakai nodemcu servo nya tidak bergerak saat jamnya ya, padahal sistem udah berjalan dan tidak ditemukan error, mohon pencerahan kang
kesalahan umum : salah penomoran pin
selamat pagi ka, library sodaq buat ap aya?
library untuk rtc ds3231
bang kalo waktunya dibuat 20 detik sekali gimana codingnya?
banyak cara, salah satunya :