Tabla de contenido:
Video: Administrador de tareas: un sistema de gestión de tareas domésticas: 5 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
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
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
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
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
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:
Chasis de robot HUNIE para tareas domésticas al aire libre: 6 pasos
Chasis de robot HUNIE para tareas domésticas al aire libre: Arriba está mi primera construcción de un robot. Soy bastante hábil con la electrónica, hice algo de programación informática hace tres décadas y he estado buscando un nuevo pasatiempo desde que RC Airplanes ya no encaja en mi estilo de vida (demasiado alejado del campo). Estoy construyendo
Sistema de gestión de inventario integrado: 10 pasos (con imágenes)
Sistema de gestión de inventario integrado: siempre he querido una forma asequible de realizar un seguimiento de todo en mi despensa, así que hace un par de meses comencé a trabajar en un proyecto que haría precisamente eso. El objetivo era crear un sistema simple y asequible que fuera muy fácil de usar y al mismo tiempo almacenara
Sistema de gestión de motores para aplicaciones de elevación con Arduino Mega 2560 e IoT: 8 pasos (con imágenes)
Sistema de gestión de motores para aplicaciones de elevación con Arduino Mega 2560 e IoT: hoy en día, los microcontroladores basados en IoT se utilizan ampliamente en la aplicación industrial. Económicamente se utilizan en lugar de una computadora. El objetivo del proyecto es el control, registrador de datos y monitorización totalmente digitalizados del motor de inducción trifásico w
Administrador de contraseñas, mecanografía, macro, carga útil ¡Todo en UNO !: 11 pasos (con imágenes)
Password Manager, Typer, Macro, Payload … ¡Todo en UNO !: ATENCIÓN POR FAVOR: Si tiene problemas con la fabricación de este dispositivo (PCB, soldadura u otros), no dude en enviarme un mensaje privado aquí o un correo electrónico a [email protected]. Estaré encantado de enviar uno de los PCB o dispositivos que ya produc
Administrador de contraseñas en Aruino Pro Micro o por qué mantenerlo simple cuando existe una forma elaborada: 15 pasos (con imágenes)
Password Keeper en Aruino Pro Micro o Why Keep It Simple When Elaborate Way Exists !: Parece que el principal problema con los microcontroladores para los fanáticos de la electrónica (especialmente los principiantes) es averiguar dónde aplicarlos :) Electrónica actual, especialmente digital , se parece cada vez más a una magia negra. Solo los sabios de 80 niveles son