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

آموزش ساخت ساعت با ماژول ساعت Ds3231 و نمایشگر OLED آردوینو

آموزش ماژول ساعت ds3231 آردوینو arduino
نوشته شده توسط علیرضا قربانی

آی سی DS2331 آی سی تکمیل شده و پیشرفته ترDS1307 بوده که علاوه بر امکانات DS1307 از دقت بالاتر، در نظرگرفتن پین ریست و نیز قابل برنامه ریزی ۲ زمان مختلف به منظور تنظیم آلارم است. ولتاژ کاری ماژول ۳٫۳ الی ۵٫۵ ولت بوده و از باتری بک آپ و جریان مصرفی بسیار پایین استفاده می کند. در واقع این ماژول ساعت زمان واقعی real time clock(RTC) بوده که از پروتکل سریال I2C پشتیبانی می کند. کارکرد این ماژول براساس کدهای binary coded decimal که اصطلاحا کد BCD نامیده می شود، است.باتری بک آپ قرار گرفته بر روی این ماژول زمانیکه برق در دسترس نیست باعث جلوگیری از عقب افتادن زمان خواهد شد. منبع کلاک این آی سی از یک کریستال ساعت به فرکانس ۳۲٫۷۶۸KHZ استفاده می کند. این آی سی قابل کارکرد در دو حالت ۲۴ ساعته و ۱۲ ساعته AM/PM را دارد همچنین علاوه بر ساعت بصورت ثانیه، دقیقه، ساعت امکان ذخیره تاریخ بصورت روز، هفته، ماه، سال را نیز دارد. در ضمن اطلاعات نوشته شده بر روی این آی سی تا سال ۲۱۰۰ برنامه ریزی شده است. از دیگر امکانات این ماژول می‌توان به اندازه‌گیری دما اشاره نمود. در ادامه آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.

 


آی سی ساعت DS3231


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

 

  • دقت زمانی: دقت زمانی DS3231 برابر با یک دقیقه در سال است.
  • ولتاژ عملیاتی: آی سی DS3231 با ولتاژ عملیاتی ۲٫۳ ولت تا ۵٫۵ ولت کار می‌کند.
  • رابط ارتباطی: DS3231 از رابط ارتباطی I2C (Inter-Integrated Circuit) برای ارتباط با میکروکنترلر یا سایر دستگاه‌ها استفاده می‌کند.
  • حافظه: این آی سی دارای حافظه EEPROM داخلی با ظرفیت ۲۳۶ بایت است. این حافظه برای ذخیره‌سازی تنظیمات و مقادیر مرتبط با ساعت و تقویم استفاده می‌شود.
  • انتشار هشدار: DS3231 قابلیت تنظیم و انتشار هشدارهای زمانی برای زمان‌های خاص را دارد. می‌توانید تنظیم کنید که در زمان‌های مشخص، خروجی انتشار هشدار را فعال کند و میکروکنترلر یا سایر اجزای سیستم را در جریان قرار دهد.
  • ردیابی دما: DS3231 قادر به ردیابی دمای محیطی است و می‌تواند دمای فعلی را با دقت بالا اندازه‌گیری کند.
  • پشتیبانی از باتری: این آی سی دارای پشتیبانی از باتری خارجی است که در صورت قطع برق، به آن امکان می‌دهد تا زمان را حفظ کرده و از از دست رفتن زمان جلوگیری کند.
  • دمای عملکرد: دمای عملکرد DS3231 در محدوده دمایی -۴۰ درجه سانتیگراد تا +۸۵ درجه سانتیگراد قرار دارد.
  • بسته‌بندی: DS3231 در بسته‌بندی SOP (Small Outline Package) قابل استفاده است.

 


ماژول ساعت DS3231


ماژول ساعت DS3231 عبارت است از یک ماژول الکترونیکی که شامل آی سی ساعت DS3231 می‌شود. این ماژول دارای برد کوچکی است که می‌توان آن را به سیستم‌های الکترونیکی مختلف متصل کرد. ماژول ساعت DS3231 امکانات و قابلیت‌های زیر را دارد:

  • نگهداری دقیق زمان: با استفاده از آی سی DS3231، ماژول قادر به نگهداری دقیق زمان در سیستم شما است. این به معنای این است که حتی در صورت قطع برق، زمان محاسبه شده توسط DS3231 حفظ می‌شود.
  • تقویم دقیق: ماژول DS3231 قابلیت نگهداری و مدیریت تقویم را دارد. می‌توانید تاریخ، روز هفته و سال را از طریق این ماژول دریافت کنید.
  • هشدارهای زمانی: DS3231 می‌تواند هشدارهای زمانی را تنظیم کند و در زمان‌های مشخص، سیگنال هشدار را فعال کند. این امکان می‌دهد تا سیستم شما در زمان‌های خاص وقایع مختلف را اعلام کند.
  • ردیابی دما: ماژول DS3231 قادر به اندازه‌گیری و نمایش دمای محیطی است. این اطلاعات می‌توانند در برنامه‌ها و کنترل‌هایی که نیاز به نظارت بر دما دارند، استفاده شوند.
  • رابط ارتباطی: ماژول DS3231 دارای رابط I2C است که امکان ارتباط با میکروکنترلرها و سایر اجزای سیستم را فراهم می‌کند.
  • پشتیبانی از باتری: ماژول DS3231 قابلیت اتصال به باتری خارجی را دارد. در صورت قطع برق، باتری به ماژول امکان می‌دهد

 


پروژه ساعت دیجیتال با DS3231


در این پروژه  ساعت به همراه تاریخ و دما برو روی OLED  نمایش داده می‌شود همچنین یک عدد تاج سوئیچ به آردوینو متصل شده است که با فشردن آن هر کدام از مقادیر ساعت ، تاریخ و دما جداگانه برو روی نمایشگر OLED نمایش داده می‌شود.در ابتدا  کتابخانه ماژول ساعت ds3231 را از لینک زیر دانلود نموده و سپس آن را به کتابخانه نرم افزار آردوینو متصل کنید. دانلود کتابخانه ds3231 مختص آردوینودر این آموزش از نمایشگر OLED و هچنین عملیات دیبانسینگ کلید استفاده شده است که برای آموزش آن‌ها می‌توانید به لینک‌های زیر مراجعه نمایید.

آموزش ماژول OLED در آردوینو

آموزش دیبانسینگ کلید در آردوینو

 

 


کد آردوینو ماژول ساعت DS3231


کد‌های زیر را بر روی آردوینو آپلود کنید.

#include <Wire.h>
#include <DS3231.h>
#include <U8glib.h>
#include <Bounce2.h>

//ایجاد یک آبجکت از کتابخانه U8Glib
U8GLIB_SH1106_128X64 u8g (U8G_I2C_OPT_NONE);


//ایجاد میکنیمBounceیک آبجکت از کتابخانه
Bounce debouncer = Bounce ();


//ds3231ایجاد یک آبجکت از کلاس
DS3231 clock;


//ds3231موجود در کتابخانه Structایجاد یک آبجکت از
RTCDateTime dt;


#define BUTTON_PIN 2


char date[36];
char time[15];
char readtemp[10];
char temp[20];
int i = 0;


void setup ()
  {
  u8g.setFont (u8g_font_timB10);
  u8g.setColorIndex (1);
  Serial.begin (9600);

  // Initialize DS3231
  Serial.println ("Initialize DS3231");;
  clock.begin ();

  // تنظیم ماژول ساعت با ساعت کامپیوتر
  clock.setDateTime (__DATE__, __TIME__);


  // تنظیم پین متصل به کلید به عنوان پول آپ خارجی
  pinMode (BUTTON_PIN, INPUT_PULLUP);

  // After setting up the button, setup the Bounce instance :
  debouncer.attach (BUTTON_PIN);
  debouncer.interval (100);



  }


void loop ()
  {
  //
  dt = clock.getDateTime ();


  debouncer.update ();

  if ( debouncer.fell () )
    {
    i++;
    }
  if ( i == 4 )
    {
    i = 0;
    }


  if ( i == 0 )
    {
    drawAll ();
    }
  else if ( i == 1 )
    {
    drawTime ();
    }
  else if ( i == 2 )
    {
    drawDate ();
    }
  else if ( i == 3 )
    {
    drawTemperature ();
    }





  Serial.print ("Raw data: ");
  Serial.print (dt.year);   Serial.print ("-");
  Serial.print (dt.month);  Serial.print ("-");
  Serial.print (dt.day);    Serial.print (" ");
  Serial.print (dt.hour);   Serial.print (":");
  Serial.print (dt.minute); Serial.print (":");
  Serial.print (dt.second); Serial.println ("");


  }


//ابع نمایش تمام مقادیر ساعت تاریخ و دما
void drawAll ()
  {
  u8g.firstPage ();
  do {
    u8g.setFont (u8g_font_7x14);
    sprintf (date, "%d / %d / %d ", dt.year, dt.month, dt.day, dt.hour, dt.month, dt.second);
    u8g.setPrintPos (5, 22);
    u8g.print (date);


    sprintf (time, "%d : %d : %d", dt.hour, dt.minute, dt.second);
    u8g.setPrintPos (5, 40);
    u8g.print (time);

    u8g.setPrintPos (5, 62);
    dtostrf (clock.readTemperature (), 4, 2, readtemp);
    sprintf (temp, "Temperature:%s", readtemp);
    Serial.println (temp);
    u8g.print (temp);
    } while ( u8g.nextPage () );

  }


//تابع نمایش زمان به صورت تکی بر روی صفحه نمایش
void drawTime ()
  {
  u8g.firstPage ();
  do {
    u8g.setFont (u8g_font_fur20r);
    sprintf (time, "%d:%d:%d", dt.hour, dt.minute, dt.second);
    u8g.drawStr (25, 20, "Time");
    u8g.setPrintPos (10, 50);
    u8g.print (time);
    } while ( u8g.nextPage () );
  }


//تابع نمایش  تاریخ به صورت تکی بر روی صفحه نمایش
void drawDate ()
  {
  u8g.firstPage ();
  do {
    u8g.setFont (u8g_font_fur20r);
    u8g.drawStr (25, 20, "Date");
    u8g.setFont (u8g_font_courR10r);
    sprintf (date, "%d/%d/%d ", dt.year, dt.month, dt.day);
    u8g.setPrintPos (15, 50);
    u8g.print (date);
    } while ( u8g.nextPage () );
  }


