جدول المحتويات:
- الخطوة 1: توصيل الوحدة النمطية الخاصة بك بـ Arduino
- الخطوة 2: قراءة وكتابة الوقت من وحدة RTC النمطية الخاصة بك
- الخطوه 3:
فيديو: استخدام وحدات ساعة الوقت الحقيقي DS1307 و DS3231 مع Arduino: 3 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:38
نستمر في تلقي طلبات حول كيفية استخدام وحدات الساعة في الوقت الفعلي DS1307 و DS3231 مع Arduino من مصادر مختلفة - لذلك هذا هو الجزء الأول من برنامج تعليمي مكون من جزأين حول كيفية استخدامها. في هذا البرنامج التعليمي من Arduino ، لدينا وحدتان للساعة في الوقت الفعلي لاستخدامهما ، واحدة تستند إلى Maxim DS1307 (الوحدة النمطية المربعة) و DS3231 (الوحدة المستطيلة).
هناك اختلافان رئيسيان بين الدوائر المتكاملة على وحدات ساعة الوقت الحقيقي ، وهما دقة حفظ الوقت. يعمل DS1307 المستخدم في الوحدة الأولى بشكل جيد جدًا ، ومع ذلك يمكن أن تؤثر درجة الحرارة الخارجية على تردد دائرة المذبذب التي تدفع العداد الداخلي لـ DS1307.
قد يبدو هذا وكأنه مشكلة ، ولكن عادة ما ينتج عن ذلك مع إيقاف تشغيل الساعة بحوالي خمس دقائق أو نحو ذلك في الشهر. يعتبر DS3231 أكثر دقة ، حيث يحتوي على مذبذب داخلي لا يتأثر بالعوامل الخارجية - وبالتالي فهو دقيق حتى بضع دقائق كل عام على الأكثر. إذا كانت لديك وحدة DS1307 - فلا تشعر بالسوء ، فهي لا تزال لوحة ذات قيمة رائعة وستخدمك جيدًا. مع كل من الوحدتين ، يلزم وجود بطارية احتياطية.
إنها لفكرة جيدة أن تشتري بطارية CR2032 جديدة وتناسبها مع الوحدة. إلى جانب تتبع الوقت والتاريخ ، تحتوي هذه الوحدات أيضًا على EEPROM صغير ، ووظيفة إنذار (DS3231 فقط) والقدرة على إنشاء موجة مربعة من الترددات المختلفة - وكلها ستكون موضوع درس تعليمي ثان.
الخطوة 1: توصيل الوحدة النمطية الخاصة بك بـ Arduino
تستخدم كلتا الوحدتين ناقل I2C ، مما يجعل الاتصال سهلاً للغاية.
ستحتاج أولاً إلى تحديد المسامير الموجودة على Arduino أو اللوحات المتوافقة المستخدمة في ناقل I2C - وستعرف باسم SDA (أو البيانات) و SCL (أو الساعة). في Arduino Uno أو اللوحات المتوافقة ، تكون هذه المسامير A4 و A5 للبيانات والساعة ؛ في Arduino Mega ، تكون المسامير D20 و D21 للبيانات والساعة ؛ وإذا كنت تستخدم Pro Mini متوافقًا ، فإن الدبابيس هي A4 و A5 للبيانات والساعة الموازية للدبابيس الرئيسية.
وحدة DS1307
إذا كانت لديك وحدة DS1307 ، فستحتاج إلى لحام الأسلاك باللوحة ، أو لحام بعض دبابيس الرأس المضمنة حتى تتمكن من استخدام أسلاك التوصيل. ثم قم بتوصيل دبابيس SCL و SDA بـ Arduino الخاص بك ، ودبوس Vcc إلى دبوس 5V و GND بـ GND.
وحدة DS3231
يعد توصيل هذه الوحدة أمرًا سهلاً حيث يتم تثبيت دبابيس الرأس على اللوحة في المصنع. يمكنك ببساطة تشغيل أسلاك التوصيل مرة أخرى من SCL و SDA إلى Arduino ومرة أخرى من دبابيس Vcc و GND للوحدة إلى 5V أو 3.3. V و GND باللوحة. ومع ذلك يتم تكرارها على الجانب الآخر من أجل لحام الأسلاك الخاصة بك. تحتوي كلتا الوحدتين على مقاومات السحب المطلوبة ، لذلك لا تحتاج إلى إضافة مقاوماتك الخاصة. مثل جميع الأجهزة المتصلة بحافلة I2C ، حاول الحفاظ على طول أسلاك SDA و SCL عند الحد الأدنى.
الخطوة 2: قراءة وكتابة الوقت من وحدة RTC النمطية الخاصة بك
بمجرد الانتهاء من توصيل وحدة RTC الخاصة بك. أدخل وتحميل الرسم التالي. على الرغم من أن الملاحظات والوظائف في المخطط تشير فقط إلى DS3231 ، فإن الكود يعمل أيضًا مع DS1307.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // تحويل الأرقام العشرية العادية إلى ثنائي بايت decToBcd (بايت val) {return ((val / 10 * 16) + (val٪ 10)) ؛ } // تحويل ثنائي عشري مشفر إلى بايت bcdToDec (قيمة بايت) {return ((val / 16 * 10) + (val٪ 16))؛ } void setup () {Wire.begin ()؛ Serial.begin (9600) ؛ // اضبط الوقت الأولي هنا: // DS3231 ثانية ، دقائق ، ساعات ، يوم ، تاريخ ، شهر ، سنة // setDS3231time (30 ، 42 ، 21 ، 4 ، 26 ، 11 ، 14) ؛ } مجموعة فارغة DS3231time (بايت ثانية ، بايت دقيقة ، بايت ساعة ، بايت يوم أسبوع ، بايت يوم أو شهر ، بايت شهر ، بايت سنة) {// يعين بيانات الوقت والتاريخ إلى DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS) ؛ Wire.write (0) ؛ // قم بتعيين الإدخال التالي للبدء في تسجيل الثواني Wire.write (decToBcd (الثاني)) ؛ // ضبط الثواني Wire.write (decToBcd (دقيقة)) ؛ // ضبط دقائق Wire.write (decToBcd (ساعة)) ؛ // ضبط ساعات Wire.write (decToBcd (dayOfWeek)) ؛ // تعيين يوم من الأسبوع (1 = الأحد ، 7 = السبت) Wire.write (decToBcd (dayOfMonth)) ؛ // تعيين التاريخ (من 1 إلى 31) Wire.write (decToBcd (شهر)) ؛ // تعيين الشهر Wire.write (decToBcd (السنة)) ؛ // تعيين السنة (من 0 إلى 99) Wire.endTransmission () ؛ } قراءة DS3231 باطلة (بايت * ثانية ، بايت * دقيقة ، بايت * ساعة ، بايت * يوم من الأسبوع ، بايت * يوم شهر ، بايت * شهر ، بايت * سنة) {Wire.beginTransmission (DS3231_I2C_ADDRESS) ؛ Wire.write (0) ؛ // قم بتعيين مؤشر التسجيل DS3231 على 00h Wire.endTransmission () ؛ Wire.request From (DS3231_I2C_ADDRESS، 7) ؛ // طلب سبعة بايت من البيانات من DS3231 بدءًا من السجل 00h * second = bcdToDec (Wire.read () & 0x7f) ؛ * دقيقة = bcdToDec (Wire.read ()) ؛ * ساعة = bcdToDec (Wire.read () & 0x3f) ؛ * dayOfWeek = bcdToDec (Wire.read ()) ؛ * dayOfMonth = bcdToDec (Wire.read ()) ؛ * الشهر = bcdToDec (Wire.read ()) ؛ * السنة = bcdToDec (Wire.read ()) ؛ } void displayTime () {بايت ثانية ، دقيقة ، ساعة ، dayOfWeek ، dayOfMonth ، شهر ، سنة ؛ // استرداد البيانات من DS3231 readDS3231time (& second ، & minutes ، & hour ، & dayOfWeek ، & dayOfMonth ، & month ، & year) ؛ // أرسلها إلى الشاشة التسلسلية Serial.print (ساعة ، DEC) ؛ // تحويل متغير البايت إلى رقم عشري عند عرضه Serial.print (":") ؛ إذا (دقيقة <10) {Serial.print ("0") ؛ } Serial.print (minutes، DEC)؛ Serial.print (":") ؛ إذا (الثانية <10) {Serial.print ("0") ؛ } Serial.print (ثانيًا ، ديسمبر) ؛ Serial.print ("") ؛ Serial.print (dayOfMonth ، ديسمبر) ؛ Serial.print ("/") ؛ Serial.print (الشهر ، ديسمبر) ؛ Serial.print ("/") ؛ Serial.print (السنة ، ديسمبر) ؛ Serial.print ("يوم من الأسبوع:") ؛ switch (dayOfWeek) {الحالة 1: Serial.println ("الأحد") ؛ استراحة؛ الحالة 2: Serial.println ("الاثنين") ؛ استراحة؛ الحالة 3: Serial.println ("الثلاثاء") ؛ استراحة؛ الحالة 4: Serial.println ("الأربعاء") ؛ استراحة؛ الحالة 5: Serial.println ("الخميس") ؛ استراحة؛ الحالة 6: Serial.println ("Friday") ؛ استراحة؛ الحالة 7: Serial.println ("Saturday") ؛ استراحة؛ }} void loop () {displayTime ()؛ // عرض بيانات ساعة الوقت الفعلي على جهاز العرض التسلسلي ، تأخير (1000) ؛ // كل ثانية }
قد يكون هناك الكثير من التعليمات البرمجية ، ولكنها تتفكك جيدًا إلى أجزاء يمكن التحكم فيها.
يتضمن أولاً مكتبة Wire ، التي تُستخدم لاتصالات ناقل I2C ، متبوعًا بتحديد عنوان الناقل لـ RTC كـ 0x68. ويتبع ذلك وظيفتان تقومان بتحويل الأرقام العشرية إلى BCD (نظام عشري ثنائي الترميز) والعكس صحيح. هذه ضرورية لأن ICs RTC تعمل في BCD وليس عشريًا.
يتم استخدام وظيفة الضبط DS3231time () لضبط الساعة. استخدامه سهل للغاية ، أدخل القيم من سنة إلى ثانية ، وسيبدأ RTC من ذلك الوقت. على سبيل المثال ، إذا كنت تريد تعيين التاريخ والوقت التاليين - الأربعاء 26 نوفمبر 2014 و 9:42 مساءً و 30 ثانية - فستستخدم:
setDS3231time (30 ، 42 ، 21 ، 4 ، 26 ، 11 ، 14) ؛
الخطوه 3:
لاحظ أنه تم ضبط الوقت باستخدام التوقيت بتنسيق 24 ساعة ، والمُحدِّد الرابع هو "يوم الأسبوع". يقع هذا بين 1 و 7 من الأحد إلى السبت على التوالي. هذه المعلمات هي قيم بايت إذا كنت تقوم بإدخال المتغيرات الخاصة بك.
بمجرد تشغيل الوظيفة بمجرد أن يكون من الحكمة أن تسبقها بـ // وتحميل الرمز الخاص بك مرة أخرى ، لذلك لن يتم إعادة تعيين الوقت بمجرد تدوير الطاقة أو إعادة تعيين وحدة التحكم الدقيقة. قراءة الوقت من نموذج RTC الخاص بك هي بنفس البساطة ، في الواقع يمكن اتباع العملية بدقة داخل وظيفة displayTime (). ستحتاج إلى تحديد سبعة متغيرات بايت لتخزين البيانات من RTC ، ثم يتم إدراجها في الوظيفة readDS3231time (). على سبيل المثال ، إذا كانت المتغيرات الخاصة بك هي:
ثانية بايت ، دقيقة ، ساعة ، يوم أسبوع ، يوم شهر ، شهر ، سنة ؛
… يمكنك تحديثها بالبيانات الحالية من RTC باستخدام:
readDS3232time (& second ، & minutes ، & hour ، & dayOfWeek ، & dayOfMonth ، & month ، & year) ؛
ثم يمكنك استخدام المتغيرات كما تراه مناسبًا ، بدءًا من إرسال الوقت والتاريخ إلى الشاشة التسلسلية كما يفعل المثال التخطيطي - لتحويل البيانات إلى نموذج مناسب لجميع أنواع أجهزة الإخراج.
فقط للتحقق من أن كل شيء يعمل ، أدخل الوقت والتاريخ المناسبين في مخطط العرض التوضيحي ، وقم بتحميله ، وقم بالتعليق على وظيفة setDS3231time () وقم بتحميلها مرة أخرى. ثم افتح الشاشة التسلسلية ، ويجب أن يتم تزويدك بعرض جاري للوقت والتاريخ الحاليين.
من هذه النقطة ، لديك الآن أدوات البرنامج لتعيين البيانات إليها واستردادها من وحدة الساعة في الوقت الفعلي ، ونأمل أن يكون لديك فهم لكيفية استخدام هذه الوحدات غير المكلفة.
يمكنك معرفة المزيد حول الدوائر المتكاملة على مدار الساعة في الوقت الفعلي من موقع الشركة المصنعة على الويب - DS1307 و DS3231.
هذا المنشور يقدمه لك pmdway.com - كل شيء للصانعين وعشاق الإلكترونيات ، مع التوصيل المجاني في جميع أنحاء العالم.
موصى به:
كيفية استخدام وحدة ساعة الوقت الفعلي (DS3231): 5 خطوات
كيفية استخدام وحدة ساعة الوقت الحقيقي (DS3231): DS3231 هي ساعة منخفضة التكلفة ودقيقة للغاية في الوقت الحقيقي (RTC) مع مذبذب بلوري مدمج معوض لدرجة الحرارة (TCXO) وكريستال. يشتمل الجهاز على مدخل للبطارية ويحافظ على عرض توقيت دقيق عندما تصل الطاقة الرئيسية إلى
ساعة في الوقت الحقيقي مع اردوينو: 3 خطوات
Real Time Clock with Arduino: في هذا المشروع ، سنصنع ساعة بمساعدة وحدة Arduino و RTC. كما نعلم لا يمكن لـ Arduino عرض الوقت الفعلي لذلك سنستخدم وحدة RTC لعرض الوقت المناسب على شاشة LCD. اقرأ كل الخطوات بعناية ستساعدك
ضبط DS3231 RTC (ساعة الوقت الحقيقي) بشكل دقيق وسريع وآلي باستخدام Java (+ -1 ثانية): 3 خطوات
ضبط DS3231 RTC (ساعة الوقت الحقيقي) بدقة وسرعة وآلية باستخدام Java (+ -1 ثانية): هذا Instructable سيوضح لك كيفية ضبط الوقت على DS3231 Real Time Clock باستخدام Arduino وتطبيق Java صغير يستخدم الاتصال التسلسلي لـ Arduino المنطق الأساسي لهذا البرنامج: 1. Arduino يرسل طلبًا تسلسليًا
DS1307 ساعة الوقت الحقيقي RTC مع Arduino: 4 خطوات
DS1307 Real Time Clock RTC مع Arduino: في هذا البرنامج التعليمي ، سوف نتعرف على Real Time Clock (RTC) وكيفية Arduino & amp؛ يتم وضع ساعة الوقت الحقيقي IC DS1307 معًا كجهاز توقيت. تُستخدم ساعة الوقت الحقيقي (RTC) لمراقبة الوقت والحفاظ على التقويم. من أجل استخدام RTC ، مع
صنع ساعة باستخدام M5stick C باستخدام Arduino IDE - ساعة الوقت الحقيقي RTC مع M5stack M5stick-C: 4 خطوات
صنع ساعة باستخدام M5stick C باستخدام Arduino IDE | RTC Real Time Clock مع M5stack M5stick-C: مرحبًا يا رفاق في هذه التعليمات ، سوف نتعلم كيفية صنع ساعة باستخدام لوحة تطوير m5stick-C من m5stack باستخدام Arduino IDE ، لذا سيعرض m5stick التاريخ والوقت وأمبير ؛ أسبوع من الشهر على الشاشة