Πίνακας περιεχομένων:

Task Manager - ένα σύστημα διαχείρισης οικιακής δουλειάς: 5 βήματα (με εικόνες)
Task Manager - ένα σύστημα διαχείρισης οικιακής δουλειάς: 5 βήματα (με εικόνες)

Βίντεο: Task Manager - ένα σύστημα διαχείρισης οικιακής δουλειάς: 5 βήματα (με εικόνες)

Βίντεο: Task Manager - ένα σύστημα διαχείρισης οικιακής δουλειάς: 5 βήματα (με εικόνες)
Βίντεο: Πώς να διορθώσετε τη χρήση δίσκου 100% τοις εκατό στα Windows - για αρχάριους 2024, Ιούλιος
Anonim
Task Manager - ένα σύστημα διαχείρισης οικιακών εργασιών
Task Manager - ένα σύστημα διαχείρισης οικιακών εργασιών
Task Manager - ένα σύστημα διαχείρισης οικιακών εργασιών
Task Manager - ένα σύστημα διαχείρισης οικιακών εργασιών

Wantedθελα να προσπαθήσω να αντιμετωπίσω ένα πραγματικό πρόβλημα που αντιμετωπίζει το νοικοκυριό μας (και, φαντάζομαι, αυτό πολλών άλλων αναγνωστών), το οποίο είναι ο τρόπος κατανομής, παρακίνησης και ανταμοιβής των παιδιών μου για τη βοήθεια στις δουλειές του σπιτιού.

Μέχρι τώρα, διατηρούσαμε ένα φύλλο χαρτιού Α4 κολλημένο στο πλάι του ψυγείου. Έχει τυπωμένο ένα πλέγμα εργασιών, με συναφή ποσά χαρτζιλίκι που θα μπορούσαν να κερδηθούν για την ολοκλήρωση αυτής της εργασίας. Η ιδέα είναι ότι κάθε φορά που ένα από τα παιδιά μας βοηθά με μια αγγαρεία, παίρνουν ένα τσιμπούρι σε αυτό το κουτί και, στο τέλος κάθε εβδομάδας, προσθέτουμε τα χρήματα που κερδίζουμε, σκουπίζουμε τον πίνακα και ξεκινάμε ξανά. Ωστόσο, ο κατάλογος των εργασιών είναι ξεπερασμένος και δύσκολα αλλάζει, μερικές φορές δεν θυμόμαστε να σκουπίζουμε τον πίνακα κάθε εβδομάδα και ορισμένες εργασίες πρέπει να εκτελούνται με διαφορετικές συχνότητες-μερικές θα ήταν ιδανικές να γίνονται καθημερινά, ενώ άλλα μπορεί να είναι μόνο μία φορά το μήνα. Έτσι, ξεκίνησα να δημιουργώ μια συσκευή που βασίζεται σε Arduino για την αντιμετώπιση αυτών των ζητημάτων - η πρόθεσή μου ήταν να δημιουργήσω κάτι που να επιτρέπει την εύκολη προσθήκη/αφαίρεση/ενημέρωση εργασιών, έναν εξορθολογισμένο μηχανισμό για την καταγραφή της ολοκλήρωσης μιας εργασίας και την κατανομή πίστωσης στο κατάλληλο άτομο και ένας τρόπος για να παρακολουθείτε τα διαφορετικά χρονοδιαγράμματα και τη συχνότητα με την οποία πρέπει να εκτελούνται διαφορετικές εργασίες, και να επισημαίνετε καθυστερημένες εργασίες. Και αυτό το διδακτικό θα δείξει πώς βγήκε η συσκευή "Task Manager" που προέκυψε.

Βήμα 1: Υλικό

Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα

Το έργο χρησιμοποιεί πολλά καλά χρησιμοποιημένα και τεκμηριωμένα στοιχεία υλικού:

  • Arduino UNO/Nano - αυτός είναι ο «εγκέφαλος» του συστήματος. Η ενσωματωμένη μνήμη EEPROM θα χρησιμοποιηθεί για να αποθηκεύσει την κατάσταση των εργασιών ακόμη και όταν το σύστημα είναι απενεργοποιημένο. Για ευκολία καλωδίωσης, έχω τοποθετήσει το Nano σε ένα βιδωτό προστατευτικό κάλυμμα, αλλά αν προτιμάτε μπορείτε να κολλήσετε ή να χρησιμοποιήσετε πτυχωτές συνδέσεις στις καρφίτσες GPIO.
  • Ενότητα ρολογιού πραγματικού χρόνου (RTC) - χρησιμοποιείται για την καταγραφή της χρονικής σήμανσης κατά την οποία εκτελέστηκαν οι εργασίες και, συγκρίνοντας την τελευταία φορά με την τρέχουσα, καθορίστε ποιες εργασίες είναι καθυστερημένες. Σημειώστε ότι η μονάδα που παρέλαβα σχεδιάστηκε για χρήση με επαναφορτιζόμενη μπαταρία LiPo (LIR2032). Ωστόσο, χρησιμοποιώ μια μη επαναφορτιζόμενη μπαταρία CR2032, οπότε χρειάστηκε να κάνω μερικές τροποποιήσεις για να απενεργοποιήσω το κύκλωμα φόρτισης (δεν θέλετε να προσπαθήσετε να επαναφορτίσετε μια μη επαναφορτιζόμενη μπαταρία, διαφορετικά μπορεί να αντιμετωπίσετε μια έκρηξη….). Συγκεκριμένα, αφαίρεσα τις αντιστάσεις R4, R5 και R6 και η δίοδος με την ένδειξη D1. Στη συνέχεια, δημιούργησα μια γέφυρα συγκολλήσεως σε κοντινή απόσταση από το σημείο όπου ήταν το R6. Αυτές οι αλλαγές απεικονίζονται στην παρακάτω φωτογραφία.
  • Πρόγραμμα ανάγνωσης ISO14443 RFID + μία ετικέτα ανά χρήστη- ως τρόπος "παιχνιδιού" του συστήματος, κάθε παιδί μου έχει τη δική του μοναδική ετικέτα 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. Μπορείτε επίσης να κάνετε κλικ στον κωδικοποιητή ως διακόπτη, και το έχω συνδέσει στο pin 4. Παρόλο που δεν είναι που χρησιμοποιείται επί του παρόντος στον κώδικα, ίσως το βρείτε χρήσιμο για την προσθήκη πρόσθετων λειτουργιών

Για ευκολία, χρησιμοποιώ μπλοκ συνδετήρων της σειράς WAGO 222. Αυτοί είναι συνδετήρες που παρέχουν έναν ισχυρό, εύκολο τρόπο σύνδεσης οπουδήποτε μεταξύ 2 και 8 καλωδίων μαζί, και είναι πολύ βολικό για έργα Arduino που απαιτούν πολλές μονάδες για να μοιραστούν μια γείωση ή γραμμή 5V, ή όπου έχετε πολλές συσκευές ίδιο λεωφορείο I2C ή SPI, ας πούμε

Το διάγραμμα απεικονίζει πώς όλα συνδέονται μεταξύ τους.

Βήμα 3: Κατασκευή

Δημιούργησα μια πολύ βασική θήκη με 3D εκτύπωση για να στεγάσω τα ηλεκτρονικά. Τοποθέτησα μερικούς μαγνήτες στο πίσω μέρος έτσι ώστε η μονάδα να μπορεί να στερεωθεί στο πλάι του ψυγείου, όπως ακριβώς ήταν και η προηγούμενη τυπωμένη λίστα. Άφησα επίσης την υποδοχή USB εκτεθειμένη, καθώς θα χρησιμοποιηθεί εάν χρειαστεί να προστεθούν νέες εργασίες στο σύστημα ή να συνδεθείτε και να κατεβάσετε ένα σύνολο δεδομένων που δείχνουν ολοκληρωμένες εργασίες κ.λπ.

Δεν έχω αποθηκεύσει τα αρχεία STL μετά την εκτύπωση, αλλά υπάρχουν πολλές παρόμοιες (και, πιθανώς καλύτερες!) Θήκες διαθέσιμες στο thingiverse.com. Εναλλακτικά, θα μπορούσατε να φτιάξετε ένα ωραίο ξύλινο κουτί ή απλά να χρησιμοποιήσετε ένα παλιό κουτί από χαρτόνι ή ένα δοχείο για να τοποθετήσετε τα ηλεκτρονικά.

Βήμα 4: Κωδικός

Κώδικας
Κώδικας

Ο πλήρης σχολιασμένος κώδικας επισυνάπτεται ως λήψη παρακάτω. Ακολουθούν μερικά από τα πιο σημαντικά σημεία που πρέπει να σημειωθούν:

Έχω δημιουργήσει μια προσαρμοσμένη δομή, "εργασία", η οποία είναι μια μονάδα δεδομένων που περικλείει όλες τις ιδιότητες μιας εργασίας σε μια ενιαία οντότητα. Οι εργασίες αποτελούνται από ένα όνομα, το οποίο θα είναι το πώς εμφανίζονται στην οθόνη LCD (και ως εκ τούτου περιορίζονται σε 16 χαρακτήρες), τη συχνότητα με την οποία πρέπει να εκτελεστούν και πότε και από ποιον ολοκληρώθηκαν για τελευταία φορά

