Tabla de contenido:

Administrador de tareas: un sistema de gestión de tareas domésticas: 5 pasos (con imágenes)
Administrador de tareas: un sistema de gestión de tareas domésticas: 5 pasos (con imágenes)

Video: Administrador de tareas: un sistema de gestión de tareas domésticas: 5 pasos (con imágenes)

Video: Administrador de tareas: un sistema de gestión de tareas domésticas: 5 pasos (con imágenes)
Video: 📊 Tablero MULTIUSOS de GESTIÓN, para tu TRABAJO, ESTUDIOS, HOGAR ⭐ Descarga la PLANTILLA aquí. 2024, Mes de julio
Anonim
Administrador de tareas: un sistema de gestión de tareas domésticas
Administrador de tareas: un sistema de gestión de tareas domésticas
Administrador de tareas: un sistema de gestión de tareas domésticas
Administrador de tareas: un sistema de gestión de tareas domésticas

Quería tratar de abordar un problema real que enfrentamos en nuestro hogar (y, imagino, el de muchos otros lectores), que es cómo asignar, motivar y recompensar a mis hijos por ayudar con las tareas del hogar.

Hasta ahora, hemos mantenido una hoja laminada de papel A4 pegada al costado del frigorífico. Tiene una cuadrícula de tareas impresas, con cantidades asociadas de dinero de bolsillo que se podrían ganar por completar esa tarea. La idea es que cada vez que uno de nuestros hijos ayude con una tarea, marque esa casilla y, al final de cada semana, sumemos el dinero ganado, borremos la pizarra y empecemos de nuevo. Sin embargo, la lista de tareas está desactualizada y es difícil de cambiar, a veces no recordamos limpiar la pizarra cada semana y algunas tareas deben realizarse con diferentes frecuencias; algunas idealmente se realizarían a diario, mientras que otros pueden ser solo una vez al mes. Entonces, me dispuse a crear un dispositivo basado en Arduino para abordar estos problemas: mi intención era crear algo que permitiera agregar / eliminar / actualizar tareas fácilmente, un mecanismo optimizado para registrar cuándo se había realizado una tarea y asignar crédito al persona adecuada, y una forma de realizar un seguimiento de los diferentes horarios y la frecuencia con la que se deben realizar las diferentes tareas, y resaltar las tareas atrasadas. Y este instructable mostrará cómo salió el dispositivo "Administrador de tareas" resultante.

Paso 1: hardware

Hardware
Hardware
Hardware
Hardware

El proyecto hace uso de varios componentes de hardware bien utilizados y documentados:

  • Arduino UNO / Nano: este es el "cerebro" del sistema. La memoria EEPROM integrada se utilizará para guardar el estado de las tareas incluso cuando el sistema esté apagado. Para facilitar el cableado, he montado el Nano en un protector de tornillos, pero puede soldar o usar conexiones engarzadas a los pines GPIO si lo prefiere.
  • Módulo de reloj en tiempo real (RTC): se utiliza para registrar la marca de tiempo en la que se realizaron las tareas y, al comparar la última hora con la hora actual, determinar qué tareas están atrasadas. Tenga en cuenta que la unidad que recibí fue diseñada para ser utilizada con una batería LiPo recargable (LIR2032). Sin embargo, estoy usando una batería CR2032 no recargable, así que tuve que hacer algunas modificaciones para desactivar el circuito de carga (no querrás intentar recargar una batería no recargable, o podrías enfrentarte a una explosión…).). Específicamente, eliminé las resistencias R4, R5 y R6, y el diodo marcado como D1. Luego creé un puente de soldadura para hacer un cortocircuito donde había estado R6. Estos cambios se ilustran en la foto a continuación.
  • Lector RFID ISO14443 + una etiqueta por usuario- como una forma de "gamificar" el sistema, cada uno de mis hijos tiene su propia etiqueta RFID única. Seleccionar una tarea y luego deslizar su etiqueta por el lector será el mecanismo utilizado para marcar una tarea como completa
  • Pantalla LCD de 16x2: se utiliza para proporcionar la interfaz de usuario al sistema. Al usar una placa que tiene una mochila PCF8574A integral, la placa se puede conectar a través de una interfaz I2C al Arduino, lo que simplifica significativamente el cableado.
  • Codificador rotatorio: será la perilla de control principal que los usuarios girarán para seleccionar las diferentes tareas disponibles
  • Conectores Wago: estos conectores de cierre rápido son una forma conveniente de conectar los componentes o crear buses simples para varios módulos que requieren tierra común o suministro de 5V.

Paso 2: cableado

Alambrado
Alambrado

La pantalla LCD 16x2 y DS1307 RTC utilizan una interfaz I2C, que es conveniente ya que simplifica mucho el cableado, requiriendo solo un par de cables que van a los pines A4 (SDA) y A5 (SCL) del Arduino

El lector RFID MFRC-522 utiliza una interfaz SPI, que utiliza pines de hardware fijo 11 (MOSI), 12 (MISO) y 13 (SCK). También requiere una línea de selección y reinicio esclavo, que he asignado a los pines 10 y 9 respectivamente

El codificador rotatorio requiere un par de pines. Para un rendimiento óptimo, es mejor si estos pines pueden manejar interrupciones externas, por lo que estoy usando los pines digitales 2 y 3. También puede hacer clic en el codificador como un interruptor, y lo conecté al pin 4. Aunque no es utilizado actualmente en el código, ¡puede resultarle útil para agregar funciones adicionales

Para mayor comodidad, estoy usando bloques de conectores de la serie WAGO 222. Estos son conectores de cierre rápido que brindan una manera robusta y fácil de conectar entre 2 y 8 cables juntos, y son muy convenientes para proyectos de Arduino que requieren varios módulos para compartir una línea de tierra o 5V, o donde tiene múltiples dispositivos en el mismo bus I2C o SPI, digamos

El diagrama ilustra cómo todo está conectado.

Paso 3: construcción

Creé una carcasa impresa en 3D muy básica para albergar la electrónica. Coloqué algunos imanes en la parte posterior para que la unidad pudiera fijarse al costado del refrigerador, tal como estaba la lista impresa anterior. También dejé la toma USB expuesta, ya que se usaría si fuera necesario agregar nuevas tareas al sistema, o para iniciar sesión y descargar un conjunto de datos que muestren las tareas completadas, etc.

No guardé los archivos STL después de imprimirlos, pero hay muchos casos similares (¡y probablemente mejores!) Disponibles en thingiverse.com. Alternativamente, puede construir una bonita caja de madera, o simplemente usar una caja de cartón vieja o un recipiente tupperware para guardar los dispositivos electrónicos.

Paso 4: Código

Código
Código

El código con comentarios completos se adjunta como descarga a continuación. Estos son algunos de los puntos más importantes a tener en cuenta:

He creado una estructura personalizada, "tarea", que es una unidad de datos que encapsula todas las propiedades de una tarea en una sola entidad. Las tareas constan de un nombre, que será cómo aparecerán en la pantalla LCD (y, por lo tanto, se limitará a 16 caracteres), la frecuencia con la que deben realizarse y cuándo y quién las completó por última vez

estructura tarea {

char taskName [16]; // El nombre corto y "descriptivo" de esta tarea tal como aparecerá en la pantalla int repeatEachXDays; // Regularidad, en días, con la que se repite esta tarea. 1 = Diario, 7 = Semanal, etc. unsigned long lastCompletedTime; // Marca de tiempo en la que esta tarea se completó por última vez int lastCompletedBy; // ID de la persona que completó esta tarea por última vez};

La estructura de datos principal se llama "taskList", que es simplemente una matriz de tareas separadas. Puede definir las tareas que desee aquí, que se inicializan con un valor de 0 para la hora en que se completaron por última vez y -1 para el ID del usuario que las realizó por última vez

taskList taskList [numTasks] = {

En la sección de constantes en la parte superior del código, hay un valor de un solo byte llamado "eepromSignature". Este valor se utiliza para determinar si los datos almacenados en EEPROM son válidos. Si cambia la estructura del elemento taskList, agregando o quitando tareas, o agregando campos adicionales, digamos, debe incrementar este valor. Puede pensar en él como un sistema básico de numeración de versiones para los datos

const byte eepromSignature = 1;

Al iniciarse, el programa solo intentará cargar datos almacenados en EEPROM si coincide con la firma de los datos definidos en el código.

void restoreFromEEPROM () {

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

La pantalla LCD y el módulo RTC utilizan una interfaz I2C para comunicarse con Arduino. Esto requiere que cada dispositivo tenga una dirección I2C única. Probé un par de tableros de visualización 16x2 diferentes, y algunos parecen usar la dirección 0x27, mientras que otros tableros aparentemente idénticos usan 0x3f. Si encuentra que su pantalla solo muestra una serie de cuadrados y ningún texto, intente cambiar el valor de dirección definido en el código aquí:

LiquidCrystal_PCF8574 lcd (0x27);

Cuando se detecta una etiqueta RFID, el código lee el identificador de 4 bytes y lo usa para intentar buscar el usuario correspondiente en la tabla de usuarios conocidos. Si no se reconoce la etiqueta, el identificador de 4 bytes se enviará a la consola del monitor en serie:

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 ("Se detectó una tarjeta RFID desconocida:")); para (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } return -1; }

Para asignar una etiqueta a un usuario, debe copiar la ID que se muestra e insertar el valor de 4 bytes en la matriz de usuarios en la parte superior del código, junto al usuario correspondiente:

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

Paso 5: uso

Uso
Uso
Uso
Uso

Si ha llegado hasta aquí, el uso del sistema debería estar bastante implícito en el código; en cualquier momento, los usuarios pueden girar el botón giratorio para desplazarse por la lista de tareas disponibles. Las tareas que están atrasadas se marcan con un asterisco después de su título.

Después de seleccionar una tarea para realizar, los usuarios pueden escanear su propio llavero RFID único en el lector para marcar la tarea como completa. Su ID y la hora actual se registrarán y guardarán en la EEPROM del Arduino.

Para configurar primero las etiquetas RFID correctas, debe ejecutar el boceto con el monitor serial Arduino adjunto. Escanee cada etiqueta y tome nota del valor UID hexadecimal de 4 bytes que se muestra en el monitor en serie. Luego, modifique la lista de usuarios declarada en la parte superior del código para asignar este ID de etiqueta al usuario apropiado.

Consideré agregar funcionalidad para imprimir un informe que muestre todas las tareas completadas, por usuario, durante la última semana con el fin de asignar la recompensa de dinero de bolsillo adecuada cada semana. Sin embargo, da la casualidad de que mis hijos parecen estar satisfechos con la novedad de usar el sistema para haberse olvidado por completo de las recompensas del dinero de bolsillo. Sin embargo, esta sería una adición bastante simple y se deja como ejercicio para el lector:)

Recomendado: