ماژولDS3231 یک هدر بورد چیپ DS3231 است که امکان اتصال آن به برد بورد یا برد هایی مانند آردوینو را فراهم می کند . DS3231 یک چیپ RTC است که وظیفه شمارش زمان و تاریخ را به صورت دقیق فراهم میکند . در بسیاری از پروژه ها ممکن است به شمارش زمان و تاریخ نیاز داشته باشد که می توانید از واحد تایمر کانتر میکروکنترلر استفاده کنید . ولی در شرایطی که نیاز به دقت بالا داریم و یا شمارش تاریخ مهم است بهترین گزینه استفاده از RTC های خارجی می باشد. DS3231 قابلیت محاسبه تاریخ دقیق روز ها با احتساب سال های کبیسه تا 2100 را دارد . همچنین می توان تا دو هشدار در روز را ذخیره کند . به طور کلی چیپ RTC فوق العاده کم مصرف می باشند و DS3231 نیز از این قاعده مستثنی نیست لذا با یک باتری سکه ای می تواند مدت ها ساعت و تاریخ را به صورت دقیق شمارش کند و تنها در صورت نیاز MCU مقادیر را از DS3231 دریافت کند .
در تصویر زیر پین های ماژول نشان داده شده اند :
ماژول DS3231 علاوه بر چیپ DS3231 شامل یک چیپ EEPROM با ظرفیت 4KByte نیز می باشد . پین های این ماژول به شرح زیر هستند :
1- 33k خروجی 3.3 ولت
2-SQW خروجی پالس با فرکانس دقیق که می توانید مقدار آن را در حالت های 1Hz و یا 4 ، 8 و 32 کیلو هرتز تنظیم کنید .
3-پین های SDA و SCL برای ارتباط I2C می باشند .
4- VCC و GND به ترتیپ پین های تغذیه و زمین هستند .
راه اندازی توسط آردوینو :
#include <Wire.h> #include "RTClib.h" RTC_DS3231 rtc; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; void setup () { Serial.begin(9600); delay(3000); // wait for console opening if (! rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); } if (rtc.lostPower()) { Serial.println("RTC lost power, lets set the time!"); // Comment out below lines once you set the date & time. // Following line sets the RTC to the date & time this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Following line sets the RTC with an explicit date & time // for example to set January 27 2017 at 12:56 you would call: // rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0)); } } void loop () { DateTime now = rtc.now(); Serial.println("Current Date & Time: "); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(" ("); Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); Serial.print(") "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); Serial.println("Unix Time: "); Serial.print("elapsed "); Serial.print(now.unixtime()); Serial.print(" seconds/"); Serial.print(now.unixtime() / 86400L); Serial.println(" days since 1/1/1970"); // calculate a date which is 7 days & 30 seconds into the future DateTime future (now + TimeSpan(7,0,0,30)); Serial.println("Future Date & Time (Now + 7days & 30s): "); Serial.print(future.year(), DEC); Serial.print('/'); Serial.print(future.month(), DEC); Serial.print('/'); Serial.print(future.day(), DEC); Serial.print(' '); Serial.print(future.hour(), DEC); Serial.print(':'); Serial.print(future.minute(), DEC); Serial.print(':'); Serial.print(future.second(), DEC); Serial.println(); Serial.println(); delay(1000); }