//تابع نمایش دما به صورت تکی بر روی صفحه نمایش
void drawTemperature ()
  {
  u8g.firstPage ();
  do {
    u8g.setFont (u8g_font_10x20);
    u8g.drawStr (2, 20, " Temperature");
    u8g.setFont (u8g_font_courB18r);
    u8g.setPrintPos (28, 60);
    dtostrf (clock.readTemperature (), 4, 2, readtemp);
    sprintf (temp, "%s", readtemp);
    Serial.println (temp);
    u8g.print (temp);
    } while ( u8g.nextPage () );
  }

 


توابع آردوینو ماژول ساعت DS3231


در ابندا توجه داشته باشید که حتما کتابخانه Wire.h را در برنامه فراخوانی کرده باشید در غیر اینصورت برنامه نتیجه درستی را ارائه نمی‌دهد.

 

RTCDateTime dt;

برای اینکه بتوانیم به مقادیر داخل ساعت دسترسی داشته باشیم باید از استراکت موجود در داخل کتابخانه ساعت یک آبجمت بسازیم.

 

clock.begin ();

توسط تابع فوق ماژول ساعت  ds3231 فعال می‌شود.

clock.setDateTime (__DATE__, __TIME__);

توسط تابع clock.setDateTime  می‌توان ساعت و تاریخ ماژولمان را تنظیم کنیم. که ما با  دادن دو آرگمان __DATE__ و __TIME__  برنامه را جوری تنظیم می‌کنیم که هنگام آپلود شدن کد بر روی آردوینو به طور خودکار ساعت ماژول با ساعت کامپیوتر تنظیم می‌شود و نیازی به تنظیم دستی آن نمی‌باشد.در صورتی که سیستم شما بر روی سال شمسی تنظیم شده باشد ، ماژول نیز ساعت شمسی را در یافت می‌کند.

clock.getDateTime ();

توسط این تابع زمان و تاریخ را از ماژول دریافت می‌کنیم ، سپس باید آن را درون یک استراکت از جنس RTCDateTime بریزیم پس همانند کد زیر عمل می‌کنیم:

dt = clock.getDateTime ();

 

سپس برای دسترسی به تک تک مقادیر ساعت ، دقیقه و ثانیه باید از دستورات زیر استفاده کنیم:

dt.hour;//ساعت
  dt.minute;//دقیقه
  dt.second; //ثانیه
  dt.day;		//روز
  dt.month;	 //ماه
  dt.year;	 //سال

 

clock.readTemperature ()

به وسیله این تابع نیز می‌توانیم مقدار دمای اندازه‌گیری شده توسط این ماژول را دریافت کنید.

 


وسایل مورد نیاز


ماژول ساعت دقیق Ds3231

ماژول نمایشگر OLED I2C

آردوینو MEGA256 ( از آردوینو‌های مدل دیگر نیز می‌توان استفاده نمود)

یک عدد تاچ سوئیچ

برد برد

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

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

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۳۶ دیدگاه

  • سلام
    -من به جای ماژول DS3231 مدل پایین تر DS1307 دارم آیا باید تغییری توی کد ها انجام بدم؟ آیا کتابخانه ۱۳۰۷ با ۳۲۳۱ تفاوت داره؟

    -آیا امکان استفاده از oled با پروتکل SPI به همراه این ماژول هست؟ تغییری تو کدها باید داده بشه؟

    • سلام

      فکر کنم کتابخانهی ds3231 روی ds1307 هم باید جواب بده

      سوال دوم:

      برای استفاده از دو ماژول با پروتکل spi هم در دار و هم در برنامه باید تغییرات خاصی را اعمال کنید

  • سلام ممنون از مطالبتون
    آیا این ماژول قابلیت نمایش تاریخ شمسی را دارد.اگر ممکن است کد نمونه را قرار دهید با تشکر.

  • بسمه تعالی
    سلام
    آقا یه سوال چر ا وقتی با وجود اینکه این ماژول باتری ۳ ولتی داره وقتی برنامه رو روش می ریزیم زمانی که بعد از قطع و وصل مجدد برد و ماژول به رایانه نشون می ده عقب می افته . پس این باتری اینجا نقشش چیه ؟

  • سلام
    کد هایی که میگذارید رو وقتی کپی میکنم ترتیبشون بهم میریزه و برنامه خطا میگیره. باید چکار کنم؟

    • با سلام
      ضمن تشکر از توجه شما، کدها دارای تگ HTML هستند، که به درخواست شما، به زودی رفع خواهد شد.

    • سلام مجدد
      برای اتصال ماژول ساعت باید از رابط I2C اردوینو استفاده کنید. تغذیه که مشخص است. دو پایه دیگر را به پین I2C متصل کنید.

    • با سلام
      ضمن تشکر از توجه شما، تگ هاى html داخل این کدها رفته است. منتظر باشید تا کدها اصلاح شوند.

    • با سلام
      ضمن تشکر از توجه شما، برای این منظور باید از کتابخانه‌های مربوطه استفاده کنید و در کدهای برنامه آدرس دهی به پین‌های دیگر را انجام دهید. کلا کدها تغییرات اساسی می‌کنند.

  • سلام برای من این ارور رو میدهد
    Arduino: 1.8.1 (Windows 10), Board: “Arduino/Genuino Uno”

    WARNING: Category ‘Real-time clock’ in library DS3231 is not valid. Setting to ‘Uncategorized’
    sketch_sep01c:1: error: #include expects “FILENAME” or

    #include <Wire.h>

    ^

    sketch_sep01c:2: error: #include expects “FILENAME” or

    #include <DS3231.h>

    ^

    sketch_sep01c:3: error: #include expects “FILENAME” or

    #include <U8glib.h>

    ^

    sketch_sep01c:4: error: #include expects “FILENAME” or

    #include <Bounce2.h>

    ^

    exit status 1
    #include expects “FILENAME” or

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    ممنون میشم بگین چی کار کنم

    • با سلام
      ضمن تشکر از توجه شما
      این ارورها مربوط به عدم نصب کتابخانه‌ها است. کتابخانه‌های Wire.h ، DS3231.h ، U8glib.h و Bounce2.h در سیستم شما نصب نیستند. این‌ها را نصب کنید و مجددا اقدام به کامپایل کدها کنید.

  • درود
    من ماژول ساعت دقیق DS1307 و سون سگمنت TM1637 دارم.
    کل اینترنت رو برای راه اندازی ساعت با این دو ماژول گشتم ولی چیزی که بدردبخور باشه و کار کنه پیدا نکردم..
    لطفاً بنده رو راهنمائی بفرمائید که چه کنم و چه کدی مناسب راه اندازی با این دو ماژول هست..
    پیشاپیش سپاسم

    • با سلام
      ضمن تشکر از توجه شما، راه اندازى این پروژه کار پیچیده اىنمیباشد، بایستى کدهاى این آموزش و آموزش سگمنت را باهم ترکیب کنید. ولى انتظار نوشتن کدها از طرف سایت دیجى اسپارک را نداشته باشید. در این مورد بایستى خودتان کمى تلاش کنید.

    • با سلام
      ضمن تشکر از توجه شما، این آموزش مربوط به چند سال پیش است. در تلاش خواهیم بود که رفع کنیم. ولی شما با استفاده از تحلیل کدها میتوانید پین‌ها را اتصال دهید.

  • سلام وقت بخیر من از برنامه یه کپی گرفتم اما یه اروری هنگام verify میده . میشه راهنمایی کنید.
    Arduino: 1.8.2 (Windows 7), Board: “Arduino/Genuino Uno”

    exit status 1
    no matching function for call to ‘DS3231::DS3231()’

    کتابخانه ds3231 و بقیه کتابخانه های لازمو از سایت خودتون دانلود کردم

    • //ds3231ایجاد یک آبجکت از کلاس
      DS3231 clock;

      //ds3231موجود در کتابخانه Structایجاد یک آبجکت از
      RTCDateTime dt;
      از این دو قسمت ارور میده که no matching function for call to ‘DS3231::DS3231()’

    • با سلام
      ضمن تشکر از توجه شما، این ارور ربطی به کتابخانه ندارد. لطفا تصویر ارور را ارسال کنید، همچنین متن ارور را به صورت کامل کپی و ارسال کنید.

  • سلام
    برای کتابخانه ماژول ds3231 برای پروتئوس باید چکار کرد هر چه میگردم توی سایت های ایرانی و خارجی پیدا نمیکنم اگه راهی دارین بگین ….
    ممنون

    • با سلام
      ضمن تشکر از توجه شما، در خصوص نرم افزار پروتئوس در حال حاضر اطلاعات کاملى وجود ندارد. از دیگر کاربران که در خصوص این نرم افزار اطلاعات دارند، تقاضا دارم تا در این بحث شرکت کنند.

  • سلام من یک ماژول Tiny RTC که از ds1307 استفاده می کنه استفاده کردم. با وجود اینکه مطمئنم کار می کنه به عنوان ساعت ولی حافظه آن کار نمی کند. یعنی با قطع و وصل کردن از منبع تغذیه ساعت عقب میمونه. کلی هم سرچ کردم و به نتیجه خاصی هم نرسیدم. سوالی که دارم اینه که ممکنه کدی که من زدم ساعت رو از روی حافظه میکرو بخونه و نه از روی حافظه ساعت (چون ساعتی که بعد از هر بار قطع و وصل شدن ار منبع تغذیه نشون میده، ساعتیه که موقع آپلود کردن اسکچ از سیستم گرفته)؟ و اگر اینطور هست میشه راهنمایی کنید که چه کاری می شه کرد؟

      • سلام مجدد. بعد از اینکه اینا کامنت گذاشتم یک مطلبی پیدا کردم در فروم خود آردوینو که شبیه این مشکل را داشتند و راه حلی که ارائه کرده بودند دقیقا همین مشکلی بود که من حدس زده بودم. یعنی وقتی برای ارسال ساعت فعلی به ماژول ساعت از این سطر RTC.adjust(DateTime(__DATE__,__TIME__)); استفاده می کردم هر بار که پروگرم اجرا میشد این زمان را می خواند. به همین جهت یکبار برای تنظیم ساعت ماژول ساعت از کد بالا استفاده کرده و آن را آپلود می کنم و بلافاصله همین کد را کامنت می کنم و آپلود می کنم که از این پس دیگر این سطر را اجرا نکند. مشکل حل شده و زمان از حافظه ماژول ساعت فراخوانده می شود.
        مساله دیگری که به نظرم میتونه برای بقیه مفید باشه اینه که حتما از ماژول DS3231 استفاده کنید. با وجود اینکه این ماژول مشابه DS1307 هست و حتی در کد ها فرقی نداره، دومی مشکلات سخت افزاری زیادی ایجاد می کنه و کار کردن باهاش سخته!
        باز هم ممنونم از سایت شما و توجهتون.

  • سلام مرسی از اطلاعات خوبتون. میشه بهم بگید چطور روزای هفته رو از ماژول دریافت کنم . بطور مثال یکشنبه ها رو تشخیص بده و دستوری رو اجرا کنه

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

  • با سلام خدمت شما،می‌خواستم بدونم میشه بجای Arduino Uno از ATtiny85 استفاده کرد یا نه؟

    • سلام
      با توجه به اینکه در این آموزش از پروتکل I2C استفاده شده و همچنین بردهای Attiny مدل‌های مختلفی دارند، می‌بایست پایه ها را بررسی و در صورت امکان تغییراتی را در کدها هم اعمال نمایید.
      تقاضا دارم پس از به نتیجه رسیدن پروژه تان از همین طریق برای دیگر کاربران هم منتشر کنید.

  • آیا میشه این ماژول رو به پایه های دیگه میکرو وصل کرد؟
    من به پایه های آنالوگ احتیاج دارم

    • سلام
      برای اتصال ماژول ساعت طبق دیتاشیت می‌توانید پین SDA ماژول ساعت را به پین SDA آردوینو و پین SCL ماژول ساعت را به پین SCL آردوینو اتصال دهید.

  • سلام وقت بخیر اموزش خیلی خوبی بود ،
    سوال : من توی پروژه ای که دارم از شیلد دیتا لاگر استفاده کردم و از طرفی در سایتهای مختلف خوندم که چند ثانیه در روز و تا چند دقیقه در ماه اختلاف ساعت رخ میده ، حالا سوالم اینه که ایا میشه با تایمرهای داخلی میکرو بررسی کنیم ساعت عقب افتاده و اگر اینطور بود ساعت رو با کدهای برنامه اصلاح کنیم ، مثلا در پایان هررروز یا هر ساعت ، زمان رو اصلاح کنیم؟؟

    • سلام
      تابع sprintf همانند تابع printf عمل می‌کند با این تفاوت که به جای ارسال خروجی در پنل، رشته فرمت شده را بازمی‌گرداند همچنین تابع dtostrf از کتابخانه های AVR می‌باشد و برای تبدیل Float به String استفاده می‌گردد.

  • سلام
    خوبین
    lily tiny
    دارم
    برای معرفیش به رایانه دیجیاستمپ میخوام
    یه لینک درست حسابی دارین؟هر چی سرچ میکنم به درو دیوار میخورم

  • سلام .
    بعد از کپی کردن RTCDateTime dt در این خط خطا می دهد. علتش چیست؟
    تمام کتابخانه ها رو نصب کردم.

  • با کد زیر و نصب کتابخانه ای که ذکر شده زمان با ریست شدن و قطع اتصال به برق در ماژول ذخیره و هر زمان که بخواهیم قبل دسترسی است.

    /*
    * Arduino DS3231 Real Time Clock Module Tutorial
    *
    * Crated by Dejan Nedelkovski,
    * http://www.HowToMechatronics.com
    *
    * DS3231 Library made by Henning Karlsen which can be found and downloaded from his website, http://www.rinkydinkelectronics.com.
    *
    */
    #include

    DS3231 rtc(SDA, SCL);

    void setup() {
    rtc.begin(); // Initialize the rtc object
    Serial.begin(9600);
    }
    void loop() {
    Serial.print(“time:”);
    Serial.print(rtc.getTimeStr());

    Serial.print(” date:”);
    Serial.println(rtc.getDateStr());

    delay(1000);
    }

    • با سلام
      ماژول OLED دارای دو پایه SDA و SCL است که به ترتیب به پایه A4 و A5 آردوینو اتصال دهید.
      کلید به پایه ۲ آردوینو وصل شده است.
      ماژول DS3231 هم همانند ماژول OLED دارای دو پایه SDA و SCL است که به پایه A4 و A5 بایستی اتصال دهید.

        • جهت برطرف شدن ارور از لینک زیر در قسمت دانلود کتابخانه Arduino-DS3231 را دانلود نمایید و سپس در مسیر نصب آردوینو Arduino / Library قرار دهید.
          دانلود کتابخانه Arduino-DS3231سپس کتابخانه DS3231 قبلی را حذف نمایید تا تداخل نداشته باشد.
          مراحل را پیش رفته و سپس نتیجه را اعلام نمایید.

          • سلام خیلی ممنون از راهنمایی شما. دیگه اروری نداد و روی برد آردوینو آپلود شد . فقط اینکه صفحه نمایشگر کاملا روشنه (منظورم اینه که تمام پیکسل ها روشن هستند)
            اینم از دستوری که برای ماژول OLED استفاده کردم :
            U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

  • RTCDateTime dt;
    برای اینکه بتوانیم به مقادیر داخل ساعت دسترسی داشته باشیم باید از استراکت موجود در داخل کتابخانه ساعت یک آبجمت بسازیم.

    چطور این کار رو انجام بدم؟

  • Arduino: 1.8.9 (Windows 10), Board: “Arduino/Genuino Uno”

    SPARK1:19:1: error: ‘RTCDateTime’ does not name a type

    RTCDateTime dt;

    ^

    C:\Users\arman\Documents\Arduino\SPARK1\SPARK1.ino: In function ‘void setup()’:

    SPARK1:40:9: error: ‘class DS3231’ has no member named ‘begin’

    clock.begin ();

    ^

    SPARK1:43:9: error: ‘class DS3231’ has no member named ‘setDateTime’

    clock.setDateTime (__DATE__, __TIME__);

    ^

    C:\Users\arman\Documents\Arduino\SPARK1\SPARK1.ino: In function ‘void loop()’:

    SPARK1:61:3: error: ‘dt’ was not declared in this scope

    dt = clock.getDateTime ();

    ^

    SPARK1:61:14: error: ‘class DS3231’ has no member named ‘getDateTime’

    dt = clock.getDateTime ();

    ^

    C:\Users\arman\Documents\Arduino\SPARK1\SPARK1.ino: In function ‘void drawAll()’:

    SPARK1:115:37: error: ‘dt’ was not declared in this scope

    sprintf (date, “%d / %d / %d “, dt.year, dt.month, dt.day, dt.hour, dt.month, dt.second);

    ^

    SPARK1:125:20: error: ‘class DS3231’ has no member named ‘readTemperature’

    dtostrf (clock.readTemperature (), 4, 2, readtemp);

    ^

    C:\Users\arman\Documents\Arduino\SPARK1\SPARK1.ino: In function ‘void drawTime()’:

    SPARK1:140:32: error: ‘dt’ was not declared in this scope

    sprintf (time, “%d:%d:%d”, dt.hour, dt.minute, dt.second);

    ^

    C:\Users\arman\Documents\Arduino\SPARK1\SPARK1.ino: In function ‘void drawDate()’:

    SPARK1:156:33: error: ‘dt’ was not declared in this scope

    sprintf (date, “%d/%d/%d “, dt.year, dt.month, dt.day);

    ^

    C:\Users\arman\Documents\Arduino\SPARK1\SPARK1.ino: In function ‘void drawTemperature()’:

    SPARK1:172:20: error: ‘class DS3231’ has no member named ‘readTemperature’

    dtostrf (clock.readTemperature (), 4, 2, readtemp);

    ^

    exit status 1
    ‘RTCDateTime’ does not name a type

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    این ارور رو میده. راه حل چیه؟

  • سلام وقت بخیر

    شماتیک سخت افزار مدار نشان داده نشده است و از روی فیلم واضح نیست که قطعات چگونه باید ارتباط داشته باشند
    ممنون میشم راهنمایی بفرمائید.

    با سپاس
    آرتین شیرجنگ

    • با سلام
      جهت اتصالات با توجه به اینکه هر دو ماژول ساعت و oled از رابط I2C بهره می‌برد و از پایه SDA و SCL استفاده شده است، بایستی هر ۴ پایه به ترتیب به A4 و A5 آردوینو اتصال گردد.
      پایه A4 آردوینو پایه SDA و پایه A5 آردوینو پایه SCL می‌باشد.
      پایه سیگنال کلید به پایه ۲ آردوینو اتصال داده شده است.

      • سلام

        ممنونم

        این خطا که به پیوست تقدیم می گردد، هنگام Verifyناشی از چیه لطفا” ؟
        Arduino: 1.8.9 (Windows 10), Board: “Arduino/Genuino Uno”

        Multiple libraries were found for “DS3231.h”
        sketch_aug16a:3:20: error: U8glib.h: No such file or directory

        Used: C:\Users\Hassan Shirjang\Documents\Arduino\libraries\DS3231
        compilation terminated.

        Not used: C:\Users\Hassan Shirjang\Documents\Arduino\libraries\Arduino-DS3231-master
        exit status 1
        U8glib.h: No such file or directory

        This report would have more information with
        “Show verbose output during compilation”
        option enabled in File -> Preferences.

        • با سلام
          ارور دریافتی مربوط به نصب چند نمونه از کتابخانه DS3231.h می‌باشد. به مسیر C:\Users\Hassan Shirjang\Documents\Arduino\libraries\DS3231 مراجعه کنید و فایل این کتابخانه را پاک کنید. همچین در این ارورها کتابخانه U8glib.h هم نصب نمی‌باشد. که بایستی به صورت مجزا نصب کنید. اگر هم روش نصب کتابخانه را نمیدانید، از همین طریق اطلاع رسانی کنید.

          • سلام
            ضمن تشکر از پاسخ شما، کتابخانه U8glib.h را در این صفحه پیدا نکردم.
            امکان داره لطفا” لینکش رو ارسال بفرمائید و اگه Zip باشه مراحل نصبشو می دانیم.

              • ضمن تشکر از پاسخ شما، کتابخانه U8glib.h نصب شداما اکنون هنگام Verify پیام خطای ذیل ظاهر می شود.

                Arduino: 1.8.9 (Windows 10), Board: “Arduino/Genuino Uno”

                sketch_aug16a:4:21: error: Bounce2.h: No such file or directory

                compilation terminated.

                exit status 1
                Bounce2.h: No such file or directory

                This report would have more information with
                “Show verbose output during compilation”
                option enabled in File -> Preferences.

                  • سلام
                    ممنون از پاسخ شما
                    این کتابخانه Bounce2.h
                    کجاست ؟
                    در ضمن چرا این کتابخانه ها که برای انجام این پروژه لازمه بطور یکجا جمع آوری نشده

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

                    • سلام وقت بخیر
                      پاسخ شما بشکل حروف الفبا وجود داره بنده که چیزی متوجه نشدم.

                  • خسته نباشید.
                    بدتر اینکه سایت شما هم مشکل داره، چرا یک دفعه جملات بطور عمودی ارسال میشه و این موضوع در سوابق قبلی هم دیده میشه.

  • سلام وقت بخیر
    لطفا” پاسخ ها را شفاف تر و واضح تر مطرح بفرمائید.
    بنده که هنوز کتابخانه Bounce2.h را پیدا نکردم.
    در ضمن چون هدف آموزش است اتفاقا بایستی همه الزامات یک پروژه یکجا و بطور منظم ساماندهی گردد تا از سردرگمی کاربران اجتناب شود اما در خصوص برنامه نویسی و تحلیل کدها که مبحث اصلی در فرایند یادگیری است با جنابعالی کاملا موافق هستم.
    بعنوان مثال سوابق نظرات و تعدد سوالات در همین پروژه مبین یک اشکال اساسی است که چرا باید موضوعات دارای نقص باشند و کاربران مدام وقتشان صرف سوالات پیش و پا افتاده شود در حالیکه میتوان با یک اقدام پیش گیرانه و بررسی آنها، موضوعاتی به این بدیهی را شفاف تر کرد تا وقت کاربران بهینه استفاده شود.
    برای مثال چرا نباید یک شماتیک شفاف و بدیهی وجود داشته باشد که یک VCC ساده جای ابهام برای کاربر بوجود بیاورد و نداند به ۵ ولت باید متصل شود یا ۳٫۳ ولت و باعث اشکالات مشابه دیگر شود.
    همچنین لطف بفرمائید اگر n کتابخانه دیگر هم باید برای این پروژه نصب شود بطور شفاف مطرح بفرمائید لطفا” به کارآموزی که قصد یادگیری دارد از منظر مبتدی مورد توجه قرار گیرد نه بشکل حرفه ای.
    در نهایت سپاسگزار خواهم شد اگر در راستای بهبود کیفیت مستمر و در جهت رعایت حقوق مصرف کننده و مشتری مداری با دقت بیشتر به این موضوع توجه شود.
    با تشکر
    آرتین شیرجنگ

    • سلام مجدد
      جناب آقای شیرجنگ لینک کتابخانه Bounce2.h خدمت شما، کافیست با استفاده از روش دوم در آموزش نصب کتابخانه آردوینو اقدام بفرمایید. بابت پیشنهاداتی که ارایه کردید، سپاسگزارم. ما همواره در حال توسعه و بهبود این خدمات هستیم.

  • سلام. یه مشکلی که دارم اینه که وقتی منبع تغذیه رو از مدار جدا میکنم ساعت عقب می افته. توی توضیحات نوشته بودید که این ماژول این مشکل رو نداره. لطفا راهنمایی کنید.
    زمان در ساعتی که منبع تغذیه رو جدا کردم میمونه

  • سلام وقت بخیر
    ۱-آیا در این پروژه ساعت و تاریخ هنگام آپلود برنامه متناسب با PC تنظیم می شود ؟
    و سپس با باطری بکاپ ماژول ساعت تداوم خواهد داشت.
    ۲-سنسور Temperature که نمایش داده می شود کجاست ؟ آیا فقط یک نمایش ظاهری است ؟

  • سلام وقت بخیر
    آیا نمایشگر OLED بزرگتر که با این پروژه سازگاری داشته باشد وجود دارد ؟

  • سلام وقت بخیر

    لطفا” مطلع باشید ماژول DS3231 را از فروشگاه خود شما تهیه کردم اما متاسفانه باطری بکاپ آن فعال نمی شود و هنگامیکه تغذیه برد Arduino Uno قطع می شود زمان، هنگام پروگرام شدن را نشان می دهد و مشخص است کانتر ساعت فعال نبوده است.
    شایان ذکر است از آنجائیکه هر دو ماژول ساعت و OLED از Interface I2C استفاده می کنند. هر ۴ پایه به تفکیک به A4 و A5 آردوینو متصل گردیده است.
    پایه A4 آردوینو پایه SDA و پایه A5 آردوینو پایه SCL در نظر گرفته شده است.
    همچنین Push Switch نیز به پایه ۲ و GND آردوینو اتصال داده شده است.
    بدیهی است کد ها نیز دقیقا” منقل شده و Verify و Upload هم بدون خطا و با موفقیت انجام گردیده و تمام فانکشن ها دقیقا” کار می کند و فقط این مشکل وجود دارد.
    ممنون میشم علت را بررسی بفرمائید.

    • با سلام
      شما میفرمایید که هر موقع که تغذیه قطع میشود زمان پروگرام شدن را نمایش میدهد
      منظورتان چیه؟
      شما هر موقع این برنامه را روی بورد خود آپلود میکنید زمان با استفاده از این خط کد:
      clock.setDateTime (__DATE__, __TIME__);
      مجددا به تاریخ دستگاه برمیگردد
      ولی اگر میبینید که ساعت بطور کل روی ساعت خاصی گیر میکند یعنی قسمت باتری و تغذیه بک آپ مشکل دارد، چک کنید که آیا باتری سالم است یا خیر و بصورت کامل و صحیح در جای خود قرار دارد (در این ماژول باید باتری بصورتی که قطب مثبت آن به طرف بیرون است وارد شود و خیلی محکم فشار داده شود تا در جای خود قرار گیرد)

      • منظور من اینه مثلا اگه ساعتی که برنامه رو روی برد آردوینو آپلود کردم ۱۳:۲۲ باشه تا وقتی تغذیه به مدار وصل هست ساعت درست کار میکنه و لی کافیه برق قطع و وصل بشه (حتی ۱ ثانیه) ساعت مجددا از ۱۳:۲۲ شروع به کار میکنه.
        باتری رو عوض کردم از سالم بودنش مطمئن هستم. قطب مثبت و منفی هم رعایت کردم. ممنون

        • با سلام
          کاربر گرامی با فراخوانی دستور
          rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
          و تنظیم دستی ساعت و تاریخ مشکل برطرف خواهد شد. با توجه به اینکه این مورد برای کاربران دیگر هم به وجود آمده است،کاملا تست و بررسی شده است. در این کد دو روش جهت تست وجود دارد. در ابتدا در خط گفته شده ساعت و تاریخ را دستی وارد کرده و برنامه را آپدیت نمایید و سپس برنامه را آپلود کنید. سپس مجددا خط را به کامنت تبدیل کرده و آپلود کنید. با قطع و وصل کردن ارتباط ساعت همزمان با ساعت سیستم پیش خواهد رفت. در روش دوم بدون کامنت کردن دستور ساعت هماهنگ خواهد بود. دقت داشته باشید تغذیه و سالم بودن باتری نقش بسیار مهمی در روند اجرا خواهد داشت.
          بررسی و نتیجه را از همین طریق اطلاع رسانی نمایید.

  • با عرض سلام
    ضمن تشکر از پاسخ شما
    مراحل اینگونه است :
    پس از اینکه کدها با موفقیت Compile و Upload می شود نمایشگر OLED زمان ( یعنی ثانیه ، دقیقه و ساعت ) را مطابق آنچه از PC دریافت کرده ، درست نشان می دهد و هنگامیکه تغذیه ( ولتاژ DC برد آردوینو ) برای مدتی قطع و مجددا” وصل می شود ، زمان ( ثانیه ، دقیقه و ساعتی که نمایش داده می شود مربوط به موقعی است که برنامه آپلود شده و از PC اطلاعات را دریافت کرده است )
    در حالیکه اگر مدار باتری بکاپ فعال و فاقد اشکال باشد کانتر ساعت باید به کار خودش ادامه دهد و نباید تاخیری صورت گیرد.
    لطفا” مطلع باشید در خصوص جاگذاری باتری کاملا اطمینان داریم که هم درست و محکم سر جایش مستقر شده و هم قطب مثبت آن رعایت شده است. بنابراین ممنون میشم علت را بررسی بفرمائید.

  • سلام
    ولتاژ باطری ۳٫۲۶V هست ( Size : CR2032 Duracell )
    اندازه گیری با HIOKI 3256 Multimeter
    با اینکه باتری فوق نو بود با این حال حتی یک باتری دیگه هم خریداری و تست شد اما متاسفانه هیچ تغییری نکرد.
    با توجه به فرایند طولانی این مشکل ممنون میشم همین امروز بررسی و نتیجه نهایی مشخص گردد.

    • با سلام
      با توجه به اینکه کابران دیگر هم در این خصوص با مشکل رو به رو شده اند، پروژه تست و توسط من و دیگر همکارانم بررسی گردید.
      در کامنت قبلی شما موارد توضیح داده شده است، بررسی نمایید.

  • یک سوال دیگه داشتم.
    چطور باید کاری کنم که هر مثلا ده ثانیه یا هر زمانی که مشخص کنم نمایش پارامترها عوض بشه. مثلا بیست ثانه منوی اول که همه گزینه ها رو داره بعد ده ثانیه فقط ساعت ده ثانیه تاریخ و….. ادامه پیدا کنه و این روند ادامه دار باشه
    ممنون میشم اینم راهنمایی کنید.

    • سلام
      برای اجرای این خط از برنامه روش های مختلفی وجود دارد. به عنوان مثال با Switch case میتوانید حالت های مختلفی با Delay تعریف کنید تا در هر مرحله یکی از دستورات با بازه زمانی دلخواه اجرا شود.

  • با سلام
    این ارورها مربوط به نصب کتابخانه های مختلف است که تداخل پبدا کرده است. در ابتدا کتابخانه های نصب شده را حذف و یک تب جدید ایجاد کرده و کل صفحه را پاک کنید. سپس کد را به نرم افزار آردوینو انتقال دهید. به ترتیب کتابخانه های زیر را سرچ و نصب کنید.
    #include
    #include
    #include

  • سلام. وقتتون بخیر. من انواع لایبرری DS3231 رو نصب کردم چه از سایت شما چه دانشجو کیت چه لایبرری های اختصاصی و رسمی و در گیت هاب ولی همچنان ارور میده که RTCDateTime dt; تعریف نشده و واژه‌ی کلیدی DateTime رو پیشنهاد میکنه که اونم وجود نداره. و اینکه میخواستم بپرسم دماسنج این سنسور با توجه به این که داخلی هست دکا رو دقیق نشون میده ؟ پیشاپیش از پاسختون ممنونم.

  • با سلام و خسته نباشید من برای یک پروژه به میکروکنترلر این ماژول نیاز دارم اسم این میکروکنترلر چیست و ایا سایتی مورد نظر دارید برای طراحی در التیوم

  • سلام
    من یه پروژه ساعت با این ماژول دارم.
    امروز که ۳۱ فروردین هست رو ۱ اردیبهشت نشون میده
    دوباره که تاریخ رو تنظیم می کنم دوباره از ۱ اردیبهشت شروع میکنه
    یعنی حداکثر۳۰ روز داره
    چه کارکنم؟