תוכן עניינים:

מנהל המשימות - מערכת לניהול מטלות בית: 5 שלבים (עם תמונות)
מנהל המשימות - מערכת לניהול מטלות בית: 5 שלבים (עם תמונות)

וִידֵאוֹ: מנהל המשימות - מערכת לניהול מטלות בית: 5 שלבים (עם תמונות)

וִידֵאוֹ: מנהל המשימות - מערכת לניהול מטלות בית: 5 שלבים (עם תמונות)
וִידֵאוֹ: עשר הנשים הכי גבוהות בעולם┃טופטן 2024, יולי
Anonim
מנהל המשימות - מערכת לניהול מטלות בית
מנהל המשימות - מערכת לניהול מטלות בית
מנהל המשימות - מערכת לניהול מטלות בית
מנהל המשימות - מערכת לניהול מטלות בית

רציתי לנסות לטפל בבעיה אמיתית שעומדת בפנינו במשק הבית (ואני מתאר לעצמי, של קוראים רבים אחרים), והיא כיצד להקצות, להניע ולתגמל את ילדי על כך שהם עוזרים במטלות הבית.

עד כה שמרנו דף למינציה של נייר A4 דבוק לצידו של המקרר. יש לו רשת משימות מודפסות, עם סכומי דמי כיס נלווים שניתן להרוויח עבור השלמת משימה זו. הרעיון הוא שבכל פעם שאחד הילדים שלנו עוזר במטלה, הם מקבלים סימון בתיבה הזו, ובסוף כל שבוע אנחנו מוסיפים את הכסף שהרוויח, מנגבים את הלוח ומתחילים מחדש. עם זאת, רשימת המשימות מיושנת וקשה לשינוי, לפעמים איננו זוכרים לנגב את הלוח מדי שבוע, ויש לבצע כמה משימות בתדרים שונים-חלקן באופן אידיאלי ייעשו מדי יום, בעוד אחרים עשויים להיות רק פעם בחודש. אז, התחלתי ליצור מכשיר מבוסס Arduino שיטפל בבעיות אלה - הכוונה שלי הייתה ליצור משהו שאפשר להוסיף/להסיר/לעדכן משימות בקלות, מנגנון יעיל להקלטה בעת ביצוע משימה והקצאת אשראי אדם מתאים, ודרך לעקוב אחר לוחות זמנים ותדירות שבהם יש לבצע משימות שונות, ולהדגיש משימות שאיחרו. ומדריך זה יראה כיצד יצא מכשיר "מנהל המשימות" שהתקבל.

שלב 1: חומרה

חוּמרָה
חוּמרָה
חוּמרָה
חוּמרָה

הפרויקט משתמש במספר רכיבי חומרה משומשים ומתועדים היטב:

  • Arduino UNO/Nano - זהו "המוח" של המערכת. זיכרון ה- EEPROM המשולב ישמש לשמירת מצב המשימות גם כאשר המערכת כבויה. כדי להקל על החיווט, הרכבתי את הננו על מברג, אך תוכל להלחם או להשתמש בחיבורים מצומצמים לסיכות GPIO אם אתה מעדיף.
  • מודול שעון בזמן אמת (RTC) - משמש לתיעוד חותמת הזמן שבה בוצעו משימות, ועל ידי השוואת הזמן האחרון לשעה הנוכחית, לקבוע אילו משימות הגיעו לאיחור. שים לב שהיחידה שקיבלתי תוכננה לשימוש עם סוללת LiPo נטענת (LIR2032). עם זאת, אני משתמש בסוללת CR2032 שאינה נטענת, ולכן הייתי צריך לבצע מספר שינויים כדי להשבית את מעגל הטעינה (אינך רוצה לנסות להטעין סוללה שאינה נטענת, או שאתה עלול לעמוד בפני פיצוץ …). באופן ספציפי הסרתי נגדים R4, R5 ו- R6, והדיודה מסומנת D1. לאחר מכן יצרתי גשר הלחמה לקצר על פני המקום בו היה R6. שינויים אלה מוצגים בתמונה למטה.
  • קורא RFID ISO14443 + תג אחד למשתמש- כדרך "לשחק" את המערכת, לכל אחד מילדי יש תג RFID ייחודי משלו. בחירת משימה ולאחר מכן החלקת התגים שלה על פני הקורא תהיה המנגנון המשמש לסימון משימה שהושלמה
  • צג LCD בגודל 16x2 - משמש לאספקת ממשק המשתמש למערכת. באמצעות לוח בעל תרמיל PCF8574A אינטגרלי, ניתן לחבר את הלוח באמצעות ממשק I2C ל- Arduino, מה שמפשט את החיווט באופן משמעותי.
  • מקודד רוטרי - יהיה כפתור הבקרה העיקרי שאליו יפנו המשתמשים כדי לבחור משימות זמינות שונות
  • מחברי וואגו - מחברי הצמד הללו הם דרך נוחה לחבר רכיבים יחדיו או ליצור אוטובוסים פשוטים למספר מודולים שכל אחד מהם דורש אספקה משותפת או 5V.

שלב 2: חיווט

תִיוּל
תִיוּל

צג LCD בגודל 16x2 ו- DS1307 RTC שניהם משתמשים בממשק I2C, וזה נוח מכיוון שהוא הופך את החיווט לפשוט הרבה יותר, ודורש רק זוג חוטים המגיעים לסיכות A4 (SDA) ו- A5 (SCL) של הארדואינו

קורא ה- RFID MFRC-522 משתמש בממשק SPI, המשתמש בסיכות חומרה קבועות 11 (MOSI), 12 (MISO) ו- 13 (SCK). זה גם דורש קו בחירה ואיפוס של עבדים, שהקצתי לסיכות 10 ו -9 בהתאמה

המקודד הסיבובי דורש זוג סיכות. לביצועים מיטביים, עדיף אם הפינים האלה יכולים להתמודד עם הפרעות חיצוניות, אז אני משתמש בסיכות דיגיטליות 2 ו -3. אתה יכול גם ללחוץ על המקודד כמתג, וחיברתי אותו לסיכה 4. למרות שזה לא בשימוש כרגע בקוד, ייתכן שתמצא אותו שימושי להוספת תכונות נוספות

מטעמי נוחות, אני משתמש בלוקים מחברים מסדרת WAGO 222. אלה מחברים מסוג snap-close המספקים דרך חזקה וקלה לחיבור בכל מקום בין 2 ל -8 חוטים יחד, והם נוחים מאוד לפרויקטים של Arduino הדורשים מספר מודולים לשיתוף קו הארקה או 5V, או כאשר יש לך מספר מכשירים ברשת. אותו אוטובוס I2C או SPI, נניח

התרשים ממחיש כיצד הכל מחובר יחד.

שלב 3: בנייה

יצרתי מארז מודפס תלת מימד בסיסי מאוד לאחסון האלקטרוניקה. הנחתי כמה מגנטים על הגב כך שניתן יהיה לאבטח את היחידה בצד המקרר, בדיוק כפי שהייתה הרשימה המודפסת הקודמת. השארתי גם את שקע ה- USB חשוף, שכן זה ישמש אם צריך להוסיף משימות חדשות למערכת, או להיכנס ולהוריד סט נתונים שמציג משימות שהושלמו וכו '.

לא שמרתי את קבצי STL לאחר ההדפסה, אך יש הרבה מקרים דומים (וכנראה טובים יותר!) הזמינים ב- thingiverse.com. לחלופין, תוכל לבנות קופסת עץ נחמדה, או פשוט להשתמש בקופסת קרטון ישנה או בכלי טופרו כדי לאכלס את מוצרי האלקטרוניקה.

שלב 4: קוד

קוד
קוד

הקוד עם הערות מלאות מצורף להורדה למטה. להלן מספר נקודות חשובות יותר לציון:

יצרתי מבנה מותאם אישית, "משימה", שהיא יחידת נתונים המכילה את כל המאפיינים של משימה בישות אחת. המשימות מורכבות בשם, כך הן יופיעו בתצוגת ה- LCD (ומכאן שמוגבלות ל -16 תווים), התדירות שבה הן צריכות להתבצע, ומתי ועל ידי מי הושלמו לאחרונה

משימת struct {

char taskName [16]; // השם הקצר וה"ידידותי "למשימה זו כפי שיופיע בתצוגה int repeatEachXDays; // סדירות, בימים, שבהם משימה זו חוזרת על עצמה. 1 = יומי, 7 = שבועי וכו 'ללא סימן ארוך lastCompletedTime; // חותמת זמן שבה הושלמה משימה זו לאחרונה int lastCompletedBy; // תעודת הזהות של האדם שהשלים את המשימה האחרונה};

מבנה הנתונים הראשי נקרא "taskList", שהוא פשוט מערך של משימות נפרדות. תוכל להגדיר כאן את כל המשימות שאתה רוצה, שיאתחלו עם ערך 0 לזמן בו הושלמו לאחרונה, ו- -1 עבור מזהה המשתמש שביצע אותן לאחרונה

task taskList [numTasks] = {

בחלק הקבועים בחלק העליון של הקוד, קיים ערך בתים יחיד הנקרא "eepromSignature". ערך זה משמש כדי לקבוע אם הנתונים המאוחסנים ב- EEPROM חוקיים. אם תשנה את מבנה הפריט taskList, על ידי הוספה או הסרה של משימות, או הוספת שדות נוספים, נניח, עליך להגדיל ערך זה. אתה יכול לחשוב על זה כמו מערכת מספור גרסה בסיסית של הנתונים

const byte eepromSignature = 1;

בעת האתחול, התוכנית תנסה לטעון נתונים המאוחסנים ב- EEPROM רק אם היא תואמת את חתימת הנתונים המוגדרים בקוד.

שחזור חללFromEEPROM () {

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

צג ה- LCD ומודול ה- RTC משתמשים בממשק I2C כדי לתקשר עם ה- Arduino. זה דורש מכל מכשיר כתובת I2C ייחודית. ניסיתי כמה לוחות תצוגה 16x2 שונים, וחלקם משתמשים בכתובת 0x27, בעוד שלוחות אחרים לכאורה זהים משתמשים ב- 0x3f. אם אתה מוצא שהתצוגה שלך מציגה רק סדרה של ריבועים וללא טקסט, נסה לשנות את ערך הכתובת המוגדר בקוד כאן:

LiquidCrystal_PCF8574 lcd (0x27);

כאשר מזהה תג RFID, הקוד קורא את מזהה ה -4 בתים, ומשתמש בו כדי לנסות לחפש את המשתמש המתאים מטבלת המשתמשים המוכרים. אם התג אינו מזוהה, מזהה ה -4 בתים יישלח לקונסולת הצג הטורי:

int GetUserFromRFIDTag (בתים RFID ) {

for (int i = 0; i <numusers; i ++) = "" {<numUsers; i ++) {if (memcmp (userList .rfidUID, RFID, sizeof userList .rfidUID) == 0) {return userList .userID; }} Serial.print (F ("כרטיס RFID לא ידוע זוהה:")); for (בת i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } החזר -1; }

על מנת להקצות תג למשתמש, עליך להעתיק את המזהה המוצג ולהכניס את ערך 4 בתים למערך המשתמשים בחלק העליון של הקוד, לצד המשתמש המתאים:

const user userList [numUsers] = {{1, "ג'יני", {0x00, 0x00, 0x00, 0x00}}, {2, "הארי", {0x12, 0x34, 0x56, 0x78}}, {3, "רון", {0xE8, 0x06, 0xC2, 0x49}}, {4, "Hermione", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}},};

שלב 5: שימוש

נוֹהָג
נוֹהָג
נוֹהָג
נוֹהָג

אם הגעת עד לכאן, השימוש במערכת צריך להיות מרומז למדי מהקוד; בכל עת, משתמשים יכולים לסובב את הכפתור הסיבוב כדי לגלול ברשימת המשימות הזמינות. מטלות שהגיעו לאיחור מסומנות בכוכבית לאחר כותרתן.

לאחר שבחרו במטלה לבצע, המשתמשים יכולים לאחר מכן לסרוק את כף ה- RFID הייחודית שלהם על פני הקורא כדי לסמן את המשימה שהושלמה. תעודת הזהות שלהם והזמן הנוכחי יירשמו וישמרו ב- EEPROM של הארדואינו.

על מנת להגדיר תחילה את תגי ה- RFID הנכונים, עליך להריץ את הסקיצה כשהצג הטורי Arduino מצורף. סרוק כל תגית ושימו לב לערך ה- UID המשושה של 4 בתים המוצג על הצג הטורי. לאחר מכן שנה את רשימת המשתמשים המוצהרת בראש הקוד כדי להקצות מזהה תג זה למשתמש המתאים.

שקלתי להוסיף פונקציונליות להדפסת דו ח המציג את כל המשימות שהושלמו על ידי המשתמש במהלך השבוע האחרון על מנת להקצות את פרס הכס המתאים מדי שבוע. עם זאת, כפי שזה קורה, נראה שילדי מרוצים מהחידוש בשימוש במערכת ששכחו לגמרי את פרסי הכס! אולם זו תהיה תוספת פשוטה למדי, והיא תישאר כתרגיל עבור הקורא:)

מוּמלָץ: