การสร้างนาฬิกากับ Arduino, ALED 0.91 "และ DS1307 RTC

Creating a Clock with the Arduino, a 0.91" OLED, and the DS1307 RTC

การสร้างนาฬิกาด้วย Arduino, จอแสดงผล OLED และโมดูลนาฬิกา DS1307 แบบเรียลไทม์ (RTC) เป็นโครงการที่สนุกและใช้งานได้จริง โมดูล DS1307 RTC ช่วยให้เวลาแม่นยำแม้ในขณะที่ Arduino ถูกขับออกไปในขณะที่ OLED ให้อินเทอร์เฟซที่ทันสมัยสำหรับการแสดงเวลาปัจจุบัน บทช่วยสอนนี้จะแนะนำคุณตลอดกระบวนการทีละขั้นตอน


สิ่งที่คุณต้องการ

  1. บอร์ด Arduino (เช่น uno, mega, nano)
  2. จอแสดงผล OLED 0.91 " (อินเทอร์เฟซ I2C)
  3. โมดูล DS1307 RTC
  4. เครื่องหั่นขนมปังและสายจัมเปอร์
  5. คอมพิวเตอร์ที่ติดตั้ง Arduino IDE
  6. ห้องสมุด: 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 คุณต้องมีไลบรารีต่อไปนี้:

  1. Adafruit SSD1306 (สำหรับ OLED)
  2. Adafruit GFX (ห้องสมุดกราฟิกสำหรับ OLED)
  3. rtclib (สำหรับฟังก์ชั่น RTC)

การติดตั้งไลบรารี

  1. เปิด Arduino IDE
  2. ไป ร่าง> รวมไลบรารี> จัดการไลบรารี.
  3. ค้นหาและติดตั้ง:
    • "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: ปรับแต่งจอแสดงผล

คุณสามารถปรับแต่งการแสดงนาฬิกาโดย:

  1. การเปลี่ยนขนาดข้อความ: ใช้ display.setTextSize() เพื่อปรับขนาดตัวอักษร
  2. การเพิ่มกราฟิก: ใช้ไลบรารี Adafruit GFX เพื่อวาดรูปร่างเช่นเส้นหรือสี่เหลี่ยม
  3. เวลาในการจัดรูปแบบ: เพิ่มรูปแบบ 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);

การแก้ไขปัญหา

  1. OLED ไม่แสดง:

    • ตรวจสอบให้แน่ใจว่าการจับคู่ที่อยู่ I2C (โดยทั่วไป 0x3C หรือ 0x3D).
    • ตรวจสอบการเชื่อมต่อสายไฟ
  2. RTC ไม่พบ:

    • ตรวจสอบการเชื่อมต่อ SDA และ SCL
    • ตรวจสอบให้แน่ใจว่ามีการใส่แบตเตอรี่ RTC อย่างถูกต้อง
  3. เวลาไม่ถูกต้อง:

    • ใช้ rtc.adjust() เพื่อตั้งค่าเวลาที่ถูกต้อง

แอปพลิเคชัน

  1. นาฬิกาโต๊ะ DIY
  2. ตัวจับเวลาและสัญญาณเตือนภัย
  3. นาฬิกาที่เปิดใช้งาน IoT พร้อมเซ็นเซอร์เพิ่มเติม
  4. โครงการการศึกษา

บทสรุป

ด้วยการรวม Arduino, 0.91 "OLED และ DS1307 RTC คุณสามารถสร้างนาฬิกาที่ถูกต้องและดึงดูดสายตาด้วยการปรับแต่งสองสามครั้งคุณสามารถปรับแต่งนาฬิกาให้เหมาะกับความต้องการของคุณหรือรวมเข้ากับโครงการขนาดใหญ่ เช่นการเตือนภัยหรือการซิงโครไนซ์อินเทอร์เน็ตเพื่อนำโครงการของคุณไปสู่อีกระดับ!

แสดงความคิดเห็น

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.