آردوینو پروژه های آردوینو

پروژه‌ی ساخت ساعت دیجیتال رومیزی با برد آردوینو Arduino و نمایشگر Oled

create-digital-clock-with-arduin-and-oled-ds3231-digispark
نوشته شده توسط پریسا پوربلورچیان

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

 


برد آردوینو یا؟


اولین قدم انتخاب سخت افزار برای اجرای پروژه است. نرم افزار IDE Arduino از بیشتر بردهای امبدد و برنامه پذیر پیشتیانی کرده و از خانواده بردهای Arduino و ESP8266 تا ESP32 را پوشش داده و مانعی وجود ندارد. این پروژه با تمامی بردهای آردوینو و بردهای وای فای ESP8266 سازگاری داشته و میتوانید استفاده کنید. در این پروژه از برد آردوینو UNO استفاده شده است. برد آردوینو UNO در تمام دنیا بین کاربران یک جایگاه ویژه و منحصر به فرد برای شروع دارد و با توجه به ابعاد و تعداد پایه ها و ساخت شیلدهای کاربردی برای آن عمومی تر است. برد آردوینو UNO دارای ۱۴ پایه‌ی دیجیتال و ۶ پایه‌ی آنالوگ است. برد آردوینو از پروتکل های ارتباطی I2C, SPI, UART پشتیبانی کرده و به همین دلیل میتوانید هر تعداد سخت افزارهای I2C را که نیاز دارید، با آدرس دهی متفاوت به برد آردوینو متصل کنید. ولتاژ مورد نیاز برای راه اندازی برد آردوینو ۹ ولت ۱ آمپر است که از طریق آداپتور و جک آداپتوری قرار گرفته شده بر روی برد میتوانید تغذیه را اعمال کنید. علاوه بر آداپتور، تغذیه های دیگری مانند باتری لیتیومی، پاوربانک و باتری های کتابی ۹ ولت انتخاب مناسبی خواهد بود.

 


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


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

 

ساعت قابلیت تنظیم با فرمت ۲۴ ساعته و ۱۲ ساعته را دارد و همچنین در کد برنامه میتوانید AM, PM را مشخص کنید. از دیگر قابلیت های ویژه ی این برد استفاده از پایه SQW است که یک موج مربعی با فرکانس ۱Hz, 4KHz, 8KHz, 32KHz تولید کرده و به صورت دستی برنامه نویسی می‌شود. همچنین از این پایه برای ساخت وقفه Interrupt در بسیاری از پروژه ها استفاه کنید. اکثر ماژول های RTC از یک کریستال داخلی ۳۲KHz برای ذخیره زمان استفاده می‌کنند. اما مشکلی که وجود دارد دمای خارجی میتواند بر عملکرد کریستال و فرکانس نوسان تاثیر بگذارد. تغییر فرکانس ممکن است بسیار ناچیز باشد اما در گذر زمان ممکن است تاثیرات منفی داشته باشد. برای پیشگیری از این نویز، تراشه DS3231 توسط یک اسیلاتور کریستال ۳۲KHz با اسم TCXO که مخفف temperature compensated crystal oscillator است، هدایت می‌شود.

 

 استفاده از باتری بک آپ برای ساعت 

در پشت ماژول ساعت یک ووردی باتری جهت قرار دادن باتری لیتیومی قرار دارد. علت اصلی استفاده از باتری بک آپ زمانی است که برق کلی دستگاه قطع شود! در اینصورت ماژول ساعت توسط باتری بک آپ زمان را ذخیره کرده و پس از اتصال مجدد برق مجدد از زمان حال شروع به شمارش می‌کند. مدار حسگر ولتاژ داخلی به صورت پیوسته وضعیت VCC را در مدار رصد کرده و در زمان قطع شدن برق به صورت اتوماتیک به باتری بک آپ سوییج می‌کند.

 

استفاده از تراشه EEPROM 24C32

ماژول ساعت DS3231 از تراشه EEPROM 24C32 از خانواده ATMEL برای ذخیره تمامی تنظمیات استفاده می‌کند. تراشه ۲۴C32 از رابط I2C برای ارتباط استفاده می‌کند. آدرس I2C در EEPROM به راحتی توسط پایه های A0,A1,A2 که بر روی برد لحیم کاری شده است، تغییر می‌کند. به صورت پیش فرض آدرس I2C به صورت ۰X57 است.

 


بررسی پایه های DS3231


برد را نگاه کنید. دو ردیف پایه بر روی برد حک شده است.

  •  پایه ۳۲K: این پایه خروجی ثابت است و دمای خارجی را جبران کرده و ساعت دقیق میدهد.
  • پایه SQW: این پایه یک موج مربعی با فرکانس ۱Hz, 4KHz, 8KHz, 32KHz تولید کرده و به صورت دستی برنامه نویسی می‌شود.
  • پایه SCl: پایه سریال کلاک برای ارتباط I2C است.
  • پایه SDA:  پایه سریال دیتا برای ارتباط I2C است.
  • پایه VCC تغذیه اصلی ماژول است که بین ۳٫۳ تا ۵ ولت متغیر است.
  • پایه GND:  پایه Ground است.

 


تنظیم نمایش دقیق ساعت


کابران زیادی در راه اندازی و نمایش دقیق ساعت پس از قطع شدن ارتباط ماژول به مشکل برخورده اند. دو روش جهت تست ماژول ساعت و شمارش ساعت پس از قطع مدار وجود دارد. برای اینکار به صورت جداگانه ماژول ساعت را به برد آردوینو وصل کنید. ارتباط ماژول و برد آردوینو از طریق پایه های I2C است. در آموزشی که چند ساله گذشته در دیجی اسپارک منتشر شده است، روش تنظیم ساعت و کد آردوینو کامل توضیح داده شده است.کتابخانه پرطرفدار RTC جهت تست و راه اندازی ساعت Realtime طراحی و توسعه یافته است. با استفاده از کتابخانه RTC ماژول هایی مانند DS1307, PCF8523, DS3231 راه اندازی می‌شود. در این آموزش با ماژول ساعت DS3231 ساعت و تاریخ را محاسبه خواهیم کرد. RTC قابلیت ذخیره زمان را در خود دارد و به همین دلیل در پروژه ها بسیار کاربردی است. حتما این سوال برای شما هم پیش می‌آید که با قطع برق چه اتفاقی برای ماژول می‌افتد. جواب بسیار ساده است. RTC زمان را در خود نگه داشته و پس از اتصال دوباره برق به مدار، ساعت از لحظه جدید زمان را محاسبه می‌کند. اما سوال بعدی این است که اکثر میکروکنترلرها مانند Arduino،  به تنهایی قابلیت ذخیره زمان را دارند، پس چرا باید از ماژول RTC استفاده کنیم؟ تابع milis در واقع زمان شروع برنامه را محاسبه کرده و به عبارتی مدت زمات شروع برنامه را بر حسب میکروثانیه برمی‌گرداند و این عدد تقریبا پس از ۵۰ روز به بازه ۰ بر میگردد. حال اگر زمان را از طریق Arduino ذخیره کنید با هر بار قطع شدن برق مدار، از زمان ۰ ( زمان اولیه ) شروع به محاسبه آن خواهد کرد و یک ضعف بزرگ به شمار می‌آید.  لینک زیر را باز و کد آردوینو را بر روی برد آپلود کنید. سپس اتصالات را جدا و بقیه مراحل را ادامه دهید. با انجام اینکار ماژول ساعت با ساعت سیستم یکسان خواهد شد. تنظیم ماژول ساعت DS3231 و نگهداری زمان محاسبه شده در حافظه

 


نمایشگر OLED SSD1306


نمایشگر OLED با درایور قدرتمند SSD1306 یک انتخاب فوق العاده برای ساخت گجت های رومیزی است. چیپ SSD1306 یک کنترل کننده درایور قدرتمند CMOS است. این درایور از پروتکل های ارتباطی I2C و SPI پشتیبانی میکند و با توجه به اینکه در پروتکل I2C تنها با دو پایه برای اتصال نیاز دارد، برای اتصال OLED به میکروکنترلرها از این پروتکل بیشتر استفاده خواهیم کرد. ولتاژ کاری نمایشگر ۳٫۳ و ۵ ولت است و از هر دو پایه های تعذیه میکروکنترلر میتوانید استفاده کنید. زاویه دید نمایشگر ۱۶۰ درجه است و ابعاد آن ۰٫۹۶ اینچ است. نمایشگر دارای ۸ سطر و ۱۲۸ ستون است. دو مدل محبوب از نظر ابعادی و طراحی در بین کاربران مطرح است مانند:

  • ۱۲۸X64 با ظاهر مربع
  • ۱۲۸×۳۲ با ظاهر مستطیل

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

 


اتصال ساعت و نمایشگر به آردوینو


پروتکل ارتباطی هر دو ماژول ساعت DS3231 و نمایشگر OLED SSD1306 به صورت I2C است. برد آردوینو UNO فقط از دو پایه A4, A5 برای ارتباط I2C بهره می‌برد. اما هر دیوایس از کد I2C منحصر به فردی برخوردار است که در کدنویسی برنامه از یکدیگر تفکیک می‌شود.

 

 طبق تصویر بالا پایه های SDA , SCL در هر دو برد مشترک است و به همین دلیل از پایه ها برای ارتباط با برد آردوینو میتوانید اشتراک بگیرید.

  • پایه SDA به پایه A4 آنالوگ برد آردوینو متصل می‌شود.
  • پایه SCL به پایه A5 آنالوگ برد آردوینو متصل می‌شود.
  • پایه VCC به پایه ۵ ولت برد آردوینو متصل می‌شود.
  • پایه GND به پایه GND برد آردوینو متصل می‌شود.

 


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


کد ساعت دیجیتال آردوینو رومیزی نیاز به دانش کافی برنامه نویسی و تحلیل خط به خط کتابخانه دارد. در این پروژه در ابتدا کد برنامه را به نرم افزار IDE Arduino انتقال دهید. در قدم بعدی کتابخانه های مورد نیاز فراخوانی می‌شود. CTRL + N را با کیبور انتخاب کنید تا یک تب جدید در نرم افزار باز شود. سپس تمامی دستورات پیش فرض را پاک کنید و کد را توسط کلیدهای میانبر انتقال دهید.

 

 


تحلیل کد آردوینو ساخت ساعت دیجیتال


در برنامه ساعت دیجیتال آردوینو از دو کتابخانه برای راه اندازی ماژول ساعت DS3231 و نمایشگر OLED SSD1306 استفاده شده است. برای استفاده از پروتکل I2C از کتابخانه SPI و Wire استفاده می‌کنیم.

 

نصب کتابخانه DS3231 

برای نصب کتابخانه از منو نرم افزار آردوینو گزینه Sketch/include library/manage library را انتخاب کنید. سپس در صفحه باز شده عبارت DS3231 را فیلتر کنید. آخرین ورژن کتابخانه را نصب کنید.

 

نصب کتابخانه Adafruit_SSD1306

جهت استفاده از ماژول‌های OLED با درایور SSD1306 به کتابخانه Adafruit_SSD1306 نیاز داریم. لینک دانلود کتابخانه در ادامه در بخش دانلود قرار گرفته شده است. برای نصب کتابخانه از منو نرم افزار آردوینو گزینه Sketch/include library/manage library را انتخاب کنید. سپس عبارت Adafruit_SSD1306 را فیلتر کنید.

نصب کتابخانه OLED برد آردوینو - دیجی اسپارک

 

در ادامه به کتابخانه Adafruit_gfx نیاز داریم. همانند تصویر زیر کتابخانه را فیلتر و نصب کنید:

 

نمایش متن در نمایشگر OLED

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

 

دستور نمایش ساعت Hour

حال در پروژه ساعت دیجیتال آردوینو برای نمایش ساعت خوانده شده از ماژول ساعت DS3231 از دستور زیر استفاده می‌کنیم.

 برای نمایش ساعت در سریال مانیتور از دستور زیر استفاده شده است.

 برای نمایش ساعت بر روی OLED از دستور زیر استفاده شده است. انتخاب مکان نما برای نمایش محتوا دلخواه است.

 

دستور نمایش دقیقه Miniute

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

 برای نمایش دقیقه در سریال مانیتور از دستور زیر استفاده شده است.

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

 

دستور نمایش ثانیه Second

برای نمایش ثانیه خوانده شده از ماژول ساعت DS3231 از دستور زیر استفاده می‌کنیم.

 برای نمایش ثانیه در سریال مانیتور از دستور زیر استفاده شده است.

 برای نمایش ثانیه بر روی OLED از دستور زیر استفاده شده است. انتخاب مکان نما برای نمایش محتوا دلخواه است.

 

تنظیم حالت AM,PM برای نمایش دقیق ساعت

برای نمایش دقیق ساعت از مود AM, PM در کد برنامه میتوانید استفاده کنید.

 

 


اندازه گیری دما توسط DS3231


تراشه DS3231 بسیار دقیق است و قابلیت ذخیره دیتای ساعت، دقیقه و ثانیه را دارد. از دیگر قابلیت های منحصر به فرد DS3231 اندازه گیری دما Temperature است. دما با کد ۱۰ بیتی ۰۰۰۱۱۰۰۱۰۱b = +25.25°C دقیقا رزولوشن ۲۵ درجه سانتی گراد را نمایش میدهد. به عنوان مثال ، ۰۰۰۱۱۰۰۱۰۱b = + 25.25 درجه سانتی گراد. پس از وصل شدن برق ، رجیسترها روی دمای پیش فرض ۰ درجه سانتی گراد تنظیم می شوند و کنترل کننده شروع به تبدیل دما می کند. دما پس ار دریافت تغذیه توسط پایه  VCC و یا  پروتکل I2C در VBAT و هر ۶۴ ثانیه یک بار بعد از آن خوانده می شود. ثبت کننده های دما پس از هر تغییر توسط کاربر و در هر تبدیل ۶۴ ثانیه به روز می شوند. رجیسترهای دما فقط خواندنی هستند.

نمایش دما توسط DS3231 به صورت زیر است.

 نمایش دما بر روی سریال مانیتور به صورت زیر است.

 برای نمایش دما Temperature بر روی OLED از دستور زیر استفاده شده است. انتخاب مکان نما برای نمایش محتوا دلخواه است.

 


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


ماژول ساعت فوق دقیق DS3231 با رابط I2C

ماژول نمایشگر OLED دو رنگ آبی و زرد ۰٫۹۶ با پروتکل ارتباطی I2C درایور SSD1306

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

آردوینو Arduino UNO

کابل فلت

برد بورد 

 

 


جمع بندی لیدی پای


فقط به یک جعبه باکس نیاز دارید تا بتوانید تجهیزاتی که ساخته اید را به صورت حرفه ای پیاده سازی کنید. تراشه DS3231 دو قابلیت ویژه دارد که ساعت و دما را همزمان داشته باشید. علاوه بر ساعت میتوانید تاریخ بر حسب سال، ماه و روز به همراه تشخیص PM,AM و ۲۴h , 12h را همزمان در اختیار داشته باشید. برد آردوینو UNO و برد آردوینو نانو Nano دو انتخاب مناسب برای ساخت این پروژه است. یکی از موارد مهمی که در زمان اجرای پروژه بایستی به آن اهمیت دهید، تنظیم دقیق زمان و ساعت با سیستم است. همچنین در هر لحظه ممکن است تغذیه دستگاه خاموش شود و شمارش زمان متوقف شود. برای این مشکل هم راه حلی ارائه شده است. با توجه به اینکه ماژول ساعت DS3231 دارای ورودی باتری بک آپ است، با قرار دادن باتری در ماژول پس از تشخیص قطع ارتباط، باتری بک آپ وارد مدار شده و زمان را از همان لحظه ی قطع شدن تا وصل شدن مجدد در خود ذخیره می‌کند. پس از اجرای پروژه در صورت هرگونه سوال و ابهام در بخش دیدگاه ها می‌توانید سوالات خود را بپرسید.

 

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

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

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

۲ دیدگاه