Cuprins:
Video: Task Manager - un sistem de gestionare a treburilor casnice: 5 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
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
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
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
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
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:
Șasiu robot HUNIE pentru treburile casnice în aer liber: 6 pași
Șasiu robot HUNIE pentru treburile casnice în aer liber: Deasupra este prima mea construcție a unui robot. Sunt destul de la îndemână cu electronica, am făcut câteva programe de computer în urmă cu trei decenii și am căutat un nou hobby, deoarece RC Airplanes nu se mai încadrează în stilul meu de viață (prea departe de teren). Eu construiesc
Notificare sonerie pentru deficiențe de auz prin intermediul automatizării casnice (ESP-acum, MQTT, Openhab): 3 pași
Notificare sonerie pentru deficiențe de auz prin intermediul automatizării caselor (ESP-acum, MQTT, Openhab): În acest instructiv vă arăt cum mi-am integrat soneria normală în automatizarea casei. Această soluție este potrivită pentru persoanele cu deficiențe de auz. În cazul meu, o folosesc pentru a fi notificat dacă camera este ocupată și zgomotoasă la o petrecere de ziua de naștere a copiilor. Eu
Sistem integrat de gestionare a inventarului: 10 pași (cu imagini)
Sistem integrat de gestionare a inventarului: mi-am dorit întotdeauna o modalitate accesibilă de a ține evidența a tot ceea ce se află în cămară, așa că acum câteva luni am început să lucrez la un proiect care să facă exact asta. Scopul a fost de a crea un sistem simplu, accesibil, care să fie foarte ușor de utilizat, în timp ce, de asemenea, stori
Sistem inteligent de gestionare a gunoiului: 23 de pași
Sistem inteligent de gestionare a gunoiului: INTRODUCERE. Problemă actuală sau problemă legată de acest proiect Principala problemă cu societatea noastră actuală este acumularea de deșeuri solide. Va avea un impact mai mare asupra sănătății și mediului societății noastre. Detectarea, monito
Sistem de gestionare a motorului pentru aplicații de ridicare folosind Arduino Mega 2560 și IoT: 8 pași (cu imagini)
Sistem de gestionare a motorului pentru aplicații de ridicare folosind Arduino Mega 2560 și IoT: În prezent microcontrolerul bazat pe IoT este utilizat pe scară largă în aplicația industrială. Din punct de vedere economic, acestea sunt utilizate în locul unui computer. Obiectivul proiectului este să controlăm complet digitalizat, să înregistrăm date și să monitorizăm motorul cu inducție trifazată