آموزش ساخت ساعت و کار با آی سی DS1307 توسط آردوینو

طرح مسئله؟

در بسیاری از پروژه ها نیاز به دانستن زمان برای نمایش به کاربر و یا انجام کارهای زمانبندی شده در ساعات خاص در طول روز داریم. به عنوان مثال فرض کنید می خواهیم با استفاده از برد آردوینو Arduino یک پروژه تعریف کنیم که در آن سیستم روشنایی یک مکان اداری را در روزهای غیر تعطیل از ساعت 18 الی 20 به مدت دو ساعت روشن کنیم و در خارج از این ساعات و روزهای تعطیل سیستم روشنایی به صورت اتوماتیک خاموش شود. برای انجام این پروژه نیاز به یک ساعت و تقویم بسیار دقیق داریم که حتی در زمان قطع برق شبکه نیز برای طولانی مدت، عملیات محاسبه زمان متوقف نشود و زمان به صورت دقیق محاسبه شود.

شاید برای ساخت ساعت اولین فکری که به ذهنتان برسد نوشتن یک برنامه ساده برای آردوینو باشد که توسط آن با استفاده از تعریف چند متغیر و یک دستور تاخیری یک ساعت و تقویم بسازید، اما به احتمال بسیار زیاد در پایان کار با مشکلات زیر روبرو خواهید شد:

:: ساعت ساخته شده دقیق نیست و در طول روز چند ثانیه عقب یا جلو می ماند.

:: با قطع تغذیه از برد آردوینو ساعت صفر می شود.

:: در صورت استفاده از باتری پشتیبان، به علت جریان مصرفی بالا برد آردوینو، احتمالا باتری نتواند بیشتر از چند ساعت مدار را پشتیبانی کند.

:: کدهای نوشته شده برای محاسبه ساعت و تقویم بیشتر حافظه میکروکنترلر برد آردوینو را اشغال کرده و فضای زیادی برای نوشتن سایر کدها برای شما باقی نمانده.

لیست قطعات مورد نیاز

برد آردوینو Arduino UNO R3 مدل DIP1 عدد
LCD کاراکتری مدل 16×2 با Backlighting آبی1 عدد
آی سی شمارش و نگهداری ساعت و تقویم DS1307 مدل DIP1 عدد
تک سوئیچ 2 پایه DIP سایز 6x6x5 میلیمتر3 عدد
مقاومت 10 کیلو اهم با توان 0.25 وات و تلرانس 1 درصد3 عدد
کریستال ساعت 32.768KHz کیلوهرتز1 عدد
جاباتری سکه ای DIP سایز CR2032 مدل ایستاده1 عدد
برد بورد (پروجکت برد) مدل GL1 عدد
سیم جامپر برد بوردی مدل دو سر نری (سری 40تایی)1 عدد

آی سی ساعت DS1307

آی سی DS1307 در بازار به اسم آی سی ساعت مشهور است و دلیل این موضوع نیز این بوده که این آی سی به صورت اختصاصی با هدف محاسبه ساعت و تقویم طراحی شده است. آی سی DS1307 یک ساعت و تقویم BCD می باشد که توان مصرفی آن بسیار پایین می باشد به طوریکه می تواند با یک باتری ساعت 3 ولتی به مدت یکسال بدون وقفه به کار خود در مدار ادامه دهد. همچنین لازیم به ذکر است این تراشه دارای مدار داخلی تشخیص نقص تغذیه نیز می باشد و در صورت بروز قطع تغذیه، باطری پشتیبان را به طور خودکار در مدار قرار می دهد.

نقشه شماتیک راه اندازی آی سی ساعت DS1307

آی سی ساعت DS1307 را می توان به راحتی از طریق پروتکل ارتباطی I2C به برد آردوینو متصل کرد و به سادگی هر چه تمام فقط با ارسال یک خط دستور از ساعت و تقویم با خبر شد و یا مقدار آنرا تغییر داد. با استفاده از آی سی ساعت بسیار دقیق DS1307 می توان تمامی مشکلاتی که در قسمت قبلتر به آن اشاره گردید را حل نمود.

ویژگی های تراشه DS1307

:: توانایی شمارش ثانیه, دقیقه, ساعت, روز, ماه, سال, سال کبیسه تا سال 2100 میلادی

:: مصرف کمتر از 500nA در حالت استفاده از باتری پشتیبان

:: محدوده دمای صنعتی 40- تا 85+ درجه سانتی گراد

:: آشکار ساز خودکار نقص تغذیه و مدار کلید زنی باتری

:: 56 بایت حافظه NV RAM برای ذخیره اطلاعات

:: بسته بندی های 8 پایه PDIP و SOIC

:: سیگنال خروجی مربعی برنامه پذیر

:: ارتباط I2C

کتابخانه RTClib.h

کتابخانه RTClib.h یکی از کتابخانه های بسیار کامل و البته بهینه برای آردوینو جهت راه اندازی تراشه های سری DS1307 و DS3231 و PCF8523 می باشد. با استفاده از کتابخانه RTClib.h شما می توانید بدون اینکه خودتان را درگیر برنامه نویسی جهت برقراری ارتباط I2C با آی سی ساعت کنید به راحتی می توانید با نوشتن یک خط دستور مقدار ساعت و تقویم را بخوانید و یا مقدار آنرا تغییر دهید.

فراخوانی کتابخانه RTClib.h

برای استفاده از کتابخانه RTClib.h ابتدا باید آنرا از انتهای همین مطلب دانلود کنید و سپس کتابخانه را در قسمت libraries نزم افزار آردوینو خود اضافه کنید. برای این منظور می توانید مسیر زیر را از طریق منوی نوار ابزار در نرم افزار آردوینو طی کنید و سپس در پنجره نهایی فایل کتابخانه RTClib را که دانلود کرده اید، جهت افزودن انتخاب کنید.

Sketch > Include Library > Add .ZIP Library…

پس از افزودن کتابخانه RTClib.h به نرم افزار آردوینو، حال می توانید جهت استفاده از امکانات آن در برنامه خود از طریق کد دستوری زیر کتابخانه را در برنامه خود فراخوانی کنید.

تعریف آبجکت

پس از فراخوانی کتابخانه RTClib.h جهت ارتباط با آن و خواندن مقدار ساعت و تقویم نیاز به تعریف یک آبجکت با نام دلخواه داریم، تا در طول برنامه با آن نام آبجکت را فراخوانی کنیم. برای این منظور می توانیم از دستور زیر استفاده کنیم.

توجه : دستور زیر حتما باید قبل از زیر برنامه setup() نوشته شود.

rtc : در صورت تمایل به جای این کلمه می توانید از نام دلخواه مورد نظر خود استفاده کنید.

فعال سازی ارتباط آردوینو با آی سی ساعت

با استفاده از دستور زیر می توانیم ارتباط بین برد آردوینو و تراشه ساعت را فعال کنیم.

برگرداندن مقدار ساعت و تاریخ

برای این منظور ابتدا توسط دستور زیر یک متغیر از جنس زمان و تاریخ تعریف می کنیم :

now : به جای این کلمه می توانید نام مورد نظر خود را جهت تعریف نام متغیر وارد کنید.

حال پس از تعریف متغیر توسط دستور زیر مقدار ساعت و تاریخ را خوانده و در متغیر تعریف شده از جنس زمان و تاریخ وارد می کنیم.

 در پایان می توانیم با بکارگیری دستورات زیر به مقدار ساعت و تاریخ به صورت مجزا دسترسی داشته باشیم.

تنظیم ساعت و تاریخ

برای ویرایش ساعت و تاریخ می توانید از دستور زیر در برنامه خود استفاده کنید.

year : مقدار سال (سال باید به صورت میلادی وارد شود).

month : مقدار ماه (عددی در بازه 1 الی 12).

day : مقدار روز.

hour : مقدار ساعت (عددی در بازه 0 الی 23).

minute : مقدار دقیقه.

second : مقدار ثانیه.

پروژه: ساخت ساعت و تقویم دیجیتال با آردوینو و آی سی ساعت DS1307

در این پروژه آردوینو از مبحث آموزش آردوینو می خواهیم شما را با نحوه برنامه نویسی و ساخت یک ساعت و تقویم دیجیتال با آردوینو و آی سی ساعت DS1307 آشنا کنیم.

بعد قبل
پروژه ساخت ساعت و تقویم دیجیتال با آردوینو و آی سی ساعت DS1307
پروژه ساخت ساعت و تقویم دیجیتال با آردوینو و آی سی ساعت DS1307
پروژه ساخت ساعت و تقویم دیجیتال با آردوینو و آی سی ساعت DS1307
بعد قبل

نقشه شماتیک پروژه ساخت ساعت و تقویم دیجیتال با آردوینو

نقشه شماتیک پروژه ساخت ساعت و تقویم دیجیتال با آردوینو

برنامه آردوینو

ویدیو ضبط شده از نحوه راه اندازی و عملکرد پروژه

دانلود ویدئو با لینک مستقیم از سرورهای پرقدرت الکترونیک 98

 اطلاعات پروژه

 رمز فایل : www.electronics98.com

 حجم فایل : 760 کیلوبایت

 محیط برنامه نویسی : Arduino (IDE)

 برنامه نویسی شده به زبان : ترکیبی از برنامه نویسی به زبان سی (C) یا سی پلاس پلاس (++C)

 نویسنده : فرهاد اکبری

 تاریخ انتشار : 7 ژوئن 2019

21 دیدگاه

  1. خدا خیرت بده
    خیلی دنبال این مطلب بودم دستت درد نکنه
    فقط یه سوال آیا اون led ای که گذاشتید تو شماتیک نقش چیه؟؟؟

  2. سلام دوست عزیز
    لامپ LED مذکور همان چراغ پس زمینه نمایشگر است. در حقیقت پایه متصل به لامپ LED در نقشه شماتیک به پایه شماره 15 نمایشگر متصل می شود و پایه شماره 16 نمایشگر به منفی منبع تغذیه متصل می گردد.

  3. سلام ممنون از پروژه تون خیلی کاربردی و خوب بود
    فقط ی سوال من میخوام هر ماه از اول ماه تا اخر ماه یک ال ای دی مربوط به همون ماه روشن بشه
    خودم این برنامه رو نوشتم اگه درست میباشد در کجای برنامه قرارش باید بدم

  4. سلام دوست عزیز
    بله برنامه درست است فقط بجای متغیر _month از now.month() در شرط ها استفاده کنید و کدهای خود را در حلقه loop() بعد از خط 85 برنامه بنویسید.

  5. سلام من همه ی کارها را در نقشه شما تیک انجام دادیم اما ال سی دی روشن نمیشه بعد میشه بگید پایه منفی ال سی دی را به کدام پایه اردینو وصل کنم

  6. سلام دوست عزیز
    باید اتصالات نمایشگر خود را بررسی کنید، همچنین پایه منفی نمایشگر به منفی منبع تغذیه و یا یکی از پایه های GND برد آردوینو متصل می شود و پایه مثبت نمایشگر به پایه +5v برد آردوینو متصل می شود.

  7. سلام خدمت شما عزیز اگه من خواستم طبق ساعتی که با دستگاه ست کردن یک ال ای دی فعال کنه باید چکار کنم
    ممنون میشم کمکم کنید

  8. سلام دوست عزیز
    باید در زیر برنامه loop() یک دستور شرطی تعریف کنید که متغیرهای now.hour (ساعت) و now.minute (دقیقه) و now.second (ثانیه) را با مقدار زمان دلخواه خود مقایسه کند و در صورتیکه هر دو مقادیر زمانی یکسان بودند یکی از خروجی های دیجیتال موجود بر روی برد آردوینو یک شود.

  9. سلام و خستع نباشید
    کتابخانه RTClib.h رو نوشتین انتها همین مطلب قرار دادیم ولی اخرین مطلب تون فیلم آموزشی آپارات هستش کتابخانه RTClib.h نبود و برای
    آپلود کردن کد بر روی برد اردوینو برنامه اردوینو عرور میدع و کار نمیکنه
    میشه راهنمایی کنید

  10. با سلام و احترام
    از تب “لینک دانلود” می توانید کتابخانه پروژه را دانلود کنید. برای کامپایل کردن برنامه در نرم افزار آردوینو حتما باید ابتدا کتابخانه را به نرم افزار آردوینو اضافه کنید.

  11. سلام مرسی از مطالب خوبتان
    این پروژه رو درست کردم اردینو نانو بعد ساعت روی نمایشگر ثابت هست داخل این
    rtc.begin();
    باید چی بنویسم

  12. با سلام و احترام
    نیازی به تغییر در برنامه نیست و دستور rtc.begin(); به همان شکل در برنامه استفاده می شود.
    در صورتیکه مقدار ساعت به صورت ثابت است پیشنهاد می کنیم تمامی اتصالات تراشه DS1307 را با دقت و توسط یک مولتی متر بررسی کنید و مطمئن شوید کریستال ساعت به درستی به تراشه متصل شده باشد و همچنین اتصالات تراشه DS1307 به برد آردوینو صحیح و سالم باشد.

  13. C:\Users\User\Documents\Arduino\libraries\RTClib-master\src/RTClib.h:25:10: fatal error: Adafruit_I2CDevice.h: No such file or directory
    #include

    ببخشید این ارور برای چیه چطوری رفع میشه
    ممنون میشم

  14. با سلام و احترام
    با توجه به متن خطا احتمال می رود شما کتابخانه RTClib.h را به مخزن کتابخانه نرم افزار آردوینو خود اضافه نکرده اید.

  15. درود مهندس گرامی . چطور میتوان در یک لحظه دلخواه با یک شستی یا با یک فرمان ، نمایش ساعت روی نمایشگر را بعدا برای بررسی یک اتفاق سیو کرد ؟ سپاس

 شرایط و قوانین ثبت دیدگاه

 فارسی بنویسید و از کیبورد فارسی استفاده کنید.

 لطفاً بیش‌از‌حدِ معمول، شکلک یا ایموجی استفاده نکنید و از کشیدن حروف یا کلمات با صفحه‌کلید بپرهیزید.

 به کاربران و سایر اشخاص احترام بگذارید. پیام‌هایی که شامل محتوای توهین‌آمیز و کلمات نامناسب باشند، حذف می‌شوند.

 از ارسال لینک‌های سایت‌های دیگر و ارایه‌ی اطلاعات شخصی خودتان مثل شماره تماس، ایمیل و آی‌دی شبکه‌های اجتماعی پرهیز کنید.