Mục lục:

Task Manager - Hệ thống quản lý công việc gia đình: 5 bước (có hình ảnh)
Task Manager - Hệ thống quản lý công việc gia đình: 5 bước (có hình ảnh)

Video: Task Manager - Hệ thống quản lý công việc gia đình: 5 bước (có hình ảnh)

Video: Task Manager - Hệ thống quản lý công việc gia đình: 5 bước (có hình ảnh)
Video: Quản lý thời gian kiểu này, ai làm lại bạn nổi? 2024, Tháng bảy
Anonim
Task Manager - Hệ thống quản lý việc nhà
Task Manager - Hệ thống quản lý việc nhà
Task Manager - Hệ thống quản lý việc nhà
Task Manager - Hệ thống quản lý việc nhà

Tôi muốn cố gắng giải quyết một vấn đề thực sự mà gia đình chúng tôi phải đối mặt (và, tôi tưởng tượng là của nhiều độc giả khác), đó là cách phân bổ, động viên và khen thưởng cho con tôi vì đã giúp đỡ các công việc gia đình.

Cho đến nay, chúng tôi vẫn giữ một tờ giấy A4 nhiều lớp được dán ở bên cạnh tủ lạnh. Nó có một lưới các nhiệm vụ được in trên đó, với số tiền tiêu vặt liên quan có thể kiếm được để hoàn thành nhiệm vụ đó. Ý tưởng là mỗi khi một đứa trẻ của chúng tôi giúp việc nhà, chúng sẽ được đánh dấu vào ô đó và vào cuối mỗi tuần, chúng tôi cộng số tiền kiếm được, lau bảng và bắt đầu lại. Tuy nhiên, danh sách nhiệm vụ đã lỗi thời và khó thay đổi, đôi khi chúng tôi không nhớ lau bảng sạch mỗi tuần và một số nhiệm vụ cần được thực hiện với tần suất khác nhau - một số nhiệm vụ lý tưởng là được thực hiện hàng ngày, trong khi những người khác có thể chỉ là một lần một tháng. Vì vậy, tôi bắt đầu tạo ra một thiết bị dựa trên Arduino để giải quyết những vấn đề này - mục đích của tôi là tạo ra thứ gì đó cho phép dễ dàng thêm / xóa / cập nhật các tác vụ, một cơ chế hợp lý để ghi lại khi một tác vụ đã được thực hiện và phân bổ tín dụng cho người thích hợp và một cách để theo dõi các lịch trình và tần suất khác nhau cần thực hiện các nhiệm vụ khác nhau, đồng thời đánh dấu các nhiệm vụ quá hạn. Và hướng dẫn này sẽ hiển thị cách thiết bị "Trình quản lý tác vụ" kết quả ra đời.

Bước 1: Phần cứng

Phần cứng
Phần cứng
Phần cứng
Phần cứng

Dự án sử dụng một số thành phần phần cứng được sử dụng tốt và được ghi lại:

  • Arduino UNO / Nano - đây là "bộ não" của hệ thống. Bộ nhớ EEPROM tích hợp sẽ được sử dụng để lưu trạng thái của các tác vụ ngay cả khi hệ thống đã tắt nguồn. Để dễ dàng đi dây, tôi đã gắn Nano trên một kính vít, nhưng bạn có thể hàn hoặc sử dụng kết nối uốn với các chân GPIO nếu muốn.
  • Mô-đun Đồng hồ thời gian thực (RTC) - được sử dụng để ghi lại dấu thời gian mà các tác vụ đã được thực hiện và bằng cách so sánh thời gian gần đây nhất với thời điểm hiện tại, xác định tác vụ nào đã quá hạn. Lưu ý rằng thiết bị tôi nhận được được thiết kế để sử dụng với pin LiPo có thể sạc lại (LIR2032). Tuy nhiên, tôi đang sử dụng pin CR2032 không thể sạc lại được, vì vậy tôi cần thực hiện một số sửa đổi để tắt mạch sạc (bạn không muốn thử sạc lại pin không sạc lại được, nếu không bạn có thể gặp phải vụ nổ….). Cụ thể, tôi đã loại bỏ các điện trở R4, R5 và R6, và diode được đánh dấu D1. Sau đó, tôi tạo một cầu hàn để cắt ngang qua chỗ R6 đã ở. Những thay đổi này được minh họa trong ảnh dưới đây.
  • Đầu đọc RFID ISO14443 + một thẻ cho mỗi người dùng- như một cách "đánh bạc" hệ thống, mỗi đứa con của tôi có thẻ RFID duy nhất của riêng chúng. Chọn một nhiệm vụ và sau đó vuốt thẻ của chúng qua trình đọc sẽ là cơ chế được sử dụng để đánh dấu một nhiệm vụ là hoàn thành
  • Màn hình LCD 16x2 - được sử dụng để cung cấp giao diện người dùng cho hệ thống. Bằng cách sử dụng bảng có ba lô PCF8574A tích hợp, bảng có thể được kết nối thông qua giao diện I2C với Arduino, điều này giúp đơn giản hóa việc đi dây đáng kể.
  • Bộ mã hóa quay - sẽ là núm điều khiển chính mà người dùng sẽ xoay để chọn các tác vụ khả dụng khác nhau
  • Đầu nối Wago - các đầu nối đóng nhanh này là một cách thuận tiện để nối các thành phần lại với nhau hoặc tạo các bus đơn giản cho một số mô-đun mà mỗi mô-đun yêu cầu nguồn điện chung hoặc nguồn 5V.

Bước 2: Đấu dây

Đấu dây
Đấu dây

Màn hình LCD 16x2 và DS1307 RTC đều sử dụng giao diện I2C, điều này rất tiện lợi vì nó làm cho việc đấu dây đơn giản hơn nhiều, chỉ cần một cặp dây đi đến chân A4 (SDA) và A5 (SCL) của Arduino

Đầu đọc RFID MFRC-522 sử dụng giao diện SPI, sử dụng các chân phần cứng cố định 11 (MOSI), 12 (MISO) và 13 (SCK). Nó cũng yêu cầu một dòng chọn nô lệ và đặt lại, mà tôi đã chỉ định cho các chân 10 và 9 tương ứng

Bộ mã hóa quay yêu cầu một cặp chân. Để có hiệu suất tối ưu, tốt nhất là các chân này có thể xử lý các ngắt bên ngoài, vì vậy tôi đang sử dụng chân kỹ thuật số 2 và 3. Bạn cũng có thể nhấp vào bộ mã hóa làm công tắc và tôi đã nối dây này vào chân 4. Mặc dù không phải hiện đang được sử dụng trong mã, bạn có thể thấy nó hữu ích khi thêm các tính năng bổ sung

Để thuận tiện, tôi đang sử dụng khối kết nối WAGO 222-series. Đây là những đầu nối đóng nhanh cung cấp cách kết nối mạnh mẽ, dễ dàng ở bất kỳ đâu giữa 2 và 8 dây với nhau và rất thuận tiện cho các dự án Arduino yêu cầu nhiều mô-đun chia sẻ đường nối đất hoặc đường 5V hoặc nơi bạn có nhiều thiết bị trên cùng một bus I2C hoặc SPI, chẳng hạn

Sơ đồ minh họa cách mọi thứ được kết nối với nhau.

Bước 3: Thi công

Tôi đã tạo một vỏ máy in 3D rất cơ bản để chứa các thiết bị điện tử. Tôi đã đặt một số nam châm ở mặt sau để thiết bị có thể được cố định vào mặt bên của tủ lạnh, giống như danh sách đã in trước đó. Tôi cũng để hở ổ cắm USB, vì nó sẽ được sử dụng nếu các tác vụ mới cần được thêm vào hệ thống hoặc để đăng nhập và tải xuống một tập hợp dữ liệu hiển thị các tác vụ đã hoàn thành, v.v.

Tôi đã không lưu các tệp STL sau khi in, nhưng có rất nhiều trường hợp tương tự (và, có thể tốt hơn!) Có sẵn trên thingiverse.com. Ngoài ra, bạn có thể đóng một hộp gỗ đẹp hoặc chỉ sử dụng một hộp các tông cũ hoặc hộp đựng tupperware để chứa các thiết bị điện tử.

Bước 4: Mã

Mã số
Mã số

Mã được chú thích đầy đủ được đính kèm dưới dạng tải xuống bên dưới. Dưới đây là một số điểm quan trọng hơn cần lưu ý:

Tôi đã tạo một cấu trúc tùy chỉnh, "tác vụ", là một đơn vị dữ liệu đóng gói tất cả các thuộc tính của một tác vụ trong một thực thể duy nhất. Các nhiệm vụ bao gồm một tên, sẽ là cách chúng xuất hiện trên màn hình LCD (và do đó được giới hạn ở 16 ký tự), tần suất chúng cần được thực hiện và chúng được hoàn thành lần cuối khi nào và bởi ai

cấu trúc nhiệm vụ {

char taskName [16]; // Tên ngắn, "thân thiện" cho tác vụ này sẽ xuất hiện trên màn hình int repeatEachXDays; // Tính đều đặn, tính theo ngày, trong đó tác vụ này được lặp lại. 1 = Hàng ngày, 7 = Hàng tuần, v.v … không được ký lâu cuối cùngCompletedTime; // Dấu thời gian mà tại đó tác vụ này được hoàn thành lần cuối int lastCompletedBy; // ID của người đã hoàn thành nhiệm vụ này lần cuối};

Cấu trúc dữ liệu chính được gọi là "taskList", đơn giản là một mảng các tác vụ riêng biệt. Bạn có thể xác định bất kỳ tác vụ nào bạn muốn ở đây, được khởi tạo với giá trị 0 cho thời điểm chúng được hoàn thành lần cuối và -1 cho ID của người dùng thực hiện chúng lần cuối

task taskList [numTasks] = {

Trong phần hằng số ở đầu mã, có một giá trị byte duy nhất được gọi là "eepromSignature". Giá trị này được sử dụng để xác định xem dữ liệu được lưu trữ trên EEPROM có hợp lệ hay không. Nếu bạn thay đổi cấu trúc của mục taskList, bằng cách thêm hoặc bớt nhiệm vụ hoặc thêm các trường bổ sung, chẳng hạn, bạn nên tăng giá trị này. Bạn có thể coi nó giống như một hệ thống đánh số phiên bản cơ bản cho dữ liệu

const byte eepromSignature = 1;

Khi khởi động, chương trình sẽ chỉ cố gắng tải dữ liệu được lưu trữ trong EEPROM nếu nó khớp với chữ ký của dữ liệu được xác định trong mã.

void restoreFromEEPROM () {

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

Màn hình LCD và mô-đun RTC sử dụng giao diện I2C để giao tiếp với Arduino. Điều này yêu cầu mọi thiết bị phải có một địa chỉ I2C duy nhất. Tôi đã thử một vài bảng hiển thị 16x2 khác nhau và một số dường như sử dụng địa chỉ 0x27, trong khi các bảng có vẻ giống hệt nhau khác sử dụng 0x3f. Nếu bạn thấy màn hình của mình chỉ hiển thị một loạt ô vuông và không có văn bản, hãy thử thay đổi giá trị địa chỉ được xác định trong mã tại đây:

Màn hình LCD LiquidCrystal_PCF8574 (0x27);

Khi thẻ RFID được phát hiện, mã sẽ đọc số nhận dạng 4 byte và sử dụng nó để cố gắng tìm kiếm người dùng tương ứng từ bảng những người dùng đã biết. Nếu thẻ không được nhận dạng, số nhận dạng 4 byte sẽ được gửi đến bảng điều khiển theo dõi nối tiếp:

int GetUserFromRFIDTag (byte 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 ("Đã phát hiện thẻ RFID không xác định:")); for (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } trả về -1; }

Để gán thẻ cho người dùng, bạn nên sao chép ID được hiển thị và chèn giá trị 4 byte vào mảng người dùng ở đầu mã, bên cạnh người dùng tương ứng:

const user userList [numUsers] = {{1, "Ginny", {0x00, 0x00, 0x00, 0x00}}, {2, "Harry", {0x12, 0x34, 0x56, 0x78}}, {3, "Ron", {0xE8, 0x06, 0xC2, 0x49}}, {4, "Hermione", {0x12, 0x34, 0x56, 0x78}}, {5, "Alastair", {0x12, 0x34, 0x56, 0x78}},};

Bước 5: Sử dụng

Sử dụng
Sử dụng
Sử dụng
Sử dụng

Nếu bạn đã làm được điều đó đến nay, thì việc sử dụng hệ thống phải hoàn toàn ngầm hiểu với mã; bất cứ lúc nào, người dùng có thể xoay núm xoay để cuộn qua danh sách các tác vụ có sẵn. Các bài tập đã quá hạn được đánh dấu hoa thị sau tiêu đề của chúng.

Sau khi chọn một việc vặt để thực hiện, người dùng sau đó có thể quét fob RFID duy nhất của riêng mình trên đầu đọc để đánh dấu nhiệm vụ là hoàn thành. ID của họ và thời gian hiện tại sẽ được ghi lại và lưu vào EEPROM của Arduino.

Để lần đầu tiên thiết lập các thẻ RFID chính xác, bạn nên chạy bản phác thảo có gắn màn hình nối tiếp Arduino. Quét từng thẻ và ghi lại giá trị UID hex 4 byte được hiển thị trên màn hình nối tiếp. Sau đó, sửa đổi danh sách người dùng được khai báo ở đầu mã để gán ID thẻ này cho người dùng thích hợp.

Tôi đã cân nhắc thêm chức năng in ra một báo cáo hiển thị tất cả các nhiệm vụ đã hoàn thành, theo người dùng, trong tuần trước để phân bổ phần thưởng tiền tiêu vặt thích hợp mỗi tuần. Tuy nhiên, khi nó xảy ra, các con tôi tỏ ra hài lòng bởi tính mới của việc sử dụng hệ thống và hoàn toàn quên mất phần thưởng tiền tiêu vặt! Tuy nhiên, đây sẽ là một bổ sung khá đơn giản và được để như một bài tập cho người đọc:)

Đề xuất: