فهرست مطالب:

Task Manager - یک سیستم مدیریت مشاغل خانگی: 5 مرحله (همراه با تصاویر)
Task Manager - یک سیستم مدیریت مشاغل خانگی: 5 مرحله (همراه با تصاویر)

تصویری: Task Manager - یک سیستم مدیریت مشاغل خانگی: 5 مرحله (همراه با تصاویر)

تصویری: Task Manager - یک سیستم مدیریت مشاغل خانگی: 5 مرحله (همراه با تصاویر)
تصویری: Mastering Task Scheduler: Analysis & Troubleshooting Guide for IT Pros! 2024, جولای
Anonim
Task Manager - یک سیستم مدیریت مشاغل خانگی
Task Manager - یک سیستم مدیریت مشاغل خانگی
Task Manager - یک سیستم مدیریت مشاغل خانگی
Task Manager - یک سیستم مدیریت مشاغل خانگی

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

تا به حال ، ما یک ورقه ورقه ورقه از کاغذ A4 را در کنار یخچال چسبانده ایم. مجموعه ای از وظایف بر روی آن چاپ شده است ، همراه با مقادیر پول جیبی که می توان برای انجام آن کار به دست آورد. ایده این است که هر بار که یکی از بچه های ما به کارهای خانه کمک می کند ، یک تیک در آن جعبه می گیرند و در پایان هر هفته ، پول به دست آمده را جمع می کنیم ، تخته را پاک می کنیم و دوباره شروع می کنیم. با این حال ، لیست وظایف قدیمی است و به سختی قابل تغییر است ، گاهی اوقات به یاد نمی آوریم که تخته را هر هفته تمیز کنیم و برخی از کارها باید با فرکانس های مختلف انجام شوند-برخی به طور ایده آل روزانه انجام می شوند ، در حالی که دیگران ممکن است فقط یک بار در ماه باشند. بنابراین ، من برای ایجاد یک دستگاه مبتنی بر آردوینو برای حل این مسائل اقدام کردم - قصد من ایجاد چیزی بود که امکان اضافه کردن/حذف/به روزرسانی آسان وظایف را فراهم کند ، مکانیزمی ساده برای ثبت زمان انجام کار و تخصیص اعتبار به فرد مناسب ، و راهی برای پیگیری برنامه ها و فرکانس های مختلف که وظایف مختلف باید انجام شوند ، و برجسته کردن کارهای معوق. و این دستورالعمل نحوه نمایش دستگاه "Task Manager" را نشان می دهد.

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

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

این پروژه از چندین قطعه سخت افزاری خوب استفاده شده و مستند استفاده می کند:

  • Arduino UNO/Nano - این "مغز" سیستم است. حافظه داخلی EEPROM برای صرفه جویی در وضعیت کارها حتی در صورت خاموش بودن سیستم استفاده می شود. برای سهولت سیم کشی ، من نانو را بر روی یک شیار پیچ نصب کرده ام ، اما اگر ترجیح می دهید می توانید اتصالات محکم را به پین های GPIO لحیم کرده یا استفاده کنید.
  • ماژول ساعت در زمان واقعی (RTC) - برای ثبت زمان انجام وظایف مورد استفاده قرار می گیرد و با مقایسه آخرین زمان با زمان فعلی ، تعیین می شود که کدام کارها معوق شده است. توجه داشته باشید که واحدی که دریافت کردم برای استفاده با باتری LiPo قابل شارژ (LIR2032) طراحی شده است. با این حال ، من از یک باتری CR2032 غیر قابل شارژ استفاده می کنم ، بنابراین برای غیرفعال کردن مدار شارژ باید چند تغییر ایجاد کنم (شما نمی خواهید باتری غیر قابل شارژ را دوباره شارژ کنید ، در غیر این صورت ممکن است با انفجار روبرو شوید …) به طور خاص ، من مقاومت های R4 ، R5 و R6 را حذف کردم و دیود با علامت D1 مشخص شد. سپس یک پل لحیم کاری ایجاد کردم که در امتداد محل R6 قرار داشت. این تغییرات در عکس زیر نشان داده شده است.
  • ISO14443 RFID خوان + یک برچسب برای هر کاربر- به عنوان راهی برای "گیمینگ" سیستم ، هر یک از فرزندان من دارای برچسب RFID منحصر به فرد خود هستند. انتخاب یک کار و سپس کشیدن برچسب روی خواننده مکانیزمی است که برای علامت گذاری یک کار به عنوان کامل به کار می رود
  • صفحه نمایش LCD 16x2 - برای ارائه رابط کاربری به سیستم استفاده می شود. با استفاده از یک برد که دارای یک کوله پشتی PCF8574A است ، می توان این برد را از طریق رابط I2C به آردوینو متصل کرد ، که سیم کشی را به میزان قابل توجهی ساده می کند.
  • رمزگذار چرخشی - کلید اصلی کنترل است که کاربران برای انتخاب کارهای مختلف موجود به آن می چرخند
  • اتصالات Wago - این اتصال دهنده های سریع بسته راهی مناسب برای اتصال اجزاء به یکدیگر یا ایجاد گذرگاه های ساده برای چندین ماژول است که هر کدام به منبع مشترک یا منبع تغذیه 5 ولت نیاز دارند.

