Cuprins:

Task Manager - un sistem de gestionare a treburilor casnice: 5 pași (cu imagini)
Task Manager - un sistem de gestionare a treburilor casnice: 5 pași (cu imagini)

Video: Task Manager - un sistem de gestionare a treburilor casnice: 5 pași (cu imagini)

Video: Task Manager - un sistem de gestionare a treburilor casnice: 5 pași (cu imagini)
Video: Cum sa castigi banul folosind cea mai pretioasa resursa: TIMPUL! 2024, Iunie
Anonim
Task Manager - un sistem de management al treburilor casnice
Task Manager - un sistem de management al treburilor casnice
Task Manager - un sistem de gestionare a treburilor casnice
Task Manager - un sistem de gestionare a treburilor casnice

Am vrut să încerc să abordez o problemă reală cu care se confruntă gospodăria noastră (și, îmi imaginez, cea a multor alți cititori), care este modul în care îmi pot aloca, motiva și recompensa copiii pentru că au ajutat la treburile casnice.

Până în prezent, am păstrat o foaie laminată de hârtie A4 lipită pe partea laterală a frigiderului. Are imprimată o grilă de sarcini, cu sume asociate de bani de buzunar care ar putea fi câștigate pentru finalizarea acelei sarcini. Ideea este că de fiecare dată când unul dintre copiii noștri ajută cu o corvoadă, primesc o bifă în acea căsuță și, la sfârșitul fiecărei săptămâni, adunăm banii câștigați, ștergem tabla și începem din nou. Cu toate acestea, lista sarcinilor este depășită și este greu de modificat, uneori nu ne amintim să ștergem placa curată în fiecare săptămână, iar unele sarcini trebuie să fie efectuate cu frecvențe diferite - unele ar fi ideal realizate zilnic, întrucât altele ar putea fi doar o dată pe lună. Așadar, am început să creez un dispozitiv bazat pe Arduino pentru a rezolva aceste probleme - intenția mea a fost să creez ceva care să permită adăugarea / eliminarea / actualizarea ușoară a sarcinilor, un mecanism raționalizat pentru înregistrarea când a fost efectuată o sarcină și alocarea creditului către o persoană adecvată și o modalitate de a ține evidența diferitelor programe și frecvență cu care trebuie îndeplinite diferite sarcini și de a evidenția sarcinile restante. Și acest instructable va arăta cum a ieșit dispozitivul „Manager de activități” rezultat.

Pasul 1: Hardware

Hardware
Hardware
Hardware
Hardware

Proiectul folosește mai multe componente hardware bine utilizate și documentate:

  • Arduino UNO / Nano - acesta este „creierul” sistemului. Memoria EEPROM de la bord va fi utilizată pentru a salva starea sarcinilor chiar și atunci când sistemul este oprit. Pentru ușurința cablării, am montat Nano pe un parbriz, dar puteți prefera să lipiți sau să utilizați conexiuni sertizate la pinii GPIO, dacă preferați.
  • Modulul Ceas în timp real (RTC) - utilizat pentru a înregistra marcajul de timp la care au fost efectuate sarcinile și, comparând ultima dată cu ora curentă, se determină ce sarcini sunt restante. Rețineți că unitatea pe care am primit-o a fost proiectată pentru a fi utilizată cu o baterie reîncărcabilă LiPo (LIR2032). Cu toate acestea, folosesc o baterie CR2032 care nu poate fi reîncărcată, așa că a trebuit să fac câteva modificări pentru a dezactiva circuitul de încărcare (nu doriți să încercați să reîncărcați o baterie care nu poate fi reîncărcată sau s-ar putea să vă confruntați cu o explozie …).). Mai exact, am eliminat rezistențele R4, R5 și R6 și dioda marcată D1. Apoi am creat un pod de lipit pentru a traversa locul unde fusese R6. Aceste modificări sunt ilustrate în fotografia de mai jos.
  • Cititor RFID ISO14443 + o etichetă per utilizator - ca o modalitate de „gamificare” a sistemului, fiecare dintre copiii mei are propriul tag RFID unic. Selectarea unei sarcini și apoi glisarea etichetei pe cititor va fi mecanismul utilizat pentru a marca o sarcină ca fiind completă
  • Afișaj LCD 16x2 - utilizat pentru a furniza interfața utilizatorului sistemului. Prin utilizarea unei plăci care are un rucsac integrat PCF8574A, placa poate fi conectată printr-o interfață I2C la Arduino, ceea ce simplifică cablarea în mod semnificativ.
  • Codificator rotativ - va fi butonul principal de control pe care utilizatorii îl vor roti pentru a selecta diferite sarcini disponibile
  • Conectori Wago - acești conectori cu închidere rapidă sunt un mod convenabil de a conecta componentele împreună sau de a crea autobuze simple pentru mai multe module care necesită fiecare o împământare comună sau o alimentare de 5 V.

Pasul 2: Cablare

Cablare
Cablare

Afișajul LCD 16x2 și DS1307 RTC folosesc ambele o interfață I2C, ceea ce este convenabil, deoarece simplifică cablarea, necesitând doar o pereche de fire care merg la pinii A4 (SDA) și A5 (SCL) ai Arduino

Cititorul RFID MFRC-522 utilizează o interfață SPI, care folosește pinii hardware fixi 11 (MOSI), 12 (MISO) și 13 (SCK). De asemenea, necesită o linie de selectare și resetare a sclavului, pe care am atribuit-o pinilor 10 și respectiv 9

Codificatorul rotativ necesită o pereche de pini. Pentru o performanță optimă, este mai bine dacă acești pini pot gestiona întreruperile externe, așa că folosesc pinii digitali 2 și 3. De asemenea, puteți face clic pe codificator ca un comutator și l-am conectat la pinul 4. Deși nu este utilizat în prezent în cod, s-ar putea să fie util pentru adăugarea de funcții suplimentare

Pentru comoditate, folosesc blocuri de conectori din seria WAGO 222. Aceștia sunt conectori cu închidere rapidă care oferă o modalitate robustă și ușoară de conectare oriunde între 2 și 8 fire împreună și sunt foarte convenabili pentru proiectele Arduino care necesită mai multe module pentru a partaja o linie de masă sau de 5V sau unde aveți mai multe dispozitive pe același autobuz I2C sau SPI, să zicem

Diagrama ilustrează modul în care totul este conectat.

Pasul 3: Construcție

Am creat o carcasă tipărită 3D de bază pentru a găzdui electronica. Am așezat niște magneți pe spate, astfel încât unitatea să poată fi fixată pe partea laterală a frigiderului, așa cum a fost lista tipărită anterioară. De asemenea, am lăsat mufa USB expusă, deoarece aceasta ar fi folosită dacă ar trebui adăugate noi sarcini la sistem sau pentru a vă conecta și descărca un set de date care arată sarcinile finalizate etc.

Nu am salvat fișierele STL după tipărire, dar există o mulțime de cazuri similare (și, probabil, mai bune!) Disponibile pe thingiverse.com. Alternativ, puteți construi o cutie frumoasă din lemn sau pur și simplu utilizați o cutie veche de carton sau un container de tupperware pentru a găzdui electronica.

Pasul 4: Cod

Cod
Cod

Codul complet comentat este atașat ca descărcare de mai jos. Iată câteva dintre cele mai importante puncte de remarcat:

Am creat o structură personalizată, „task”, care este o unitate de date care încapsulează toate proprietățile unei sarcini într-o singură entitate. Sarcinile constau dintr-un nume, care va fi modul în care apar pe ecranul LCD (și, prin urmare, sunt limitate la 16 caractere), frecvența cu care trebuie să fie efectuate și când și de către cine au fost finalizate ultima dată

struct task {

char taskName [16]; // Numele scurt, „prietenos” pentru această sarcină, așa cum va apărea pe afișaj în repeatEachXDays; // Regularitate, în zile, cu care se repetă această sarcină. 1 = Zilnic, 7 = Săptămânal etc. nesemnat lung lastCompletedTime; // Timestamp la care această sarcină a fost finalizată ultima dată în lastCompletedBy; // ID-ul persoanei care a finalizat ultima dată această sarcină};

Structura principală a datelor se numește „taskList”, care este pur și simplu o serie de sarcini separate. Puteți defini orice sarcini doriți aici, care sunt inițializate cu o valoare 0 pentru momentul la care au fost finalizate ultima dată și -1 pentru ID-ul utilizatorului care le-a efectuat ultima dată

task taskList [numTasks] = {

În secțiunea de constante din partea de sus a codului, există o valoare cu un singur octet numită „eepromSignature”. Această valoare este utilizată pentru a determina dacă datele stocate pe EEPROM sunt valide. Dacă modificați structura elementului taskList, adăugând sau eliminând sarcini sau adăugând câmpuri suplimentare, să zicem, ar trebui să creșteți această valoare. Vă puteți gândi la acesta ca la un sistem de numerotare a versiunilor de bază pentru date

octet const eepromSignature = 1;

La pornire, programul va încerca să încarce datele stocate în EEPROM numai dacă se potrivește cu semnătura datelor definite în cod.

void restoreFromEEPROM () {

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

Afișajul LCD și modulul RTC utilizează o interfață I2C pentru a comunica cu Arduino. Acest lucru necesită ca fiecare dispozitiv să aibă o adresă I2C unică. Am încercat câteva plăci diferite de afișare 16x2, iar unele par să folosească adresa 0x27, în timp ce alte plăci aparent identice folosesc 0x3f. Dacă afișajul dvs. arată doar o serie de pătrate și niciun text, încercați să modificați valoarea adresei definită în cod aici:

LiquidCrystal_PCF8574 lcd (0x27);

Când este detectată o etichetă RFID, codul citește identificatorul de 4 octeți și îl folosește pentru a încerca să caute utilizatorul corespunzător din tabelul utilizatorilor cunoscuți. Dacă eticheta nu este recunoscută, identificatorul de 4 octeți va fi trimis la consola monitorului serial:

int GetUserFromRFIDTag (octet 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 ("Card RFID necunoscut detectat:")); for (octet i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } returnează -1; }

Pentru a atribui o etichetă unui utilizator, ar trebui să copiați ID-ul afișat și să introduceți valoarea de 4 octeți în matricea de utilizatori din partea de sus a codului, lângă utilizatorul corespunzător:

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

Pasul 5: utilizare

Utilizare
Utilizare
Utilizare
Utilizare

Dacă ați ajuns până aici, utilizarea sistemului ar trebui să fie destul de implicită din cod; în orice moment, utilizatorii pot roti butonul rotativ pentru a derula lista sarcinilor disponibile. Treabele care sunt restante sunt marcate cu un asterisc după titlul lor.

După ce au selectat o corvoadă de realizat, utilizatorii pot apoi să scaneze propriul fob RFID unic pe cititor pentru a marca sarcina ca fiind finalizată. ID-ul lor și ora curentă vor fi înregistrate și salvate în EEPROM-ul Arduino.

Pentru a configura mai întâi etichetele RFID corecte, ar trebui să rulați schița cu monitorul serial Arduino atașat. Scanați fiecare etichetă și luați notă de valoarea UID hexagonală de 4 octeți afișată pe monitorul serial. Apoi modificați lista de utilizatori declarată în partea de sus a codului pentru a atribui acest ID etichetei utilizatorului corespunzător.

Am luat în considerare adăugarea de funcționalități pentru a imprima un raport care arată toate sarcinile efectuate, de către utilizator, în ultima săptămână, pentru a aloca recompensa corespunzătoare în fiecare săptămână. Cu toate acestea, așa cum se întâmplă, copiii mei par a fi mulțumiți de noutatea utilizării sistemului de a fi uitat complet de recompensele banilor de buzunar! Cu toate acestea, aceasta ar fi o adăugare destul de simplă și este lăsată ca exercițiu pentru cititor:)

Recomandat: