فهرست مطالب:

ساعت نوشتاری پیمایش آردوینو: 3 مرحله
ساعت نوشتاری پیمایش آردوینو: 3 مرحله

تصویری: ساعت نوشتاری پیمایش آردوینو: 3 مرحله

تصویری: ساعت نوشتاری پیمایش آردوینو: 3 مرحله
تصویری: آموزش ورد از صفر تا صد - [جلسه ۱۱] جستجو در ماکروسافت ورد | Advanced Find in ms Word 2024, نوامبر
Anonim
ساعت نوشتاری پیمایش آردوینو
ساعت نوشتاری پیمایش آردوینو

هدف این پروژه ساخت یک ساعت متن پیمایش است که زمان صحبت کردن را نمایش می دهد (به عنوان مثال ، "نیمه شب است").

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

مرحله 1: سخت افزار

سخت افزار
سخت افزار

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

  • یک برد سازگار با Arduino Uno
  • یک مدار ساعت یا ماژول زمان واقعی با استفاده از IC DS1307 یا DS3231
  • و صفحه نمایش LED تک رنگ به سبک P10

ممکن است منبع تغذیه خارجی بخواهید ، اما بعداً به آن می پردازیم.

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

در حال حاضر امیدوارم به این فکر کنید که "چگونه زمان را تعیین می کنید؟".

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

در غیر این صورت یک رابط کاربری ساده اضافه کنید-چند دکمه می توانند این کار را انجام دهند. در نهایت شما فقط باید سخت افزار را در پشت DMD قرار دهید. محدوده زیادی برای برآوردن نیازهای شما وجود دارد ، یک راه حل ساده این است که صفحه کنترل را تراز کنید تا بتوانید به آسانی به سوکت USB دسترسی پیدا کنید - و سپس آن را با مقداری Sugru بچسبانید.

در مورد تغذیه ساعت - می توانید یک صفحه LED را از آردوینو اجرا کنید ، و برای روشنایی خوب برای استفاده در محیط داخلی کار می کند. اگر می خواهید DMD با روشنایی کامل شبکیه چشم کار کند ، باید از منبع تغذیه جداگانه 5V 4A DC استفاده کنید. اگر از دو DMD استفاده می کنید - این عدد به 8A می رسد و غیره. کافی است برق خارجی را به پایانه های یک DMD وصل کنید (DMD دوم یا بیشتر را به این پایانه ها وصل کنید).

اگر تمایل ندارید انتهای کابل منبع تغذیه خود را قطع کنید ، از خروجی سوکت DC استفاده کنید.

مرحله 2: طرح آردوینو

شما باید دو کتابخانه آردوینو زیر را نصب کنید - TimerOne و DMD. سپس طرح را بارگذاری کنید:

// برای RTC #شامل "Wire.h" #تعریف DS1307_I2C_ADDRESS 0x68 // RTC DS1307 0x68 است

// برای نمایش LED

#شامل "SPI.h" #شامل "DMD.h" #شامل "TimerOne.h" #شامل "SystemFont5x7.h" #شامل "Arial_black_16.h" #تعریف DISPLAYS_ACROSS 1 // شما می توانید بیش از یک DMD در یک داشته باشید ردیف #تعریف DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS ، DISPLAYS_DOWN) ؛

رشته finalString ؛ // برای نگه داشتن جمله نهایی برای نمایش در DMD استفاده می شود

void ScanDMD () // مورد نیاز برای DMD

{dmd.scanDisplayBySPI ()؛ }

void setup ()

