สารบัญ:

Task Manager - ระบบจัดการงานบ้าน: 5 ขั้นตอน (พร้อมรูปภาพ)
Task Manager - ระบบจัดการงานบ้าน: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Task Manager - ระบบจัดการงานบ้าน: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Task Manager - ระบบจัดการงานบ้าน: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: เทคนิคการใช้งาน Windows Task Manager และเครื่องมือต่าง ๆ ที่คุณอาจไม่เคยรู้มาก่อน 2024, กรกฎาคม
Anonim
Task Manager - ระบบจัดการงานบ้าน
Task Manager - ระบบจัดการงานบ้าน
Task Manager - ระบบจัดการงานบ้าน
Task Manager - ระบบจัดการงานบ้าน

ฉันต้องการพยายามแก้ไขปัญหาที่เกิดขึ้นจริงในครอบครัวของเรา (และฉันคิดว่าปัญหาของผู้อ่านคนอื่นๆ อีกมาก) ซึ่งเป็นวิธีการจัดสรร จูงใจ และให้รางวัลลูกๆ ของฉันที่ช่วยเหลืองานบ้าน

จนถึงตอนนี้ เราได้เก็บกระดาษลามิเนต A4 ไว้ข้างตู้เย็น มีตารางของงานที่พิมพ์ไว้ พร้อมด้วยจำนวนเงินค่าขนมที่เกี่ยวข้องซึ่งสามารถหาได้จากการทำภารกิจนั้นให้สำเร็จ แนวคิดก็คือทุกครั้งที่ลูกๆ ของเราช่วยงานบ้าน พวกเขาจะได้รับเครื่องหมายถูกในกล่องนั้น และเมื่อสิ้นสุดแต่ละสัปดาห์ เราจะรวมเงินที่ได้รับ เช็ดกระดานแล้วเริ่มใหม่อีกครั้ง อย่างไรก็ตาม รายการงานล้าสมัยและเปลี่ยนแปลงได้ยาก บางครั้งเราก็ไม่ลืมที่จะทำความสะอาดบอร์ดทุกสัปดาห์ และงานบางรายการจำเป็นต้องดำเนินการด้วยความถี่ต่างกัน บางงานควรทำทุกวัน อื่น ๆ อาจเป็นเดือนละครั้งเท่านั้น ดังนั้นฉันจึงเริ่มสร้างอุปกรณ์ที่ใช้ Arduino เพื่อแก้ไขปัญหาเหล่านี้ - ความตั้งใจของฉันคือการสร้างบางสิ่งที่อนุญาตให้เพิ่ม/ลบ/อัปเดตงานได้ง่าย กลไกที่คล่องตัวสำหรับการบันทึกเมื่องานเสร็จสิ้นและจัดสรรเครดิตให้กับ บุคคลที่เหมาะสม และวิธีการติดตามตารางเวลาและความถี่ที่แตกต่างกันซึ่งต้องทำงานที่แตกต่างกัน และเน้นงานที่ค้างชำระ และคำแนะนำนี้จะแสดงให้เห็นว่าอุปกรณ์ "ตัวจัดการงาน" ที่ได้ออกมาเป็นอย่างไร

ขั้นตอนที่ 1: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์

โปรเจ็กต์นี้ใช้ประโยชน์จากส่วนประกอบฮาร์ดแวร์ที่มีการใช้งานที่ดีและได้รับการจัดทำเป็นเอกสารหลายอย่าง:

  • Arduino UNO/Nano - นี่คือ "สมอง" ของระบบ หน่วยความจำ EEPROM ออนบอร์ดจะถูกใช้เพื่อบันทึกสถานะของงานแม้ว่าระบบจะปิดอยู่ เพื่อความสะดวกในการเดินสาย ฉันได้ติดตั้ง Nano บนสกรูชิลด์ แต่คุณสามารถบัดกรีหรือใช้การเชื่อมต่อแบบจีบกับหมุด GPIO แทนได้หากต้องการ
  • โมดูลนาฬิกาตามเวลาจริง (RTC) - ใช้เพื่อบันทึกการประทับเวลาที่งานที่ทำ และโดยการเปรียบเทียบครั้งสุดท้ายกับเวลาปัจจุบัน กำหนดว่างานใดที่ค้างชำระ โปรดทราบว่าอุปกรณ์ที่ฉันได้รับได้รับการออกแบบเพื่อใช้กับแบตเตอรี่ LiPo แบบชาร์จซ้ำได้ (LIR2032) อย่างไรก็ตาม ฉันใช้แบตเตอรี่ CR2032 ที่ไม่สามารถชาร์จใหม่ได้ ดังนั้นฉันจึงต้องทำการปรับเปลี่ยนเล็กน้อยเพื่อปิดวงจรการชาร์จ (คุณไม่ต้องการลองชาร์จแบตเตอรี่ที่ไม่สามารถชาร์จใหม่ได้ หรือคุณอาจเผชิญกับการระเบิด….). โดยเฉพาะฉันลบตัวต้านทาน R4, R5 และ R6 และไดโอดทำเครื่องหมาย D1 จากนั้นฉันก็สร้างสะพานประสานให้สั้นข้ามที่ที่ R6 อยู่ การเปลี่ยนแปลงเหล่านี้แสดงไว้ในรูปภาพด้านล่าง
  • เครื่องอ่าน RFID ISO14443 + หนึ่งแท็กต่อผู้ใช้ - เพื่อเป็นการ "เล่นเกม" ระบบ ลูก ๆ ของฉันแต่ละคนมีแท็ก RFID เฉพาะของตัวเอง การเลือกงานแล้วปัดแท็กผ่านตัวอ่านจะเป็นกลไกที่ใช้ทำเครื่องหมายงานว่าเสร็จสิ้น
  • จอ LCD ขนาด 16x2 - ใช้เพื่อจัดเตรียมส่วนต่อประสานผู้ใช้กับระบบ ด้วยการใช้บอร์ดที่มีกระเป๋าเป้ PCF8574A ในตัว บอร์ดสามารถเชื่อมต่อผ่านอินเทอร์เฟซ I2C กับ Arduino ซึ่งทำให้การเดินสายง่ายขึ้นอย่างมาก
  • Rotary Encoder - จะเป็นปุ่มควบคุมหลักที่ผู้ใช้จะหมุนเพื่อเลือกงานต่างๆ ที่มีอยู่
  • คอนเนคเตอร์ Wago - คอนเน็กเตอร์แบบ snap-shut เหล่านี้เป็นวิธีที่สะดวกในการต่อส่วนประกอบเข้าด้วยกัน หรือสร้างบัสแบบง่ายสำหรับโมดูลหลายตัวที่แต่ละตัวต้องการกราวด์ทั่วไปหรือแหล่งจ่ายไฟ 5V

ขั้นตอนที่ 2: การเดินสายไฟ

การเดินสายไฟ
การเดินสายไฟ

จอภาพ LCD ขนาด 16x2 และ DS1307 RTC ใช้อินเทอร์เฟซ I2C ซึ่งสะดวกเพราะทำให้การเดินสายง่ายขึ้นมาก โดยต้องใช้สายไฟเพียงคู่เดียวไปยังพิน A4 (SDA) และ A5 (SCL) ของ Arduino

เครื่องอ่าน RFID MFRC-522 ใช้อินเทอร์เฟซ SPI ซึ่งใช้หมุดฮาร์ดแวร์แบบตายตัว 11 (MOSI), 12 (MISO) และ 13 (SCK) นอกจากนี้ยังต้องใช้สายการเลือกและรีเซ็ตทาสซึ่งฉันได้กำหนดให้หมุด 10 และ 9 ตามลำดับ

ตัวเข้ารหัสแบบโรตารี่ต้องใช้พินคู่หนึ่ง เพื่อประสิทธิภาพสูงสุด จะเป็นการดีที่สุดถ้าพินเหล่านี้รองรับการขัดจังหวะภายนอก ดังนั้นฉันจึงใช้พินดิจิทัล 2 และ 3 คุณยังสามารถคลิกตัวเข้ารหัสเป็นสวิตช์ และฉันได้ต่อสิ่งนี้เข้ากับพิน 4 แม้ว่าจะไม่ใช่ ที่ใช้ในโค้ดนี้ คุณอาจพบว่ามีประโยชน์ในการเพิ่มคุณสมบัติเพิ่มเติม

เพื่อความสะดวก ฉันใช้บล็อกตัวเชื่อมต่อ WAGO 222-series เหล่านี้เป็นตัวเชื่อมต่อแบบ snap-shut ที่ให้วิธีที่แข็งแกร่งและง่ายต่อการเชื่อมต่อที่ใดก็ได้ระหว่าง 2 ถึง 8 สายเข้าด้วยกัน และสะดวกมากสำหรับโครงการ Arduino ที่ต้องใช้โมดูลหลายตัวเพื่อแชร์กราวด์หรือสาย 5V หรือที่คุณมีอุปกรณ์หลายตัวบน บัส I2C หรือ SPI เดียวกันพูด

แผนภาพแสดงให้เห็นว่าทุกอย่างเชื่อมต่อเข้าด้วยกันอย่างไร

ขั้นตอนที่ 3: การก่อสร้าง

ฉันสร้างเคสพิมพ์ 3 มิติแบบพื้นฐานเพื่อใช้ติดตั้งอุปกรณ์อิเล็กทรอนิกส์ ฉันวางแม่เหล็กไว้ด้านหลังเพื่อให้เครื่องสามารถยึดเข้ากับด้านข้างของตู้เย็นได้ เช่นเดียวกับรายการที่พิมพ์ก่อนหน้านี้ ฉันยังปล่อยให้ซ็อกเก็ต USB เปิดเผย เนื่องจากจะใช้สิ่งนี้หากจำเป็นต้องเพิ่มงานใหม่ลงในระบบ หรือเพื่อเข้าสู่ระบบและดาวน์โหลดชุดข้อมูลที่แสดงงานที่เสร็จสมบูรณ์ ฯลฯ

ฉันไม่ได้บันทึกไฟล์ STL หลังจากพิมพ์ แต่มีเคสที่คล้ายกันมากมาย (และน่าจะดีกว่า!) ที่มีอยู่ใน thingiverse.com อีกทางหนึ่ง คุณสามารถสร้างกล่องไม้ที่สวยงาม หรือใช้กล่องกระดาษแข็งเก่าหรือภาชนะทัปเปอร์แวร์เพื่อจัดเก็บอุปกรณ์อิเล็กทรอนิกส์

ขั้นตอนที่ 4: รหัส

รหัส
รหัส

โค้ดที่แสดงความคิดเห็นแบบเต็มนั้นแนบมากับการดาวน์โหลดด้านล่าง ต่อไปนี้คือประเด็นสำคัญบางประการที่ควรทราบ:

ฉันได้สร้างโครงสร้างแบบกำหนดเอง "งาน" ซึ่งเป็นหน่วยข้อมูลที่ห่อหุ้มคุณสมบัติทั้งหมดของงานไว้ในเอนทิตีเดียว งานประกอบด้วยชื่อ ซึ่งจะเป็นลักษณะที่ปรากฏบนจอ LCD (และด้วยเหตุนี้จึงจำกัดอักขระไว้ที่ 16 ตัว) ความถี่ที่ต้องดำเนินการ และเวลาที่พวกเขาทำเสร็จล่าสุดเมื่อใดและโดยใคร

งานโครงสร้าง {

ถ่าน taskName[16]; // ชื่อสั้น "เป็นมิตร" สำหรับงานนี้ตามที่จะปรากฏบนจอแสดงผล int repeatEachXDays; // ความสม่ำเสมอในวันที่มีงานนี้ซ้ำ 1=รายวัน, 7=รายสัปดาห์ และอื่นๆ ที่ไม่ได้ลงนามเป็นเวลานาน LastCompletedTime; // Timestamp ที่งานนี้เสร็จสิ้นล่าสุดใน lastCompletedBy; // ID ของบุคคลที่ทำภารกิจนี้สำเร็จครั้งล่าสุด };

โครงสร้างข้อมูลหลักเรียกว่า "taskList" ซึ่งเป็นอาร์เรย์ของงานที่แยกจากกัน คุณสามารถกำหนดงานที่คุณต้องการได้ที่นี่ ซึ่งเริ่มต้นด้วยค่า 0 สำหรับเวลาที่เสร็จสิ้นล่าสุด และ -1 สำหรับ ID ของผู้ใช้ที่ดำเนินการครั้งล่าสุด

งาน taskList [numTasks] = {

{ "ทำความสะอาดรถ", 7, 0, -1 }, { "เปลี่ยนผ้าปูที่นอน", 14, 0, -1}, { "ตัดหญ้า", 7, 0, -1 }, { "ฮูเวอร์", 3, 0, -1 }, { "สุนัขเดิน", 1, 0, -1 }, { "ห้องนอนที่เป็นระเบียบ", 7, 0, -1 }, { "พืชน้ำ", 2, 0, -1 }, { "ชั้นบน ห้องน้ำ", 7, 0, -1}, { "ห้องน้ำ D/บันได", 7, 0, -1 }, { "ฮูเวอร์", 3, 0, -1 }, { "ฝักบัวสะอาด", 7, 0, -1 }, };

ในส่วนค่าคงที่ที่ด้านบนของโค้ด มีค่าไบต์เดียวที่เรียกว่า "eepromSignature" ค่านี้ใช้เพื่อกำหนดว่าข้อมูลที่จัดเก็บใน EEPROM นั้นถูกต้องหรือไม่ ถ้าคุณเปลี่ยนโครงสร้างของรายการ taskList โดยการเพิ่มหรือเอางานออก หรือเพิ่มฟิลด์เพิ่มเติม เช่น คุณควรเพิ่มค่านี้ คุณสามารถคิดว่ามันเหมือนกับระบบการนับเวอร์ชันพื้นฐานสำหรับข้อมูล

ไบต์ const eepromSignature = 1;

เมื่อเริ่มต้นโปรแกรมจะพยายามโหลดข้อมูลที่จัดเก็บไว้ใน EEPROM หากตรงกับลายเซ็นของข้อมูลที่กำหนดไว้ในโค้ด

เป็นโมฆะ restoreFromEEPROM () {

int checkByte = EEPROM.read(0); ถ้า (checkByte == eepromSignature) { EEPROM.get (1, รายการงาน); } }

จอแสดงผล LCD และโมดูล RTC ใช้อินเทอร์เฟซ I2C เพื่อสื่อสารกับ Arduino สิ่งนี้ต้องการให้ทุกอุปกรณ์มีที่อยู่ I2C ที่ไม่ซ้ำกัน ฉันได้ลองใช้บอร์ดแสดงผลขนาด 16x2 ที่แตกต่างกันสองสามแบบ และบางอันดูเหมือนจะใช้ที่อยู่ 0x27 ในขณะที่บอร์ดอื่นๆ ที่ดูเหมือนเหมือนกันนั้นใช้ 0x3f หากคุณพบว่าจอแสดงผลของคุณแสดงเฉพาะชุดสี่เหลี่ยมและไม่มีข้อความ ให้ลองเปลี่ยนค่าที่อยู่ที่กำหนดไว้ในโค้ดที่นี่:

LiquidCrystal_PCF8574 จอแอลซีดี (0x27);

เมื่อตรวจพบแท็ก RFID โค้ดจะอ่านตัวระบุ 4 ไบต์ และใช้เพื่อค้นหาผู้ใช้ที่เกี่ยวข้องจากตารางของผู้ใช้ที่รู้จัก หากแท็กไม่เป็นที่รู้จัก ตัวระบุ 4 ไบต์จะถูกส่งไปยังคอนโซลมอนิเตอร์แบบอนุกรม:

int GetUserFromRFIDTag (ไบต์ RFID){

สำหรับ (int i=0; i<numusers; {<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); } กลับ -1; }

ในการกำหนดแท็กให้กับผู้ใช้ คุณควรคัดลอก ID ที่แสดงและแทรกค่า 4 ไบต์ลงในอาร์เรย์ผู้ใช้ที่ด้านบนของโค้ด ถัดจากผู้ใช้ที่เกี่ยวข้อง:

const user list [numUsers] = { { 1, "Ginny", {0x00, 0x00, 0x00, 0x00}}, { 2, "Harry", {0x12, 0x34, 0x56, 0x78}}, { 3, "รอน", {0xE8, 0x06, 0xC2, 0x49}}, { 4, "เฮอร์ไมโอนี่", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}}, };

ขั้นตอนที่ 5: การใช้งาน

การใช้งาน
การใช้งาน
การใช้งาน
การใช้งาน

หากคุณมาไกลถึงขนาดนี้ การใช้งานระบบควรมาจากโค้ดโดยปริยาย ผู้ใช้สามารถหมุนปุ่มหมุนเพื่อเลื่อนดูรายการงานที่มีอยู่ได้ตลอดเวลา งานบ้านที่เกินกำหนดจะมีเครื่องหมายดอกจันอยู่หลังชื่องาน

เมื่อเลือกงานที่ต้องทำแล้ว ผู้ใช้สามารถสแกน fob RFID ที่เป็นเอกลักษณ์ของตนเองผ่านเครื่องอ่านเพื่อทำเครื่องหมายว่างานเสร็จสมบูรณ์ ID ของพวกเขาและเวลาปัจจุบันจะถูกบันทึกและบันทึกลงใน EEPROM ของ Arduino

ในการตั้งค่าแท็ก RFID ที่ถูกต้องในครั้งแรก คุณควรรันภาพร่างโดยต่อกับมอนิเตอร์อนุกรม Arduino สแกนแต่ละแท็กและจดค่า UID ฐานสิบหก 4 ไบต์ที่แสดงบนจอภาพอนุกรม จากนั้นแก้ไขรายชื่อผู้ใช้ที่ประกาศไว้ที่ด้านบนของโค้ดเพื่อกำหนด ID แท็กนี้ให้กับผู้ใช้ที่เหมาะสม

ฉันได้พิจารณาเพิ่มฟังก์ชันการทำงานเพื่อพิมพ์รายงานที่แสดงงานทั้งหมดที่ผู้ใช้ทำเสร็จสิ้นในช่วงสัปดาห์ที่ผ่านมา เพื่อจัดสรรรางวัลค่าขนมที่เหมาะสมในแต่ละสัปดาห์ อย่างไรก็ตาม ดูเหมือนว่าลูกๆ ของฉันจะพอใจกับความแปลกใหม่ของการใช้ระบบจนลืมรางวัลค่าขนมไปได้เลย! นี้จะเป็นส่วนเสริมที่ค่อนข้างง่ายอย่างไรก็ตามและเหลือเป็นแบบฝึกหัดสำหรับผู้อ่าน:)

แนะนำ: