Pembacaan sensor dengan arduino dapat dilakukan kapan saja dan dimana saja dalam sketch arduino sesuai kebutuhan. Penjadwalan diperlukan untuk mendapatkan nilai dari sensor dalam rentang tertentu atau pada waktu-waktu khusus misalnya baca sensor saat gerhana matahari. Jika menginginkan sensor dibaca hanya pada waktu-waktu tertentu saja berdasarkan RTC dapat menggunakan metode berikut:
- Metode pergantian waktu, yaitu aksi pembacaan sensor dilakukan ketika satuan waktu berubah, contohnya setiap detik, setiap menit dan seterusnya. contoh :
if (detikSebelumnya != now.second() ) { detikSebelumnya = now.second(); bacaSensor(); }
- Metode modulus waktu, yaitu pembacaan sensor dilakukan pada setiap kelipatan satuan waktu, seperti pembacaan sensor setiap 2 detik, setiap 30 detik dan seterusnya. Contohnya :
if (!(now.second() % periodaBacaSensor) ) { bacaSensor(); }
- Metode rentang waktu, yaitu pembacaan sensor dilakukan selama waktu pada rentang waktu tertentu. Contohnya :
if ((now.hour() >= 20) || (now.hour() < 3)) { bacaSensor(); }
- Metode Tabel, yaitu pembacaan sensor sesuai waktu yang ditetapkan berdasarkan tanggal dan waktu tertentu, (pembacaan hanya dilakukan 1 kali). Contohnya:
if (now.getEpoch() == databaseJadwal[i].getEpoch()) { bacaSensor(); }
Rangkaian yang digunakan pada pembacaan sensor sesuai jadwal tertentu berbasis rtc:
berikut kode/sketch penjadwalan pembacaan sensor menggunakan rtc pada arduino:
#define pinSensor A0 #include <Wire.h> #include "Sodaq_DS3231.h" DateTime set = {2020, 2, 22, 7, 0, 0, 1}; DateTime now; DateTime databaseJadwal[] = { {2020, 2, 22, 7, 0, 3, 1}, {2020, 2, 23, 7, 0, 0, 1}, {2020, 2, 24, 7, 0, 0, 1}, {2020, 2, 25, 7, 0, 0, 1}, {2020, 2, 26, 7, 0, 0, 1}, {2020, 2, 27, 7, 0, 0, 1}, }; byte detikSebelumnya; byte menitSebelumnya; #define periodaBacaSensor 5//detik void bacaSensor() { analogRead(pinSensor); } void setup() { Serial.begin(9600); Serial.println("Penjadwalan pembacaan sensor berbasis RTC"); Serial.println("https://www.project.semesin.com"); Serial.println(); Wire.begin(); rtc.begin(); now = rtc.now(); // if (now.year() == 2000) { rtc.setDateTime(set); } } void loop() { now = rtc.now(); if (detikSebelumnya != now.second() ) { char bufWaktu[32]; sprintf(bufWaktu, "%02d:%02d:%02d %02d-%02d-%04d", now.hour(), now.minute(), now.second(), now.date(), now.month(), now.year()); Serial.println(bufWaktu); //pembacaan setiap detik detikSebelumnya = now.second(); Serial.println("setiap detik"); bacaSensor(); //pembacaan setiap 2 detik if (now.second() % 2) { Serial.println("setiap 2 detik"); bacaSensor(); } //pembacaan setiap detik ke-5 if (now.second() == 5) { Serial.println("setiap detik ke-5"); bacaSensor(); } //pembacaan setiap n detik (n 1..60) if (!(now.second() % periodaBacaSensor) ) { Serial.println("setiap n detik"); bacaSensor(); } //pembacaan setiap 937 detik (berlaku untuk x detik 1..~) if (!(now.getEpoch() % 937) ) { Serial.println("setiap 937 detik"); bacaSensor(); } //pembacaan setiap menit if (menitSebelumnya != now.minute() ) { Serial.println("setiap menit"); menitSebelumnya = now.minute(); bacaSensor(); } //pembacaan setiap 3 jam = 00:00, 03:00, 06:00, 09:00, 12:00, 15:00, 18:00, 21:00 if (!(now.hour() % 3) && !now.minute() && !now.second()) { Serial.println("setiap 3 jam"); bacaSensor(); } //pembacaan dalam rentang waktu if ((now.hour() >= 7) && (now.hour() < 10))//jam 07:00 - jam 09:59 { Serial.println("pembacaan dalam rentang waktu 1"); bacaSensor(); } else if ((now.hour() >= 11) && (now.hour() < 15))//jam 11:00 - jam 14:59 { Serial.println("pembacaan dalam rentang waktu 2"); bacaSensor(); } else if ((now.hour() >= 20) || (now.hour() < 3))//jam 20:00 - jam 02:59 { Serial.println("pembacaan dalam rentang waktu 3"); bacaSensor(); } //pembacaan berdasarkan tabel waktu for (byte i = 0; i < sizeof(databaseJadwal) / sizeof(DateTime); i++) { if (now.getEpoch() == databaseJadwal[i].getEpoch()) { Serial.print("tabel waktu = "); Serial.println(i); bacaSensor(); } } } }
library :
Mas pada coding diatas, bagian “databaseJadwal” itu urutan bacanya gimana ya ?
DateTime databaseJadwal[] = {
{2020, 2, 22, 7, 0, 3, 1},
{2020, 2, 23, 7, 0, 0, 1},
{2020, 2, 24, 7, 0, 0, 1},
{2020, 2, 25, 7, 0, 0, 1},
{2020, 2, 26, 7, 0, 0, 1},
{2020, 2, 27, 7, 0, 0, 1},
Tahun, ?, ??,?,?,?
tahun, bulan, tanggal, jam, menit, detik, hari
(hari minggu = 1, sabtu = 7)
Bang kok yang tiap 3 jam nya gak jalan,kenapa ya?
contoh diatas hanya pada jam 00:00, 03:00, 06:00, 09:00, 12:00, 15:00, 18:00, 21:00