مرحله 2: سیم کشی

سیم کشی
سیم کشی

صفحه نمایش 16x2 LCD و DS1307 RTC هر دو از رابط I2C استفاده می کنند ، که راحت است زیرا سیم کشی را بسیار ساده تر می کند و فقط نیاز به یک جفت سیم برای پین های A4 (SDA) و A5 (SCL) آردوینو دارد

خواننده RFID MFRC-522 از رابط SPI استفاده می کند که از پین های سخت افزاری ثابت 11 (MOSI) ، 12 (MISO) و 13 (SCK) استفاده می کند. همچنین به خط انتخاب و تنظیم مجدد برده نیاز دارد ، که به ترتیب به پین 10 و 9 اختصاص داده ام

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

برای راحتی ، از بلوک های اتصال سری WAGO 222 استفاده می کنم. این اتصال دهنده های محکم و بسته هستند که راهی محکم و آسان برای اتصال هر نقطه بین 2 تا 8 سیم با هم ارائه می دهند و برای پروژه های آردوینو که نیاز به چندین ماژول برای به اشتراک گذاشتن یک خط زمین یا 5 ولت دارند ، یا جایی که چندین دستگاه روی آن دارید ، بسیار مناسب است. می گویند همان گذرگاه I2C یا SPI

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

مرحله 3: ساخت و ساز

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

من فایل های STL را پس از چاپ ذخیره نکردم ، اما تعداد زیادی پرونده مشابه (و احتمالاً بهتر!) در thingiverse.com وجود دارد. از طرف دیگر ، می توانید یک جعبه چوبی زیبا بسازید ، یا فقط از یک جعبه مقوایی قدیمی یا ظروف چوبی برای قرار دادن وسایل برقی استفاده کنید.

مرحله 4: کد

کد
کد

کد کاملاً کامنت شده به صورت بارگیری در زیر پیوست شده است. در اینجا به چند نکته مهمتر توجه می شود:

من یک ساختار سفارشی ، "وظیفه" ایجاد کرده ام ، که یک واحد داده است که همه ویژگی های یک کار را در یک موجودیت واحد در بر می گیرد. وظایف شامل یک نام است ، نحوه نمایش آنها در صفحه LCD (و بنابراین محدود به 16 شخصیت) ، فرکانسی که باید انجام شود ، و آخرین و کی و آخرین بار توسط چه کسی انجام می شود

