By | 21/01/2020

Helo Sahabat Anak Kendali.

Pada kesempatan kali ini saya akan berbagi artikel tentang Tutorial Arduino Set Alarm RTC DS3231 dengan Android Bluetooth dan EEPROM

Modul Latihan Arduino Nano dibuat oleh saya sendiri dengan menggunakan bahan pcb kualitas pabrik, yang sangat berguna untuk pemula mempelajari pemograman arduino, selain itu banyak sekali pilihan paket modul latihan arduino yang dapat di pesan dan di beli langsung melalui saya sendiri dengan cara menghubungi nomor wa saya yang berada di pojok kiri bawah halaman ini.

RTC DS3231

Modul RTC DS3231 merupakan modul real time clock yang menurut saya sangat akurat dan sangat kecil prosentase error terhadap waktu yang sebenarnya,
dengan menggunakan Modul RTC DS3231 kita dapat membuat jam atau sistem pewaktuan yang bisa menyesuaikan dengan mengikuti waktu pada komputer atau laptop kita. dan ketika mikrokontroler atau arduino tidak memiliki daya, waktu yang sudah di rekam oleh modul RTC tidak akan hilang, sehingga saat kita nyalakan kembali waktu akan tetap mengikuti dengan waktu kita sekarang, dengan catatan batre cmos yang menempel pada modul RTC DS3231 tidak pernah terlepas.

banyak sekali aplikasi yang dapat kita buat menggunakan modul RTC DS3231 seperti
membuat jam digital dengan LCD 16×2,
membuat jam digital dengan dot matrix,
membuat jadwal waktu sholat masjid,
membuat timer pertandingan,

dan masih banyak aplikasi penggunaan modul RTC DS3231.

Bluetooth

Bluetooth (gigi biru) merupakan komunikasi wireless atau nirkabel yang sudah lama di temukan dan banyak di aplikasikan pada perangkat smartphone atau komputer, seingat saya bluetooth keluar setelah zaman dimana handphone masih menggunakan inframerah untuk saling transfer data.

Pada artikel kali ini saya menggunakan Bluetooth tipe HC-05 yang diakses oleh modul latihan arduino nano supaya dapat berkomunikasi dengan smartphone, karena pada tutorial kali ini smart phone akan digunakan sebagai alat yang dapat mengatur waktu alarm.

EEPROM

EEPROM merupakan salah satu fitur yang terdapat pada mikrokontroler arduino nano yang berfungsi sebagai memori penyimpanan data, selain eeprom arduino nano juga banyak memiliki jenis memori seperti flash memory dan memory sram.

Baca mengenai EEPROM : https://www.anakkendali.com/2018/02/14/cara-mengakses-eeprom-arduino/

EEPROM merupakan memori yang dapat menyimpan data dan tidak akan hilang meskipun catu daya atau arduino dalam keadaan mati atau reset.
jika di ibaratkan pada komputer, EEPROM merupakan hardisk yang dapat menyimpan berbagai file data, dan tidak akan terhapus meskipun komputer dimatikan atau di reset, namun data pada EEPROM dapat di tulis berulang ulang sampai ribuan kali tetapi tidak unlimited (tetap ada batasnya).

Cara Kerja Alat

Modul Arduino Nano menampilkan data waktu tanggal dan jam pada lcd 16×2, dan ketika ada perintah dari smartphone berupa data alarm tanggal jam dan menit, maka secara otomatis modul arduino akan menyimpan data yang di kirim dari smortphone tadi, kemudian saat waktu dari modul RTC DS3231 sama dengan data yang tersimpan, maka buzzer yang ada pada modul latihan arduino akan menyala.

Untuk cara mengirim data alarm dari smartphone harus dengan format seperti ini
“|set-tanggal|set-jam|set-menit|” contoh nya sebagai berikut :

|12|4|30

artinya alarm di set pada tanggal 12 jam 4 menit ke 30.

aplikasi yang digunakan bisa dari aplikasi arduino bluetooth yang ada pada playstore, atau jika kamu ingin membuat aplikasi sendiri juga sangat bisa, dan saya menawarkan jasa pembuatan aplikasi sesuai kebutuhan dan keinginan kamu. jika berminat langsung saja hubungi melalui WA dengan cara klik tombol WA yang berada di pojok kiri bawah.

Code Arduino

berikut adalah code arduino untuk mengatur alarm menggunakan android dengan komunikasi bluetooth

Download Code

atau bisa juga langsung copy paste di bawah ini

#include <SoftwareSerial.h>
#include <EEPROM.h>
#include <Wire.h>
#include "RTClib.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define tahun now.year()
#define bulan now.month()
#define tanggal now.day()
#define hari daysOfTheWeek[now.dayOfTheWeek()]
#define jam now.hour()
#define menit now.minute()
#define detik now.second()


SoftwareSerial SerialBT (10, 11);

LiquidCrystal_I2C lcd(0x27, 16, 2);

RTC_DS3231 rtc;

int count_h = 0;

int index1, index2, index3, index4;
int al_jam, al_menit, al_tanggal;

char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};

char buff[30];
String data;

void setup() {
  // put your setup code here, to run once:
  SerialBT.begin(9600);
  Serial.begin(9600);
  
#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif  
  lcd.begin();
  delay(3000);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  pinMode(5, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  while (SerialBT.available() > 0) {
    delay(10);
    char c = SerialBT.read();
    data += c;
  }
  if (data.length() > 0) {
    Serial.println (data);

    index1 = data.indexOf('|');
    index2 = data.indexOf('|', index1+1);
    index3 = data.indexOf('|', index2+1);
    index4 = data.indexOf('|', index3+1);

    al_tanggal = data.substring(index1+1, index2).toInt();
    al_jam = data.substring(index2+1, index3).toInt();
    al_menit = data.substring(index3+1, index4).toInt();
    
    EEPROM.write(0, al_tanggal);
    EEPROM.write(1, al_jam);
    EEPROM.write(2, al_menit);
    
    data = "";
  }

  tampil_jam();
}

void tampil_jam() {
  lcd.clear();
  DateTime now = rtc.now();

  // berikut ini program supaya jam tampil lebih bagus jika nilainya kurang dari 10
  // seharusnya tampil 1:12:23 >> 01:12:23

  if (jam  < 10 && menit < 10 && detik < 10) {
    sprintf (buff, "0%d:0%d:0%d", jam, menit, detik);
  }
  if (jam  < 10 && menit < 10 && detik >= 10) {
    sprintf (buff, "0%d:0%d:%d", jam, menit, detik);
  }
  if (jam  < 10 && menit >= 10 && detik >= 10) {
    sprintf (buff, "0%d:%d:%d", jam, menit, detik);
  }
  if (jam  >= 10 && menit >= 10 && detik >= 10) {
    sprintf (buff, "%d:%d:%d", jam, menit, detik);
  }
  if (jam  >= 10 && menit >= 10 && detik < 10) {
    sprintf (buff, "%d:%d:0%d", jam, menit, detik);
  }
  if (jam  >= 10 && menit < 10 && detik < 10) {
    sprintf (buff, "%d:0%d:0%d", jam, menit, detik);
  }
  if (jam  < 10 && menit >= 10 && detik < 10) {
    sprintf (buff, "0%d:%d:0%d", jam, menit, detik);
  }
  if (jam  >= 10 && menit < 10 && detik >= 10) {
    sprintf (buff, "%d:0%d:%d", jam, menit, detik);
  }

  // tampil lcd
  lcd.setCursor(4, 0);
  lcd.print(buff);

  //serial monitor
//  Serial.print ("Jam : ");
//  Serial.print (buff);
//  Serial.print("\n");

  sprintf (buff, "%s,%d-%d-%d", hari, tanggal, bulan, tahun);
  lcd.setCursor(1, 1);
  lcd.print(buff);
  delay(2000);
//  Serial.print ("Tanggal : ");
//  Serial.print (buff);
//  Serial.print("\n");
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Alarm diset pada");
  al_tanggal = EEPROM.read(0);
  al_jam = EEPROM.read(1);
  al_menit = EEPROM.read(2);
  lcd.setCursor(0,1);
  lcd.print("tgl:");
  lcd.print(al_tanggal);
  lcd.print(" - ");
  lcd.print(al_jam);
  lcd.print(":");
  lcd.print(al_menit);

  if (al_tanggal == tanggal && al_jam == jam && al_menit == menit){
    // kasih buzzer atau apapun di sini
    digitalWrite(5, 1);
  }
  delay(2000);
  digitalWrite(5, 0);
}

mungkin cukup itu saja apa yang bisa saya bagikan kali ini, semoga bermanfaat, dan jangan lupa untuk meninggalkan komentar di bawah!

One Reply to “Tutorial Arduino Set Alarm RTC DS3231 dengan Android Bluetooth dan EEPROM”

  1. Wawan Setiawan

    Mas mau tanya itu untuk board utamanya bikin sendiri ya? boleh minta layout pcb nya mas saya tertarik buat bikin automatic lamp aquarium.

    Terima kasih

    Reply

Leave a Reply

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