DS1307 นาฬิกาเวลาจริง (RTC) เป็นโมดูลที่ใช้กันอย่างแพร่หลายสำหรับการรักษาเวลาในโปรเจกต์ Arduino มันคงเวลาได้อย่างแม่นยำแม้เมื่อ Arduino ถูกปิดเครื่อง ด้วยแบตเตอรี่สำรองบนบอร์ด ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีการเชื่อมต่อและเขียนโปรแกรม โมดูล RTC DS1307 กับ Arduino เพื่อแสดงและอัปเดตเวลา.
สิ่งที่คุณต้องมี
- บอร์ด Arduino (เช่น Uno, Mega, Nano)
- โมดูล RTC DS1307
- เบรดบอร์ดและสายจัมเปอร์
- คอมพิวเตอร์ที่ติดตั้ง Arduino IDE แล้ว
- ไลบรารี: RTClib
ขั้นตอนที่ 1: การต่อสายของ โมดูล RTC DS1307
DS1307 นาฬิกาเวลาจริง สื่อสารกับ Arduino ผ่านโปรโตคอล I2C.
การเชื่อมต่อ
| ขา RTC | พิน Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
หมายเหตุ: หากใช้บอร์ด Arduino ที่มีขา SDA และ SCL เฉพาะ (เช่น Mega) ให้เชื่อมต่อขา SDA/SCL ของ RTC เข้ากับขาเหล่านั้นแทน
ขั้นตอนที่ 2: การติดตั้งไลบรารีที่จำเป็น
ในการทำงานกับ DS1307 นาฬิกาเวลาจริง (RTC), คุณจะต้องใช้ RTClib ห้องสมุด.
ขั้นตอนการติดตั้ง RTClib
- เปิด Arduino IDE
- ไปที่ สเก็ตช์ > เพิ่มไลบรารี > จัดการไลบรารี.
- ค้นหา "RTClib" ในตัวจัดการไลบรารี
- คลิก ติดตั้ง.
ขั้นตอนที่ 3: อัปโหลดโค้ดตัวอย่าง
นี่คือตัวอย่างสเก็ตช์เพื่อแสดงวันที่และเวลาปัจจุบันจาก โมดูล DS1307:
ตัวอย่างโค้ด
#include
#include
RTC_DS1307 rtc;
void setup() {
Serial.begin(9600);
// Initialize the RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Check if the RTC is running
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running! Setting the time...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
// Display the time
Serial.print(now.hour());
Serial.print(":");
if (now.minute() < 10) {
Serial.print("0");
}
Serial.print(now.minute());
Serial.print(":");
if (now.second() < 10) {
Serial.print("0");
}
Serial.println(now.second());
// Display the date
Serial.print(now.day());
Serial.print("/");
Serial.print(now.month());
Serial.print("/");
Serial.println(now.year());
delay(1000); // Update every second
}
ขั้นตอนที่ 4: การปรับเวลา
หาก RTC ไม่ทำงานหรือจำเป็นต้องอัปเดตเวลา คุณสามารถใช้บรรทัดต่อไปนี้ใน setup() ฟังก์ชัน:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
-
F(__DATE__)และF(__TIME__)เป็นแมโครที่ตั้งค่าวันที่และเวลาจากคอมพิวเตอร์ของคุณเมื่อคุณอัปโหลดสเก็ตช์
ในการตั้งเวลาเฉพาะด้วยตนเอง ให้ใช้:
rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS
ขั้นตอนที่ 5: การใช้ข้อมูล RTC ในโปรเจกต์ของคุณ
นั้น DS1307 สามารถให้ข้อมูลเวลาได้สำหรับการใช้งานหลากหลายประเภท เช่น:
- การบันทึกข้อมูล: ประทับเวลาการอ่านค่าของเซ็นเซอร์หรือเหตุการณ์.
- นาฬิกาปลุกและตัวจับเวลา: เรียกใช้การดำเนินการตามเวลาที่เฉพาะเจาะจง
- นาฬิกา: สร้างนาฬิกาดิจิทัลหรืออนาล็อกพร้อมจอแสดงผล
ตัวอย่าง: การเรียกใช้การดำเนินการในเวลาเฉพาะเจาะจง
void loop() {
DateTime now = rtc.now();
// ตรวจสอบว่าเป็นเวลา 8:00 AM หรือไม่
if (now.hour() == 8 && now.minute() == 0 && now.second() == 0) {
Serial.println("ตอนนี้เป็นเวลา 8:00 AM!");
}
delay(1000);
}
การแก้ไขปัญหา
-
ไม่พบ RTC:
- ตรวจสอบการเชื่อมต่อ SDA และ SCL
- ตรวจสอบให้แน่ใจว่าติดตั้งแบตเตอรี่อย่างถูกต้อง
-
เวลาไม่ถูกต้อง:
- ใช้
rtc.adjust()เพื่อรีเซ็ตเวลา - ตรวจสอบว่าแบตเตอรี่ RTC หมดไฟหรือหายไปหรือไม่
- ใช้
-
ข้อมูลไม่สอดคล้องกัน:
- ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟมีความเสถียรสำหรับ Arduino และโมดูล RTC
การประยุกต์ใช้ของ DS1307 RTC
- นาฬิกาแบบเรียลไทม์และนาฬิกาปลุก
- ระบบอัตโนมัติตามเวลา
- การบันทึกข้อมูลพร้อมการประทับเวลา
- ระบบเตือนความจำ
สรุป
โมดูล RTC DS1307 เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการเพิ่มความสามารถด้านการรักษาเวลาให้กับโปรเจกต์ Arduino ของคุณ โดยทำตามคู่มือนี้ คุณสามารถตั้งค่า RTC แสดงเวลาและวันที่ และนำไปประยุกต์ใช้กับแอปพลิเคชันต่างๆ ทดลองผสานรวมการ DS1307 กับจอแสดงผลหรือเซ็นเซอร์เพื่อสร้างโปรเจ็กต์ที่มีความไดนามิกยิ่งขึ้น!






1 ความคิดเห็น
Beim Verwenden des Befehls rtc.adjust(DateTime(F(DATE), F(TIME))); wird der sketch zwar fehlerlos kompiliert und hochgeladen, beim Ausführen des Programms stürzt das Programm aber ab, was auch zur Folge hat, dass die USB-Verbindung zum PC crasht und ein Hochladen von sketchs nicht mehr möglich ist. Abhilfe schafft dann nur ein Trick?. Nach einem Doppelclick auf die Reset-Taste des Boards funktioniert die USB-Verbindung wieder.