Índice:

Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas: 5 etapas (com imagens)
Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas: 5 etapas (com imagens)

Vídeo: Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas: 5 etapas (com imagens)

Vídeo: Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas: 5 etapas (com imagens)
Vídeo: O melhor aplicativo para TAREFAS e PRODUTIVIDADE em 2022/2023 2024, Novembro
Anonim
Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas
Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas
Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas
Gerenciador de tarefas - um sistema de gerenciamento de tarefas domésticas

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

Hardware
Hardware
Hardware
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

Fiação
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

Código
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

Uso
Uso
Uso
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: