วันพฤหัสบดีที่ 17 พฤษภาคม พ.ศ. 2561

Real Time Clock (RTC) Module + LCD I2C

การต่อใช้งาน RTC Module กับ LCD I2C ด้วย Arduino UNO

Real Time Clock  (RTC) คือ อุปกรณ์ที่ให้ค่าเวลาตามจริง ทำงานโดยการจับสัญญานนาฬิกาที่ได้มาจาก Crystal  บางรุ่นจะมีถ่านสำรองมาให้เพื่อให้สามารถบันทึกเวลาได้ถึงแม้ว่าจะไม่มีไฟเลี้ยงมาที่ตัวบอร์ด  ทำให้ไม่ต้องตั้งเวลาใหม่ทุกครั้ง  โมดูล RTC นี้จำเป็นอย่างยิ่งกับการใช้งานที่ต้องมีการบันทึกเวลา (Time Stamp) เช่น อุปกรณ์ Data logger

ความจริง Arduino Board มีตัวจับเวลาอยู่แล้ว เช่นการใช้ฟังก์ชัน millis() เป็นต้น  แต่การประมวลผลคำสั่งของ Arduino จะทำงานแบบ อนุกรม (Serial) คือ ทำทีละบรรทัด ทำให้การทำงานของคำสั่งจับเวลาก็จะถูกรบกวนจากการประมวลผลคำสั่งอื่น ๆ ไปด้วย  เวลาที่ได้จากการใช้คำสั่งนี้เลยไม่สามารถนำมาเป็นเวลาตามจริงที่ต้องการบันทึกไปพร้อมกับค่าอื่น ๆ ที่ต้องการวัดได้  ดังนั้น ในการประยุกต์ใช้กับงานที่ต้องการเวลาที่แม่นยำ และสามารถบอก วันที่ เดือน ปี ชั่วโมง นาที วินาที  จึงต้องใช้อุปกรณ์ที่ทำหน้าที่จับเวลาแยก

DS3231 เป็น RTC Module ที่มีข้อดีคือ มีการชดเชยการเปลี่ยนแปลงของสัญญาณนาฬิกา เนื่องจากการเปลี่ยนแปลงของอุณหภูมิแวดล้อมด้วย ทำให้เวลาที่ได้มีความแม่นยำสูง

อุปกรณ์

  1. Arduino UNO
  2. RTC DS3231
  3. LCD 16x2
  4. 1602 2004 LCD Adapter Plate IIC I2C Interface

การต่อวงจร

ไลบรารี


  1. LiquidCrystal_I2C
  2. RTC DS3231

ตัวอย่าง Code



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Date, Time and Alarm functions using a DS3231 RTC connected via I2C and Wire lib

#include "Wire.h"
#include "SPI.h"  // not used here, but needed to prevent a RTClib compile error
#include "RTClib.h"

RTC_DS3231 RTC;

void setup () {

  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
  RTC.adjust(DateTime(__DATE__, __TIME__));

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  DateTime now = RTC.now();
  /* ตั้งเวลา ในตัวอย่างนี้ เซตค่าเป็นเวลา 23:09 ถ้าถึงเวลานี้จะให้ทำงานที่ฟังก์ชัน 
    RTC.setAlarm1Simple(23, 9);
   if (RTC.checkIfAlarm(1)) {
   Serial.println("Alarm Triggered");
   }*/
  RTC.setAlarm1Simple(23, 9);

  RTC.turnOnAlarm(1);

  if (RTC.checkAlarmEnabled(1)) {
    Serial.println("Alarm Enabled");
  }

}

void loop () {

  DateTime now = RTC.now();
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(' ');
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);

  if (RTC.checkIfAlarm(1)) {
    Serial.println("Alarm Triggered");
  }

  Serial.println();
  Serial.print("Tempeature = ");
  Serial.print(RTC.getTemperature()); // คำสั่งดึงอุณหภูมิออกมาแสดง
  Serial.println(" C");

  Serial.println("By ArduinoALL");
  Serial.println();
  delay(1000);
}

บรรณานุกรม


  • Arduitronics. (2558). Real Time Clock DS3231. เข้าถึงได้จาก https://www.arduitronics.com/article/35/real-time-clock-ds3231
  • Arduinoall. (2558). DS3231 สอน วิธี ใช้งาน Arduino DS3231 + AT24C32 โมดูลนาฬิกา ใช้ได้ใน 3 นาที. เข้าถึงได้จาก https://www.arduinoall.com/article/26/ds3231-%E0%B8%AA%E0%B8%AD%E0%B8%99-%E0%B8%A7%E0%B8%B4%E0%B8%98%E0%B8%B5-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-arduino-ds3231-at24c32-%E0%B9%82%E0%B8%A1%E0%B8%94%E0%B8%B9%E0%B8%A5%E0%B8%99%E0%B8%B2%E0%B8%AC%E0%B8%B4%E0%B8%81%E0%B8%B2-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B9%84%E0%B8%94%E0%B9%89%E0%B9%83%E0%B8%99-3-%E0%B8%99%E0%B8%B2%E0%B8%97%E0%B8%B5

ไม่มีความคิดเห็น:

แสดงความคิดเห็น