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

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

یکی از اولین پروژه هایی که مبتدیان با استفاده از برد آردوینو می سازند یک ساعت ساده است که زمان را نگه می دارد. اساساً، چنین ساعت هایی مبتنی بر یک ماژول RTC (ساعت واقعی) متصل به آردوینو هستند. امروزه مدل های مختلف RTC در بازار قطعات الکترونیکی موجود است که از نظر دقت و قیمت متفاوت است. مدل های رایج عبارتند از DS1302، DS1307، DS3231.



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


اصل عملکرد چنین ساعت هایی بسیار ساده است. هر بار که این ساعت آردوینو را روشن می کنید، باید آن را مانند هر ساعت آنالوگ روی زمان فعلی تنظیم کنید. اگر چنین ساعتی برای مدت طولانی بدون راه اندازی مجدد و تنظیم بیشتر فعال است، مطمئناً بهتر است در زندگی روزمره خود از آن استفاده نکنید، زیرا همگام سازی با زمان فعلی در استفاده طولانی مدت می تواند قابل توجه باشد.


این ساعت را می توان روی تخته نان معمولی مونتاژ کرد، زیرا به قطعات زیادی نیاز ندارد. لینک اصلی ما در اینجا برد Arduino Uno خواهد بود. برای نمایش زمان، می توانید یک نمایشگر LCD 16x2 بگیرید. برای تغییر تنظیمات زمان، باید دو دکمه (برای ساعت و دقیقه) وصل کنید. دکمه ها از طریق مقاومت های 10KΩ به Aduino متصل می شوند. برای تغییر روشنایی نمایشگر به یک پتانسیومتر 10 کیلو اهم نیاز دارید. نمودار اتصال تمامی این قطعات به برد آردوینو Uno در زیر ارائه شده است.



حالا باید آردوینو را برنامه ریزی کنید. یک کد ساده (طرح) که به شما امکان می دهد زمان را روی صفحه LCD نمایش دهید در زیر آورده شده است.


#عبارتند از ال سی دی کریستال مایع (12،11،5،4،3،2); int h=12; int m; int s; پرچم بین المللی; int TIME; const int hs=8; const int ms=9; int state1; int state2; void setup() ( lcd.begin(16,2); ) void loop() (lcd.setCursor(0,0); s=s+1; lcd.print("TIME:"); lcd.print(h lcd.print(":"); lcd.print(m); lcd.print(":"); lcd.print(s); if(flag<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); if(flag==24) flag=0; تاخیر (1000); lcd.clear(); if(s==60)(s=0; m=m+1; ) if(m==60) (m=0; h=h+1; flag=flag+1; ) if(h==13 ) ( h=1; ) lcd.setCursor(0,1); lcd.print("روز خوبی داشته باشید"); //-------زمان // تنظیم-------// state1=digitalRead(hs); if(state1==1) (h=h+1; flag=flag+1; if(flag<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); if(flag==24) flag=0; if(h==13)h=1; ) state2=digitalRead(ms); if(state2==1)(s=0; m=m+1;) )

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

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

مواد استفاده شده:

  • - نوار دیود روی ریز مدارهای ws2811 (RGB، منبع تغذیه 12 ولت) 5 متر - 700 روبل؛
  • - آردوینو نانو - 200 روبل؛
  • - سنسور نور - 28 روبل؛
  • - ماژول بلادرنگ RTC DS1307 AT24C32 - 37 روبل؛
  • - مبدل برق LM2596 - 41 روبل؛
  • - منبع تغذیه 12 ولت 1 آمپر؛
  • - سنسور دما DALLAS DS18B20 - 48 روبل؛
  • - یک تکه تخته نان، دو دکمه از این قبیل، سیم.
  • - مقوای سخت
  • - کاغذ واتمن (2 عدد).
  • - نوار دو طرفه (3M).
  • - نوار معمولی
  • - ورق های پلی اتیلن فوم شده (برگرفته از بسته بندی محافظ تجهیزات).

1. فونت را در MS Office نصب کنید و کاراکتر 8 را در کل صفحه A4 چاپ کنید. من این کار را در ویزیو انجام دادم. نوارهای داخلی مرزهایی برای علامت گذاری زیر قطعات نوار دیود هستند. مرزهای بیرونی خطوط کلی اعداد هستند.

2. ترسیم مرزهای تکه های نوار دیود روی مقوا

3. با استفاده از شابلون زیر روی پلی اتیلن فوم دار به ضخامت 15 میلی متر علامت گذاری می کنیم و سپس طبق علامت ها برش می زنیم.

برای برش از یک دستگاه خانگی ساخته شده از سه تکه چوب، یک ورق نئوپان و سیم نیکروم که به صورت عمودی کشیده شده بود استفاده کردم. توسط منبع تغذیه تنظیم شده تغذیه می شود.

4. قطعات نوار دیود را در امتداد مرزهای مشخص شده روی مقوا بچسبانید و با لحیم کاری در امتداد یک زنجیر به هم وصل کنید.

من مدار اصلی را در یک جعبه جداگانه قرار دادم، زیرا چنین موردی ضعیف است.

در نتیجه، کابلی برای ساعت مناسب است که در آن:

  • +12 ولت - برای تغذیه نوار دیود؛
  • + 5 ولت - برای تغذیه ماژول روشنایی؛
  • 0 - سیم مشترک (منهای)؛
  • خروجی داده از آردوینو به نوار دیود؛
  • خروجی سیگنال از سنسور نور به آردوینو؛

نمودار اتصال آردوینو

مبدل برق، نانو آردوینو و ماژول ساعت واقعی.

تابلو تعویض با دکمه های اصلاح.

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

بنابراین، تیم سه نفره ما با یک وظیفه روبرو شد: مونتاژ یک پروژه سخت افزاری کوچک، ترجیحاً بر روی پلت فرم آردوینو، در مدت زمان بسیار کوتاه. شایان ذکر است که تا آن زمان ما در بیشتر موارد به صورت تئوری با مدار آشنا بودیم. و این بدان معنی است که - هیچ تجربه ای با آهن لحیم کاری (عملا) و نه، به ویژه، تجربه با آردوینو.

به طور غیرمنتظره ای با صفحه ای مواجه شدیم که به پروژه ساعت Shadowplay اختصاص داشت. این ساعت دیواری است که توسط تیمی از طراحان وینی طراحی شده است که با لمس مرکز آن با انگشت می توان زمان آن را مشاهده کرد. LED ها به گونه ای روشن می شوند که سایه انگشت در مرکز زمان را نشان می دهد. تصمیم گرفته شد که همان ها (یا موارد بسیار مشابه)، اما در خانه ایجاد شوند. همانطور که می بینید مقاله فوق حاوی توضیحات مفصلی در مورد پروژه نیست. از همه اینها نتیجه گرفت که ما خودمان باید بفهمیم که این دستگاه چگونه کار می کند و آن را زنده می کنیم. که دقیقاً همان کاری است که ما انجام دادیم.

مواد

برای ایجاد یک ساعت شما نیاز دارید:
  • صفحات تخته فیبر
  • نوار LED برای 60 دیود
  • آردوینو اونو
  • ماژول ساعت واقعی RTC DS1307
  • دکمه
  • تخته نان
  • شیفت رجیستر 74HC595 (x2)
  • رجیستر لچ 8 بیتی 74HC573N (x8)
  • رسیور 4-16 K155ID3
  • اینورتر تخلیه باز IN74HC05AN (x10)
  • واحد قدرت

بیا شروع کنیم

بنابراین، الگوریتم عملکرد دستگاه:
  1. هنگامی که برق اعمال می شود، LED ها در ترکیب مشخص شده روشن می شوند. در Shadowplay اصلی، همه LED ها روشن می شدند، اما ما فکر می کردیم که راه اندازی ترکیبی به عنوان محافظ صفحه نمایش جالب تر باشد.
  2. وقتی دکمه ای را فشار می دهید (بله، ما نیز از نسخه اصلی فاصله گرفتیم و یک دکمه کوچک در مرکز قرار دادیم)، زمان از ماژول RTC خوانده می شود.
  3. زمان خواندن به کد باینری (ماسک) تبدیل شده و وارد ثبات می شود.
  4. بسته به ماسک، دیود مورد نیاز روشن می شود.

سخت افزار

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

اولین گزینه ای که به ذهنم رسید مربوط به استفاده از رمزگشاها بود. مدار ساخته شده آبشاری از چهار رمزگشا 4 - 16 و یک رمزگشا 2 - 4 بود که هر دو با ورودی‌های فعال رمزگشایی بودند. چنین آبشاری امکان آدرس دهی به 64 خروجی را فراهم می کند که برای اتصال 60 LED کافی بود.

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

این اشکال ما را مجبور کرد که ایده آبشار رمزگشاها را کنار بگذاریم. علاوه بر این، اکنون نیاز دیگری برای مدار آینده داریم - پشتیبانی از عملکرد همزمان تعداد مختلف LED.

برای ارضای این نیاز، فکر کردیم که می توانیم به هر LED اجازه دهیم حالت خود را ذخیره کند. رجیسترها برای این منظور مناسب هستند، جایی که هر رقم جداگانه با وضعیت یکی از LED ها مطابقت دارد. ما تصمیم گرفتیم از ثبات های 8 بیتی استفاده کنیم زیرا آنها رایج تر و کاربردی تر هستند. بر این اساس، در مدار خود به 8 رجیستر برای پشتیبانی از 60 LED نیاز خواهیم داشت.

در ادامه به نحوه کنترل وضعیت LED ها از آردوینو از طریق رجیسترها فکر کردیم. هر ثبات باید تمام 8 بیت را دریافت کند تا به درستی کار کند. البته آردوینو یونو خروجی های کافی برای انتقال چند بیت را به طور همزمان فراهم می کند، اما این رویکرد منطقی نخواهد بود. علاوه بر این، تنها 8 رجیستر در مدار وجود دارد، که به این معنی است که آنها باید به نحوی آدرس دهی شوند. برای این منظور یک رمزگشا و دو رجیستر شیفت 8 بیتی متصل به مدار به مدار اضافه کردیم. ثبت یک شیفت یک ماسک حالت 8 بیتی را ذخیره می کند که در یکی از 8 رجیستر معمولی بارگذاری می شود که تعداد آنها در رجیستر شیفت دوم ذخیره می شود. بر این اساس، یک رمزگشا به رجیستر شیفت دوم متصل می شود. برای این منظور، رمزگشای 3 در 8 کاملاً کافی است.

برای حذف وارونگی از تعداد خروجی های مورد نیاز، از دو ریز مدار اینورتر KR1533LN1 استفاده کردیم. این البته تا حدودی این طرح را پیچیده کرد.

چالش دیگر ولتاژ عملکرد LED ها بود که 12 ولت در مقایسه با 5 ولت برای چیپ های منطقی است. راه حل پیشنهادی استفاده از اینورتر تخلیه باز بود. چنین ریز مداری به عنوان کلیدی عمل می کند که (در منطقی 1) را می بندد یا (در منطق 0) یکی از تماس های LED را به زمین باز می کند و در نتیجه LED را روشن یا خاموش می کند. مدار کار را از 12 ولت، مطابق با ولتاژ کاری LED ها فرض می کند، بنابراین، برای به دست آوردن 5 ولت برای تراشه های منطقی، یک تثبیت کننده KR142EN5A با دو خازن به مدار اضافه شد.

برخی از ورودی‌های ریزمدارهای خاص دلالت بر یک مقدار ورودی ثابت دارند، بنابراین به زمین یا منبع تغذیه متصل شدند. در این مورد، اینها ورودی های زیر هستند:

  • ورودی MR تنظیم مجدد معکوس در هر دو رجیستر شیفت از طریق رجیستر بار به خروجی 5 ولت تثبیت کننده متصل می شود.
  • ورودی فعال کردن معکوس خروجی OE در هر دو رجیستر شیفت مستقیماً به زمین متصل می شود.
  • ورودی فعال کردن معکوس رسیور E0 به زمین متصل است

مدار توسط چهار ورودی (E1، SH، ST، DS) کنترل می شود. هدف و سطوح سیگنال هر یک از آنها در زیر با جزئیات بیشتری مورد بحث قرار خواهد گرفت:

ورودی E1 برای روشن کردن رمزگشا در نظر گرفته شده است. در مورد ما، ابتدا رمزگشا دارای دو ورودی کنترلی E1، E0 است و هر دو معکوس هستند. یک خروجی کافی خواهد بود، بنابراین خروجی دوم (E0) می تواند به زمین متصل شود. حالت "پیش فرض" رمزگشا تا زمانی که یک سطح سیگنال بالا به E1 اعمال شود کار می کند. برای انجام برعکس، این ورودی را به یک اینورتر وصل کردیم. بدون این، رمزگشا ممکن است سیگنال های کنترلی نادرستی را به رجیسترها صادر کند، به عنوان مثال، هنگام به روز رسانی داده ها در یک ثبت تغییر. همانطور که قبلاً ذکر شد ، در مدار می توانید از یک رمزگشا 3 در 8 استفاده کنید که ممکن است یک ورودی کنترل غیر معکوس داشته باشد که به شما امکان می دهد بدون سیم های غیر ضروری و آهن لحیم کاری به راحتی تمام مشکلات ذکر شده در بالا را حل کنید.

هنگامی که یک سطح سیگنال به E1 اعمال می شود، رمزگشا آدرس رجیستر واقع در رجیستر شیفت مربوطه را رمزگشایی می کند و سیگنال را به خروجی مورد نظر ارسال می کند. پس از این، رمزگشا با اعمال سطح سیگنال پایین به E1 دوباره خاموش می شود. این سوئیچینگ رمزگشا سیگنالی را در خروجی مورد نظر تولید می کند که بالا و پایین رفتن آن به عنوان یک پالس ساعت برای رجیستر عمل می کند تا داده های ذخیره شده در گذرگاه را ببندد.

سه ورودی بعدی برای کنترل شیفت رجیسترها در نظر گرفته شده است. ارزش شروع را با ساده ترین چیز دارد - ورودی داده DS. این ورودی همانطور که از نامش پیداست برای انتقال داده در نظر گرفته شده است. از آنجایی که رجیسترهای شیفت در مدار به صورت آبشاری متصل هستند، DS پین مربوط به یکی از آنها را نشان می دهد. ورودی رجیستر شیفت دوم به خروجی آخرین رقم رجیستر اول متصل می شود. نتیجه یک شیفت رجیستر 16 بیتی است که تنها 12 بیت از آن استفاده می شود.

ورودی SH یک ورودی ساعت است. یک موج مربعی به این ورودی عرضه می شود که وظیفه بارگذاری و جابجایی داده ها در هر یک از ثبات ها را بر عهده دارد؛ بر این اساس، این کنتاکت مدار به پایه های SHCP هر دو رجیستر متصل می شود.

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

باقی مانده است که سیم کشی دو پایه شیفت رجیستر MR و OE را توضیح دهیم. اولین ورودی (MR) مسئول تنظیم مجدد داده های داخل ثبات است. در این مدار این ویژگی مورد نیاز نیست، بنابراین سطح سیگنال بالایی از طریق بار به این پین می رسد.

ورودی رجیستر دوم (OE) مسئول جدا کردن ردیف دوم فلیپ فلاپ های داخل رجیستر شیفت از گذرگاه، یعنی ورودی فعال است. این عملکرد نیز مورد نیاز نیست، بنابراین خروجی به زمین متصل می شود.

تماس دیگری که در بالا توضیح داده نشده است برای حذف سطح سیگنال از دکمه در مرکز ساعت طراحی شده است؛ مدار دکمه معمولی است و نشان دهنده یک بار و یک سوئیچ است که بسته به موقعیتی که یک سطح سیگنال کم یا زیاد به آن ارائه می شود. آردوینو بسته به وضعیت دکمه، ساعت در حالت محافظ صفحه یا در حالت نمایش زمان کار می کند.
اتصال به آردوینو هیچ ویژگی خاصی ندارد، به جز اینکه پایه SH در حالت ایده آل باید به پین ​​دیجیتال SCK متصل شود. پایه‌های باقی‌مانده مدار را می‌توان به هر یک از ورودی‌های دیجیتال هدف عمومی موجود متصل کرد. در مورد ما، اتصال به این صورت است:

  • پین 13 آردوینو (SCK) - خروجی مدار SH
  • پایه آردوینو 11 – پایه مدار ST پایه آردوینو 8 – پایه مدار DS پایه آردوینو 5 – پایه مدار E1 پایه آردوینو 3 – پایه دکمه آردوینو GND – زمین مدار (همچنین به زمین منبع تغذیه متصل است)
    پس از اتمام طراحی مدار، کار بر روی پایه ساعت آغاز شد.

    صفحات خالی از تخته فیبر ساخته شده است: یک دایره با قطر 36 سانتی متر - پشت ساعت. و یک حلقه به اندازه 36 سانتی متر (قطر خارجی) \ 26 سانتی متر (قطر داخلی) - قسمت جلو. در نسخه اصلی Shadowplay قطر دایره ای 72 سانتی متر دارد اما 36 برای ما کافی بود.یک نوار LED که قبلا به 60 قسمت (دیود + مقاومت) بریده شده بود به دایره چسبانده شده است. سوراخ هایی در امتداد مرز دایره ایجاد شد. از طریق آنها سیم های متصل به ال ای دی ها به تخته نان که در پشت دایره قرار دارد وصل خواهند شد.

    در واقع، LED ها باعث سردردهای زیادی شده اند. با چسباندن آنها به سطح دایره، کمی اشتباه محاسبه کردیم. در نتیجه، مشخص شد که سایه ای که LED ها ایجاد کرده اند به اندازه کافی روشن نیست. بنابراین ، مجبور شدیم زمان زیادی را صرف "بالا بردن" آنها 50 - 60 درجه کنیم و زیر هر یک از آنها لنت های مقوایی مثلثی قرار دهیم. بله، 60 مثلث مقوایی کوچک. بنابراین، یک نکته: تجربه تلخ ما را تکرار نکنید - از قبل پدها را ذخیره کنید.

    وقت ما تمام شده بود و وقت نداشتیم PCB را اچ کنیم. بنابراین، تصمیمی با اراده قوی گرفته شد - مونتاژ پروژه بر روی تخته نان. بعداً متوجه شدیم که مونتاژ چنین مداری روی تخته نان بسیار دشوار است. خب تجربه منفی هم تجربه است.

    برد برد و نمای کلی عقب دستگاه.



    بله، بله، ما شرمنده هستیم.

    طرح اولیه ساخت یک کپی دقیق از Shadowplay بود. با این حال، نحوه تشخیص انگشت کاربر در مرکز دستگاه در مقاله توضیح داده نشده است. پس از کمی تفکر، به این نتیجه رسیدیم که ممکن است از یک مقاومت نوری برای این اهداف استفاده شود. با این حال، این ایده به زودی کنار گذاشته شد، زیرا مقاومت نور ممکن است عملیات تصادفی داشته باشد. دستگاه ممکن است در شرایط با درجات مختلف روشنایی قرار داشته باشد، به این معنی که همیشه نمی تواند انگشت را با احتمال 100٪ تشخیص دهد. اولویت به دکمه داده شد که آن را در مرکز ساختار قرار دادیم. علاوه بر قابلیت اطمینان، مزیت دیگری نیز دارد. سایه آن با وجود اندازه کوچکش برای نقش عقربه ساعت ایده آل است. بنابراین، در صورت تمایل، می‌توانید دستگاه را طوری برنامه‌ریزی کنید که دائماً در حالت ساعت و بدون قرار دادن انگشت روی آن کار کند.

    پس از لحیم شدن کل مدار (شب های طولانی بی خوابی کار پر زحمت با آهن لحیم کاری و موچین)، سرنخ های اینورتر به LED ها وصل شدند، لحظه رسمی فرا رسید - اولین تلاش برای روشن کردن دستگاه. و ببینید، دیودها واقعا سوختند! اما نه همه. در ابتدا این نظر مطرح شد که چیزی به اشتباه لحیم شده است. با این حال، همانطور که بعدا مشخص شد، دلیل آن جای دیگری بود. از آنجایی که در اولین شروع، ما همه ورودی های کنترل تراشه های منطقی را به هم وصل نکردیم، بلکه فقط ضروری ترین آنها را به هم وصل کردیم، ابهامی در سطوح ولتاژ در ورودی های غیر متصل باقی مانده ایجاد شد. علاوه بر این، مدار روی یک تخته نان مونتاژ شده بود، با انبوهی از سیم‌ها، و حکاکی نشده بود. سیم‌ها به طور قابل توجهی در برابر تشعشعات الکترومغناطیسی حساس بودند. بنابراین، در کوچکترین افزایش ولتاژ، عنصر منطقی می‌توانست به دلیل تداخل در ورودی‌های غیر متصل کار کند. . در نتیجه، هر جسمی که در مجاورت برد قرار گرفته باشد باعث EMR و بر این اساس، رفتار غیرقابل پیش بینی منطق و به همراه آن LED ها می شود.

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

    بخش نرم افزاری

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

    پس از آن، تنها نوشتن کدی بود که زمان را از RTC می خواند، آن را به ماسک تبدیل می کرد و به برد ارسال می کرد.

    کد

    #عبارتند از #عبارتند از char REG ; tmElements_t te; int c,reset=1; void setup() (pinMode(13, OUTPUT)؛ pinMode(11, OUTPUT)؛ pinMode(8, OUTPUT)؛ pinMode(5, OUTPUT)؛ pinMode(3, INPUT)؛ Serial.begin(57600)؛ //data بلوک به شما امکان می دهد زمان را در RTC یک بار استفاده شده تنظیم کنید //te.Hour = 18؛ //te.Minute = 50؛ //te.Second = 0؛ //te.Day = 20؛ //day //te .Month = 4 ; // month //te.Year = CalendarYrToTm(2016); //RTC.write(te); ) void loop() ( if(digitalRead(3)) // اگر دکمه فشار داده شود کار خواهد کرد (RTC.read(te)؛ SetShadowTime(te.Hour,te.Minute,te.Second,2)؛ // محاسبه و تنظیم زمان در تاخیر ساعت (900)؛ reset=1; ) در غیر این صورت // اگر دکمه فشرده نشده است، محافظ صفحه را تنظیم کنید (wait1 (؛ reset=1; ) //reset LEDs for(int j = 0; j<8 ; j++) SetUpLightByMask(j,0); } //=======================================================================Вспомогательные функции void SetUpLightByMask(int RegNum, char LightMask) // функция подсветки светодиодов согласно полученной маске в заданном регистре { digitalWrite(5, LOW); digitalWrite(11, LOW); shiftOut(8, 13, MSBFIRST, LightMask); shiftOut(8, 13, LSBFIRST, RegNum); digitalWrite(11, HIGH); digitalWrite(5, HIGH); } void digitalClockDisplay() { //Функция вывода времени из RTC в консоль, полезна при настройке RTC RTC.read(te); Serial.print(te.Hour); Serial.print(" : "); Serial.print(te.Minute); Serial.print(" :"); Serial.print(te.Second); Serial.print(" "); Serial.print(te.Day); Serial.print(" "); Serial.print(te.Month); Serial.print(" "); Serial.print(tmYearToCalendar(te.Year)); Serial.println(); } //Функция рассчёта теневых стрелок на часах, в качестве параметров принимает часы, минуты, секунды и в качестве последнего параметра комбинацию стрелок: //0 - только часы,1 - часы и минуты, 2 - часы минуты и секунды void SetShadowTime(int Hours, int Minutes, int Seconds, int param){ int h,hshift,m,s; for(int j = 0; j<8 ; j++) REG[j] = 0; if(Hours >= 12) ساعت - = 12; h = ساعت + 6; if(h >= 12) h -= 12; hshift = (int) دقیقه / 12; REG[(int)(((h*5)+hshift)/8)] = REG[(int)(((h*5)+hshift)/8)] | 1<<(((h*5)+hshift)%8); if(param == 1) {m = Minutes + 30; if(m ><<(m%8); } if(param == 2) {m = Minutes + 30; if(m >= 60) متر - = 60; REG[(int)(m/8)] = REG[(int)(m/8)] | 1<<(m%8); s = Seconds + 30; if(s >= 60) s - = 60; REG[(int)(s/8)] = REG[(int)(s/8)] | 1<<(s%8); } for(int j = 0; j<8 ; j++) SetUpLightByMask(j,REG[j]); } void wait1() //один из вариантов функций заставки {for(int a = 0; a < 8; a++) {c=0; for(int b = 0; b < 8; b++) {c = c << 1; c = c | 1; SetUpLightByMask(a, c); delay(10); } } for(int a = 0; a < 8; a++) {c=255; for(int b = 0; b < 8; b++) {c = c << 1; SetUpLightByMask(a, c); delay(10); } } }

    مونتاژ

    دستگاه را می توان تقریباً آماده در نظر گرفت. تنها چیزی که باقی می ماند این است که همه اجزا را با هم جمع کرده و راه اندازی کنیم. تخته نان و سایر قطعات (Arduino، RTC) به پشت ساعت متصل شدند. یک حلقه در بالای دایره با LED ها وصل شده است که جزئیات اجرا را پنهان می کند. برای منحرف کردن توجه کاربر از نواقص طراحی، حلقه با الگوی "a la a microcircuit" نقاشی شد. و در نهایت - وصل شد. نتیجه زیر است:

    بابت کیفیت عکس پوزش می طلبیم.

    در اینجا یک مثال کوچک از ترکیب هایی که می توان به عنوان "صفحه نمایش چلپ چلوپ" راه اندازی کرد آورده شده است:

    و در اینجا، در واقع، ساعت در شرایط کار است:

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

    و بله، پیش بینی سوالی که احتمالاً می خواهید بپرسید. چگونه عقربه های ساعت، دقیقه و ثانیه را تشخیص دهیم؟ در مورد این موضوع بحث و جدل های زیادی وجود داشت. راه حل های مختلفی برای این مشکل ارائه شده است: از نور چند رنگ عقربه ها تا روشن کردن متناوب عقربه ها (اول عقربه ساعت، بعد از مدت کوتاهی عقربه دقیقه و غیره). با این حال، پس از نگاهی به نسخه اصلی، متوجه شدیم که طراحان وینی اصولاً به این موضوع توجهی ندارند. تصمیم بر این شد که از این عیب کوچک چشم بپوشیم. احتمالا در آینده حذف خواهد شد.

  • تماشا کردن
  • آردوینو
افزودن برچسب

ساعتی با نور پس‌زمینه LED و عقربه دقیقه‌ای ضربان دار روی میکروکنترلر آردوینو
این ساعت منحصر به فرد با نور پس زمینه LED و عقربه دقیقه شمار تپنده با استفاده از تراشه کنترلر PWM TLC5940 ساخته شده است. وظیفه اصلی آن گسترش تعداد مخاطبین مدولاسیون PWM است. یکی دیگر از ویژگی های این ساعت تبدیل ولت متر آنالوگ به دستگاه اندازه گیری دقیقه است. برای انجام این کار، یک ترازو جدید بر روی یک چاپگر استاندارد چاپ شد و در بالای دستگاه قدیمی چسبانده شد. به این ترتیب، دقیقه 5 شمارش نمی شود، فقط در دقیقه 5 شمارنده زمان فلشی را نشان می دهد که به انتهای مقیاس (خروج از مقیاس) اشاره می کند. کنترل اصلی بر روی میکروکنترلر Arduino Uno پیاده سازی شده است.

برای اطمینان از اینکه نور پس‌زمینه ساعت در یک اتاق تاریک خیلی روشن نمی‌درخشد، مداری برای تنظیم خودکار روشنایی بسته به روشنایی اجرا شد (از یک مقاومت نوری استفاده شد).

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



در اینجا چیزی است که شما نیاز دارید:

  • ماژول ولت متر آنالوگ 5 ولت DC؛
  • میکروکنترلر آردوینو UNO یا آردوینو مناسب دیگر؛
  • برد مدار آردوینو (پرتو برد);
  • ماژول DS1307 ساعت واقعی (RTC)؛
  • ماژول با کنترلر PWM TLC5940;
  • نور پس زمینه LED گلبرگ - 12 عدد.
  • قطعات برای مونتاژ مدار کنترل روشنایی خودکار (LDR).

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

مرحله 2: شماره گیری کنید




صفحه شامل سه قسمت (لایه) برش خورده بر روی دستگاه برش لیزری از ورق MDF 3 میلی متری است که با پیچ و مهره به هم بسته می شوند. یک صفحه بدون شکاف (پایین سمت راست در تصویر) در زیر صفحه دیگری قرار داده شده است تا LED ها (پایین سمت چپ) قرار گیرند. سپس LED های جداگانه در شکاف های مناسب قرار می گیرند و پانل جلویی در بالا قرار می گیرد (بالا در شکل). چهار سوراخ در امتداد لبه صفحه حفر شده است که از طریق آنها هر سه قسمت به هم متصل می شوند.

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

نقشه فنی قطعات صفحه در آدرس زیر موجود است:

مرحله 3: مدار را طراحی کنید



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

مرحله 4: اتصال برد مدار آردوینو





  1. اولین گام این است که تمام کنتاکت های سوزن روی بردهای مدار و بردهای بخش را لحیم کنید.
  2. علاوه بر این، با توجه به این واقعیت که برق 5 ولت و GND توسط تعداد زیادی برد و دستگاه های جانبی استفاده می شود، برای اطمینان، دو سیم برای 5 ولت و GND روی برد مدار لحیم شده است.
  3. سپس یک کنترلر PWM TLC5940 در کنار کنتاکت های استفاده شده نصب شد.
  4. سپس کنترلر TLC5940 مطابق نمودار اتصال متصل می شود.
  5. برای اینکه بتوان از باتری استفاده کرد، یک ماژول RTC روی لبه برد مدار نصب شد. اگر آن را در وسط تخته لحیم کنید، علامت پین قابل مشاهده نخواهد بود.
  6. ماژول RTC مطابق نمودار اتصال متصل شده است.
  7. یک مدار کنترل خودکار روشنایی (LDR) مونتاژ شده است، می توانید آن را در لینک مشاهده کنید
  8. سیم های ولت متر با اتصال سیم ها به پایه 6 و GND متصل می شوند.
  9. در پایان، 13 سیم برای LED ها لحیم شدند (در عمل، معلوم شد که بهتر است قبل از اقدام به مرحله 3 این کار را انجام دهید).

مرحله 5: کد

کد زیر از قطعات مختلفی از اجزای ساعت موجود در اینترنت گردآوری شده است. به طور کامل اشکال زدایی شده است و اکنون کاملاً کاربردی است و نظرات بسیار دقیقی اضافه شده است. اما قبل از بارگذاری در میکروکنترلر به نکات زیر توجه کنید:

  • قبل از فلش کردن سفت‌افزار آردوینو، باید خطی را که زمان را تنظیم می‌کند، از حالت کامنت بردارید:
    rtc.adjust(DateTime(__DATE__, __TIME__))
    پس از فلش کردن کنترلر با این خط (زمان تنظیم شده است) باید دوباره آن را کامنت کنید و دوباره کنترلر را فلش کنید. این به ماژول RTC اجازه می دهد تا در صورت قطع برق اصلی، از باتری برای یادآوری زمان استفاده کند.
  • هر بار که از "Tlc.set()" استفاده می کنید باید از "Tlc.update" استفاده کنید.

مرحله 6: حلقه بیرونی

حلقه بیرونی ساعت با استفاده از چاپگر Replicator Z18 به صورت سه بعدی چاپ شد. با استفاده از پیچ های روی صفحه ساعت به ساعت متصل می شود. در زیر فایلی با مدل سه بعدی حلقه برای چاپ روی پرینتر سه بعدی آورده شده است.

مرحله 7: مونتاژ ساعت


میکروکنترلر آردوینو با تمام وسایل الکترونیکی دیگر با استفاده از پیچ و مهره به عنوان فاصله‌دهنده در پشت ساعت ثابت می‌شد. سپس تمام ال ای دی ها، ولت متر آنالوگ و LDR را به سیم هایی که قبلاً به برد مدار لحیم شده بودند وصل کردم. همه LED ها توسط یک پایه به هم متصل می شوند و به پین ​​VCC روی کنترلر TLC5940 متصل می شوند (یک تکه سیم به سادگی به صورت دایره ای لحیم می شود).

تا کنون، همه اینها به خوبی از اتصال کوتاه عایق نشده اند، اما کار روی این موضوع در نسخه های بعدی ادامه خواهد داشت.

بهترین مقالات در این زمینه