فهرست مطالب:

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

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

تصویری: ساعت واقعی با آردوینو: 3 مرحله
تصویری: ترکید😱😭 2024, سپتامبر
Anonim
ساعت واقعی با آردوینو
ساعت واقعی با آردوینو

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

کد DS3231 Arduino مانند کد DS1307 است و با هر دو تراشه RTC کار می کند.

کد آردوینو در زیر از هیچ کتابخانه ای برای DS3231 RTC استفاده نمی کند ، کتابخانه Wire برای مکاتبات بین آردوینو و DS3231 با استفاده از قرارداد I2C است.

آره! بسیاری از مهندسان الکترونیک برای پروژه های مبتنی بر زمان خود به آن وابسته هستند ، اما RTC کاملاً قابل اعتماد نیست. باتری کار می کند و باید دیر یا زود تعویض شود. با ورود به پروژه های اینترنت اشیا ، پین های با ارزش SPI (Serial Peripheral Interface) را اشغال می کند و با سیم های پیچیده در اطراف آشفته می شود. راه حل …. در اینجا می آید قهرمان ما NTP (پروتکل زمان شبکه). NTP بسیار دقیق است زیرا از اینترنت زمان می گیرد. ما قصد داریم این پروتکل را با استفاده از حالت سرویس گیرنده-سرویس کار کنیم. این فرایند به قدری ساده است که Nodemcu ما به عنوان یک کلاینت عمل می کند و با استفاده از UDP یک بسته NTP از سرور درخواست می کند. در مقابل ، سرور بسته ای را برای مشتری ارسال می کند که داده ها را تجزیه می کند. NTP پروتکل همگام سازی زمان جهانی است. حالا بیایید محل کار آزمایشگاه خود را روشن کنیم

مرحله 1: اجزای مورد نیاز

  • برد آردوینو
  • برد DS3231 RTC
  • صفحه نمایش LCD 16x2
  • 2 دکمه فشاری
  • مقاومت متغیر 10 کیلو اهم (یا پتانسیومتر)
  • مقاومت 330 اهم
  • باتری سکه ای 3 ولت
  • تخته نان
  • سیم های بلوز

ماکت RTC DS3231

زمان یک حس ضروری است که در این دنیای سریع انسان ها مورد نیاز است. در پروژه زمان واقعی

ما از RTC (A. K. A ساعت زمان واقعی) استفاده می کنیم

RTC Real-time-clock (RTC) یک مدار مجتمع (IC) است که زمان فعلی را پیگیری می کند. RTC از زمان در حالت واقعی مراقبت می کند. RTC معمولاً در مادربردهای رایانه ای و سیستم های تعبیه شده یافت می شود تا نیاز به دسترسی به موقع داشته باشد.

مرحله 2: اتصال ساعت Arduino

اتصال ساعت آردوینو
اتصال ساعت آردوینو
  • پین SCL را به ماژول RTC به Arduino A5 وصل کنید
  • پین SDA را به ماژول RTC به Arduino A4 وصل کنید
  • VCC را به 5v و GND را به GND وصل کنید
  • یک دکمه فشاری را به پین 8 وصل کنید
  • یک دکمه دیگر را به پین 9 وصل کنید
  • RS LCD را به پین 2 آردوینو وصل کنید
  • E LCD را به پین 3 آردوینو وصل کنید
  • D7 LCD را به پین 7 آردوینو وصل کنید
  • D6 LCD را به پین 6 آردوینو وصل کنید
  • D5 LCD را به پین 5 آردوینو وصل کنید
  • D4 LCD را به پین 4 آردوینو وصل کنید
  • VSS & K را به GND وصل کنید
  • VDD & A را به 5 ولت وصل کنید
  • vo را به پین خروجی پتانسیومتر وصل کنید

مرحله 3: کد ساعت Arduino با RTC

کد ساعت Arduino با RTC
کد ساعت Arduino با RTC

DS3231 فقط با فرمت BCD کار می کند و برای تبدیل BCD به اعشاری و برعکس من از 2 خط زیر استفاده کردم (مثال برای دقیقه): ؛

// تبدیل اعشاری به BCDminute = ((دقیقه / 10) << 4) + (دقیقه٪ 10) ؛ void DS3231_display (): زمان و تقویم را نمایش می دهد ، قبل از نمایش زمان و داده های تقویم از BCD به فرمت اعشاری تبدیل می شوند. void blink_parameter ():

