الإعلانات

إن الحفاظ على الوقت في مشاريع Arduino ليس أمرًا سهلاً كما قد تظن: بمجرد عدم توفر اتصال الكمبيوتر ، يتوقف Arduino غير المزود بالطاقة عن العمل ، بما في ذلك مؤشره الداخلي.

من أجل إبقاء Arduino متزامنًا مع العالم من حوله ، ستحتاج إلى ما يسمى "وحدة ساعة الوقت الحقيقي". إليك كيفية استخدام واحد.

ما الفائدة من ساعة الوقت الحقيقي (RTC)؟

من المرجح أن يزامن جهاز الكمبيوتر الخاص بك وقته مع الإنترنت ، ولكن لا يزال لديه ساعة داخلية تستمر في العمل حتى بدون اتصال بالإنترنت أو انقطاع التيار الكهربائي. عند استخدام Arduino متصل بجهاز كمبيوتر ، فإنه يمكنه الوصول إلى الوقت الدقيق الذي توفره ساعة النظام. هذا مفيد جدًا ، ولكن تم تصميم معظم مشاريع Arduino لاستخدامها بعيدًا عن جهاز الكمبيوتر - عندها نقطة ، في أي وقت يتم فيه فصل الطاقة ، أو إعادة تشغيل Arduino ، فلن يكون لديها أي فكرة على الإطلاق عن الوقت أنه. سيتم إعادة ضبط الساعة الداخلية وبدء العد من الصفر مرة أخرى في المرة التالية التي يتم تشغيلها فيها.

إذا كان مشروعك له علاقة بالحاجة إلى الوقت - مثل بلدي ضوء الليل ومنبه شروق الشمس مشروع Arduino Night Light ومنبه شروق الشمس

اليوم ، سنقوم بعمل منبه شروق الشمس ، والذي سوف يوقظك بلطف وببطء دون اللجوء إلى آلة ضجيج مسيئة. اقرأ أكثر - من الواضح أن هذه ستكون مشكلة. في هذا المشروع ، تطرقنا إلى حل المشكلة عن طريق تحديد الوقت كل ليلة يدويًا الطريقة - يضغط المستخدم على زر إعادة الضبط قبل الذهاب للنوم مباشرة ، مما يوفر وقتًا يدويًا المزامنة. من الواضح أن هذا ليس حلاً مثاليًا لفترة طويلة.

وحدة RTC هي جزء إضافي من الدوائر ، تتطلب بطارية صغيرة تعمل بخلية صغيرة ، والتي تستمر في حساب الوقت حتى عندما يتم إيقاف تشغيل Arduino. بعد التعيين مرة واحدة - ستحافظ على هذا الوقت طوال عمر البطارية ، عادةً ما يكون عامًا جيدًا أو نحو ذلك.

TinyRTC

يُطلق على RTC الأكثر شيوعًا لـ Arduino اسم TinyRTC ويمكن شراؤه لحوالي 5 دولارات - 10 دولارات على موقع eBay. ستحتاج على الأرجح إلى تزويد بطاريتك الخاصة (من غير القانوني شحن هذه في الخارج إلى العديد من الأماكن) ، وبعض الرؤوس (الدبابيس التي تدخل في الفتحات ، والتي ستحتاج إلى لحامها بنفسك).

هذه هي الوحدة التي أمتلكها:

وحدة rtc

حتى أنه يحتوي على مستشعر درجة حرارة مدمج ، على الرغم من أن البطارية ستستمر لفترة أطول إذا كنت لا تستخدمه.

يبدو عدد الفتحات في هذا الشيء مخيفًا جدًا ، لكنك تحتاج فقط إلى أربعة منها ؛ GND و VCC و SCL و SDA - يمكنك استخدام المسامير ذات الصلة على جانبي وحدة RTC. تتحدث إلى الساعة باستخدام بروتوكول I2C، مما يعني استخدام دبابيس فقط - واحدة لـ "الساعة" (ساعة بيانات اتصالات تسلسلية ، لا علاقة لها بالوقت) وواحدة للبيانات. في الواقع ، يمكنك حتى ربط ما يصل إلى 121 جهاز I2C على نفس الدبابيس - تحقق من ذلك صفحة Adafruit هذه لمجموعة مختارة من أجهزة I2C الأخرى التي يمكنك إضافتها ، لأن هناك الكثير!

ابدء

اربط وحدة TinyRTC وفقًا للرسم البياني أدناه - ليست هناك حاجة إلى خط DS الوردي ، لأن هذا بالنسبة لمستشعر درجة الحرارة.

الأسلاك

بعد ذلك ، قم بتنزيل زمن و DS1307RTC المكتبات ووضع المجلدات الناتجة في /libraries مجلد.

اخرج وأعد تشغيل بيئة Arduino للتحميل في المكتبات والأمثلة.
ds1307rtc-example-menu

ستجد مثالين في قائمة DS1307RTC: تحميل وتشغيل ضبط الوقت المثال الأول - سيؤدي ذلك إلى ضبط RTC على الوقت الصحيح. الكود الفعلي لا يستحق الخوض في التفاصيل ، فقط اعرف أنك تحتاج إلى تشغيله مرة واحدة لإجراء المزامنة الأولية للوقت.

بعد ذلك ، انظر إلى مثال الاستخدام مع ReadTest.


#تتضمن 
#تتضمن 
#تتضمن  إعداد باطل () {Serial.begin (9600) ؛ بينما (! المسلسل) ؛ // انتظر التأخير التسلسلي (200) ؛ Serial.println ("DS1307RTC قراءة اختبار") ؛ Serial.println ("") ؛ } حلقة فارغة () {tmElements_t tm؛ if (RTC.read (tm)) {Serial.print ("Ok، Time =") ؛ print2digits (tm. ساعة)؛ Serial.write (':') ؛ print2digits (tm. دقيقة)؛ Serial.write (':') ؛ print2digits (tm. ثانيا)؛ Serial.print ("، Date (D / M / Y) =")؛ Serial.print (tm. يوم)؛ Serial.write ('/') ؛ Serial.print (tm. شهر)؛ Serial.write ('/') ؛ Serial.print (tmYearToCalendar (tm. عام))؛ Serial.println () ؛ } آخر {if (RTC.chipPresent ()) {Serial.println ("تم إيقاف DS1307. الرجاء تشغيل SetTime ") ؛ Serial.println ("مثال لتهيئة الوقت وبدء التشغيل.") ؛ Serial.println () ؛ } آخر {Serial.println ("DS1307 خطأ في القراءة! يرجى التحقق من الدوائر. ") ؛ Serial.println () ؛ } التأخير (9000) ؛ } تأخير (1000) ؛ } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0')؛ } Serial.print (number)؛ }

لاحظ أننا قمنا أيضًا بتضمين الجوهر Wire.h المكتبة - يأتي هذا مع Arduino ويستخدم للتواصل عبر I2C. قم بتحميل الكود ، وفتح وحدة التحكم التسلسلية على 9600 بود ، ومشاهدة وإخراج Arduino في الوقت الحالي كل ثانية. رائع!

الرمز الأكثر أهمية في المثال هو إنشاء tmElements_t tm - هذا بناء التي سنملأها بالوقت الحالي ؛ و ال RTC.read (tm) الوظيفة ، التي تحصل على الوقت الحالي من وحدة RTC ، تضعها في موقعنا TM هيكل ، ويعود صحيحا إذا سار كل شيء على ما يرام. أضف رمز التصحيح أو المنطق داخل عبارة "if" ، مثل طباعة الوقت أو الرد عليه.

الآن بعد أن تعرفت على كيفية الحصول على الوقت المناسب مع Arduino ، يمكنك محاولة إعادة كتابة مشروع إنذار شروق الشمس أو إنشاء ساعة كلمة LED - الاحتمالات لا حصر لها! ماذا ستفعل؟

ائتمانات الصورة: سنوت لاب عبر فليكر

جيمس حاصل على درجة البكالوريوس في الذكاء الاصطناعي ، وهو حاصل على شهادة CompTIA A + و Network +. وهو المطور الرئيسي لـ MakeUseOf ، ويقضي وقت فراغه في لعب كرة الطلاء VR وألعاب الطاولة. لقد كان يبني أجهزة الكمبيوتر منذ أن كان طفلاً.