جدول المحتويات:

ساعة في الوقت الحقيقي مع اردوينو: 3 خطوات
ساعة في الوقت الحقيقي مع اردوينو: 3 خطوات

فيديو: ساعة في الوقت الحقيقي مع اردوينو: 3 خطوات

فيديو: ساعة في الوقت الحقيقي مع اردوينو: 3 خطوات
فيديو: الأردوينو في 6 ساعات | تعلم البرمجة والتحكم في الأشياء عن بُعد عملياً 2024, يوليو
Anonim
ساعة في الوقت الحقيقي مع اردوينو
ساعة في الوقت الحقيقي مع اردوينو

في هذا المشروع ، سنصنع ساعة بمساعدة وحدة Arduino و RTC. كما نعلم لا يمكن لـ Arduino عرض الوقت الفعلي لذلك سنستخدم وحدة RTC لعرض الوقت المناسب على شاشة LCD. اقرأ كل الخطوات بعناية ، فستساعدك كثيرًا على العمل على مدار الساعة.

كود DS3231 Arduino يشبه كود DS1307 ويعمل مع كل من شرائح RTC.

لا يستخدم كود Arduino الموجود أسفله أي مكتبة لـ DS3231 RTC ، ومكتبة Wire مخصصة للمراسلات بين Arduino و DS3231 باستخدام اتفاقية I2C.

نعم! يعتمد عليه العديد من مهندسي الإلكترونيات في مشاريعهم القائمة على الوقت ولكن RTC ليست موثوقة تمامًا. يعمل بالبطارية ويجب استبداله قريبًا أو لاحقًا. عند الوصول إلى مشاريع إنترنت الأشياء ، فإنها تحتل دبابيس SPI (الواجهة المحيطية التسلسلية) القيّمة وتصبح فوضوية مع تشابك الأسلاك حولها. الحل…. هنا يأتي بطلنا NTP (بروتوكول وقت الشبكة). NTP دقيق للغاية لأنه يحصل على وقت من الإنترنت. سنقوم بتشغيل هذا البروتوكول باستخدام وضع خادم العميل. العملية بسيطة للغاية لدرجة أن Nodemcu الخاص بنا يعمل كعميل ويطلب حزمة NTP من الخادم باستخدام UDP. في المقابل ، يرسل الخادم حزمة إلى العميل الذي يوزع البيانات. NTP هو بروتوكول مزامنة التوقيت العالمي. الآن دعونا نضيء محطة عمل مختبراتنا

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

  • لوحة اردوينو
  • لوحة DS3231 RTC
  • شاشة LCD مقاس 16 × 2
  • 2 × زر ضغط
  • 10 كيلو أوم المقاوم المتغير (أو مقياس الجهد)
  • 330 أوم المقاوم
  • 3V بطارية خلية عملة
  • اللوح
  • أسلاك العبور

RTC ميكل DS3231

الوقت هو معنى أساسي مطلوب في هذا العالم سريع الخطى للبشر. في مشروع الوقت الحقيقي

نحن نستخدم RTC (ساعة الوقت الحقيقي المعروفة باسم RTC)

RTC Real-time-clock (RTC) هي دائرة متكاملة (IC) تتعقب الوقت الحالي ، حيث يعتني RTC بالوقت في الوضع الحقيقي. عادة ما توجد RTC في اللوحات الأم للكمبيوتر والأنظمة المدمجة لتطلب الوصول في الوقت المناسب.

الخطوة 2: توصيل ساعة Arduino

اتصال ساعة اردوينو
اتصال ساعة اردوينو
  • قم بتوصيل دبوس SCL بوحدة RTC بوحدة Arduino A5
  • قم بتوصيل SDA pin بوحدة RTC بـ Arduino A4
  • قم بتوصيل VCC بـ 5 فولت و GND بـ GND
  • قم بتوصيل زر انضغاطي بالدبوس 8
  • قم بتوصيل زر انضغاطي آخر بالدبوس 9
  • قم بتوصيل RS الخاص بشاشات LCD بدبوس 2 من Arduino
  • قم بتوصيل E من LCD بالدبوس 3 من Arduino
  • قم بتوصيل D7 من LCD إلى طرف 7 من Arduino
  • قم بتوصيل D6 من LCD بدبوس 6 من Arduino
  • قم بتوصيل D5 من LCD بدبوس 5 من Arduino
  • قم بتوصيل D4 من LCD إلى طرف 4 من Arduino
  • قم بتوصيل VSS & K بـ GND
  • قم بتوصيل VDD & A بـ 5 فولت
  • قم بتوصيل فو إلى دبوس خرج مقياس الجهد

الخطوة 3: كود ساعة Arduino مع RTC

كود لساعة اردوينو مع RTC
كود لساعة اردوينو مع RTC

يعمل DS3231 مع تنسيق BCD فقط ولتحويل BCD إلى رقم عشري والعكس صحيح ، استخدمت السطرين أدناه (على سبيل المثال للدقيقة): // تحويل BCD إلى عشرية دقيقة = (دقيقة >> 4) * 10 + (دقيقة و 0 × 0F) ؛

// تحويل عشري إلى BCDminute = ((دقيقة / 10) << 4) + (دقيقة٪ 10) ؛ DS3231_display () باطل: يعرض الوقت والتقويم ، قبل عرض بيانات الوقت والتقويم يتم تحويلها من BCD إلى تنسيق عشري.

// ساعة وتقويم في الوقت الفعلي مع أزرار مضبوطة باستخدام DS3231 و Arduino // تتضمن رمز مكتبة LCD # تضمين // تضمين رمز مكتبة الأسلاك (مطلوب لأجهزة بروتوكول I2C) # تتضمن // اتصالات وحدة LCD (RS ، E ، D4 ، D5 ، D6 ، D7) LiquidCrystal LCD (2 ، 3 ، 4 ، 5 ، 6 ، 7) ؛ إعداد باطل () {pinMode (8، INPUT_PULLUP) ؛ // button1 متصل بـ pin 8 pinMode (9 ، INPUT_PULLUP) ؛ // button2 متصل بالدبوس 9 // قم بإعداد عدد الأعمدة والصفوف لشاشات الكريستال السائل lcd.begin (16 ، 2) ؛ Wire.begin () ؛ // انضم إلى i2c bus} char Time = "TIME:::"؛ تقويم char = "DATE: / / 20" ؛ بايت i ، ثانية ، دقيقة ، ساعة ، تاريخ ، شهر ، سنة ؛ DS3231_display () باطل {// تحويل BCD إلى الثانية العشرية = (الثانية >> 4) * 10 + (الثانية & 0x0F) ؛ دقيقة = (دقيقة >> 4) * 10 + (دقيقة & 0x0F) ؛ ساعة = (ساعة >> 4) * 10 + (ساعة & 0x0F) ؛ التاريخ = (التاريخ >> 4) * 10 + (التاريخ & 0x0F) ؛ الشهر = (الشهر >> 4) * 10 + (الشهر & 0x0F) ؛ year = (year >> 4) * 10 + (year & 0x0F) ؛ // وقت التحويل النهائي [12] =٪ 10 + 48 ثانية ؛ الوقت [11] = ثانية / 10 + 48 ؛ الوقت [9] = دقيقة٪ 10 + 48 ؛ الوقت [8] = دقيقة / 10 + 48 ؛ الوقت [6] = ساعة٪ 10 + 48 ؛ الوقت [5] = ساعة / 10 + 48 ؛ التقويم [14] = السنة٪ 10 + 48 ؛ التقويم [13] = سنة / 10 + 48 ؛ التقويم [9] = الشهر٪ 10 + 48 ؛ التقويم [8] = شهر / 10 + 48 ؛ التقويم [6] = التاريخ٪ 10 + 48 ؛ التقويم [5] = التاريخ / 10 + 48 ؛ lcd.setCursor (0 ، 0) ؛ lcd.print (الوقت) ؛ // عرض الوقت lcd.setCursor (0 ، 1) ؛ lcd.print (التقويم) ؛ // عرض التقويم} void blink_parameter () {byte j = 0 ؛ while (j 23) // إذا كانت الساعات> 23 ==> ساعات = 0 معلمة = 0 ؛ إذا (i == 1 && معلمة> 59) // إذا كانت الدقائق> 59 ==> minutes = 0 معلمة = 0 ؛ إذا (i == 2 && معلمة> 31) // إذا كان التاريخ> 31 ==> التاريخ = 1 معلمة = 1 ؛ إذا (i == 3 && معلمة> 12) // إذا كان الشهر> 12 ==> الشهر = 1 معلمة = 1 ؛ if (i == 4 && parameter> 99) // If year> 99 ==> year = 0 معلمة = 0 ؛ sprintf (نص ، "٪ 02u" ، معلمة) ؛ lcd.setCursor (س ، ص) ؛ lcd.print (نص) ؛ تأخير (200) ؛ // انتظر 200ms} lcd.setCursor (x، y) ؛ lcd.print ("") ؛ // عرض مسافتين blink_parameter () ؛ sprintf (نص ، "٪ 02u" ، معلمة) ؛ lcd.setCursor (س ، ص) ؛ lcd.print (نص) ؛ blink_parameter () ، إذا تم الضغط على (! digitalRead (8)) {// If button (pin # 8) i ++؛ // Increament 'i' لمعلمة إرجاع المعلمة التالية ؛ // قيمة معلمة الإرجاع والخروج}}} حلقة فارغة () {if (! digitalRead (8)) {// إذا تم الضغط على زر (دبوس # 8) i = 0 ؛ ساعة = تحرير (5 ، 0 ، ساعة) ؛ دقيقة = تحرير (8 ، 0 ، دقيقة) ؛ التاريخ = تحرير (5 ، 1 ، التاريخ) ؛ الشهر = تحرير (8 ، 1 ، شهر) ؛ السنة = تحرير (13 ، 1 ، سنة) ؛ // تحويل عشري إلى دقيقة BCD = ((دقيقة / 10) << 4) + (دقيقة٪ 10) ؛ الساعة = ((ساعة / 10) << 4) + (ساعة٪ 10) ؛ التاريخ = ((التاريخ / 10) << 4) + (التاريخ٪ 10) ؛ الشهر = ((الشهر / 10) << 4) + (الشهر٪ 10) ؛ year = ((year / 10) << 4) + (year٪ 10) ؛ // تحويل النهاية // كتابة البيانات إلى DS3231 RTC Wire.beginTransmission (0x68) ؛ // ابدأ بروتوكول I2C بعنوان DS3231 Wire.write (0) ؛ // إرسال عنوان السجل Wire.write (0) ؛ // إعادة تعيين sesonds وابدأ كتابة سلك المذبذب (بالدقيقة) ؛ // اكتب دقيقة Wire.write (ساعة) ؛ // اكتب ساعة Wire.write (1) ؛ // اكتب اليوم (غير مستخدم) Wire.write (التاريخ) ؛ // اكتب تاريخ Wire.write (شهر) ؛ // اكتب الشهر Wire.write (السنة) ؛ // اكتب سنة Wire.endTransmission () ؛ // إيقاف الإرسال وتحرير تأخير ناقل I2C (200) ؛ // انتظر 200 مللي ثانية} Wire.beginTransmission (0x68) ؛ // ابدأ بروتوكول I2C بعنوان DS3231 Wire.write (0) ؛ // إرسال عنوان التسجيل Wire.endTransmission (خطأ) ؛ // إعادة تشغيل I2C Wire.requestFrom (0x68، 7) ؛ // طلب 7 بايت من DS3231 وتحرير ناقل I2C في نهاية القراءة الثانية = Wire.read () ؛ // قراءة ثانية من التسجيل 0 دقيقة = Wire.read () ؛ // قراءة دقائق من السجل 1 ساعة = Wire.read () ؛ // قراءة ساعة من السجل 2 Wire.read () ؛ // يوم القراءة من السجل 3 (غير مستخدم) التاريخ = Wire.read () ؛ // تاريخ القراءة من التسجيل 4 شهر = Wire.read () ؛ // قراءة الشهر من التسجيل 5 سنوات = Wire.read () ؛ // قراءة السنة من التسجيل 6 DS3231_display () ؛ // وقت التشغيل وتأخير التقويم (50) ؛ // انتظر 50 مللي ثانية}

موصى به: