Daftar Isi:

Task Manager - Sistem Manajemen Pekerjaan Rumah Tangga: 5 Langkah (dengan Gambar)
Task Manager - Sistem Manajemen Pekerjaan Rumah Tangga: 5 Langkah (dengan Gambar)

Video: Task Manager - Sistem Manajemen Pekerjaan Rumah Tangga: 5 Langkah (dengan Gambar)

Video: Task Manager - Sistem Manajemen Pekerjaan Rumah Tangga: 5 Langkah (dengan Gambar)
Video: CARA MEMBUAT PROGRESS PEKERJAAN | TAGIHAN PROYEK 2024, Juli
Anonim
Task Manager - Sistem Manajemen Pekerjaan Rumah Tangga
Task Manager - Sistem Manajemen Pekerjaan Rumah Tangga
Task Manager - Sistem Manajemen Pekerjaan Rumah Tangga
Task Manager - Sistem Manajemen Pekerjaan Rumah Tangga

Saya ingin mencoba mengatasi masalah nyata yang dihadapi dalam rumah tangga kami (dan, saya bayangkan, banyak pembaca lainnya), yaitu bagaimana mengalokasikan, memotivasi, dan memberi penghargaan kepada anak-anak saya karena membantu pekerjaan rumah tangga.

Hingga saat ini, kami menyimpan selembar kertas A4 berlaminasi yang menempel di sisi lemari es. Ini memiliki kisi tugas yang tercetak di atasnya, dengan jumlah uang saku terkait yang dapat diperoleh untuk menyelesaikan tugas itu. Idenya adalah bahwa setiap kali salah satu dari anak-anak kami membantu tugas, mereka mendapat tanda centang di kotak itu dan, pada akhir setiap minggu, kami menjumlahkan uang yang diperoleh, menghapus papan dan mulai lagi. Namun, daftar tugas sudah ketinggalan zaman dan sulit diubah, terkadang kita tidak ingat untuk membersihkan papan setiap minggu, dan beberapa tugas perlu dilakukan dengan frekuensi yang berbeda - beberapa idealnya dilakukan setiap hari, sedangkan yang lain mungkin hanya sebulan sekali. Jadi, saya mulai membuat perangkat berbasis Arduino untuk mengatasi masalah ini - niat saya adalah membuat sesuatu yang memungkinkan penambahan/penghapusan/pembaruan tugas dengan mudah, mekanisme yang disederhanakan untuk merekam saat tugas telah selesai dan mengalokasikan kredit ke orang yang tepat, dan cara untuk melacak jadwal dan frekuensi yang berbeda dengan tugas yang berbeda yang perlu dilakukan, dan menyoroti tugas yang terlambat. Dan instruksi ini akan menunjukkan bagaimana perangkat "Task Manager" yang dihasilkan keluar.

Langkah 1: Perangkat Keras

Perangkat keras
Perangkat keras
Perangkat keras
Perangkat keras

Proyek ini menggunakan beberapa komponen perangkat keras yang digunakan dengan baik dan didokumentasikan:

  • Arduino UNO/Nano - ini adalah "otak" dari sistem. Memori EEPROM onboard akan digunakan untuk menyimpan status tugas meskipun sistem dimatikan. Untuk kemudahan pemasangan kabel, saya telah memasang Nano pada pelindung sekrup, tetapi Anda dapat menyolder atau menggunakan koneksi berkerut ke pin GPIO jika Anda mau.
  • Modul Real-Time Clock (RTC) - digunakan untuk merekam stempel waktu di mana tugas dilakukan, dan, dengan membandingkan waktu terakhir dengan waktu saat ini, menentukan tugas mana yang terlambat. Perhatikan bahwa unit yang saya terima dirancang untuk digunakan dengan baterai LiPo yang dapat diisi ulang (LIR2032). Namun, saya menggunakan baterai CR2032 yang tidak dapat diisi ulang, jadi saya perlu membuat beberapa modifikasi untuk menonaktifkan sirkuit pengisian (Anda tidak ingin mencoba mengisi ulang baterai yang tidak dapat diisi ulang, atau Anda mungkin menghadapi ledakan….). Secara khusus, saya menghapus resistor R4, R5, dan R6, dan dioda bertanda D1. Saya kemudian membuat jembatan solder ke tempat pendek di mana R6 berada. Perubahan ini diilustrasikan pada foto di bawah ini.
  • Pembaca RFID ISO14443 + satu tag per pengguna- sebagai cara "mempermainkan" sistem, setiap anak saya memiliki tag RFID uniknya sendiri. Memilih tugas dan kemudian menggesekkan tag ke pembaca akan menjadi mekanisme yang digunakan untuk menandai tugas sebagai selesai
  • Layar LCD 16x2 - digunakan untuk menyediakan antarmuka pengguna ke sistem. Dengan menggunakan papan yang memiliki ransel PCF8574A integral, papan dapat dihubungkan melalui antarmuka I2C ke Arduino, yang menyederhanakan pengkabelan secara signifikan.
  • Rotary Encoder - akan menjadi kenop kontrol utama yang akan diputar pengguna untuk memilih berbagai tugas yang tersedia
  • Konektor Wago - konektor snap-shut ini adalah cara mudah untuk menyambungkan komponen bersama-sama atau membuat bus sederhana untuk beberapa modul yang masing-masing memerlukan landasan bersama atau suplai 5V.

Langkah 2: Pengkabelan

Pengkabelan
Pengkabelan

Layar LCD 16x2 dan DS1307 RTC keduanya menggunakan antarmuka I2C, yang nyaman karena membuat pengkabelan menjadi lebih sederhana, hanya membutuhkan sepasang kabel yang menuju ke pin A4 (SDA) dan A5 (SCL) dari Arduino

Pembaca RFID MFRC-522 menggunakan antarmuka SPI, yang menggunakan pin perangkat keras tetap 11 (MOSI), 12 (MISO), dan 13 (SCK). Ini juga membutuhkan jalur pemilihan dan reset budak, yang telah saya tetapkan masing-masing ke pin 10 dan 9

Rotary encoder membutuhkan sepasang pin. Untuk kinerja yang optimal, sebaiknya pin ini dapat menangani interupsi eksternal, jadi saya menggunakan pin digital 2 dan 3. Anda juga dapat mengklik encoder sebagai sakelar, dan saya telah menyambungkannya ke pin 4. Meskipun tidak saat ini digunakan dalam kode, Anda mungkin merasa berguna untuk menambahkan fitur tambahan

Untuk kenyamanan, saya menggunakan blok konektor seri WAGO 222. Ini adalah konektor snap-shut yang menyediakan cara yang kuat dan mudah untuk menghubungkan di mana saja antara 2 dan 8 kabel bersama-sama, dan sangat nyaman untuk proyek Arduino yang memerlukan beberapa modul untuk berbagi saluran ground atau 5V, atau di mana Anda memiliki beberapa perangkat di bus I2C atau SPI yang sama, katakanlah

Diagram menggambarkan bagaimana semuanya terhubung bersama.

Langkah 3: Konstruksi

Saya membuat kasing cetak 3D yang sangat mendasar untuk menampung barang elektronik. Saya menempatkan beberapa magnet di bagian belakang sehingga unit dapat diamankan ke sisi lemari es, seperti daftar cetakan sebelumnya. Saya juga membiarkan soket USB terbuka, karena ini akan digunakan jika tugas baru perlu ditambahkan ke sistem, atau untuk masuk dan mengunduh sekumpulan data yang menunjukkan tugas yang telah diselesaikan, dll.

Saya tidak menyimpan file STL setelah mencetak, tetapi ada banyak kasus serupa (dan, mungkin lebih baik!) yang tersedia di thingiverse.com. Sebagai alternatif, Anda dapat membuat kotak kayu yang bagus, atau hanya menggunakan kotak kardus tua atau wadah tupperware untuk menyimpan barang elektronik.

Langkah 4: Kode

Kode
Kode

Kode yang dikomentari sepenuhnya dilampirkan sebagai unduhan di bawah ini. Berikut adalah beberapa poin yang lebih penting untuk diperhatikan:

Saya telah membuat struct khusus, "tugas", yang merupakan unit data yang merangkum semua properti tugas dalam satu entitas. Tugas terdiri dari nama, yang akan menjadi bagaimana mereka muncul di layar LCD (dan karenanya terbatas pada 16 karakter), frekuensi yang mereka butuhkan untuk dilakukan, dan kapan dan oleh siapa mereka terakhir selesai

tugas struktur {

char namatugas[16]; // Nama pendek, "ramah" untuk tugas ini seperti yang akan muncul pada tampilan int repeatEachXDays; // Keteraturan, dalam hari, dengan mana tugas ini diulang. 1=Harian, 7=Mingguan dll. unsigned long lastCompletedTime; // Stempel waktu di mana tugas ini terakhir diselesaikan int lastCompletedBy; // ID orang yang terakhir menyelesaikan tugas ini };

Struktur data utama disebut "taskList", yang hanya merupakan array tugas terpisah. Anda dapat menentukan tugas mana pun yang Anda inginkan di sini, yang diinisialisasi dengan nilai 0 untuk waktu terakhir tugas tersebut diselesaikan, dan -1 untuk ID pengguna yang terakhir kali melakukannya

daftar tugas[numTasks] = {

{ "Bersihkan mobil", 7, 0, -1 }, { "Ganti seprai", 14, 0, -1}, { "Memotong rumput", 7, 0, -1 }, { "Hoover", 3, 0, -1 }, { "Anjing jalan", 1, 0, -1 }, { "Kamar Tidur Rapi", 7, 0, -1 }, { "Tanaman air", 2, 0, -1 }, { "Di lantai atas toilet", 7, 0, -1}, { "D/toilet tangga", 7, 0, -1 }, { "Hoover", 3, 0, -1 }, { "Mandi bersih", 7, 0, -1 }, };

Di bagian konstanta di bagian atas kode, ada nilai byte tunggal yang disebut "eepromSignature". Nilai ini digunakan untuk menentukan valid tidaknya data yang disimpan di EEPROM. Jika Anda mengubah struktur item daftar tugas, dengan menambahkan atau menghapus tugas, atau menambahkan bidang tambahan, katakanlah, Anda harus menaikkan nilai ini. Anda dapat menganggapnya seperti sistem penomoran versi dasar untuk data

const byte eepromSignature = 1;

Saat startup, program hanya akan mencoba memuat data yang disimpan di EEPROM jika cocok dengan tanda tangan data yang ditentukan dalam kode.

batalkan pemulihanDariEEPROM() {

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

Layar LCD dan modul RTC menggunakan antarmuka I2C untuk berkomunikasi dengan Arduino. Ini mengharuskan setiap perangkat memiliki alamat I2C yang unik. Saya telah mencoba beberapa papan tampilan 16x2 yang berbeda, dan beberapa tampaknya menggunakan alamat 0x27, sementara papan lain yang tampaknya identik menggunakan 0x3f. Jika Anda menemukan tampilan Anda hanya menampilkan serangkaian kotak dan tidak ada teks, coba ubah nilai alamat yang ditentukan dalam kode di sini:

LiquidCrystal_PCF8574 lcd (0x27);

Ketika tag RFID terdeteksi, kode membaca pengidentifikasi 4-byte, dan menggunakannya untuk mencoba mencari pengguna yang sesuai dari tabel pengguna yang dikenal. Jika tag tidak dikenali, pengidentifikasi 4 byte akan dikirim ke konsol monitor serial:

int GetUserFromRFIDTag(byte RFID){

for(int i=0; i<numusers; {<numUsers; i++) { if(memcmp(Daftar pengguna.rfidUID, RFID, ukuranDaftar pengguna.rfidUID) == 0) { kembalikanDaftar pengguna. IDUser; } } Serial.print(F("Kartu RFID tidak diketahui terdeteksi: ")); for(byte i=0; i<4; i++) { Serial.print(RFID<0x10 ? " 0": " "); Serial.print(RFID, HEX); } kembali -1; }

Untuk menetapkan tag ke pengguna, Anda harus menyalin ID yang ditampilkan dan memasukkan nilai 4-byte ke dalam larik pengguna di bagian atas kode, di sebelah pengguna yang sesuai:

const useruserList[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}}, };

Langkah 5: Penggunaan

Penggunaan
Penggunaan
Penggunaan
Penggunaan

Jika Anda telah sampai sejauh ini, penggunaan sistem harus cukup implisit dari kode; kapan saja, pengguna dapat memutar kenop putar untuk menggulir daftar tugas yang tersedia. Tugas yang terlambat ditandai dengan tanda bintang setelah judulnya.

Setelah memilih tugas untuk dilakukan, pengguna kemudian dapat memindai fob RFID unik mereka sendiri di seluruh pembaca untuk menandai tugas sebagai selesai. ID mereka dan waktu saat ini akan dicatat dan disimpan ke EEPROM Arduino.

Untuk pertama-tama mengatur tag RFID yang benar, Anda harus menjalankan sketsa dengan monitor serial Arduino terpasang. Pindai setiap tag dan catat nilai UID hex 4-byte yang ditampilkan pada monitor serial. Kemudian ubah daftar pengguna yang dideklarasikan di bagian atas kode untuk menetapkan ID tag ini ke pengguna yang sesuai.

Saya mempertimbangkan untuk menambahkan fungsionalitas untuk mencetak laporan yang menunjukkan semua tugas yang diselesaikan, oleh pengguna, selama minggu terakhir untuk mengalokasikan hadiah uang saku yang sesuai setiap minggu. Namun, seperti yang terjadi, anak-anak saya tampaknya puas dengan kebaruan menggunakan sistem untuk melupakan hadiah uang saku sepenuhnya! Ini akan menjadi tambahan yang cukup sederhana, dan dibiarkan sebagai latihan untuk pembaca:)

Direkomendasikan: