สวัสดีครับ ในบทความนี้เราจะมาเพิ่ม Real Time Clock (RTC) ให้แก่บอร์ด CAT LoRa Starter Kit กันครับ

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

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

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

  1. CAT LoRa Starter Kit
  2. DS3231 Module

DS3231 Real-Time Clock: https://github.com/jarzebski/Arduino-DS3231

เปิดดูใน Terminal

  1. include ไลบรารี่ชื่อ Wire.h และ DS3231.h เข้ามาในโปรเจค
  2. สร้าง clock object โดยใช้คำสั่ง DS3231 clock; หรือ DS3231 clock = new DS3231(); ก็ได้
  3. เปิดใช้งาน clock ในฟังชันก์ setup() โดยใช้คำสั่ง clock.begin();
  4. ตั้งค่าเวลาเริ่มต้นโดย ในกรณีที่เชื่อมต่อกับคอมพิวเตอร์ผ่าน USB เราจะตั้งค่าเวลาเป็นเวลาปัจจุบันของเครื่องคอมพิวเตอร์ โดยใช้คำสั่ง clock.setDateTime(__DATE__, __TIME__);
    แต่ถ้าต่อกับแหล่งจ่ายไฟโดยตรงจะใช้ค่าเดิมที่เคยตั้งไว้แล้ว ซึ่งการ setDateTime(…) นี้มีได้หลายรูปแบบสามารถดูได้จาก DS3231.h
  5. การเรียกเวลาปัจจุบันจะใช้คำสั่ง RTCDateTime dt = clock.getDateTime(); ซึ่งจะได้ object ของ RTCDateTime ซึ่งจะมี 8 Attribute คืิอ year, month, day, hour, minute, second, dayOfWeek และ unixtime
  6. สามารถดึงค่าอุณหภูมิได้โดยใช้คำสั่ง clock.readTemperature(); แต่เนื่องจาก DS3231 จะทำการอัปเดตค่าอุณหภูมิทุก ๆ 64 วินาที ดังนั้นถ้าเราต้องการดึงค่าอุณหภูมิ ณ ปัจจุบันเราต้องใช้คำสั่ง clock.forceConversion(); ก่อนการเรียกค่าอุณหภูมิ

ก็ขอจบบทความนี้แต่เพียงเท่านี้ สำหรับบทความหน้าจะเป็นการนำ DS3231 มาประยุกต์ใช้งาน โดยการตั้งเวลาการเปิด-ปิดหลอดไฟ LED ผ่านระบบเครือข่าย CAT LoRa กันครับ