// ساعت واقعی و تقویم با دکمه های تنظیم شده با استفاده از DS3231 و Arduino // شامل کد کتابخانه LCD #شامل // شامل کد کتابخانه سیم (مورد نیاز برای دستگاه های پروتکل I2C) #شامل // اتصالات ماژول LCD (RS ، E ، D4 ، D5 ، D6 ، D7) LCD مایع Liquid (2 ، 3 ، 4 ، 5 ، 6 ، 7) ؛ void setup () {pinMode (8، INPUT_PULLUP)؛ // button1 به پین 8 pinMode (9 ، INPUT_PULLUP) متصل است ؛ // button2 به پین 9 متصل است // تعداد ستون ها و ردیف های LCD را تنظیم کنید lcd.begin (16 ، 2) ؛ Wire.begin ()؛ // پیوستن به اتوبوس i2c} char زمان = "TIME:::"؛ char Calendar = "DATE: / / 20"؛ بایت i ، دوم ، دقیقه ، ساعت ، تاریخ ، ماه ، سال ؛ void DS3231_display () {// تبدیل BCD به اعشاری دوم = (دوم >> 4) * 10 + (دوم & 0x0F) ؛ دقیقه = (دقیقه >> 4) * 10+ (دقیقه & 0x0F) ؛ ساعت = (ساعت >> 4) * 10+ (ساعت & 0x0F) ؛ تاریخ = (تاریخ >> 4) * 10+ (تاریخ & 0x0F) ؛ ماه = (ماه >> 4) * 10+ (ماه & 0x0F) ؛ سال = (سال >> 4) * 10+ (سال & 0x0F) ؛ // پایان زمان تبدیل [12] = دوم٪ 10 + 48 ؛ زمان [11] = دوم / 10 + 48 ؛ زمان [9] = دقیقه٪ 10 + 48 ؛ زمان [8] = دقیقه / 10 + 48 ؛ زمان [6] = ساعت٪ 10 + 48 ؛ زمان [5] = ساعت / 10 + 48 ؛ تقویم [14] = سال٪ 10 + 48 ؛ تقویم [13] = سال / 10 + 48 ؛ تقویم [9] = ماه٪ 10 + 48 ؛ تقویم [8] = ماه / 10 + 48 ؛ تقویم [6] = تاریخ٪ 10 + 48 ؛ تقویم [5] = تاریخ / 10 + 48 ؛ lcd.setCursor (0 ، 0) ؛ lcd.print (زمان) ؛ // زمان نمایش lcd.setCursor (0 ، 1) ؛ lcd.print (تقویم) ؛ // نمایش تقویم} void blink_parameter () {byte j = 0؛ while (j 23) // اگر ساعت> 23 ==> ساعت = 0 پارامتر = 0 ؛ if (i == 1 && پارامتر> 59) // اگر دقیقه> 59 ==> دقیقه = 0 پارامتر = 0 ؛ if (i == 2 && پارامتر> 31) // If date> 31 ==> date = 1 پارامتر = 1 ؛ if (i == 3 && پارامتر> 12) // اگر ماه> 12 ==> ماه = 1 پارامتر = 1 ؛ اگر (i == 4 && پارامتر> 99) // اگر سال> 99 ==> سال = 0 پارامتر = 0 ؛ sprintf (متن ، "٪ 02u" ، پارامتر) ؛ lcd.setCursor (x ، y) ؛ lcd.print (متن) ؛ تأخیر (200) ؛ // صبر کنید 200ms} lcd.setCursor (x ، y) ؛ lcd.print ("")؛ // نمایش دو فاصله blink_parameter ()؛ sprintf (متن ، "٪ 02u" ، پارامتر) ؛ lcd.setCursor (x ، y) ؛ lcd.print (متن) ؛ blink_parameter ()؛ if (! digitalRead (8)) {// اگر دکمه (پین شماره 8) i ++ فشار داده شده است ؛ // افزایش 'i' برای پارامتر بازگشتی پارامتر بعدی ؛ // مقدار پارامتر را برگردانید و خارج شوید}}} حلقه void () {if (! digitalRead (8)) {// اگر دکمه (پین شماره 8) i = 0 فشار داده شود ؛ ساعت = ویرایش (5 ، 0 ، ساعت) ؛ دقیقه = ویرایش (8 ، 0 ، دقیقه) ؛ تاریخ = ویرایش (5 ، 1 ، تاریخ) ؛ ماه = ویرایش (8 ، 1 ، ماه) ؛ سال = ویرایش (13 ، 1 ، سال) ؛ // تبدیل اعشار به دقیقه BCD = ((دقیقه / 10) << 4) + (دقیقه٪ 10) ؛ ساعت = ((ساعت / 10) << 4) + (ساعت٪ 10) ؛ date = ((date / 10) << 4) + (date٪ 10)؛ ماه = ((ماه / 10) << 4) + (ماه٪ 10)؛ سال = ((سال / 10) << 4) + (سال٪ 10) ؛ // پایان تبدیل // نوشتن داده ها به DS3231 RTC Wire.beginTransmission (0x68) ؛ // شروع پروتکل I2C با آدرس DS3231 Wire.write (0) ؛ // ارسال آدرس ثبت نام Wire.write (0)؛ // sesonds را بازنشانی کرده و نوسان ساز Wire.write (دقیقه) را راه اندازی کنید. // نوشتن دقیقه Wire.write (ساعت) ؛ // ساعت نوشتن Wire.write (1)؛ // نوشتن روز (استفاده نشده) Wire.write (تاریخ) ؛ // تاریخ نوشتن Wire.write (ماه) ؛ // نوشتن ماه Wire.write (year)؛ // نوشتن سال Wire.endTransmission ()؛ // توقف انتقال و رهاسازی تاخیر گذرگاه I2C (200) ؛ // منتظر 200ms} Wire.beginTransmission (0x68) ؛ // شروع پروتکل I2C با آدرس DS3231 Wire.write (0) ؛ // ارسال آدرس ثبت Wire.endTransmission (false) ؛ // راه اندازی مجدد I2C Wire.requestFrom (0x68، 7)؛ // 7 بایت از DS3231 درخواست کنید و گذرگاه I2C را در پایان خواندن second = Wire.read () رها کنید. // خواندن ثانیه از ثبت 0 دقیقه = Wire.read ()؛ // خواندن دقیقه از ثبت 1 ساعت = Wire.read ()؛ // ساعت خواندن از ثبت 2 Wire.read ()؛ // خواندن روز از ثبت 3 (استفاده نشده) date = Wire.read ()؛ // تاریخ خواندن از ثبت نام 4 ماه = Wire.read ()؛ // ماه را از ثبت نام بخوانید 5 سال = Wire.read ()؛ // خواندن سال از ثبت 6 DS3231_display ()؛ // زمان نمایش و تاخیر تقویم (50) ؛ // 50 میلی ثانیه صبر کنید}

توصیه شده: