إنشاء ساعة مع Arduino و 0.91 "OLED و 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. لوحة أردوينو (على سبيل المثال ، UNO ، Mega ، Nano)
  2. 0.91 "شاشة OLED (واجهة I2C)
  3. DS1307 وحدة RTC
  4. الأسلاك الأسلاك والبلوز
  5. جهاز كمبيوتر مع Arduino IDE مثبت
  6. المكتبات: Adafruit SSD1306 ، Adafruit GFX ، و RTCLIB

الخطوة 1: توصيل المكونات

OLED عرض الأسلاك (I2C)

دبوس OLED دبوس أردوينو
VCC 5V
GND GND
SDA A4
SCL A5

DS1307 RTC Module Wiring (I2C)

PIN RTC دبوس أردوينو
VCC 5V
GND GND
SDA A4
SCL A5

ملحوظة: إذا كان استخدام لوحة Arduino مع دبابيس SDA و SCL مخصصة (على سبيل المثال ، MEGA) ، قم بتوصيل دبابيس OLED و RTC SDA/SCL لتلك بدلاً من ذلك.


الخطوة 2: تثبيت المكتبات المطلوبة

للعمل مع شاشة OLED و DS1307 RTC ، تحتاج إلى المكتبات التالية:

  1. Adafruit SSD1306 (لـ OLED)
  2. Adafruit GFX (مكتبة الرسومات لـ OLED)
  3. RTCLIB (لوظيفة RTC)

تثبيت المكتبات

  1. افتح Arduino IDE.
  2. اذهب إلى رسم> تضمين مكتبة> إدارة المكتبات.
  3. ابحث عن وتثبيت:
    • "Adafruit SSD1306"
    • "مكتبة Adafruit GFX"
    • "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 Desk Clock
  2. أجهزة ضبط الوقت والإنذارات
  3. الساعة التي تدعم إنترنت الأشياء مع أجهزة استشعار إضافية
  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.