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

Real Time Clock (RTC) คืออะไร ?

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

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

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

อุปกรณ์

  1. CAT LoRa Starter Kit
  2. DS3231 Module

การต่อวงจร

Library ที่จำเป็น

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 กันครับ

More From Medium

Also tagged Lora

Related reads

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade