Índice:
Vídeo: Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas: 5 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Eu queria tentar resolver um problema real enfrentado em nossa casa (e, imagino, de muitos outros leitores), que é como alocar, motivar e recompensar meus filhos por ajudarem nas tarefas domésticas.
Até agora, mantivemos uma folha laminada de papel A4 colada na lateral da geladeira. Ele tem uma grade de tarefas impressa, com quantias associadas de mesada que podem ser ganhas para completar essa tarefa. A ideia é que cada vez que um de nossos filhos ajuda em uma tarefa, ele marca aquela caixa e, ao final de cada semana, somamos o dinheiro ganho, limpamos o quadro e recomeçamos. No entanto, a lista de tarefas está desatualizada e difícil de alterar, às vezes não nos lembramos de limpar o quadro a cada semana e algumas tarefas precisam ser realizadas com frequências diferentes - algumas seriam idealmente feitas diariamente, enquanto outros podem ser apenas uma vez por mês. Então, comecei a criar um dispositivo baseado em Arduino para resolver esses problemas - minha intenção era criar algo que permitisse a fácil adição / remoção / atualização de tarefas, um mecanismo simplificado para registrar quando uma tarefa foi realizada e alocar crédito para o pessoa apropriada e uma maneira de controlar os diferentes agendamentos e a frequência com que as diferentes tarefas precisam ser executadas e destacar as tarefas atrasadas. E este instrutível mostrará como o dispositivo "Gerenciador de Tarefas" resultante saiu.
Etapa 1: Hardware
O projeto faz uso de vários componentes de hardware bem usados e documentados:
- Arduino UNO / Nano - este é o "cérebro" do sistema. A memória EEPROM integrada será usada para salvar o estado das tarefas mesmo quando o sistema é desligado. Para facilitar a fiação, montei o Nano em uma tampa de rosca, mas você pode soldar ou usar conexões crimpadas para os pinos GPIO, se preferir.
- Módulo Real-Time Clock (RTC) - usado para registrar a data e hora em que as tarefas foram realizadas e, comparando a última hora com a hora atual, determinar quais tarefas estão atrasadas. Observe que a unidade que recebi foi projetada para ser usada com uma bateria LiPo recarregável (LIR2032). No entanto, estou usando uma bateria CR2032 não recarregável, então precisei fazer algumas modificações para desabilitar o circuito de carga (você não quer tentar recarregar uma bateria não recarregável, ou você pode enfrentar uma explosão….) Especificamente, removi os resistores R4, R5 e R6 e o diodo marcado D1. Em seguida, criei uma ponte de solda para curto-circuito onde R6 estava. Essas mudanças são ilustradas na foto abaixo.
- Leitor RFID ISO14443 + uma etiqueta por usuário - como forma de "gamificar" o sistema, cada um dos meus filhos tem sua própria etiqueta RFID exclusiva. Selecionar uma tarefa e, em seguida, deslizar sua etiqueta no leitor será o mecanismo usado para marcar uma tarefa como concluída
- Visor LCD 16x2 - usado para fornecer a interface do usuário ao sistema. Usando uma placa que possui uma mochila PCF8574A integral, a placa pode ser conectada por meio de uma interface I2C ao Arduino, o que simplifica significativamente a fiação.
- Codificador Rotativo - será o botão de controle principal que os usuários irão girar para selecionar as diferentes tarefas disponíveis
- Conectores Wago - esses conectores snap-shut são uma maneira conveniente de conectar componentes ou criar barramentos simples para vários módulos que requerem aterramento comum ou alimentação de 5V.
Etapa 2: Fiação
O display LCD 16x2 e o DS1307 RTC usam uma interface I2C, o que é conveniente porque torna a fiação muito mais simples, exigindo apenas um par de fios que vão para os pinos A4 (SDA) e A5 (SCL) do Arduino
O leitor RFID MFRC-522 usa uma interface SPI, que usa os pinos de hardware fixos 11 (MOSI), 12 (MISO) e 13 (SCK). Ele também requer uma linha de seleção e redefinição de escravo, que atribuí aos pinos 10 e 9, respectivamente
O codificador rotativo requer um par de pinos. Para um desempenho ideal, é melhor se esses pinos puderem lidar com interrupções externas, então estou usando os pinos digitais 2 e 3. Você também pode clicar no codificador como uma chave, e eu o conectei ao pino 4. Mesmo que não seja usado atualmente no código, você pode achar útil para adicionar recursos adicionais
Por conveniência, estou usando blocos de conectores da série WAGO 222. Esses são conectores snap-shut que fornecem uma maneira robusta e fácil de conectar em qualquer lugar entre 2 e 8 fios juntos, e são muito convenientes para projetos Arduino que requerem vários módulos para compartilhar um aterramento ou linha de 5 V, ou onde você tem vários dispositivos no mesmo barramento I2C ou SPI, digamos
O diagrama ilustra como tudo está conectado.
Etapa 3: construção
Criei uma caixa impressa em 3D muito básica para abrigar os eletrônicos. Coloquei alguns ímãs na parte de trás para que a unidade pudesse ser fixada na lateral da geladeira, assim como a lista impressa anterior. Eu também deixei o soquete USB exposto, já que ele seria usado se novas tarefas precisassem ser adicionadas ao sistema, ou para fazer logon e baixar um conjunto de dados mostrando tarefas concluídas, etc.
Não salvei os arquivos STL após a impressão, mas há muitos casos semelhantes (e, provavelmente melhores!) Disponíveis em thingiverse.com. Alternativamente, você pode construir uma bela caixa de madeira ou apenas usar uma velha caixa de papelão ou recipiente de tupperware para guardar os eletrônicos.
Etapa 4: Código
O código totalmente comentado está anexado para download abaixo. Aqui estão alguns dos pontos mais importantes a serem observados:
Eu criei uma estrutura personalizada, "tarefa", que é uma unidade de dados que encapsula todas as propriedades de uma tarefa em uma única entidade. As tarefas consistem em um nome, que será como aparecem no visor LCD (e, portanto, limitadas a 16 caracteres), a frequência com que precisam ser realizadas e quando e por quem foram concluídas pela última vez
struct task {
char taskName [16]; // O nome curto e "amigável" para esta tarefa, conforme aparecerá no visor int repeatEachXDays; // Regularidade, em dias, com a qual esta tarefa se repete. 1 = Diário, 7 = Semanal, etc. unsigned long lastCompletedTime; // Timestamp em que esta tarefa foi concluída pela última vez int lastCompletedBy; // ID da pessoa que concluiu esta tarefa por último};
A estrutura de dados principal é chamada de "taskList", que é simplesmente uma matriz de tarefas separadas. Você pode definir quaisquer tarefas que desejar aqui, que são inicializadas com um valor de 0 para a hora em que foram concluídas pela última vez e -1 para o ID do usuário que as executou pela última vez
tarefa taskList [numTasks] = {
Na seção de constantes na parte superior do código, há um único valor de byte denominado "eepromSignature". Este valor é usado para determinar se os dados armazenados na EEPROM são válidos. Se você alterar a estrutura do item taskList, adicionando ou removendo tarefas, ou adicionando campos adicionais, digamos, você deve incrementar este valor. Você pode pensar nisso como um sistema básico de numeração de versão para os dados
const byte eepromSignature = 1;
Na inicialização, o programa só tentará carregar os dados armazenados na EEPROM se eles corresponderem à assinatura dos dados definidos no código.
void restoreFromEEPROM () {
int checkByte = EEPROM.read (0); if (checkByte == eepromSignature) {EEPROM.get (1, taskList); }}
O display LCD e o módulo RTC usam uma interface I2C para se comunicar com o Arduino. Isso requer que cada dispositivo tenha um endereço I2C exclusivo. Tentei algumas placas de vídeo 16x2 diferentes e algumas parecem usar o endereço 0x27, enquanto outras placas aparentemente idênticas usam 0x3f. Se você achar que seu display mostra apenas uma série de quadrados e nenhum texto, tente alterar o valor do endereço definido no código aqui:
LiquidCrystal_PCF8574 lcd (0x27);
Quando uma etiqueta RFID é detectada, o código lê o identificador de 4 bytes e o usa para tentar pesquisar o usuário correspondente na tabela de usuários conhecidos. Se a tag não for reconhecida, o identificador de 4 bytes será enviado para o console do monitor serial:
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 ("Cartão RFID desconhecido detectado:")); para (byte i = 0; i <4; i ++) {Serial.print (RFID <0x10? "0": ""); Serial.print (RFID , HEX); } return -1; }
Para atribuir uma tag a um usuário, você deve copiar o ID exibido e inserir o valor de 4 bytes na matriz de usuários no topo do código, ao lado do usuário correspondente:
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}},};
Etapa 5: Uso
Se você chegou até aqui, o uso do sistema deve estar bastante implícito no código; a qualquer momento, os usuários podem girar o botão rotativo para rolar pela lista de tarefas disponíveis. As tarefas atrasadas são marcadas com um asterisco após o título.
Depois de selecionar uma tarefa a ser realizada, os usuários podem escanear seu próprio fob RFID exclusivo no leitor para marcar a tarefa como concluída. Seu ID e a hora atual serão registrados e salvos na EEPROM do Arduino.
Para configurar primeiro as tags RFID corretas, você deve executar o esboço com o monitor serial Arduino conectado. Faça a varredura de cada tag e observe o valor UID hexadecimal de 4 bytes exibido no monitor serial. Em seguida, modifique a lista de usuários declarada na parte superior do código para atribuir esse ID de tag ao usuário apropriado.
Considerei adicionar funcionalidade para imprimir um relatório mostrando todas as tarefas concluídas, por usuário, durante a última semana, a fim de alocar a recompensa em dinheiro de bolso apropriada a cada semana. No entanto, por acaso, meus filhos parecem estar satisfeitos com a novidade de usar o sistema por terem se esquecido completamente das recompensas de mesada! Esta seria uma adição bastante simples, no entanto, e deixada como um exercício para o leitor:)
Recomendado:
Chassi Robô HUNIE para tarefas domésticas ao ar livre: 6 etapas
Chassi Robótico HUNIE para tarefas domésticas ao ar livre: Acima está minha primeira construção de um robô. Eu sou muito hábil com eletrônica, fiz alguns programas de computador três décadas atrás e estou procurando um novo hobby desde que aviões RC não se encaixam mais no meu estilo de vida (muito longe do campo). Estou construindo
Rastreador de tarefas TOYL: 3 etapas (com imagens)
TOYL Task Tracker: Não odeie quando você está planejando trabalhar ou pior, está no meio de uma sessão de trabalho e uma notificação chega em seu telefone - uma "verificação rápida" torna-se horas mais tarde. Além disso, você sabe quanto tempo você trabalha em certas tarefas em relação a
Como controlar luzes / luzes domésticas usando Arduino e Amazon Alexa: 16 etapas (com imagens)
Como controlar a luz / luzes domésticas usando Arduino e Amazon Alexa: Eu expliquei como controlar a luz que está conectada ao UNO e controlada por Alexa
Sistema de gerenciamento de motor para aplicação de içamento usando Arduino Mega 2560 e IoT: 8 etapas (com imagens)
Sistema de gerenciamento de motor para aplicação de içamento usando Arduino Mega 2560 e IoT: Atualmente, os microcontroladores baseados em IoT são amplamente usados na aplicação industrial. Economicamente, eles são usados em vez de um computador. O objetivo do projeto é o controle totalmente digitalizado, registrador de dados e monitoramento do motor de indução trifásico w
Gerenciador de senhas, digitador, macro, carga útil tudo em um !: 11 etapas (com imagens)
Password Manager, Typer, Macro, Payload … All in ONE !: ATENÇÃO: Se você estiver tendo problemas com a fabricação deste dispositivo (pcb, solda ou outros), sinta-se à vontade para me enviar uma mensagem particular aqui ou um e-mail para [email protected]. Terei todo o gosto em enviar um dos pcbs ou dispositivos que já produzo