نمایش تاریخ و ساعت با RTC DS1307 و آردوینو
محتویات
دانستن زمان در جامعه امروزی حیاتی است و وقتی صحبت از پروژه های الکترونیکی خاص می شود، زمان بندی بسیار مهم است. یعنی پروژه های الکترونیکی نیز مانند ما به دانستن زمان برای عملکرد صحیح و بهینه نیاز دارند. پروژه های الکتریکی برای دانستن ساعت از ماژول های RTC استفاده میکنند. ماژول RTC زمان سنجی است که در داخل یک مدار مجتمع (آی سی) تعبیه شده است. در پروژه های قبلی ما DS3231 با آردوینو را آموزش دادیم و در این آموزش به راه اندازی DS1307 با برد آردوینو میپردازیم.
ماژول DS1307
DS1307 یک ماژول ساعت/تقویم با 56 بایت SRAM یک باتری پشتیبان است. این ماژول داده های ثانیه، دقیقه، ساعت، روز، تاریخ، ماه و سال را نمایش می دهد. تاریخ پایان هر ماه به طور خودکار تغییر می کند همچنین برای ماه هایی که کمتر از 31 روز دارند. مزیت کلیدی RTC این است که دارای یک سیستم پشتیبان باتری است که حتی در صورت قطع برق، ساعت و تقویم را حفظ می کند. RTC برای فعال ماندن به مقدار کمی برق نیاز دارد. این RTC ها ممکن است در پروژه های مختلف از جمله دستگاه های تعبیه شده و مادربردهای کامپیوتری یافت شوند.
- SQ ممکن است طوری برنامه ریزی شود که یکی از چهار فرکانس موج مربعی را منتشر کند: ۱ هرتز، ۴ کیلوهرتز، ۸ کیلوهرتز یا ۳۲ کیلوهرتز
- DS اگر ماژول شما دارای یک سنسور دمای DS18B20 باشد که در کنار نگهدارنده باتری نصب شده است، این پین برای خروجی اطلاعات دما (با برچسب U1) طراحی شده است.
- SCL ورودی ساعت برای ارتباط I2C است که برای همگام سازی انتقال داده استفاده میشود.
- SDA ورودی/خروجی داده برای ارتباط I2C است.
- VCC این پین ماژول را تغذیه می کند. می تواند از 3.3 تا 5.5 ولت باشد.
- GND یک پین زمین است.
- BAT یک ورودی برای منبع پشتیبان باتری لیتیومی استاندارد 3 ولت یا منبع انرژی دیگری است که به گجت اجازه میدهد زمان دقیقی را حتی در صورت قطع برق نگه دارد.
تنظیم زمان و تاریخ ماژول DS1307
اتصال ماژول DS1307 به آردوینو برای تنظیم کردن تاریخ و ساعت آن بسیار ساده است. کافی است ماژول را مطابق با شماتیک مدار زیر سیم کشی کنید.
پس از ایجاد اتصالات بالا، باید Arduino Uno را به رایانه شخصی خود متصل کنید، نرم افزار Arduino IDE را باز کنید و کتابخانه تنظیم زمان DS1307 را نصب کنید. Arduino IDE را باز کرده و Library Manager را از منوی Sketch > include Library انتخاب کنید. حالا همانطور که در شکل زیر نشان داده شده است به دنبال RTCLib بگردید و آخرین نسخه آن را نصب کنید.
درک کد ساده است. زمان تنظیم می شود و در مانیتور سریال نشان داده می شود. (کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است)
در این خط آبجکت rtc زمان و تاریخ کامپیوتر شما را روی ماژول تنظیم میکند.
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
می توانید با دادن مقادیر تاریخ-زمان زیر به تابع، زمان را در این خط به صورت دستی تنظیم کنید: سال، ماه، روز، ساعت، دقیقه و ثانیه.
rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
نمایش ساعت و تاریخ در LCD با DS1307
اکنون می دانیم که چگونه زمان را در ماژول تنظیم کنیم، بیایید زمان را در نمایشگر LCD نمایش دهیم. پس از جمع آوری مواد فوق، اتصالات نشان داده شده در شماتیک مدار زیر را انجام دهید.
پایه های SDA و SCL ماژول DS1307 RTC را به پایه های SDA و SCL آردوینو وصل کنید. برای نشان دادن تاریخ و زمان، یک LCD 16×2 به برد آردوینو Uno متصل شده است.
قطعات مورد نیاز
- آردوینو اونو
- ماژول DS1307
- ال سی دی کاراکتری 16*2
- ماژول درایور I2C LCD
کد آردوینو نمایش زمان و تاریخ در LCD
کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مهم کد را بررسی میکنیم.
کتابخانه Wire.h برای اتصال ماژول از طریق I2C، و LiquidCrystal_I2C.h برای نمایش زمان و تاریخ در صفحه نمایش LCD و RTClib.h برای تنظیم و فرمت زمان روی نمایشگر استفاده می شود.
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <RTClib.h>
این خط آدرس صفحه نمایش LCD 16×2 را برای برقراری ارتباط از طریق پروتکل I2C تنظیم می کند.
LiquidCrystal_I2C lcd(0x27,16,2);
اگر اتصال به درستی انجام نشده باشد، این قسمت از کد در سریال مانیتور خطا را نشان میدهد.
if (! rtc.begin()) { Serial.println("DS1307 RTC Module is not Present"); while (1); }
اگر RTC قطع شود و زمان ماژول نادرست باشد، کد به طور خودکار زمان را در ماژول با استفاده از ساعت رایانه تنظیم می کند. بنابراین مطمئن شوید که ساعت رایانه شما روی زمان درست تنظیم شده است.
if (rtc.lostPower()) { Serial.println("RTC power failure, resetting the time!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); }
این بلوک کد مکان نما LCD را روی 0 بازنشانی می کند و تاریخ را در قالب تاریخ/ماه/سال خروجی می دهد.
void displayTime() { lcd.setCursor(0,0); lcd.print("Time:"); lcd.print(now.hour()); lcd.print(':'); lcd.print(now.minute()); lcd.print(':'); lcd.print(now.second()); lcd.print(" "); }
مکان نما در این قسمت از کد روی 1 تنظیم شده است و زمان با فرمت ساعت: دقیقه: ثانیه چاپ می شود.
void displayDate() { lcd.setCursor(0,1); lcd.print("Date:"); lcd.print(now.day()); lcd.print('/'); lcd.print(now.month()); lcd.print('/'); lcd.print(now.year()); }
زمانی که کد را در برد آردوینو خود آپلود کردید، تاریخ و زمان روی صفحه LCD ظاهر می شود.
موارد موجود در فایل : فایل سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام استاد کد آپلود میشه ولی متن نوشته شده ناخوانست یعنی با علمت سوال و 0 نمایش داده میشه
سلام ماژول رو تنظیم کردم ولی وقتی کد سورس رو وارد میکنم ارور میده
Compilation error: no matching function for call to ‘LiquidCrystal_I2C::begin()’
سلام عزیز
کتابخانه LiquidCrystal_I2C را نصب کردید؟
بله
سلام استاد
آیا این پروژه رو میشه با آردوینو ch340 انجام داد؟
سلام عزیز
بله
برای نمایش نام روزها منظورم همین شنبه یا یکشنبه خودمون است از چه دستوری استفاده کنم و لطفا یک کتابخانه معرفی کنید که تاریخ میلادی را به شمسی تبدیل کند
با سلام و خسته نباشید. خیلی ممنون از پروژه خوبتون من این برنامه رو روی برد اردوینو نانو ریختم و نتیجه جالب خوب بود فقط میخواستم یک ماژول DHT11 وصل کنم و یک یکسری کد داخل برنامه اضافه کنم تا هم تاریخ و هم ساعت و دما و رطوبت هم نشان داده بشود خیلی ممنون میشم منو راهنمایی کنید
سلام وقت بخیر ممنون از اطلاعاتتون
الان دوتا فایل توی زیپ هست
یکی سورس اون یکی تایم ستاپ
تایم ستاپ برای چی هست؟
ارور LiquidCrystal_I2c.h : no such file or dictionary میده
با اینکه کتابخونهاش رو نصب کردم
باید چی کار کنم
سلام عزیز
یک کد برای تنظیم زمان در ماژول هست و کد بعدی کد اصلی پروژه است.
اگر ارور کتابخانه را دریافت میکنید یکبار کتابخانه های نصب شده را پاک کنید و دوباره آخرین نسخه را نصب کنید.