ساختار وظیفه {

char taskName [16]؛ // نام کوتاه ، "دوستانه" برای این کار همانطور که در صفحه نمایش تکرار می شود تکرار کنیدEachXDays. // منظم بودن ، در روزها ، که با آن این کار تکرار می شود. 1 = روزانه ، 7 = هفتگی و غیره unsigned long lastCompletedTime ؛ // برچسب زمانی که این وظیفه آخرین بار در آن انجام شده int lastCompletedBy ؛ // شناسه شخصی که آخرین بار این کار را انجام داده است} ؛

ساختار داده اصلی "taskList" نامیده می شود که به سادگی مجموعه ای از وظایف جداگانه است. می توانید وظایفی را که می خواهید در اینجا تعریف کنید ، که مقدار آنها برای زمان آخرین انجام 0 و مقدار 1 برای شناسه کاربری که آخرین بار آنها را انجام داده است مقداردهی می شود

task taskList [numTasks] = {

در قسمت ثابت ها در بالای کد ، یک مقدار بایت واحد به نام "eepromSignature" وجود دارد. این مقدار برای تعیین اعتبار داده های ذخیره شده در EEPROM استفاده می شود. اگر ساختار مورد taskList را تغییر داده اید ، با افزودن یا حذف وظایف یا افزودن فیلدهای اضافی ، باید این مقدار را افزایش دهید. می توانید آن را مانند یک سیستم شماره گذاری نسخه اصلی برای داده ها در نظر بگیرید

const byte eepromSignature = 1؛

در هنگام راه اندازی ، برنامه فقط در صورتی بارگیری داده های ذخیره شده در EEPROM را امتحان می کند که با امضای داده های تعریف شده در کد مطابقت داشته باشد.

void restoreFromEEPROM () {

int checkByte = EEPROM.read (0)؛ if (checkByte == eepromSignature) {EEPROM.get (1 ، taskList) ؛ }}

صفحه LCD و ماژول RTC از رابط I2C برای ارتباط با آردوینو استفاده می کنند. این امر مستلزم آن است که هر دستگاه دارای آدرس منحصر به فرد I2C باشد. من چند صفحه نمایش 16x2 مختلف را امتحان کرده ام و به نظر می رسد برخی از آدرس 0x27 استفاده می کنند ، در حالی که سایر تابلوهای به ظاهر یکسان از 0x3f استفاده می کنند. اگر متوجه شدید که صفحه نمایش شما فقط یک سری مربع و بدون متن را نشان می دهد ، سعی کنید مقدار آدرس تعریف شده در کد را در اینجا تغییر دهید:

LiquidCrystal_PCF8574 ال سی دی (0x27) ؛

هنگامی که یک برچسب RFID شناسایی می شود ، کد شناسه 4 بایت را می خواند و از آن برای جستجوی کاربر مربوطه از جدول کاربران شناخته شده استفاده می کند. اگر برچسب شناخته نشود ، شناسه 4 بایت به کنسول سریال مانیتور ارسال می شود:

int GetUserFromRFIDTag (بایت RFID ) {

برای (int i = 0؛ i <numusers؛ i ++) = "" {<numUsers؛ i ++) {if (memcmp (userList .rfidUID، RFID، sizeof userList .rfidUID) == 0) {return userList .userID؛ }} Serial.print (F ("کارت RFID ناشناس شناسایی شد:")) ؛ برای (بایت i = 0؛ i <4؛ i ++) {Serial.print (RFID <0x10؟ "0": "")؛ Serial.print (RFID ، HEX) ؛ } return -1؛ }

برای اختصاص دادن برچسب به کاربر ، باید شناسه نمایش داده شده را کپی کرده و مقدار 4 بایت را در آرایه کاربران در بالای کد ، در کنار کاربر مربوطه وارد کنید:

const userList [numUsers] = {{1، "Ginny"، {0x00، 0x00، 0x00، 0x00}}، {2، "Harry"، {0x12، 0x34، 0x56، 0x78}}، {3، "Ron" ، {0xE8 ، 0x06 ، 0xC2 ، 0x49}} ، {4 ، "هرمیون" ، {0x12 ، 0x34 ، 0x56 ، 0x78}} ، {5 ، "Alastair" ، {0x12 ، 0x34 ، 0x56 ، 0x78}} ،} ؛

مرحله 5: استفاده

استفاده
استفاده
استفاده
استفاده

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

پس از انتخاب یک وظیفه برای انجام ، کاربران می توانند FBID منحصر به فرد خود را در سراسر خواننده اسکن کنند تا کار به عنوان کامل مشخص شود. شناسه آنها و زمان فعلی ثبت و در EEPROM آردوینو ذخیره می شود.

برای اینکه ابتدا برچسب های RFID صحیح را تنظیم کنید ، باید طرح را با مانیتور سریال Arduino متصل کنید. هر برچسب را اسکن کرده و مقدار 4 بایت شش ضلعی UID را که در مانیتور سریال نمایش داده شده است ، یادداشت کنید. سپس لیست کاربری اعلام شده در بالای کد را تغییر دهید تا این شناسه برچسب را به کاربر مناسب اختصاص دهد.

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

توصیه شده: