يعد بناء ساعة مع Arduino ، وشاشة OLED ، ووحدة DS1307 في الوقت الفعلي (RTC) مشروعًا ممتعًا وعمليًا. تحتفظ وحدة DS1307 RTC بوقت دقيق حتى عندما يتم تشغيل Arduino ، بينما توفر OLED واجهة أنيقة لعرض الوقت الحالي. سوف يرشدك هذا البرنامج التعليمي خلال العملية خطوة بخطوة.
ماذا ستحتاج
- لوحة أردوينو (على سبيل المثال ، UNO ، Mega ، Nano)
- 0.91 "شاشة OLED (واجهة I2C)
- DS1307 وحدة RTC
- الأسلاك الأسلاك والبلوز
- جهاز كمبيوتر مع Arduino IDE مثبت
- المكتبات: 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 ، تحتاج إلى المكتبات التالية:
- Adafruit SSD1306 (لـ OLED)
- Adafruit GFX (مكتبة الرسومات لـ OLED)
- RTCLIB (لوظيفة RTC)
تثبيت المكتبات
- افتح Arduino IDE.
- اذهب إلى رسم> تضمين مكتبة> إدارة المكتبات.
- ابحث عن وتثبيت:
- "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: تخصيص العرض
يمكنك تخصيص عرض الساعة بواسطة:
-
تغيير حجم النص: يستخدم
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 Desk Clock
- أجهزة ضبط الوقت والإنذارات
- الساعة التي تدعم إنترنت الأشياء مع أجهزة استشعار إضافية
- المشاريع التعليمية
خاتمة
من خلال الجمع بين Arduino ، وهو 0.91 "OLED ، و DS1307 RTC ، يمكنك إنشاء ساعة دقيقة وجذابة بصريًا. مع بعض التعديلات ، يمكنك تخصيص الساعة لتناسب احتياجاتك أو دمجها في مشاريع أكبر. مثل الإنذارات أو مزامنة الإنترنت لنقل مشروعك إلى المستوى التالي!