ماژول ساعت DS3231 و DS1307 جهت مدیریت پروژهها در بازه زمانی ساعت، تاریخ بسیار کاربردی و مصرفی هستند. کاربران زیادی در راه اندازی و تنظیم ماژول ساعت و نگهداری زمان محاسبه شده در حافظه ماژول با مشکل رو به رو شدهاند. در این آموزش روش حل مشکل و کدهای مربوط به ماژول ساعت بررسی و تحلیل خواهد شد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول ساعت دقیق DS1302
ماژول ساعت DS3231 یک ماژول ساعت دقیق با باتری داخلی است که میتواند زمان دقیق را با دقت بسیار بالا نگه داری کند. این ماژول با استفاده از تکنولوژی RTC (Real Time Clock) کار میکند و از طریق یک رابط I2C با میکروکنترلر شما ارتباط برقرار میکند.DS3231 دارای دو پایه VCC و GND است و برای ارتباط با میکروکنترلر از پایههای SDA و SCL استفاده میشود. همچنین این ماژول دارای یک باتری داخلی است که به صورت خودکار در صورت قطع برق زمان را به خود نگه میدارد.
مزیت این ماژول نسبت به ساعتهای دیگر، دقت بسیار بالای آن است که به طور معمول حدود ۱ دقیقه در سال خطا دارد. همچنین DS3231 قابلیت تنظیم زمان از طریق سیستم ۱۲ ساعتی و ۲۴ ساعتی را دارد و تاریخ شمسی را نیز پشتیبانی میکند.با استفاده از ماژول DS3231 میتوانید در پروژههای خود از ساعت دقیق استفاده کنید و به راحتی زمان را تنظیم و خواند.
ویژگی های ماژول ساعت فوق دقیق DS3231
DS3231 با دقت بالای خود، میتواند زمان را با خطای کمتر از یک دقیقه در سال نگه داری کند. DS3231 دارای باتری داخلی است که در صورت قطع برق، زمان را به خود نگه میدارد.با استفاده از رابط I2C با میکروکنترلر شما ارتباط برقرار میکند و این امکان را فراهم میکند که با استفاده از چندین ماژول به صورت همزمان کار کنید.DS3231 دارای حافظه داخلی است که میتوانید تنظیمات زمانی و تقویمی را در آن ذخیره کنید.
DS3231 قابلیت تنظیم زمان را با استفاده از سیستم ۱۲ ساعتی و ۲۴ ساعتی دارد. DS3231 میتواند تاریخ شمسی را نیز پشتیبانی کند. DS3231 دارای وضعیت تعلیق است که در آن مصرف باتری را به حداقل میرساند و در صورت لزوم ساعت را به سرعت راه اندازی میکند. DS3231 با دمای کاری از -۴۰ درجه سانتیگراد تا ۸۵ درجه سانتیگراد عملکرد خود را حفظ میکند.
کتابخانه RTClib
کتابخانه پرطرفدار RTC جهت تست و راه اندازی ساعت Realtime طراحی و توسعه یافته است. با استفاده از کتابخانه RTC ماژول هایی مانند DS1307, PCF8523, DS3231 راه اندازی میشود. در این آموزش با ماژول ساعت DS3231 ساعت و تاریخ را محاسبه خواهیم کرد. RTC قابلیت ذخیره زمان را در خود دارد و به همین دلیل در پروژه ها بسیار کاربردی است. حتما این سوال برای شما هم پیش میآید که با قطع برق چه اتفاقی برای ماژول میافتد. جواب بسیار ساده است. RTC زمان را در خود نگه داشته و پس از اتصال دوباره برق به مدار، ساعت از لحظه جدید زمان را محاسبه میکند.
اما سوال بعدی این است که اکثر میکروکنترلرها مانند Arduino، به تنهایی قابلیت ذخیره زمان را دارند، پس چرا باید از ماژول RTC استفاده کنیم؟ تابع milis در واقع زمان شروع برنامه را محاسبه کرده و به عبارتی مدت زمات شروع برنامه را بر حسب میکروثانیه برمیگرداند و این عدد تقریبا پس از ۵۰ روز به بازه ۰ بر میگردد. حال اگر زمان را از طریق Arduino ذخیره کنید با هر بار قطع شدن برق مدار، از زمان ۰ ( زمان اولیه ) شروع به محاسبه آن خواهد کرد و یک ضعف بزرگ به شمار میآید.
ماژول ساعت DS3231
ماژول ساعت DS3231 دارای تراشه داخلی DS3231، کم مصرف و با دقت اندازه گیری بسیار دقیق ساعت میباشد. ماژول DS3231 قابلیت ذخیره ساعت، دقیقه، ثانیه، ماه و سال را در حافظه خود دارد. ویژگیهای منحصر به فرد ماژول در ادامه لیست شده است.
- شمارش ساعت، دقیقه و ثانیه
- روز هفته، روز و ماه و سال
- دارای ولتاژ کاری بین ۳٫۳ تا ۵ ولت
- دارای پروتکل ارتباطی I2C
- اتصال ماژول ساعت به آردوینو
- پایه SDA ماژول ساعت DS3231 را به پایه A4 آردوینو اتصال دهید.
- پایه SCL ماژول ساعت DS3231 را به پایه A5 آردوینو اتصال دهید.
- پایه VCC ماژول ساعت DS3231 را به پایه ۳٫۳ ولت آردوینو اتصال دهید.
- پایه GND ماژول ساعت DS3231 را به پایه GND آردوینو اتصال دهید.
نصب کتابخانه Library ds3231
جهت تست ماژول ساعت به دو کتابخانه ساعت و Wire نیاز داریم. جهت دسترسی به کتابخانه DS3231 تنها بایستی کتابخانه RTClib نصب گردد. همچنین از کتابخانه wire جهت برقراری ارتباط استفاده خواهیم کرد. لینک دانلود کتابخانه در صفحه محصول کالا در قسمت دانلود قرار گرفته شده است، آن را دانلود و فراخوانی کنید. همچنین کتابخانه Wire به صورت پیشفرض در لیست کتابخانه های آردوینو قرار گرفته شده است. آن را فراخوانی کنید.
- RTClib
- wire
تنظیم ساعت RTC
جهت نمایش زمان و ساعت بایستی دستور آن در کد برنامه اضافه گردد. از دستور زیر استفاده خواهیم کرد:
if (rtc.lostPower()) { Serial.println("RTC lost power, lets set the time!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); }
در این مرحله میتوانید هیچ دیتایی در خط ننوشته و ساعت اندازه گیری شده دقیقا از زمان اتصال به سیتسم شروع به شمارش خواهد کرد. در صورتیکه بخواهید در یک روز و ساعت مشخص برنامه شروع به شمارش کند، این خط را تکمیل نمایید. جهت فراخوانی کتابخانه DS3231 از دستور زیر استفاده میکنیم:
RTC_DS3231 rtc;
خواندن زمان
در این مرحله پس از تنظیم ساعت، زمان محاسبه شده خوانده و نمایش داده میشود. از دستور زیر استفاده خواهیم کرد.
DateTime now = rtc.now(); sprintf(t, "%02d:%02d:%02d %02d/%02d/%02d", now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year()); Serial.print(F("Date/Time: ")); Serial.println(t);
کد آردوینو ماژول DS3231
کدهای زیر نمونه راه اندازی با ماژول ساعت DS3231 و برد آردوینو هستند. برای استفاده کافیست آنها را در IDE آردوینو روی سیستم خودتان، کپی کنید. سپس روی برد آردوینو با رعایت اتصالات آپلود کنید.
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
رفع عیب شمارش ساعت
کابران زیادی در راه اندازی و نمایش دقیق ساعت پس از قطع شدن ارتباط ماژول به مشکل برخورده اند. دو روش جهت تست ماژول ساعت و شمارش ساعت پس از قطع مدار وجود دارد.
- در روش اول در دستور زیر ساعت و تاریخ دقیق سیستم خود را وارد کرده و برنامه را آپلود نمایید. ساعت را خوانده و پس از گذشت چند دقیقه ارتباط برق را قطع کنید. مجدد ارتباط را برقرار کرده و بدون آپلود کردن برنامه سریال مانیتور را باز کنید. ساعت از زمان حال شروع به شمارش خواهد کرد.
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
- دو روش دوم ابتدا ساعت و تاریخ را در دستور وارد کرده و سپس برنامه را آپلود نمایید. سپس دستور را کامنت کرده و مجدد برنامه را آپلود نمایید. ساعت در هر لحظه با ساعت سیستم هماهنگ خواهد بود.
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //
وسایل مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
پروژه و دریافت بن ارسال رایگان
برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکههای اجتماعی از جمله آپارات و اینستگرام، با هشتگهای دیجی_اسپارک دانشجوکیت digispark daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.
درود فراوان
بنده متوجه نشدم که فرمت وارد کردن تاریخ و ساعت به چه صورت است؟
با سلام
فرمت به صورت زیر است:
rtc.adjust(DateTime(2019, 9, 3, 10, 17, 0));
متوجه نشدم مهندس یکم واضح تر توضیح میدید ببینید الان من با دستور
float t = dht.redTemperature();
دارم دما رو دریافت میکنم میخوام این متغیر رو بفرستم داخل ربات چطور این کار رو انجام بدم؟
به این شکل مینویسم خطا میده
bot.sendMessage (chat_id,t);
با سلام
کاربر گرامی سوال شما شفاف نیست و کاملا بی ارتباط با موضوع این آموزش میباشد. جهت دریافت راهنمایی میبایست توضیحات کامل ارائه دهید.
سلام
کتابخانه RTC رو از قسمت محصولات گرفتم ولی رو خط RTC_DS3231 rtc; خطا میده
ضمنا این پیغام خطا رو میده
Arduino: 1.8.10 (Windows 8.1), Board: “Arduino/Genuino Uno”
ARDUINO-saaat:4:1: error: ‘RTC_DS3231’ does not name a type; did you mean ‘DS3231’?
RTC_DS3231 rtc;
^~~~~~~~~~
DS3231
D:\ARDUINO-saaat\ARDUINO-saaat.ino: In function ‘void setup()’:
ARDUINO-saaat:14:4: error: ‘rtc’ was not declared in this scope
rtc.begin();
^~~
D:\ARDUINO-saaat\ARDUINO-saaat.ino:14:4: note: suggested alternative: ‘getc’
rtc.begin();
^~~
getc
D:\ARDUINO-saaat\ARDUINO-saaat.ino: In function ‘void loop()’:
ARDUINO-saaat:32:18: error: ‘rtc’ was not declared in this scope
DateTime now = rtc.now();
^~~
D:\ARDUINO-saaat\ARDUINO-saaat.ino:32:18: note: suggested alternative: ‘getc’
DateTime now = rtc.now();
^~~
getc
Multiple libraries were found for “Wire.h”
Used: C:\Program
Multiple libraries were found for “RTClib.h”
Used: C:\Users\User\Documents\Arduino\libraries\libraries\RTCLib_by_NeiroN
exit status 1
‘RTC_DS3231’ does not name a type; did you mean ‘DS3231’?
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
که فکر کنم مشکل نصب کتابخانه داره
لطفا راهنمایی کنید
متشکرم
با سلام
در ابتدا کتابخانه RTC را حذف کرده و مجدد از لینک زیر در بخش دانلود کتابخانه RTCLib را دانلود و تست نمایید. نتیجه را از همین طریق اعلام فرمایید.
ماژول ساعت فوق دقیق DS3231 با رابط I2C
سلام مشکل کتابخانه دارم نصب نمیشه
رو این خط خطا میده
RTC_DS3231 rtc;
ممنون میشم راهنمایی کنید
سلام
در کامنت قبل پاسخ داده شد. بررسی و نتیجه را اعلام فرمایید.
thank you very much for you education
با سلام
از توجه شما ممنونم.
سلام من ماژولds3231را به اردینیو وصل میکنم روی نمایشگر هیچی نمایش نمیده مشکل چیه
با سلام
از چه نمایشگری استفاده میکنید؟
سلام. به وسیله این ماژول میخوام کنترل رله پمپ آب رو به دست بگیرم به این صورت که: طی زمانی که براش تعریف کردم روشن بشه و طی زمانی که تعیین کردم خاموش بشه. آیا امکانش هست؟ و اگه امکانش هست چطوری می تونم این کار رو انجام بدم؟
با سلام
در این خصوص بایستی در کدنویسی ها زمان تاخیر تعریف کنید که این مورد مرتبط با این پست نمیباشد.
با کد نویسی میشه ازش سر ساعت و روز خاصی خروجی گرفت؟
با سلام
بله امکان پذیر است.
چیجوری میشه ازش دما هم دریافت کرد؟
با سلام
توسط دستور زیر در برنامه نویسی میتوانید دیتای دما را دریافت کنید.
temperature = DS3231_get_treg(); //Get temperature
با سلام ممنون از آموزش خوبتون 🙂
با سلام
از توجه شما ممنونم. امیدوارم مفید واقع شود.
سلام
ممنون از اطلاعات خوبی که توی سایتتون گذاشتین
من دارم سعی میکنم ماژول ds3231 را روی ESP32 نصب کنم ولی هر کاری میکنم نتیجه نمیگیرم
روی مثال های RTCLiB یه سری برنامه آماده هست ولی هر وقت من اونارو استفاده میکنم همه چی رو ۱۶۵ نشون میده و تغییری نمیکنه
برای مثال
RTC DateTime: 165/25/165 45:85:85 DOW: 165 – Temp: 0
RTC DateTime: 165/25/165 45:85:85 DOW: 165 – Temp: 0
من سعی کردم دستور ها را مونجوری که تو سایت گفتین تو یه فایل جدید ک\ی کنم ولی خطا میده همش
میشه کل فایل ی که باید اجرا بشه رو بزارین
ممنون
با سلام
تفاوتی در نوع برد ندارد. با اجرای دستورات کتابخانه ساعت فعال میشود. ارور دریافتی را ضمیمه کنید تا بررسی شود.
با سلام مجدد و ممنون از پاسختون
برنامه ها به طور کامل کامپایل میشن ولی خروجی که روی مانیتور آردینو نشون میده همش با اعداد ۱۶۵ و ۴۵ و ۸۵ پر شده و بعضی اوقات اعداد اشتباهی دیگه نشون میده
این یه نمونه از خروجی که از مانیتور میگیرم.
۴۵:۱۶۵:۸۵ ۱۶۵/۱۶۵/۱۶۵ Day of week: 15:37:85 12/20/20 Day of week: 45:165:85 165/12/22 Day of week: 18:14:03 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 7:15:27 12/20/20 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 165/15/22 Day of week: 20:20:12 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:20:12 165/165/165 Day of week: 45:165:85 165/165/165 Day of week: 45:165:85 15/22/12 Day of week: 45:20:20 165/165/165 Day of week: 3:22:12 58/0/165 Day of week: 45:165:85 165/165/165 Day of week: 27:165:85 7/26/12 Day of week:
۴۵:۲۰:۲۰
Day of week
من حتی سعی کردم زمان رو دستی وارد کنم و کارایی که گفتین رو هم انجام دادم ولی خروجی مانیتور تغییری نمیکنه
کلا ماژول خود مختاریه
در ضمن از اتصال درست سیم ها اطمینان دارم چون یه برنامه دیگه هست واسه خوندون I2C Address که وقتی اجراش میکنم خروجی مانیتور درسته!!
با سلام
تا به حال با این مورد مواجه نشده ام. به نظر میرسد مشکل نرم افزاری باشد. در صورتیکه ماژول ایرادی داشته باشد، دیتایی ارسال نخواهد شد.
در حال بررسی هستم.
با سلام مجدد منDS3231 را با Arduino UNO هم امتحان کردم واسه کامپایل هیچ خطایی نشون نمیده و اینم خروجی مانیتور
۱۴:۰۸:۳۷٫۴۶۰ -> Couldn’t find RTC
۱۴:۰۹:۰۵٫۵۱۴ -> Couldn’t find RTC
آیا واقعا DS3231 خرابه؟
راه پیشنهادی شما چیه؟
ممنونم
لطفا کد I2C را اجرا و نتیجه را اعلام کنید.
سلام مجدد
ببخشید پشت سر هم مزاحم میشم
الان یه ویدیو توی یوتیوب پیدا کردم و قدم به قدم حتی با همون ورژن کتابخونه و با استفاده از Arduino UNO سنسور ds3231 رو برنامه ریزی کردم خروجی زیر رو داد
۱۹:۱۶:۰۶٫۳۴۵ -> DateTime::TIMESTAMP_FULL: ۲۱۶۵-۱۶۵-۱۶۵T165:165
۱۹:۱۶:۰۶٫۳۴۵ -> DateTime::TIMESTAMP_DATE: ۲۱۶۵-۱۶۵-۱۶۵
۱۹:۱۶:۰۶٫۳۴۵ -> DateTime::TIMESTAMP_TIME: ۱۶۵:۱۶۵:۸۵
۱۹:۱۶:۰۶٫۳۴۵ ->
۱۹:۱۶:۰۶٫۳۴۵ ->
۱۹:۱۶:۱۰٫۸۹۸ -> RTC is NOT running!
۱۹:۱۶:۱۰٫۸۹۸ -> DateTime::TIMESTAMP_FULL: ۲۱۶۵-۱۶۵-۱۶۵T165:165
۱۹:۱۶:۱۰٫۸۹۸ -> DateTime::TIMESTAMP_DATE: ۲۱۶۵-۱۶۵-۱۶۵
۱۹:۱۶:۱۰٫۸۹۸ -> DateTime::TIMESTAMP_TIME: ۱۶۵:۱۶۵:۸۵
۱۹:۱۶:۱۰٫۸۹۸ ->
۱۹:۱۶:۱۰٫۸۹۸ ->
۱۹:۱۶:۱۵٫۹۰۵ -> DateTime::TIMESTAMP_FULL: ۲۱۶۵-۱۶۵-۱۶۵T165:165
۱۹:۱۶:۱۵٫۹۰۵ -> DateTime::TIMESTAMP_DATE: ۲۱۶۵-۱۶۵-۱۶۵
۱۹:۱۶:۱۵٫۹۰۵ -> DateTime::TIMESTAMP_TIME: ۱۶۵:۱۶۵:۸۵
یه جا نوشته rtc is not Runing
آیا ممکنه که ds3231 کلا خراب باشه؟
در ضمن باتری کلا نو استفاده کردم
با سلام
در هر لحظه وضعیت ماژول تغییر میکند و به نظر میرسد در اتصالات مشکلی باشد. با این وجود احتمال خراب بودن ماژول بسیار کم است و فقط بایستی اتصالات را بررسی کنید.
با سلام
همانطور که اعلام شد با نمایش پیغام عدم شناسایی در اتصالات خطایی وجود دارد و نمیتوان از این طریق بررسی کرد.
لطفا مجدد تمامی پارامترهای مهم را بررسی و نتیجه را اعلام کنید.
با سلام و ممنون از پاسخ هاتون
من تمامی اتصالات را دوباره چک کردم و دوباره نتایج مشابه گرفتم.
کد I2C رو هم اجرا کردم درست کار میکنه.
اینم خروجیش :
۱۷:۰۰:۴۱٫۷۰۱ -> Scanning…
۱۷:۰۰:۴۱٫۷۰۱ -> I2C device found at address 0x57
۱۷:۰۰:۴۱٫۷۰۱ -> done
۱۷:۰۰:۴۱٫۷۰۱ ->
۱۷:۰۰:۴۶٫۷۱۶ -> Scanning…
۱۷:۰۰:۴۶٫۷۱۶ -> I2C device found at address 0x57
۱۷:۰۰:۴۶٫۷۱۶ -> done
۱۷:۰۰:۴۶٫۷۱۶ ->
من یه جایی خوندم که اسیلاتور داخل ماژول هم میتونه خراب باشه
من حس میکنم ۳۲ بیت حافظه داخلی سنسور پر هست و اطلاعانش تغییر نمیکنه
یه سنسور جدید سفارش دادم که تا ۲ روز دیگه به دستم میرسه
این دفعه یه DS1307 سفارش دادم
بررسی میکنم و نتایج را خدمتتون عرض میکنم
به هر حال ممنون از پیگیری هاتون
با سلام
سپاسگزارم.
با سلام ماژول ds1307 را دیروز دریافت و امتحان کردم
کار می کند و خروجی صحیح می دهد.
به نظر خود ds3231 ایراد داشته
با تشکر
با سلام
از اینکه نتیجه تست را اطلاع رسانی کردید، صمیمانه سپاسگزاریم.
سلام
ممنون از آموزش خوبتون
واقعا کمکم کرد
با سلام
سپاس از همراهی شما
سلام خانم مهندس؛ من با یک مشکل _ فکر میکنم عجیب_ روبرو شده ام. یک برنامه را برروی یک لپ تاپ نوشتم, رن شد, وبرروی برد اردواینو بدون مشکل کار میدهد. برروی یک لپ تاپ دیگر _ دقیقا با همان سیستم عامل , همان ورژن اردواینو و دقیقا همان کتابخانه ها _ ارور میدهد. ارور ها برروی جملاتی از برنامه ظاهر میشود . رنگ لغت هایی که در این جملات هست غیر عادی ومتفاوت از ان چیزی است که باید باشد ودر لپ تاپ دیگر است. برای مثال درجمله DS3231 clock هردو کلمه به رنگ قرمز است. لطفا راه حلی ارائه بدین.
با سپاس از شما
با سلام
لطفا ارورهای دریافتی را از همین طریق ارسال کنید تا بررسی شود.
سلام
من با ماژول ds1307 این پروژه رو اجرا کردم ولی با وجود اینکه باتری بکاپ داره زمانی که آردوینو خاموش میشه بعد چند ساعت ساعت از تنظیم خارج میشه اگه ماژول رو با ۳۲۱۳ تعویض کنم به نظرتون بهتر هست یا مشکل از جای دیگست؟
با سلام
در صورت استفاده از کد این برنامه مشکل شما حل خواهد شد.
سلام خسته نباشید متاسفانه ماژول از زمان اصلی جا میمونه این باید چیکار کنیم
با سلام
در متن آموزش به همین مورد اشاره شده است. بررسی کنید. همچنین از باتری بک آپ استفاده کنید.