راه اندازی ماژول RTC DS3231 با آردوینو (آموزش کامل)
محتویات
در دنیای امروز، زمان همه چیز است، و وقتی صحبت از پروژه های الکترونیک می شود، زمان بندی بسیار مهم است. درست مانند ما انسان ها، پروژه های الکترونیک نیز به راهی برای پیگیری زمان نیاز دارند. پس یک پروژه الکترونیک چگونه این کار را انجام می دهد؟ پاسخ ماژول DS3231 است. یک ساعت بیدرنگ، که اغلب به عنوان RTC شناخته می شود، یک دستگاه زمان سنج که در ظاهر یک مدار مجتمع (آی سی) ساخته شده است. این ماژول در بسیاری از پروژه ها و دستگاههای حساس زمانی مانند سرورها، GPS و دیتا لاگرها استفاده میشود.
ماژول DS3231 RTC
DS3231 یک ساعت (RTC) با یک نوسان ساز کریستال است که هم کم هزینه و هم بسیار دقیق است. این ماژول دارای باتری است و هنگامی که برق ماژول قطع می شود زمان دقیق را نگه می دارد. دقت طولانی مدت دستگاه با گنجاندن نوسانگر کریستالی بهبود یافته است. RTC ثانیه ها، دقیقه ها، ساعت ها، روزها، تاریخ ها، ماه ها و سال ها را پیگیری می کند. برای ماه های کمتر از 31 روز، تاریخ پایان ماه به طور خودکار اصلاح می شود، دارای قابلیت تنظیم سال کبیسته است و همچنین ساعت دارای نشانگر AM/PM است و در حالت 24 ساعته یا 12 ساعته کار می کند. یک گذرگاه دو طرفه ارتباط I2C برای انتقال آدرس و داده ها به صورت سریال استفاده می شود.
ماژول DS3231 دارای 6 پین برای دریافت اطلاعات از ماژول و تامین برق برد می باشد. توضیحات پین های DS3231 به شرح زیر است:
پین اوت ماژول RTC DS3231
- 32K خروجی نوسانگر
- SQW پین خروجی موج مربعی
- SCL پین ساعت سریال (ارتباط I2C)
- SDA پین داده سریال (ارتباط I2C)
- VCC به مثبت منبع تغذیه متصل است
- GND به زمین متصل است
وقتی پین 32k ماژول DS3231 را با استفاده از اسیلوسکوپ بررسی می کنیم، سیگنال 32 کیلوهرتز را از نوسانگر داخلی آی سی دریافت می کنیم.
تنظیم زمان ماژول DS3231
تنظیم زمان در ماژول DS3231 نسبتاً ساده است. تنها کاری که باید انجام دهید این است که آن را در پیکربندی زیر به آردوینو متصل کنید.
پس از ایجاد اتصالات بالا، باید Arduino UNO را به رایانه شخصی خود متصل کنید. همچنین باید کتابخانه DS3231 آردوینو را نصب کنید. میتوانید در Library Manager آردوینو به دنبال RTCLib و DS3231 بگردید و آن ها را نصب کنید.
کد آردوینو تنظیم زمان DS3231
کد کامل تنظیم در فایل دانلود انتهای صفحه قرار داده شده است.
کد کاملاً ساده است. زمان را تنظیم می کند و سپس آن را روی مانیتور سریال نشان می دهد.
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
آبجکت rtc زمان را با توجه به زمان رایانه شما در این خط تنظیم می کند.
rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
اگر بخواهید میتوانید با کد بالا زمان را به صورت دستی وارد کنید تا تنظیم شود. به ترتیب:
year, month, date, hour, minute, second
بعد از آپلود کد شما زمان ماژول rtc خود را تنظیم کرده اید.
ساعت دیجیتالی با DS3231 و آردوینو
بیایید با استفاده از DS3231 و LCD یک ساعت دیجیتال آردوینو بسازیم.
قطعات مورد نیاز:
- آردوینو Uno
- ماژول RTC DS3231
- نمایشگر LCD 16*2
- سیم جامپر
- پتانسیومتر 10 کیلو اهم
- باتری سکه ای 3 ولت (CR2032)
مدار ساعت دیجیتال آردوینو
- SCL ماژول RTC را به آردوینو A5 وصل کنید
- SDA ماژول RTC را به آردوینو A4 وصل کنید
- VCC را به 5 ولت و GND را به GND وصل کنید
- RS LCD را به پایه 7 آردوینو وصل کنید
- E LCD را به پایه 6 آردوینو وصل کنید
- D7 LCD را به پایه 2 آردوینو وصل کنید
- D6 LCD را به پایه 3 آردوینو وصل کنید
- D5 LCD را به پایه 4 آردوینو وصل کنید
- D4 LCD را به پایه 5 آردوینو وصل کنید
- VSS,K,RW,D0,D1,D2,D3 را به GND وصل کنید
- VDD & A را به 5 ولت وصل کنید
- VO را به پین خروجی پتانسیومتر وصل کنید (برای کنترل کنتراست متن)
کد آردوینو نمایش زمان در LCD
کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است.
فایلهای هدر زیر را به کد اضافه میکنیم، Wire.h برای استفاده از I2C برای برقراری ارتباط با ماژول، LiquidCrystal.h برای راه اندازی ال سی دی کاراکتری و RTClib.h برای تنظیم زمان برای نمایش و فرمت آن استفاده میشود.
#include <Wire.h> #include <LiquidCrystal.h> #include <RTClib.h>
این خط در کد مشخص می کند که کدام پایه ال سی دی به کدام پایه آردوینو متصل است.
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (rs, e, d4, d5, d6, d7)
اگر ارتباط با ماژول به خوبی برقرار نباشد، در سریال مانیتور پیام خطای زیر نمایش داده میشود.
if (! rtc.begin()) { Serial.println(" RTC Module not Present"); while (1); }
اگر برق ماژول RTC قطع شود و زمان ماژول اشتباه شود، کد به طور خودکار زمان را در ماژول تنظیم می کند و زمان را از ساعت کامپیوتر می گیرد. بنابراین مطمئن شوید هنگام تنظیم زمان، ساعت رایانه شما درست باشد.
if (rtc.lostPower()) { Serial.println("RTC power failure, reset the time!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); }
این بخش از کد مکان نما LCD روی ردیف 0 تنظیم می کند و تاریخ را با فرمت Date/Month/Year چاپ می کند.
void displayDate() { lcd.setCursor(0,0); lcd.print("Date:"); lcd.print(now.day()); lcd.print('/'); lcd.print(now.month()); lcd.print('/'); lcd.print(now.year()); }
این بخش از کد مکان نما را روی ردیف 1 تنظیم می کند و زمان را با فرمت Hour:Minute:Second چاپ می کند.
void displayTime() { lcd.setCursor(0,1); lcd.print("Time:"); lcd.print(now.hour()); lcd.print(':'); lcd.print(now.minute()); lcd.print(':'); lcd.print(now.second()); lcd.print(" "); }
پس از آپلود کد می توانید تاریخ و زمان را روی صفحه LCD مشاهده کنید.
موارد موجود در فایل : فایل سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
با سلام
من در حال راه اندازی RTC داخلی آیسی STM32F302CBT6 هستم و برای انتقال دیتا از USB توی مد CDC استفاده میکنم مشکلی که هست اینه زمانی که USB داخل برنامه فعال میشه و RTC نداریم همه چیز به درستی کار میده اما از زمانی که RTC میاد داخل برنامه همه چیز به هم میریزد و هیچ قسمتی کار نمیکنه حتی GPIO فعال نمیشه که بخوام پین مربوط به اتصال USB را کنترل کنم
با سلام و ممنون از آموزش خوب و عالی چگونه میتوان به جای تاریخ میلادی تاریخ شمسی را نمایش دهیم
سلام من این کد رو اجرا کردم ولی ساعت تغییری نمیکنه فقط یه عدد مشخص هی تکرار میشه
سلام عزیز
توضیحات بهتر را در انجمن ارائه بدهید تا بتوانیم شما را راهنمایی کنیم.
سلام مجدد مهندس چندتا سوال داشتم میتونم تو تلگرام بهتون پیام بدم؟ سپاس
سلام عزیز
پاسخگویی سوالات مربوط به مطالب در قسمت نظرات یا انجمن هست
درود مهندس ارادت، خداقوت، ممنون بابت آموزشها، اون دوتا سورس کد که ارائه دادید اون کدی که مربوط به نمایش ساعت روی lcd هست، کد نمایش ساعت بروی سریال مانیتور هم در انتهاش درج شده، که وقتی همه رو باهم آپلود میکنم، خطا میده ولی اون قسمت دوم را که حذف کردم درست کار میکنه زمانو از کامپیوتر میگیره و برق هم که قطعو وصل میکنم زمان بدرستی کار میکنه
سلام عزیز
باید جداگانه آپلود کنید کد اول برای تنظیم ساعت هست و کد دوم برای نمایش روی ال سی دی.
سلام مهندس این خطا میده ایراد کارم کجاست
To set the Time
سلام عزیز
زمان آپلود کدام کد این خطا را دریافت میکنید و متن کامل خطا را ارسال کنید
سلام من تمام اتصالات و کد ها رو کامل نوشته ام و سطر های lcd هم روشن میشه اما چیزی نوشته نمیشه
سلام عزیز
توضیحات همراه با یک عکس از اتصالات مدار در انجمن بذارید بررسی خواهد شد.
سلام بفرمائيد در دوره آردینو سیم کشی ماژول ساعت DS3231 و سنسور Sht31 با lcd پروتکل I2C و کد های مربوطه وجود دارد تا نسبت به خریداری آن اقدام شود
سلام عزیز
برای بررسی موارد موجود در دوره، قسمت سرفصل های هر دوره رو مطالعه بفرمایید
سلام اگر نمایشگر ما با ارتباط i2c کار کند مشکلی پیش نمی آید ؟
سلام عزیز
نیاز به تغییر جزئی در کد هست