آموزش آردوینوپروژه های آردوینو

نمایش تاریخ و ساعت با RTC DS1307 و آردوینو

دانستن زمان در جامعه امروزی حیاتی است و وقتی صحبت از پروژه های الکترونیکی خاص می شود، زمان بندی بسیار مهم است. یعنی پروژه های الکترونیکی نیز مانند ما به دانستن زمان برای عملکرد صحیح و بهینه نیاز دارند. پروژه های الکتریکی برای دانستن ساعت از ماژول های RTC استفاده میکنند. ماژول RTC زمان سنجی است که در داخل یک مدار مجتمع (آی سی) تعبیه شده است. در پروژه های قبلی ما DS3231 با آردوینو را آموزش دادیم و در این آموزش به راه اندازی DS1307 با برد آردوینو میپردازیم.

ماژول DS1307

DS1307 یک ماژول ساعت/تقویم با 56 بایت SRAM یک باتری پشتیبان است. این ماژول داده های ثانیه، دقیقه، ساعت، روز، تاریخ، ماه و سال را نمایش می دهد. تاریخ پایان هر ماه به طور خودکار تغییر می کند همچنین برای ماه هایی که کمتر از 31 روز دارند. مزیت کلیدی RTC این است که دارای یک سیستم پشتیبان باتری است که حتی در صورت قطع برق، ساعت و تقویم را حفظ می کند. RTC برای فعال ماندن به مقدار کمی برق نیاز دارد. این RTC ها ممکن است در پروژه های مختلف از جمله دستگاه های تعبیه شده و مادربردهای کامپیوتری یافت شوند.

ماژول DS1307

  • SQ ممکن است طوری برنامه ریزی شود که یکی از چهار فرکانس موج مربعی را منتشر کند: ۱ هرتز، ۴ کیلوهرتز، ۸ کیلوهرتز یا ۳۲ کیلوهرتز
  • DS اگر ماژول شما دارای یک سنسور دمای DS18B20 باشد که در کنار نگهدارنده باتری نصب شده است، این پین برای خروجی اطلاعات دما (با برچسب U1) طراحی شده است.
  • SCL ورودی ساعت برای ارتباط I2C است که برای همگام سازی انتقال داده استفاده میشود.
  • SDA ورودی/خروجی داده برای ارتباط I2C است.
  • VCC این پین ماژول را تغذیه می کند. می تواند از 3.3 تا 5.5 ولت باشد.
  • GND یک پین زمین است.
  • BAT یک ورودی برای منبع پشتیبان باتری لیتیومی استاندارد 3 ولت یا منبع انرژی دیگری است که به گجت اجازه می‌دهد زمان دقیقی را حتی در صورت قطع برق نگه دارد.

تنظیم زمان و تاریخ ماژول DS1307

اتصال ماژول DS1307 به آردوینو برای تنظیم کردن تاریخ و ساعت آن بسیار ساده است. کافی است ماژول را مطابق با شماتیک مدار زیر سیم کشی کنید.

تنظیم زمان و تاریخ ماژول DS1307

پس از ایجاد اتصالات بالا، باید Arduino Uno را به رایانه شخصی خود متصل کنید، نرم افزار Arduino IDE را باز کنید و کتابخانه تنظیم زمان DS1307 را نصب کنید. Arduino IDE را باز کرده و Library Manager را از منوی Sketch > include Library انتخاب کنید. حالا همانطور که در شکل زیر نشان داده شده است به دنبال RTCLib بگردید و آخرین نسخه آن را نصب کنید.

کتابخانه آردوینو DS1307 RTClib

درک کد ساده است. زمان تنظیم می شود و در مانیتور سریال نشان داده می شود. (کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است)

در این خط آبجکت rtc زمان و تاریخ کامپیوتر شما را روی ماژول تنظیم میکند.

rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));

می توانید با دادن مقادیر تاریخ-زمان زیر به تابع، زمان را در این خط به صورت دستی تنظیم کنید: سال، ماه، روز، ساعت، دقیقه و ثانیه.

rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

نمایش ساعت و تاریخ در LCD با DS1307

اکنون می دانیم که چگونه زمان را در ماژول تنظیم کنیم، بیایید زمان را در نمایشگر LCD نمایش دهیم. پس از جمع آوری مواد فوق، اتصالات نشان داده شده در شماتیک مدار زیر را انجام دهید.

نمایش ساعت و تاریخ در LCD با DS1307

پایه های SDA و SCL ماژول DS1307 RTC را به پایه های SDA و SCL آردوینو وصل کنید. برای نشان دادن تاریخ و زمان، یک LCD 16×2 به برد آردوینو Uno متصل شده است.

قطعات مورد نیاز

قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

کد آردوینو نمایش زمان و تاریخ در 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 ظاهر می شود.

موارد موجود در فایل : فایل سورس کامل

3.9 (8 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

10 نظر

  1. سلام استاد کد آپلود میشه ولی متن نوشته شده ناخوانست یعنی با علمت سوال و 0 نمایش داده میشه

  2. سلام ماژول رو تنظیم کردم ولی وقتی کد سورس رو وارد میکنم ارور میده
    Compilation error: no matching function for call to ‘LiquidCrystal_I2C::begin()’

    1. سلام عزیز
      کتابخانه LiquidCrystal_I2C را نصب کردید؟

  3. سلام استاد
    آیا این پروژه رو میشه با آردوینو ch340 انجام داد؟

  4. برای نمایش نام روزها منظورم همین شنبه یا یکشنبه خودمون است از چه دستوری استفاده کنم و لطفا یک کتابخانه معرفی کنید که تاریخ میلادی را به شمسی تبدیل کند

  5. با سلام و خسته نباشید. خیلی ممنون از پروژه خوبتون من این برنامه رو روی برد اردوینو نانو ریختم و نتیجه جالب خوب بود فقط میخواستم یک ماژول DHT11 وصل کنم و یک یکسری کد داخل برنامه اضافه کنم تا هم تاریخ و هم ساعت و دما و رطوبت هم نشان داده بشود خیلی ممنون میشم منو راهنمایی کنید

  6. سلام وقت بخیر ممنون از اطلاعاتتون
    الان دوتا فایل توی زیپ هست
    یکی سورس اون یکی تایم ستاپ
    تایم ستاپ برای چی هست؟
    ارور LiquidCrystal_I2c.h : no such file or dictionary میده
    با اینکه کتابخونه‌اش رو نصب کردم
    باید چی کار کنم

    1. سلام عزیز
      یک کد برای تنظیم زمان در ماژول هست و کد بعدی کد اصلی پروژه است.
      اگر ارور کتابخانه را دریافت میکنید یکبار کتابخانه های نصب شده را پاک کنید و دوباره آخرین نسخه را نصب کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *