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

طراحی و پیاده سازی ساعت دیجیتال با تایمر داخلی آردوینو Arduino

create-digital-clock-with-timer-function-arduino-segment-tm1637-digispark
نوشته شده توسط معین صابری

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

 


ساز و کار سیستم ساعت دیجیتال


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

ساعت دیجیتال با تایمر داخلی آردوینو - دیجی اسپارک

 

تایمرها یکی از قابلیت های داخلی میکروکنترلرها به شمار می روند. در اینجا که ما از برد آردوینو UNO استفاده می کنیم، لذا به سه تایمر دسترسی داریم. ما در این جا از تایمر ۱ استفاده می کنیم. این تایمر دارای اندازه ۱۶ بیتی است. به عبارت دیگر این تایمر از مقدار ۰ الی ۶۵۵۳۵ می تواند شمارش کند. برای هر استپ شمارش می توان فرکانس تعیین کرد. بدین ترتیب به کمک این فرکانس و بازه شمارش، می توان تاخیر مد نظر را ایجاد نمود. در طرف دیگر، هر گاه شمارش به اتمام برسد، وقفه رخ خواهد داد. بدین ترتیب بدون توقف برنامه، می توان زمانبندی مد نظر را اجرا نمود. در ادامه به نقش قطعات در پروژه خواهیم پرداخت.

 


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


همانطور که پیشتر هم گفته شد، در این آموزش به کمک برد آردوینو قصد ساخت یک ساعت را داریم. در این پروژه برد آردوینو به عنوان پردازنده مرکزی، زمان را به کمک تایمر شماره ۱ خود می خواند. این تایمر از مقدار ۰ شروع به شمارش می کند. هرگاه این مقدار به بیشترین مقدار خود از لحاظ شمارش برسد، وقفه صادر خواهد کرد. این مقدار با توجه به ۱۶ بیت بودن رجیستر شمارش تایمر شماره ۱، ۶۵۵۳۵ خواهد بود.

ساخت ساعت دیجیتال با تایمر داخلی آردوینو - دیجی اسپارک

 

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

ساعت دیجیتال با سگمنت tm1637 - دیجی اسپارک

 

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

 


نصب کتابخانه نمایشگر TM1637


همانطور که اطلاع دارید، کتابخانه ها یکی از ابزارهای کلیدی و کاربردی در برنامه نویسی به شمار می روند. به کمک این ابزار، می توانیم توابع نوشته شده در فایلهایی به نام کتابخانه ذخیره کرده و سپس در پروژه های متعدد از آن استفاده کنیم.  همانطور که پیشتر گفته شد، برای راه اندازی و کار با ماژول TM1637 کتابخانه توسعه داده شده است. برای استفاده از این کتابخانه، ابتدا باید آن را نصب کنیم. برای نصب کتابخانه در محیط آردویینو، ابتدا مطابق تصویر زیر بر روی گزینه Tools و سپس Manage Libraries کلیک کنید.

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

 

پس از کلیک بر روی گزینه Manage Libraries، در صفحه ظاهر شده، در قسمت کادر جستجو، عبارت SevenSegmentTM1637.h را جستجو نموده و کتابخانه مشخص شده در تصویر زیر را نصب نمایید.

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

 


 شماتیک و اتصالات ساعت دیجیتال


پس از نصب کتابخانه، نوبت به بررسی شماتیک و اتصالات می گردد. در ابتدا تصویر زیر فرم کلی اتصالات را نمایش می دهد.

اتصالات پروژه ساعت دیجیتال با تایمر داخلی - دیجی اسپارک

 


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


پس از اجرای اتصالات، نوبت به آپلود کدهای برنامه روی برد می رسد. این کدها برای برد آردوینو UNO با تراشه ATMEGA328P توسعه داده شده اند.

 

جهت دسترسی به این بخش، اشتراک اسپارکر پلاس تهیه کنید.

 


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


پس از آپلود کدها، نوبت به اجرای پروژه می رسد. ابتدا جهت تنظیم زمان، می بایست زمان فعلی را به صورت پارامترهای ساعت، دقیقه و ثانیه در ورودی تابع begin قرار دهید. به عنوان مثال فرض کنید زمان فعلی برابر با ساعت ۱۶ و ۱۵ دقیقه و ۱۴ ثانیه باشد. در کدهای برنامه در تابع setupt، تابع begin را به شکل زیر مقدار دهی کنید.

پس از تنظیم تابع، زمان به صورت خودکار شمارش شده و بر روی نمایشگر سون سگمنت نمایش داده می شود.

نمایش ساعت با سگمنت tm1637 - دیجی اسپارک

 


تحلیل کدهای پروژه ساعت با تایمر


پس از اجرای پروژه، نوبت به تحلیل و بررسی کدهای آن می رسد. از آنجاییکه درون کدهای پروژه به صورت خط به خط توضیح(کامنت) درج شده است؛ لذا  در این جا به طور خلاصه به توابع پروژه می پردازیم. در همین رابطه، این پروژه دارای دو تابع اصلی زیر است.

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

 


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


  1. آردوینو UNO
  2. نمایشگر TM137

 


 جمع بندی


در این آموزش به طراحی و پیاده سازی یک ساعت دیجیتال به کمک برد آردوینو نمودیم. ساعت طراحی شده در این پروژه از مازول جانبی اضافه ای استفاده نمی کند؛ بلکه جهت اندازه گیری زمان از تایمرهای داخلی میکروکنترلر استفاده نمودیم. از آنجاییکه در این پروژه از برد آردوینو UNO بهره برده ایم، لذا از تایمر شماره ۱ جهت تنظیم زمان و زمانبندی استفاده می کنیم. در این پروژه به کمک تایمر شماره ۱ شمارش آغاز می شود. سپس هرگاه که زمان به ۶۰ ثانیه برسد، یک واحد به دقیقه اضافه خواهد شد. این روال تا افزدون ساعت هم ادامه خواهد داشت. در این پروژه جهت نمایش زمان از نمایشگر سون سگمنت TM1637 استفاده می نماییم.

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

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

۷ دیدگاه

  • سلام و با تشکر از شما.
    این کد را چگونه میشه برای برد های ESP8266 پیاده سازی کرد ؟ آیا امکانش وجود داره ؟

  • سلام.من اشتراک دیجی اسپارک تهیه کردم.ولی کدهای این پروژه برام نمایش داده نمیشه

  • Arduino: 1.8.19 (Windows 10), Board: “Arduino Uno”

    C:\Users\saber\Documents\Arduino\libraries\SevenSegmentTM1637\src\SevenSegmentFun.cpp:187:80: error: no ‘void SevenSegmentFun::bouncingBall(uint16_t, uint16_t, bool)’ member function declared in class ‘SevenSegmentFun’

    void SevenSegmentFun::bouncingBall(uint16_t moves, uint16_t d, bool runForever) {

    ^

    exit status 1

    Error compiling for board Arduino Uno.

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

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