{// برای DMD Timer1.initialize (5000) ؛ Timer1.attachInterrupt (ScanDMD) ؛ dmd.clearScreen (درست) ؛

// برای RTC

Wire.begin ()؛ // بایت اتوبوس I2C را در ثانیه ، دقیقه ، ساعت ، dayOfWeek ، dayOfMonth ، ماه ، سال روشن کنید. // متغیرها را تغییر دهید و setDateDs1307 را برای تنظیم زمان کامنت گذاری کنید // سپس عملکرد را دوباره کامنت کنید و دوباره طرح را بارگذاری کنید = 0؛ دقیقه = 13 ؛ ساعت = 23 ؛ dayOfWeek = 4 ؛ dayOfMonth = 19؛ ماه = 5 ؛ سال = 13 ؛ // setDateDs1307 (ثانیه ، دقیقه ، ساعت ، dayOfWeek ، dayOfMonth ، ماه ، سال) ؛ }

// توابع معمول RTC

// تبدیل اعداد اعشاری معمولی به بایت اعشاری کد شده دوتایی decToBcd (byte val) {return ((val/10*16) + (val٪ 10)) ؛ }

// تبدیل اعشاری با کد دودویی به اعداد اعشاری معمولی

بایت bcdToDec (بایت val) {return ((val/16*10) + (val٪ 16)) ؛ }

void setDateDs1307 (بایت ثانیه ، // 0-59

دقیقه بایت ، // 0-59 بایت ساعت ، // 1-23 بایت dayOfWeek ، // 1-7 بایت روزماه ، // 1-28/29/ماه بایت ، // 1-12 بایت سال) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS) ؛ Wire.write (0) ؛ Wire.write (decToBcd (دوم)) ؛ // 0 تا بیت 7 ساعت Wire.write (decToBcd (دقیقه)) را شروع می کند. Wire.write (decToBcd (ساعت)) ؛ Wire.write (decToBcd (dayOfWeek)) ؛ Wire.write (decToBcd (dayOfMonth)) ؛ Wire.write (decToBcd (ماه)) ؛ Wire.write (decToBcd (سال)) ؛ Wire.write (00010000) ؛ // 0x10 (hex) 00010000 (باینری) برای کنترل ثبت ارسال می کند - Wire.endTransmission موج مربعی را روشن می کند () ؛ }

// تاریخ و زمان را از ds1307 دریافت می کند

void getDateDs1307 (بایت *ثانیه ، بایت *دقیقه ، بایت *ساعت ، بایت *dayOfWeek ، بایت *dayOfMonth ، بایت *ماه ، بایت *سال) {// تنظیم مجدد اشاره گر Wire.beginTransmission (DS1307_I2C_ADDRESS) ؛ Wire.write (0) ؛ Wire.endTransmission ()؛

سیم. درخواست از (DS1307_I2C_ADDRESS ، 7) ؛

// برخی از این موارد به ماسک نیاز دارند زیرا بیت های خاصی بیت های کنترل هستند

*دوم = bcdToDec (Wire.read () & 0x7f) ؛ *دقیقه = bcdToDec (Wire.read ()) ؛ *ساعت = bcdToDec (Wire.read () & 0x3f) ؛ // اگر 12 ساعت صبح/بعد از ظهر *dayOfWeek = bcdToDec (Wire.read ()) باید این مورد را تغییر دهید ؛ *dayOfMonth = bcdToDec (Wire.read ()) ؛ *month = bcdToDec (Wire.read ()) ؛ *سال = bcdToDec (Wire.read ()) ؛ }

void drawText (String oldString)

{dmd.clearScreen (درست) ؛ dmd.selectFont (Arial_Black_16) ؛ char newString [256]؛ int sLength = oldString.length ()؛ oldString.toCharArray (newString ، sLength+1) ؛ dmd.drawMarquee (newString ، sLength ، (32*DISPLAYS_ACROSS) -1 ، 0) ؛ شروع طولانی = millis ()؛ تایمر طولانی = شروع ؛ تایمر طولانی 2 = شروع ؛ boolean ret = false؛ while (! ret) {if ((تایمر+20) <millis ()) {ret = dmd.stepMarquee (-1، 0)؛ تایمر = میلی ثانیه ()؛ }}}

void createTextTime (int hh، int mm)

// این تمام داده های زمان را به صورت یک جمله در هم می آمیزد {finalString = ""؛ // جمله را برای موارد خاص پاک کنید (در زیر) finalString = finalString+"It's" ؛

// اکنون ساعت را اضافه کنید

if (hh == 1 || hh == 13) {finalString = finalString+"one"؛ } if (hh == 2 || hh == 14) {finalString = finalString+"two"؛ } if (hh == 3 || hh == 15) {finalString = finalString+"three"؛ } if (hh == 4 || hh == 16) {finalString = finalString+"چهار" ؛ } if (hh == 5 || hh == 17) {finalString = finalString+"پنج" ؛ } if (hh == 6 || hh == 18) {finalString = finalString+"six"؛ } if (hh == 7 || hh == 19) {finalString = finalString+"هفت" ؛ } if (hh == 8 || hh == 20) {finalString = finalString+"هشت" ؛ } if (hh == 9 || hh == 21) {finalString = finalString+"nine"؛ } if (hh == 10 || hh == 22) {finalString = finalString+"ده" ؛ } if (hh == 11 || hh == 23) {finalString = finalString+"یازده" ؛ }

// اکنون دقیقه را اضافه کنید

switch (mm) {case 1: finalString = finalString+"oh one"؛ زنگ تفريح؛ مورد 2: finalString = finalString+"آه دو"؛ زنگ تفريح؛ مورد 3: finalString = finalString+"آه سه" ؛ زنگ تفريح؛ مورد 4: finalString = finalString+"آه چهار"؛ زنگ تفريح؛ مورد 5: finalString = finalString+"آه پنج"؛ زنگ تفريح؛ مورد 6: finalString = finalString+"آه شش" ؛ زنگ تفريح؛ مورد 7: finalString = finalString+"آه هفت"؛ زنگ تفريح؛ مورد 8: finalString = finalString+"آه هشت"؛ زنگ تفريح؛ مورد 9: finalString = finalString+"آه نه" ؛ زنگ تفريح؛ مورد 10: finalString = finalString+"ده" ؛ زنگ تفريح؛ مورد 11: finalString = finalString+"یازده" ؛ زنگ تفريح؛ مورد 12: finalString = finalString+"دوازده" ؛ زنگ تفريح؛ مورد 13: finalString = finalString+"سیزده" ؛ زنگ تفريح؛ مورد 14: finalString = finalString+"چهارده"؛ زنگ تفريح؛ مورد 15: finalString = finalString+"پانزده"؛ زنگ تفريح؛ مورد 16: finalString = finalString+"شانزده"؛ زنگ تفريح؛ مورد 17: finalString = finalString+"هفده"؛ زنگ تفريح؛ مورد 18: finalString = finalString+"هجده" ؛ زنگ تفريح؛ مورد 19: finalString = finalString+"نوزده"؛ زنگ تفريح؛ مورد 20: finalString = finalString+"بیست" ؛ زنگ تفريح؛ مورد 21: finalString = finalString+"بیست و یک" ؛ زنگ تفريح؛ مورد 22: finalString = finalString+"بیست و دو" ؛ زنگ تفريح؛ مورد 23: finalString = finalString+"بیست و سه" ؛ زنگ تفريح؛ مورد 24: finalString = finalString+"بیست و چهار" ؛ زنگ تفريح؛ مورد 25: finalString = finalString+"بیست و پنج" ؛ زنگ تفريح؛ مورد 26: finalString = finalString+"بیست و شش" ؛ زنگ تفريح؛ مورد 27: finalString = finalString+"بیست و هفت" ؛ زنگ تفريح؛ مورد 28: finalString = finalString+"بیست و هشت" ؛ زنگ تفريح؛ مورد 29: finalString = finalString+"بیست و نه" ؛ زنگ تفريح؛ مورد 30: finalString = finalString+"سی" ؛ زنگ تفريح؛ مورد 31: finalString = finalString+"سی و یک" ؛ زنگ تفريح؛ مورد 32: finalString = finalString+"سی و دو" ؛ زنگ تفريح؛ مورد 33: finalString = finalString+"سی و سه" ؛ زنگ تفريح؛ مورد 34: finalString = finalString+"سی و چهار" ؛ زنگ تفريح؛ مورد 35: finalString = finalString+"سی و پنج" ؛ زنگ تفريح؛ مورد 36: finalString = finalString+"سی و شش" ؛ زنگ تفريح؛ مورد 37: finalString = finalString+"سی و هفت" ؛ زنگ تفريح؛ مورد 38: finalString = finalString+"سی و هشت" ؛ زنگ تفريح؛ مورد 39: finalString = finalString+"سی و نه" ؛ زنگ تفريح؛ مورد 40: finalString = finalString+"چهل" ؛ زنگ تفريح؛ مورد 41: finalString = finalString+"چهل و یک" ؛ زنگ تفريح؛ مورد 42: finalString = finalString+"چهل و دو" ؛ زنگ تفريح؛ مورد 43: finalString = finalString+"چهل و سه" ؛ زنگ تفريح؛ مورد 44: finalString = finalString+"چهل و چهار"؛ زنگ تفريح؛ مورد 45: finalString = finalString+"چهل و پنج"؛ زنگ تفريح؛ مورد 46: finalString = finalString+"چهل و شش" ؛ زنگ تفريح؛ مورد 47: finalString = finalString+"چهل و هفت"؛ زنگ تفريح؛ مورد 48: finalString = finalString+"چهل و هشت"؛ زنگ تفريح؛ مورد 49: finalString = finalString+"چهل و نه" ؛ زنگ تفريح؛ مورد 50: finalString = finalString+"پنجاه"؛ زنگ تفريح؛ مورد 51: finalString = finalString+"پنجاه و یک" ؛ زنگ تفريح؛ مورد 52: finalString = finalString+"پنجاه و دو" ؛ زنگ تفريح؛ مورد 53: finalString = finalString+"پنجاه و سه" ؛ زنگ تفريح؛ مورد 54: finalString = finalString+"پنجاه و چهار" ؛ زنگ تفريح؛ مورد 55: finalString = finalString+"پنجاه و پنج" ؛ زنگ تفريح؛ مورد 56: finalString = finalString+"پنجاه و شش" ؛ زنگ تفريح؛ مورد 57: finalString = finalString+"پنجاه و هفت" ؛ زنگ تفريح؛ مورد 58: finalString = finalString+"پنجاه و هشت" ؛ زنگ تفريح؛ مورد 59: finalString = finalString+"پنجاه و نه" ؛ زنگ تفريح؛ }

// ظهر؟

if (hh == 12 && mm == 0) {finalString = finalString+"midday"؛ } // نیمه شب؟ if (hh == 00 && mm == 0) {finalString = finalString+"نیمه شب" ؛ }

}

حلقه خالی ()

{// دریافت زمان از بایت RTC ثانیه ، دقیقه ، ساعت ، dayOfWeek ، dayOfMonth ، ماه ، سال ؛ getDateDs1307 (& دوم ، & دقیقه ، & ساعت ، & dayOfWeek ، & dayOfMonth ، & month ، & year) ؛

// زمان را به رشته جمله تبدیل کنید

createTextTime (ساعت ، دقیقه) ؛

// اکنون متن را به DMD ارسال کنید

drawText (finalString) ؛ }

این طرح دارای عملکردهای معمول برای تنظیم و بازیابی زمان از IC های ساعت در زمان واقعی DS1307/3232 است و طبق معمول با تمام ساعت های ما می توانید اطلاعات زمان را در متغیرهای void setup () و سپس unsment setDateDs1307 () وارد کنید. طرح را بارگذاری کنید ، دوباره setDateDs1307 را کامنت کنید ، سپس طرح را بار دیگر بارگذاری کنید. در صورت عدم افزودن رابط کاربری مبتنی بر سخت افزار ، این فرایند را برای تنظیم مجدد زمان تکرار کنید.

مرحله 3:

هنگامی که زمان در حلقه void () بازیابی شد ، به تابع createTextTime () منتقل می شود. این تابع با شروع با "It's" رشته متنی را برای نمایش ایجاد می کند و سپس تعیین می کند که بسته به زمان فعلی کدام کلمات را دنبال کنید. در نهایت تابع drawText () رشته نگهدارنده متن برای نمایش را به یک متغیر کاراکتر تبدیل می کند که می تواند به DMD منتقل شود.

توصیه شده: