Eu queria surpreender minha esposa no Natal. Ela é ruiva, fã de Harry Potter e também mãe; tudo isso me inspirou a criar o relógio Weasley. Tive a ideia em fevereiro, então tive 10 meses para desenvolver e criar o projeto.
Para as pessoas não familiarizadas com Harry Potter e a família Weasley, vou explicar que a família de bruxos Weasley tem um relógio mágico que não mostra a hora, mas a localização dos membros da família, pois cada um tem sua própria flecha. Aqui está um trecho de Harry Potter e o Cálice de Fogo (J. Rowling, 2000):
, . . , , – - . , . , , . «», «», «», « », «», «», «»; , «12», « ». «», , , «».
«, !» – , . , «» « », «» , , .
Demorou algum trabalho de pesquisa para transformar relógios mágicos em relógios reais. Tenho muita experiência em programação, mas só recentemente comecei a escrever código que move algo no mundo físico. Em 2018, comecei a administrar nosso clube de robótica FRC local da FIRST e conheci o mundo dos motores e codificadores.
O fluxograma para atualizar dados no relógio Weasley:
Os usuários em smartphones têm o aplicativo Life360 em execução -> O
aplicativo rastreia a localização e a velocidade dos usuários ->
HA rastreia os usuários e calcula o estado do relógio. Envia atualizações por meio do protocolo MQTT para o Raspberry Pi ->
Um processo weasleyclockd especial está sendo executado no Raspberry Pi, que monitora o fluxo MQTT e controla os servos do relógio ->
Qualquer integração IoT suficientemente avançada é indistinguível de mágica.
Divido o projeto com o relógio em vários subprojetos que já poderiam ser trabalhados e comecei rastreando a localização. No início, usei o aplicativo móvel Find My Phone da Apple, já que todos os meus parentes mais próximos usam iPhones. Mas então mudei para Life360, porque sua API acabou sendo mais amigável para terceiros e me permitiu adicionar parentes de minha esposa que moram conosco e usam telefones Android. Antes mesmo de começar a construir e programar, tive que convencer todos eles a instalar o Life360 e usá-lo. Felizmente, todos concordaram. Minha esposa fez isso por motivos de segurança, nunca sabendo do meu plano secreto de fazer uma surpresa complicada para o Natal.
O próximo desafio foi a criação de um relógio com vários ponteiros. Ingenuamente presumi que tais coisas existissem, e eu teria apenas que comprar algo assim e simplesmente enfiar meus próprios controladores de motor ali. Acabei usando tubos de latão concêntricos de lojas especializadas. Prendi as engrenagens aos tubos com braçadeiras da ServoCity.com.
Para virar as flechas, resolvi usar servo-guinchos com possibilidade de giros múltiplos. Eu comprei da Adafruit e soldou uma placa de expansão Raspberry Pi Servo HAT de 16 canais e comecei a fazer o protótipo. E naquele momento, fui tomada de empolgação ao perceber que tudo ia funcionar.
Então eu precisava de um programa que convertesse os dados brutos de localização em estados específicos do relógio Weasley. Decidi fazer do sistema de automação do Home Assistant um intermediário entre os dados de localização do Life360 e a contagem do estado do relógio. Isso complicou o sistema como um todo, mas me permitiu transferir o fardo da integração do Life360 (e possíveis mudanças de API no futuro) para os ombros do Home Assistant. Rastrear pontos de acesso WiFi específicos de cada pessoa me permite localizar com mais precisão sua localização na casa. Quando, por exemplo, o telefone de alguém se conecta a um roteador de rua, o sistema sabe que a pessoa está no “jardim”.
Painel do assistente doméstico
Tendo escrito as regras para o Assistente Doméstico, eu tenho um painel de controle, onde todos os estados do relógio Weasley estão listados. Agora eu só precisava usar esses dados para mover os ponteiros do relógio.
Home Assistant é um projeto de automação residencial de código aberto com foco no armazenamento e gerenciamento local. Isso contrasta com a maioria dos sistemas de automação de IoT que requerem uma conexão com a Internet e armazenam seus dados na nuvem.
Dado que os estados do relógio já foram calculados no próprio Home Assistant, e o Raspberry Pi e os servo controladores estavam no relógio, eu precisava descobrir como transferir dados do Home Assistant para o relógio Weasley. Eu escolhi o protocolo MQTTpopular para uso de IoT e bem compatível com o Home Assistant. Eu adicionei a automação ao Home Assistant para enviar mensagens MQTT sempre que o status do relógio muda. No lado do ouvinte , escrevi um daemon Python, weasleyclockd , que escuta o fluxo de eventos MQTT e move as setas de acordo.
Eu adicionei algumas informações ao mostrador do relógio para que haja mais dados do que apenas “em casa” ou “perdido”. Nos setores “perdidos” e “a caminho” a posição das setas a partir dos valores indicados é proporcional a distância da casa a pessoa está. Você pode entender rapidamente se uma pessoa está perto de casa, na loja mais próxima ou a cem quilômetros de distância.
Para facilitar a leitura, as setas são escalonadas para evitar aglomeração em setores como a "casa". O setor da casa é dividido em duas partes - a casa principal e o segundo edifício, a oficina.
No projeto, uma parte importante é ocupada pelo desenho do mostrador. Encontrei um lindo pôster do relógio Weasley da Minalima . Este autor desenhou muitos dos desenhos oficiais dos filmes de Harry Potter.
Enquanto fazia este relógio, tentei imaginar como deveria ser a caixa deles. Percebi que seria melhor reutilizar um relógio antigo. Ou você poderia ter apresentado o caso sozinho, mas eu não tinha experiência como marceneiro. Em princípio, era possível, mas eu sabia que os resultados do meu primeiro emprego não me agradariam. O relógio da lareira que vi em lojas de antiguidades locais em Snohomish, Washington, era pequeno demais para o mecanismo do relógio e mostrador. E então a sorte sorriu para mim.
Minha esposa e eu dirigimos até a Ilha Whidbey e entramos na Good Cheer Thrift Store em Langley. Eles venderam um relógio de pêndulo, cujo tamanho, à primeira vista, era adequado tanto para o mecanismo quanto para o mostrador. No entanto, eu não estava pronto para comprá-los. Eu não tinha comigo as dimensões do mostrador e do movimento. E comigo estava minha esposa, a quem esta surpresa se destinava. Então, acabei de me lembrar desse momento e decidi que definitivamente precisava comprar um relógio assim
em casa, armado com todas as medidas, comecei a vasculhar o eBay em busca de um relógio de pêndulo. Esta não era uma tarefa fácil. As horas de trabalho eram caras. Ninguém queria enviá-los. Assim que encontrei um relógio adequado, descobri que eles foram vendidos por auto-pickup na Flórida.
Três meses depois, minha esposa e eu decidimos com toda a família ir para a Ilha Whidbey novamente. Jantamos em Langley de novo e eu rapidamente corri para aquela loja. O relógio do avô ainda estava lá! Eles foram até mesmo descontados em $ 165. Essa feliz coincidência não poderia ser esquecida, então pedi a minha esposa que não fizesse perguntas, pois tudo fazia parte da surpresa. Comprei um relógio e o carregamos em uma van Honda Odyssey já lotada. Agora ela já entendeu que algo foi planejado.
Acabou sendo uma tarefa ainda mais difícil do que a caixa do relógio descobrir como fazer os ponteiros. Inicialmente, eu queria imprimi-los em 3D ou recortá-los em latão. Tenho a sorte de ter em casa alguns de meus próprios especialistas neste assunto. Vendo as impressionantes setas impressas em acessórios para impressão, Decidi pela impressão 3D. Nosso filho Alex acabou de terminar o curso de CAD avançado do ensino médio e foi aprovado no exame de certificação da Solidworks com notas excelentes. Eu carreguei com a fabricação de flechas e elas ficaram ótimas. Meu sogro Ron era o encarregado da impressão 3D. Ele trabalha com uma impressora 3D em nossa equipe de robótica e atua como nosso especialista local no assunto. Para finalizar as flechas, pintei com tinta metálica e acrescentei preto para contrastar.
Movimentos da família durante o dia
Distância de casa
Eu realmente queria me gabar das capacidades do relógio, mas em meio ao auto-isolamento, ninguém saiu de casa. Para resolver esse problema, escrevi um programa que envia sequências gravadas de mensagens MQTT. Eu poderia simular eventos e fazer os ponteiros do relógio se moverem como se as pessoas estivessem indo e vindo.
Relógio concluído
Coloque na cozinha
No final, consegui manter todo o projeto em segredo. Mas não tive tempo com ele no Natal. Portanto, durante as férias, tive que demonstrar o relógio em um estado estático não funcionando. Consegui trazer o esmalte externo e minha esposa ficou surpresa e encantada.
Outros dois meses foram gastos no trabalho de acabamento final - imprimir os componentes em uma impressora 3D, instalar o mecanismo, imprimir e pintar as setas e ajustar o software.
O projeto parece estar concluído, mas quero fazer mais algumas melhorias. Pretendo montar um relógio com seis ou sete ponteiros e automatizar a batida do relógio.
Parafraseando Arthur Clarke: "Qualquer integração IoT suficientemente avançada é indistinguível de mágica."
Na segunda geração de relógios Weasley, gostaria de alterar o seguinte:
- Projete e imprima engrenagens que se prendem diretamente às hastes de latão.
- Use motores com codificadores.
- Corte as flechas do latão para abrir espaço para mais flechas.
Links para meu log de desenvolvimento, fotos e programas:
- Projeto do Relógio Weasley no Github
- weasleyclockd , um programa de controle.
- O Projeto Weasley Striking Clock .
- Montagem do álbum de fotos .
- Log de construção .
- Discussão no HackerNews .