δομή εργασίας {

char taskName [16]; // Το σύντομο, "φιλικό" όνομα για αυτήν την εργασία, όπως θα εμφανιστεί στην οθόνη int repeatEachXDays. // Κανονικότητα, σε ημέρες, με τις οποίες επαναλαμβάνεται αυτή η εργασία. 1 = Καθημερινά, 7 = Εβδομαδιαία κ.λπ. ανυπόγραφο πολύ lastCompletedTime? // Χρονική σήμανση κατά την οποία ολοκληρώθηκε για τελευταία φορά αυτή η εργασία int lastCompletedBy, // Αναγνωριστικό του ατόμου που ολοκλήρωσε για τελευταία φορά αυτήν την εργασία}

Η κύρια δομή δεδομένων ονομάζεται "taskList", η οποία είναι απλώς μια σειρά ξεχωριστών εργασιών. Μπορείτε να ορίσετε όποιες εργασίες θέλετε εδώ, οι οποίες αρχικοποιούνται με τιμή 0 για το χρόνο κατά τον οποίο ολοκληρώθηκαν τελευταία φορά και -1 για το αναγνωριστικό του χρήστη που τις εκτέλεσε τελευταία

task taskList [numTasks] = {

Στην ενότητα σταθερών στο επάνω μέρος του κώδικα, υπάρχει μια τιμή ενός byte που ονομάζεται "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 για επικοινωνία με το Arduino. Αυτό απαιτεί κάθε συσκευή να έχει μια μοναδική διεύθυνση I2C. Έχω δοκιμάσει μερικές διαφορετικές πλακέτες οθόνης 16x2 και μερικές φαίνεται να χρησιμοποιούν τη διεύθυνση 0x27, ενώ άλλες φαινομενικά πανομοιότυπες σανίδες χρησιμοποιούν 0x3f. Εάν διαπιστώσετε ότι η οθόνη σας δείχνει μόνο μια σειρά τετραγώνων και κανένα κείμενο, δοκιμάστε να αλλάξετε την τιμή διεύθυνσης που ορίζεται στον κώδικα εδώ:

LiquidCrystal_PCF8574 LCD (0x27);

Όταν εντοπιστεί μια ετικέτα RFID, ο κώδικας διαβάζει το αναγνωριστικό 4-byte και το χρησιμοποιεί για να προσπαθήσει να αναζητήσει τον αντίστοιχο χρήστη από τον πίνακα των γνωστών χρηστών. Εάν η ετικέτα δεν αναγνωριστεί, το αναγνωριστικό 4 byte θα σταλεί στην κονσόλα σειριακής οθόνης:

int GetUserFromRFIDTag (byte 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:")); για (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } επιστροφή -1; }

Για να εκχωρήσετε μια ετικέτα σε έναν χρήστη, θα πρέπει να αντιγράψετε το αναγνωριστικό που εμφανίζεται και να εισαγάγετε την τιμή των 4 byte στον πίνακα χρηστών στο επάνω μέρος του κώδικα, δίπλα στον αντίστοιχο χρήστη:

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

Βήμα 5: Χρήση

Χρήση
Χρήση
Χρήση
Χρήση

Εάν το έχετε κάνει μέχρι τώρα, η χρήση του συστήματος θα πρέπει να είναι αρκετά σιωπηρή από τον κώδικα. ανά πάσα στιγμή, οι χρήστες μπορούν να γυρίσουν το περιστροφικό κουμπί για να μετακινηθούν στη λίστα των διαθέσιμων εργασιών. Οι αγγαρείες που είναι ληξιπρόθεσμες επισημαίνονται με έναν αστερίσκο μετά τον τίτλο τους.

Έχοντας επιλέξει μια αγγαρεία για εκτέλεση, οι χρήστες μπορούν στη συνέχεια να σαρώσουν το δικό τους μοναδικό RFID fob στον αναγνώστη για να επισημάνουν την εργασία ως ολοκληρωμένη. Η ταυτότητά τους και η τρέχουσα ώρα θα καταγραφούν και θα αποθηκευτούν στην EEPROM του Arduino.

Για να ρυθμίσετε πρώτα τις σωστές ετικέτες RFID, πρέπει να εκτελέσετε το σκίτσο με τη συνημμένη σειριακή οθόνη Arduino. Σάρωση κάθε ετικέτας και σημειώστε την εξαψήφια τιμή 4-byte UID που εμφανίζεται στη σειριακή οθόνη. Στη συνέχεια, τροποποιήστε τη λίστα χρηστών που δηλώνεται στο επάνω μέρος του κώδικα για να εκχωρήσετε αυτό το αναγνωριστικό ετικέτας στον κατάλληλο χρήστη.

Σκέφτηκα να προσθέσω λειτουργικότητα για να εκτυπώσω μια αναφορά που να δείχνει όλες τις εργασίες που ολοκληρώθηκαν, από τον χρήστη, κατά την τελευταία εβδομάδα, προκειμένου να διαθέσω την κατάλληλη ανταμοιβή χρημάτων τσέπης κάθε εβδομάδα. Ωστόσο, όπως συμβαίνει, τα παιδιά μου φαίνεται να είναι ικανοποιημένα από την καινοτομία της χρήσης του συστήματος για να έχουν ξεχάσει εντελώς τις ανταμοιβές χαρτζιλίκι! Αυτή θα ήταν μια αρκετά απλή προσθήκη όμως και αφήνεται ως άσκηση για τον αναγνώστη:)

Συνιστάται: