ویژگی های ماژول ساعت دقیق DS3231
ماژول ساعت دقیق DS3231 بسیار دقیق و دارای توان مصرفی پایین میباشد. به کمک این ماژول میتوان اطلاعات ثانیه، دقیقه، ساعت، روز، تاریخ، ماه و سال را به دقت نگهداری کرد. تاریخ در انتهای هر ماه بر اساس 29، 30 یا 31 روزه بودن ماه و همچنین در پایان سال بر اساس کبیسه بودن یا نبودن، تنظیم میشود. همچنین این ماژول را میتوان در دو فرمت 12ساعته و 24ساعته تنظیم کرد.
نکته
معرفی پایه ها (Pinout) ماژول ساعت فوق دقیق DS3231
یک نوع ماژول ساعت فوق دقیق DS3231 دارای 6 پایه به شرح زیر است:
- INT: خروجی وقفه
- COT: خروجی کلاک
- SCL: ورودی سریال Serial Clock Input برای پروتکل I2C
- SDA: ورودی داده Serial Data Input/Output برای پروتکل I2C
- VCC: تغذیه ماژول –5 ولت
- GND: زمین
پین اوت (Pinout) این ماژول را می توانید در تصویر زیر مشاهده کنید.
نوع دیگر ماژول ساعت دقیق DS3231 دارای 5 پایه به شرح زیر است:
- VCC: تغذیه ماژول – 5 ولت
- SCL: ورودی سریال Serial Clock Input برای پروتکل I2C
- SDA: ورودی داده Serial Data Input/Output برای پروتکل I2C
- NC: به جایی متصل نمیشود
- GND: زمین
پین اوت (Pinout) این ماژول را می توانید در تصویر زیر مشاهده کنید.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
راه اندازی ماژول ساعت دقیق DS3231
گام اول: سیم بندی
مطابق یکی از دو مدار زیر، ماژول را به آردوینو وصل کنید.
گام دوم: نصب کتابخانه
از این قسمت به بعد، مراحل برای هر دو نوع ماژول یکسان است. کتابخانه DS3231 را از لینک زیر دانلود کنید. سپس به قسمت Include Library رفته و کتابخانه را نصب کنید.
DS3231 Library File
گام سوم: کد
کد زیر را روی برد آردوینو آپلود کنید. پس از آپلود کد، پنجره ی Serial Monitor را باز کنید.
/*
modified on Nov 22, 2020
Modified by MehranMaleki from Arduino Examples
Home
*/
#include <Wire.h>
#include <ds3231.h>
struct ts t;
void setup() {
Serial.begin(9600);
Wire.begin();
DS3231_init(DS3231_CONTROL_INTCN);
/*----------------------------------------------------------------------------
In order to synchronise your clock module, insert timetable values below !
----------------------------------------------------------------------------*/
t.hour=3;
t.min=0;
t.sec=0;
t.mday=14;
t.mon=11;
t.year=2020;
DS3231_set(t);
}
void loop() {
DS3231_get(&t);
Serial.print("Date : ");
Serial.print(t.mday);
Serial.print("/");
Serial.print(t.mon);
Serial.print("/");
Serial.print(t.year);
Serial.print("\t Hour : ");
Serial.print(t.hour);
Serial.print(":");
Serial.print(t.min);
Serial.print(".");
Serial.println(t.sec);
delay(1000);
}
در کد بالا، ابتدا اطلاعات ثانیه، دقیقه، ساعت، روز، ماه و سال به عنوان نقطه شروع به ماژول داده میشود. سپس ماژول شروع به کار کرده و هر ثانیه آپدیت میشود. در ادامه، در هر ثانیه اطلاعات از ماژول گرفته شده و در پنجره ی Serial Monitor نمایش داده میشود.
خروجی کد به شکل زیر است.
Comments (12)
اگه اردوینو خاموش بشه و مجدد روشن بشه تایم به حالت های که ما تعریف کردیم برمیگرده و از نو شروع به شمارش میکنه؟!
سلام.
بله. با هر بار ریست شدن آردوینو و خاموش شدن ماژول، ساعت به مقدار اولیه که انتخاب کردیم برمیگرده. مگرینکه برای ماژول باتری بگذارید که در این صورت، ماژول ساعت رو نگه میداره و بعد از خاموش شدن آردوینو، همچنان به شمارش ساعت ادامه میده و بعد از روشن شدن دوباره آردوینو، ساعت دقیق رو میگه. به این معنا که حتی اگه یک ساعت آردوینو خاموش باشه، ماژول DS3231 در اون یک ساعت به شمارش ادامه میده.
سلام و خسته نباشید.
باتری هم داخلش گذاشتم ولی ساعت را از همون مقدار اولیه بارگذاری میکنه!
سلام.
هر بار که Serial Monitor را باز میکنید، عملا مثل این هست که برد آردوینو رو ریست کرده باشید. در نتیجه ساعت دوباره از مقدار اولیه بارگذاری میشه. در عمل که با باز و بسته کردن Serial Monitor سروکار ندارید، با گذاشتن باتری، دیگه ماژول ریست نمیشه و زمان رو موقعی که تغذیه خارجی هم قطع میشه نگه میداره.
سلام میشه تنظیم کرد که در فلان تاریخ یه دستوری را اجرا کند؟
سلام.
بله، میشه این کار رو انجام داد. با گذاشتن یه جمله شرطی if تو کد و چک کردن مداوم زمان، میتونید تنظیم کنید که وقتی به یه زمان مورد نظر رسید یه دستوری رو اجرا کنه.
کتابخانه و توابع را باید توضیح دهید که متوجه بشن
سلام.
بله درست میفرمایید. اما در این آموزشهای راهاندازی هدف اصلی حدالامکان کوتاه و کارراهانداز بودن آنهاست. در آموزشهای طولانیتر که در سایت موجوده میتونید انواع آموزشها همراه با توضیح کد رو پیدا کنید.
سلام من نصب کردم و برنامه اجرا شد ولی همش یک ساعت رو نشون میده و هی تکرار میکنه ساعت جلو نمیره اصن چیکار کنم
سلام.
به احتمال زیاد مشکل نمیتونه از نحوه اتصالتون باشه چون در این صورت در Serial Monitor هیچ ساعتی رو نشون نمیداد. با توجه به این موضوع، امکانش هست که مشکل از خود ماژول ساعت باشه.
سلام.وقتتون بخیر.ممنون از سایت خوبتون
میخواستم ببینم اگه صدم ثانیه رو هم بخوام نمایش بده باید چه قسمتهای کد رو تغییر بدم؟ البته با وجود اینکه توی دیتاشیت آی سی گفته امکان نمایش داره
سلام وقت شما بخیر
ممنون از توجهتون
ببینید آی سی DS3231 نمیتونه زمان کمتر از 1 ثانیه رو اندازه گیری کنه، شما برای این کار میتونید از پایه خروجی ماژول که موج مربعی با فرکانس های مختلف تولید میکنه و capture کردن اون توسط وقفه آردینواستفاده کنی و زمان 10 میلی ثانیه رو بسازی
حالا برای این کار شما باید از طریق برد ، فرکانس موج مربعی خروجی ماژول رو ست کنی که طبق دیتا شیت فرکانس های مختلفی داره از 1 هرتز تا 1کیلوهرتز ، که شما اگر روی 1 کیلوهرتز ست کنی میتونی زمان با رزولوشن 1 میلی ثانیه تنظیم کنی