การสร้างนาฬิกาด้วย Arduino, จอแสดงผล OLED และโมดูลนาฬิกา DS1307 แบบเรียลไทม์ (RTC) เป็นโครงการที่สนุกและใช้งานได้จริง โมดูล DS1307 RTC ช่วยให้เวลาแม่นยำแม้ในขณะที่ Arduino ถูกขับออกไปในขณะที่ OLED ให้อินเทอร์เฟซที่ทันสมัยสำหรับการแสดงเวลาปัจจุบัน บทช่วยสอนนี้จะแนะนำคุณตลอดกระบวนการทีละขั้นตอน
สิ่งที่คุณต้องการ
- บอร์ด Arduino (เช่น uno, mega, nano)
- จอแสดงผล OLED 0.91 " (อินเทอร์เฟซ I2C)
- โมดูล DS1307 RTC
- เครื่องหั่นขนมปังและสายจัมเปอร์
- คอมพิวเตอร์ที่ติดตั้ง Arduino IDE
- ห้องสมุด: Adafruit SSD1306, Adafruit GFX และ RTCLIB
ขั้นตอนที่ 1: การเดินสายส่วนประกอบ
การเดินสายจอแสดงผล OLED (I2C)
หมุดโอเลด | พิน Arduino |
---|---|
VCC | 5V |
gnd | gnd |
SDA | A4 |
SCL | A5 |
การเดินสายโมดูล DS1307 RTC (I2C)
RTC PIN | พิน Arduino |
---|---|
VCC | 5V |
gnd | gnd |
SDA | A4 |
SCL | A5 |
บันทึก: หากใช้บอร์ด Arduino ที่มีพิน SDA และ SCL เฉพาะ (เช่น Mega) ให้เชื่อมต่อ OLED และ RTC SDA/SCL กับพินแทน
ขั้นตอนที่ 2: การติดตั้งไลบรารีที่ต้องการ
ในการทำงานกับ OLED Display และ DS1307 RTC คุณต้องมีไลบรารีต่อไปนี้:
- Adafruit SSD1306 (สำหรับ OLED)
- Adafruit GFX (ห้องสมุดกราฟิกสำหรับ OLED)
- rtclib (สำหรับฟังก์ชั่น RTC)
การติดตั้งไลบรารี
- เปิด Arduino IDE
- ไป ร่าง> รวมไลบรารี> จัดการไลบรารี.
- ค้นหาและติดตั้ง:
- "Adafruit SSD1306"
- "Adafruit GFX Library"
- "rtclib"
ขั้นตอนที่ 3: อัปโหลดรหัส
นี่คือรหัสที่จะแสดงเวลาปัจจุบันของ OLED โดยใช้โมดูล DS1307 RTC:
รหัสตัวอย่าง
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
// OLED display width and height
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
// Create an instance of the display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Create an instance of the RTC
RTC_DS1307 rtc;
void setup() {
Serial.begin(9600);
// Initialize the OLED display
if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
// 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(); // Get the current time
// Clear the display
display.clearDisplay();
// Display the time
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print(now.hour(), DEC);
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute(), DEC);
// Display the date
display.setTextSize(1);
display.setCursor(0, 20);
display.print(now.day(), DEC);
display.print("/");
display.print(now.month(), DEC);
display.print("/");
display.print(now.year(), DEC);
// Show the display buffer
display.display();
delay(1000); // Update every second
}
ขั้นตอนที่ 4: ปรับเวลา
หาก RTC ไม่ทำงานหรือต้องอัปเดตเวลาบรรทัดต่อไปนี้ในไฟล์ setup()
ฟังก์ชั่นตั้งค่า RTC เป็นเวลาปัจจุบัน:
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: ปรับแต่งจอแสดงผล
คุณสามารถปรับแต่งการแสดงนาฬิกาโดย:
-
การเปลี่ยนขนาดข้อความ: ใช้
display.setTextSize()
เพื่อปรับขนาดตัวอักษร - การเพิ่มกราฟิก: ใช้ไลบรารี Adafruit GFX เพื่อวาดรูปร่างเช่นเส้นหรือสี่เหลี่ยม
- เวลาในการจัดรูปแบบ: เพิ่มรูปแบบ AM/PM หรือ 24 ชั่วโมงตามต้องการ
ตัวอย่าง: การเพิ่ม AM/PM
int hour = now.hour();
String period = "AM";
if (hour >= 12) {
period = "PM";
if (hour > 12) hour -= 12;
}
if (hour == 0) hour = 12;
display.print(hour);
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute());
display.print(" ");
display.print(period);
การแก้ไขปัญหา
-
OLED ไม่แสดง:
- ตรวจสอบให้แน่ใจว่าการจับคู่ที่อยู่ I2C (โดยทั่วไป
0x3C
หรือ0x3D
). - ตรวจสอบการเชื่อมต่อสายไฟ
- ตรวจสอบให้แน่ใจว่าการจับคู่ที่อยู่ I2C (โดยทั่วไป
-
RTC ไม่พบ:
- ตรวจสอบการเชื่อมต่อ SDA และ SCL
- ตรวจสอบให้แน่ใจว่ามีการใส่แบตเตอรี่ RTC อย่างถูกต้อง
-
เวลาไม่ถูกต้อง:
- ใช้
rtc.adjust()
เพื่อตั้งค่าเวลาที่ถูกต้อง
- ใช้
แอปพลิเคชัน
- นาฬิกาโต๊ะ DIY
- ตัวจับเวลาและสัญญาณเตือนภัย
- นาฬิกาที่เปิดใช้งาน IoT พร้อมเซ็นเซอร์เพิ่มเติม
- โครงการการศึกษา
บทสรุป
ด้วยการรวม Arduino, 0.91 "OLED และ DS1307 RTC คุณสามารถสร้างนาฬิกาที่ถูกต้องและดึงดูดสายตาด้วยการปรับแต่งสองสามครั้งคุณสามารถปรับแต่งนาฬิกาให้เหมาะกับความต้องการของคุณหรือรวมเข้ากับโครงการขนาดใหญ่ เช่นการเตือนภัยหรือการซิงโครไนซ์อินเทอร์เน็ตเพื่อนำโครงการของคุณไปสู่อีกระดับ!