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

راه اندازی ماژول RTC DS3231 با آردوینو (آموزش کامل)

در دنیای امروز، زمان همه چیز است، و وقتی صحبت از پروژه های الکترونیک می شود، زمان بندی بسیار مهم است. درست مانند ما انسان ها، پروژه های الکترونیک نیز به راهی برای پیگیری زمان نیاز دارند. پس یک پروژه الکترونیک چگونه این کار را انجام می دهد؟ پاسخ ماژول DS3231 است. یک ساعت بیدرنگ، که اغلب به عنوان RTC شناخته می شود، یک دستگاه زمان سنج که در ظاهر یک مدار مجتمع (آی سی) ساخته شده است. این ماژول در بسیاری از پروژه ها و دستگاه‌های حساس زمانی مانند سرورها، GPS و دیتا لاگرها استفاده می‌شود.

ماژول DS3231 RTC

DS3231 یک ساعت (RTC) با یک نوسان ساز کریستال است که هم کم هزینه و هم بسیار دقیق است. این ماژول دارای باتری است و هنگامی که برق ماژول قطع می شود زمان دقیق را نگه می دارد. دقت طولانی مدت دستگاه با گنجاندن نوسانگر کریستالی بهبود یافته است. RTC ثانیه ها، دقیقه ها، ساعت ها، روزها، تاریخ ها، ماه ها و سال ها را پیگیری می کند. برای ماه های کمتر از 31 روز، تاریخ پایان ماه به طور خودکار اصلاح می شود، دارای قابلیت تنظیم سال کبیسته است و همچنین ساعت دارای نشانگر AM/PM است و در حالت 24 ساعته یا 12 ساعته کار می کند. یک گذرگاه دو طرفه ارتباط I2C برای انتقال آدرس و داده ها به صورت سریال استفاده می شود.

ماژول DS3231 RTC

ماژول DS3231 دارای 6 پین برای دریافت اطلاعات از ماژول و تامین برق برد می باشد. توضیحات پین های DS3231 به شرح زیر است:

پین اوت ماژول RTC DS3231

  • 32K خروجی نوسانگر
  • SQW پین خروجی موج مربعی
  • SCL پین ساعت سریال (ارتباط I2C)
  • SDA پین داده سریال (ارتباط I2C)
  • VCC به مثبت منبع تغذیه متصل است
  • GND به زمین متصل است

وقتی پین 32k ماژول DS3231 را با استفاده از اسیلوسکوپ بررسی می کنیم، سیگنال 32 کیلوهرتز را از نوسانگر داخلی آی سی دریافت می کنیم.

سیگنال RTC DS3231

تنظیم زمان ماژول DS3231

تنظیم زمان در ماژول DS3231 نسبتاً ساده است. تنها کاری که باید انجام دهید این است که آن را در پیکربندی زیر به آردوینو متصل کنید.

مدار اتصال RTC SD3231 به آردوینو

پس از ایجاد اتصالات بالا، باید Arduino UNO را به رایانه شخصی خود متصل کنید. همچنین باید کتابخانه DS3231 آردوینو را نصب کنید. میتوانید در Library Manager آردوینو به دنبال RTCLib و DS3231 بگردید و آن ها را نصب کنید.

کتابخانه آردوینو 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 یک ساعت دیجیتال آردوینو بسازیم.

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

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

مدار ساعت دیجیتال آردوینو

مدار ساعت دیجیتال آردوینو

  • 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 مشاهده کنید.

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

4 (4 نفر)

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

محمد رحیمی

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

16 نظر

  1. با سلام
    من در حال راه اندازی RTC داخلی آیسی STM32F302CBT6 هستم و برای انتقال دیتا از USB توی مد CDC استفاده میکنم مشکلی که هست اینه زمانی که USB داخل برنامه فعال میشه و RTC نداریم همه چیز به درستی کار میده اما از زمانی که RTC میاد داخل برنامه همه چیز به هم می‌ریزد و هیچ قسمتی کار نمیکنه حتی GPIO فعال نمیشه که بخوام پین مربوط به اتصال USB را کنترل کنم

  2. با سلام و ممنون از آموزش خوب و عالی چگونه میتوان به جای تاریخ میلادی تاریخ شمسی را نمایش دهیم

  3. سلام من این کد رو اجرا کردم ولی ساعت تغییری نمیکنه فقط یه عدد مشخص هی تکرار میشه

    1. سلام عزیز
      توضیحات بهتر را در انجمن ارائه بدهید تا بتوانیم شما را راهنمایی کنیم.

  4. سلام مجدد مهندس چندتا سوال داشتم میتونم تو تلگرام بهتون پیام بدم؟ سپاس

    1. سلام عزیز
      پاسخگویی سوالات مربوط به مطالب در قسمت نظرات یا انجمن هست

  5. درود مهندس ارادت، خداقوت، ممنون بابت آموزشها، اون دوتا سورس کد که ارائه دادید اون کدی که مربوط به نمایش ساعت روی lcd هست، کد نمایش ساعت بروی سریال مانیتور هم در انتهاش درج شده، که وقتی همه رو باهم آپلود میکنم، خطا میده ولی اون قسمت دوم را که حذف کردم درست کار میکنه زمانو از کامپیوتر میگیره و برق هم که قطعو وصل میکنم زمان بدرستی کار میکنه

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

  6. سلام مهندس این خطا میده ایراد کارم کجاست
    To set the Time

    1. سلام عزیز
      زمان آپلود کدام کد این خطا را دریافت میکنید و متن کامل خطا را ارسال کنید

  7. سلام من تمام اتصالات و کد ها رو کامل نوشته ام و سطر های lcd هم روشن میشه اما چیزی نوشته نمیشه

    1. سلام عزیز
      توضیحات همراه با یک عکس از اتصالات مدار در انجمن بذارید بررسی خواهد شد.

  8. سلام بفرمائيد در دوره آردینو سیم کشی ماژول ساعت DS3231 و سنسور Sht31 با lcd پروتکل I2C و کد های مربوطه وجود دارد تا نسبت به خریداری آن اقدام شود

    1. سلام عزیز
      برای بررسی موارد موجود در دوره، قسمت سرفصل های هر دوره رو مطالعه بفرمایید

  9. سلام اگر نمایشگر ما با ارتباط i2c کار کند مشکلی پیش نمی آید ؟

    1. سلام عزیز
      نیاز به تغییر جزئی در کد هست

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

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