Taula de continguts:

Gestor de tasques: un sistema de gestió de tasques domèstiques: 5 passos (amb imatges)
Gestor de tasques: un sistema de gestió de tasques domèstiques: 5 passos (amb imatges)

Vídeo: Gestor de tasques: un sistema de gestió de tasques domèstiques: 5 passos (amb imatges)

Vídeo: Gestor de tasques: un sistema de gestió de tasques domèstiques: 5 passos (amb imatges)
Vídeo: Plataforma de gestió de dejeccions ramaderes i fertilització eDERAN 2024, De novembre
Anonim
Gestor de tasques: un sistema de gestió de tasques domèstiques
Gestor de tasques: un sistema de gestió de tasques domèstiques
Gestor de tasques: un sistema de gestió de tasques domèstiques
Gestor de tasques: un sistema de gestió de tasques domèstiques

Volia tractar d’abordar un problema real a la nostra llar (i, imagino, el de molts altres lectors), que és com assignar, motivar i premiar els meus fills per ajudar-los a fer les tasques domèstiques.

Fins ara hem mantingut un full laminat de paper A4 enganxat al costat de la nevera. Té una quadrícula de tasques impresa, amb quantitats associades de diners de butxaca que es podrien guanyar per completar aquesta tasca. La idea és que cada cop que un dels nostres fills ajuda a fer una tasca, obté una marca a la casella i, al final de cada setmana, sumem els diners guanyats, netejem el tauler i tornem a començar. Tanmateix, la llista de tasques no està actualitzada i és difícil de canviar, de vegades no recordem netejar el tauler cada setmana i algunes tasques s’han de realitzar amb freqüències diferents; algunes es realitzarien idealment diàriament, mentre que d'altres només poden ser-ho un cop al mes. Per tant, em vaig dedicar a crear un dispositiu basat en Arduino per solucionar aquests problemes: la meva intenció era crear alguna cosa que permetés afegir / eliminar / actualitzar fàcilment les tasques, un mecanisme simplificat per registrar quan s’havia fet una tasca i assignar crèdit al persona adequada i una manera de fer un seguiment dels diferents horaris i freqüència amb què cal realitzar diferents tasques, i destacar les tasques vençudes. I aquest instructiu mostrarà com va sortir el dispositiu "Gestor de tasques" resultant.

Pas 1: maquinari

Maquinari
Maquinari
Maquinari
Maquinari

El projecte fa ús de diversos components de maquinari ben utilitzats i documentats:

  • Arduino UNO / Nano: aquest és el "cervell" del sistema. La memòria EEPROM incorporada s’utilitzarà per desar l’estat de les tasques fins i tot quan el sistema estigui apagat. Per facilitar el cablejat, he muntat el Nano sobre un cargol, però podeu soldar-lo o fer servir connexions ajustades als pins GPIO si ho preferiu.
  • Mòdul Rellotge en temps real (RTC): s’utilitza per registrar la marca de temps en què es van realitzar les tasques i, en comparar l’última vegada amb l’hora actual, determinar quines tasques han quedat endarrerides. Tingueu en compte que la unitat que vaig rebre va ser dissenyada per utilitzar-la amb una bateria recarregable LiPo (LIR2032). Tanmateix, estic fent servir una bateria CR2032 no recarregable, de manera que he hagut de fer algunes modificacions per desactivar el circuit de càrrega (no voleu provar de recarregar una bateria no recarregable o és possible que tingueu una explosió …). Concretament, he eliminat les resistències R4, R5 i R6 i el díode marca D1. Llavors vaig crear un pont de soldadura per arribar a on havia estat R6. Aquests canvis s’il·lustren a la foto següent.
  • Lector RFID ISO14443 + una etiqueta per usuari; com a forma de "gamificar" el sistema, cadascun dels meus fills té la seva pròpia etiqueta RFID. Seleccionar una tasca i, després, fer lliscar la seva etiqueta pel lector serà el mecanisme que s’utilitzarà per marcar una tasca com a completa
  • Pantalla LCD de 16 x 2: s'utilitza per proporcionar la interfície d'usuari al sistema. En utilitzar una placa que té una motxilla PCF8574A integral, la placa es pot connectar mitjançant una interfície I2C a l’Arduino, cosa que simplifica el cablejat de manera significativa.
  • Codificador rotatiu: serà el comandament principal que els usuaris giraran per seleccionar diferents tasques disponibles
  • Connectors Wago: aquests connectors de tancament automàtic són una manera còmoda de connectar components junts o de crear autobusos simples per a diversos mòduls que requereixen un subministrament de terra comú o un subministrament de 5 V.

Pas 2: cablejat

Cablejat
Cablejat

La pantalla LCD de 16x2 i el DS1307 RTC utilitzen una interfície I2C, que és convenient ja que fa que el cablejat sigui molt més senzill, ja que només requereixen un parell de cables que passen als pins A4 (SDA) i A5 (SCL) de l’Arduino

El lector RFID MFRC-522 utilitza una interfície SPI, que utilitza pins de maquinari fixos 11 (MOSI), 12 (MISO) i 13 (SCK). També requereix una línia de selecció i restabliment d'esclaus, que he assignat als pins 10 i 9 respectivament

El codificador rotatiu requereix un parell de pins. Per obtenir un rendiment òptim, és millor que aquests pins puguin gestionar interrupcions externes, de manera que estic fent servir els pins digitals 2 i 3. També podeu fer clic al codificador com a commutador i ho heu connectat al pin 4. Tot i que no ho és que s’utilitza actualment al codi, és possible que us sigui útil per afegir funcions addicionals

Per comoditat, estic fent servir blocs de connectors de la sèrie WAGO 222. Es tracta de connectors de tancament instantani que proporcionen una manera fàcil i robusta de connectar-se entre 2 i 8 cables junts, i són molt convenients per als projectes Arduino que requereixen diversos mòduls per compartir una línia de terra o de 5 V o on teniu diversos dispositius a el mateix bus I2C o SPI, per exemple

El diagrama il·lustra com es connecta tot.

Pas 3: construcció

Vaig crear una funda impresa en 3D molt bàsica per allotjar l’electrònica. Vaig col·locar uns imants a la part posterior perquè la unitat es pogués fixar al costat de la nevera, tal com estava la llista impresa anterior. També he deixat el sòcol USB exposat, ja que s’utilitzaria si cal afegir noves tasques al sistema o iniciar sessió i descarregar un conjunt de dades que mostren les tasques completades, etc.

No he desat els fitxers STL després d’imprimir-los, però hi ha molts casos similars (i, probablement, millors!) Disponibles a thingiverse.com. Com a alternativa, podeu construir una bonica caixa de fusta o simplement utilitzar una caixa de cartró vella o un contenidor de tupper per allotjar l’electrònica.

Pas 4: Codi

Codi
Codi

A continuació s’adjunta el codi completament comentat com a descàrrega. A continuació, es detallen alguns dels punts més importants que cal tenir en compte:

He creat una estructura personalitzada, "tasca", que és una unitat de dades que encapsula totes les propietats d'una tasca en una sola entitat. Les tasques consisteixen en un nom, que serà com apareixen a la pantalla LCD (i, per tant, es limiten a 16 caràcters), la freqüència amb què s'han de realitzar i quan i per qui es van completar per darrera vegada

tasca estruct {

char taskName [16]; // El nom curt i "amable" d'aquesta tasca tal com apareixerà a la pantalla int repeatEachXDays; // Regularitat, en dies, amb què es repeteix aquesta tasca. 1 = Diària, 7 = Setmanal, etc. sense signar per últim lastCompletedTime; // Marca de temps en què es va completar per última vegada aquesta tasca int lastCompletedBy; // Identificador de la persona que ha completat aquesta tasca per darrera vegada};

L'estructura principal de dades s'anomena "taskList", que és simplement un conjunt de tasques separades. Aquí podeu definir les tasques que vulgueu, que s’inicialitzen amb un valor de 0 per al moment en què es van completar per última vegada i -1 per a l’identificador de l’usuari que les va realitzar per última vegada

task taskList [numTasks] = {

A la secció de constants de la part superior del codi, hi ha un valor de byte únic anomenat "eepromSignature". Aquest valor s'utilitza per determinar si les dades emmagatzemades a EEPROM són vàlides. Si canvieu l'estructura de l'element taskList, afegint o eliminant tasques o afegint camps addicionals, per exemple, hauríeu d'incrementar aquest valor. Podeu pensar-ho com un sistema bàsic de numeració de versions per a les dades

byte const eepromSignature = 1;

En iniciar-se, el programa només intentarà carregar les dades emmagatzemades a EEPROM si coincideix amb la signatura de les dades definides al codi.

void restoreFromEEPROM () {

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

La pantalla LCD i el mòdul RTC utilitzen una interfície I2C per comunicar-se amb l'Arduino. Això requereix que cada dispositiu tingui una adreça I2C única. He provat un parell de taulers de visualització diferents de 16x2 i alguns semblen utilitzar l'adreça 0x27, mentre que altres taulells aparentment idèntics utilitzen 0x3f. Si la vostra pantalla només mostra una sèrie de quadrats i cap text, proveu de canviar el valor de l'adreça definit al codi aquí:

LiquidCrystal_PCF8574 lcd (0x27);

Quan es detecta una etiqueta RFID, el codi llegeix l’identificador de 4 bytes i l’utilitza per intentar cercar l’usuari corresponent de la taula d’usuaris coneguts. Si no es reconeix l’etiqueta, l’identificador de 4 bytes s’enviarà a la consola del monitor sèrie:

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 ("S'ha detectat una targeta RFID desconeguda:")); for (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } retorn -1; }

Per assignar una etiqueta a un usuari, heu de copiar l'identificador que es mostra i inserir el valor de 4 bytes a la matriu d'usuaris a la part superior del codi, al costat de l'usuari corresponent:

const userLista d'usuaris [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}},};

Pas 5: Ús

Ús
Ús
Ús
Ús

Si heu arribat fins aquí, l’ús del sistema hauria de ser bastant implícit pel codi; en qualsevol moment, els usuaris poden girar el comandament giratori per desplaçar-se per la llista de tasques disponibles. Les tasques vençudes es marquen amb un asterisc després del títol.

Després d’haver seleccionat una tasca per dur a terme, els usuaris poden escanejar el seu propi fob RFID únic a través del lector per marcar la tasca com a completa. La seva identificació i l'hora actual es gravaran i es guardaran a la EEPROM de l'Arduino.

Per configurar primer les etiquetes RFID correctes, haureu d'executar l'esbós amb el monitor sèrie Arduino connectat. Escanegeu cada etiqueta i preneu nota del valor UID hexadecimal de 4 bytes que es mostra al monitor sèrie. A continuació, modifiqueu la llista d'usuaris declarada a la part superior del codi per assignar aquest identificador d'etiqueta a l'usuari adequat.

Vaig considerar afegir funcions per imprimir un informe que mostri totes les tasques realitzades per l'usuari durant l'última setmana per tal d'assignar la recompensa de diners de butxaca adequada cada setmana. Tanmateix, com passa, els meus fills semblen estar satisfets amb la novetat d’utilitzar el sistema per haver oblidat completament les recompenses de diners de butxaca. Tanmateix, aquesta seria una addició bastant simple i es deixa com a exercici per al lector:)

Recomanat: