การต่อใช้งาน RTC Module กับ LCD I2C ด้วย Arduino UNO
Real Time Clock (RTC) คือ อุปกรณ์ที่ให้ค่าเวลาตามจริง ทำงานโดยการจับสัญญานนาฬิกาที่ได้มาจาก Crystal บางรุ่นจะมีถ่านสำรองมาให้เพื่อให้สามารถบันทึกเวลาได้ถึงแม้ว่าจะไม่มีไฟเลี้ยงมาที่ตัวบอร์ด ทำให้ไม่ต้องตั้งเวลาใหม่ทุกครั้ง โมดูล RTC นี้จำเป็นอย่างยิ่งกับการใช้งานที่ต้องมีการบันทึกเวลา (Time Stamp) เช่น อุปกรณ์ Data loggerความจริง Arduino Board มีตัวจับเวลาอยู่แล้ว เช่นการใช้ฟังก์ชัน millis() เป็นต้น แต่การประมวลผลคำสั่งของ Arduino จะทำงานแบบ อนุกรม (Serial) คือ ทำทีละบรรทัด ทำให้การทำงานของคำสั่งจับเวลาก็จะถูกรบกวนจากการประมวลผลคำสั่งอื่น ๆ ไปด้วย เวลาที่ได้จากการใช้คำสั่งนี้เลยไม่สามารถนำมาเป็นเวลาตามจริงที่ต้องการบันทึกไปพร้อมกับค่าอื่น ๆ ที่ต้องการวัดได้ ดังนั้น ในการประยุกต์ใช้กับงานที่ต้องการเวลาที่แม่นยำ และสามารถบอก วันที่ เดือน ปี ชั่วโมง นาที วินาที จึงต้องใช้อุปกรณ์ที่ทำหน้าที่จับเวลาแยก
DS3231 เป็น RTC Module ที่มีข้อดีคือ มีการชดเชยการเปลี่ยนแปลงของสัญญาณนาฬิกา เนื่องจากการเปลี่ยนแปลงของอุณหภูมิแวดล้อมด้วย ทำให้เวลาที่ได้มีความแม่นยำสูง
อุปกรณ์
- Arduino UNO
- RTC DS3231
- LCD 16x2
- 1602 2004 LCD Adapter Plate IIC I2C Interface
การต่อวงจร
ไลบรารี
ตัวอย่าง 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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น