กลับไปหน้ารวมไฟล์
set-time-with-ds3231-rtc-arduino-ide-58afbf.md

ความเที่ยงตรงระดับเทพ: ทำไมต้อง DS3231 RTC?

ปกติบอร์ด Microcontroller ทั่วไปเนี่ย นาฬิกาข้างในมันไม่ได้เรื่องหรอกน้อง พอดับไฟปุ๊บ เวลาก็รีเซ็ตปั๊บ อย่างกาก! เราเลยต้องหาตัวช่วยอย่าง Real-Time Clock (RTC) รุ่น DS3231 มาจัดการ เพราะมันมีแบตเตอรี่ก้อนกลมๆ คอยสำรองไฟให้ ต่อให้ถอดปลั๊กหลักออก เวลาก็ยังเดินต่อชิลๆ โปรเจกต์นี้พี่จะพาน้องมาเซ็ตเวลาและ Sync เจ้า DS3231 เป็นครั้งแรกด้วย Arduino Mega 2560 รับรองว่าแก้ปัญหาเรื่อง Library ที่น้องๆ ชอบเจอกันแน่นอน จัดไปวัยรุ่น!

ทำไมต้อง DS3231? DS1307 ไม่ดีเหรอ?

จริงๆ มันก็ใช้ได้ทั้งคู่นะ แต่ DS3231 มันแม่นกว่า DS1307 รุ่นพี่มันเยอะ!

  • Temperature Compensation: ตัวนี้มีระบบ "Temperature-Compensated Crystal Oscillator" (TCXO) ปรับแต่งความถี่ตามอุณหภูมิอัตโนมัติ ไม่ว่าจะร้อนจนตับแตกหรือหนาวจนสั่น เวลาก็ยังเป๊ะ คลาดเคลื่อนไม่เกิน 1-2 นาทีต่อปีเองนะน้อง
  • Integrated Crystal: ต่างจาก DS1307 ตรงที่ตัว Crystal มันฝังมาในชิปเลย ลดสัญญาณรบกวน แถมประหยัดพื้นที่บน PCB ด้วย
  • Communication Interface: ใช้การเชื่อมต่อแบบ I2C Protocol ซึ่งถ้าใช้ Arduino Mega ก็เสียบที่ Pins 20 (SDA) และ 21 (SCL) ได้เลย ห้ามหลงนะ!

เรื่องของ Software: อย่าหลงทางในดง Library

การหา Library ที่ "ใช่" นี่แหละคือจุดปราบเซียนของมือใหม่

  1. Library Selection: พี่เลือกใช้ DS1307RTC ของ Paul Stoffregen (v 1.4.1) เพราะมันนิ่งมาก และมันจัดการเรื่อง TimeLib ให้เราเสร็จสรรพ
  2. The SetTime Sketch: เราจะใช้โค้ดตัวอย่าง "SetTime" ตัวนี้แหละจะไปดึงเวลาจากคอมพิวเตอร์ตอนที่เรากด Upload แล้ว "Flash" ลงไปใน Registers ของ RTC ทันที
  3. Serial Verification: พอ Upload เสร็จ ก็เปิด Serial Monitor มาดูเลย มันจะอ่านค่าจาก Registers กลับมาโชว์ ถ้าเวลาตรงกับคอมฯ ก็แสดงว่าหล่อเท่แล้วน้อง มันจะเดินของมันเองไปได้อีกหลายปีเลย สู้งานนะน้อง!

ต่อยอดในอนาคต: แสดงผลให้โลกเห็น

พอนาฬิกาเรามี "สมอง" ที่แม่นยำแล้ว ขั้นต่อไปก็คือเอาไปโชว์บนจอซะหน่อย พี่แนะนำให้หา I2C LCD (16x2) มาต่อ น้องจะได้มีนาฬิกาดิจิทัลเท่ๆ ไว้ตั้งโต๊ะหรือทำโปรเจกต์ Home Automation โดยไม่ต้องง้อสาย USB เสียบคาคอมพิวเตอร์ตลอดเวลา สบายแฮ!

ตอนเป็นมือใหม่พี่ก็งมอยู่นานเหมือนกันกว่าจะทำให้ RTC มันทำงานได้ พี่ใช้โมดูล Holdding DS3231RTC แต่หาไฟล์โปรเจกต์กับ Library ไหนก็ใช้ไม่ได้สักที สุดท้ายไปเจอใน Library Manager ชื่อ DS1307RTC v. 1.4.1 นี่แหละเวิร์คสุด พ่วง TimeLib มาให้ด้วย เดี๋ยวโปรเจกต์หน้าจะเอามาโชว์บนจอ [LCD](https://s.shopee.co.th/6AfsSPcAnb) I2C ให้ดูนะวัยรุ่น

Library

หา Library ตัวนี้ได้ใน Library Manager เลย

Search คำว่า: DS1307RTC

Actual RTC Component

พี่หาตัว DS3231 RTC เป๊ะๆ ในส่วน Component ไม่เจอ เอาเป็นว่าพี่ใช้ตัวนี้นะ:

Holdding DS3231 AT24C32 IIC Module Precision Real Time Clock Memory Module/Precise Time Clock Module with Temperature-compensated Crystal Oscillator

Link Amazon: (ลบออกตามกฎนะจ๊ะ)

Layout

ไม่ต้องใช้ Breadboard ก็ได้ถ้ามีสาย Jumper แบบ Male to Female

หน้าตา Serial Monitor จะประมาณนี้

ข้อมูล Frontmatter ดั้งเดิม

title: "Set Time with DS3231 RTC-Arduino IDE"
description: "My First DS1307 (DS3231) RTC-Set Time using Arduino IDE"
author: "Tishin"
category: ""
tags:
  - "ds3231"
  - "clock"
  - "rtc"
  - "ds1307"
  - "mega"
views: 27403
likes: 2
price: 299
difficulty: "Easy"
components:
  - "1x Arduino Mega 2560"
  - "1x Real Time Clock (RTC)"
  - "1x Jumper wires (generic)"
tools: []
apps:
  - "1x Arduino IDE"
  - "1x Arduino Web Editor"
  - "1x circuito.io"
downloadableFiles:
  - "https://create.arduino.cc/editor/Tishin/fa43ab38-5447-446b-bd53-81ef00379cba/preview"
documentationLinks: []
passwordHash: "e4038a479bfda189f537e9ddba4fc9094a203ba24ff4313236fa722525fe8345"
encryptedPayload: "U2FsdGVkX1/xtVQsaRqNnNF6ILJQGpImtS3McU6Eilk4eRit4FHPLXZ6AO43ntwEkcIvvjzKNTlSQW3vS/5v6HLlT8Dlmw5ybvmudAEmbwRIPmsj8S2D2krQdb/EANe7h/VhezUzLBmC+vNqq3JHlg=="
seoDescription: "Learn how to set Time with DS3231 RTC and DS1307 using Arduino IDE for your first Arduino projects."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/set-time-with-ds3231-rtc-arduino-ide-58afbf_cover.jpg"
lang: "th"