Índice:

Abridor cego automático usando EV3: 6 etapas
Abridor cego automático usando EV3: 6 etapas

Vídeo: Abridor cego automático usando EV3: 6 etapas

Vídeo: Abridor cego automático usando EV3: 6 etapas
Vídeo: JANELA AUTOMÁTICA ( Automatic Windows) 2024, Novembro
Anonim
Abridor cego automático usando EV3
Abridor cego automático usando EV3
Abridor cego automático usando EV3
Abridor cego automático usando EV3

Tenho um conjunto de persianas de enrolar no meu quarto que frequentemente me esqueço de abrir ou fechar de manhã ou à noite. Quero automatizar a abertura e o fechamento, mas com uma substituição de quando para quando estou trocando.

Etapa 1: ideias ou soluções potenciais

Depois de pesquisar vários sites como YouTube, Instructables e Thingiverse, descobri que a solução mais comum era motorizar o carretel que enrolava e desenrolava as cortinas usando um motor de passo ou um servo. Encontrei 2 opções principais com várias vantagens e desvantagens.

Ideia 1: Método do carretel em que o motor e a engrenagem são alojados dentro do carretel. Isso tem as vantagens de ser um método simples e elegante, mas tem as desvantagens de exigir modificações importantes na cortina, o cabo não pode mais ser usado e o conjunto seria muito difícil de acessar para manutenção quando implementado.

Idéia 2: método do cabo em que o motor e a engrenagem são alojados no cabo. Isso tem a vantagem de ser mais simples e a montagem pode ser facilmente acessada. No entanto, tem a desvantagem de ser feio e volumoso, bem como o facto de ter de ser preso ao peitoril quando implementado.

Eu prefiro o método do cabo porque é uma solução muito mais simples que não inibe o uso manual do cabo, e o cego não exigirá nenhuma modificação importante. Pretendo torná-lo o mais secreto e compacto possível quando fizer a versão final com um ESP8266.

Etapa 2: Fazendo a montagem

Fazendo a montagem
Fazendo a montagem
Fazendo a montagem
Fazendo a montagem

Fiz este projeto usando meu Lego mindstorms EV3, que tem a funcionalidade de que preciso para mostrar que o projeto poderia funcionar, e estou familiarizado com o software que definitivamente ajudou muito. Uma vez que a cortina usa uma corrente de esferas para acionar o carretel, com o qual as engrenagens de Lego são incompatíveis, decidi que a melhor solução era projetar uma engrenagem com o espaçamento correto da esfera no lado externo - com o orifício padrão "em forma de cruz" no centro, onde imprimiria o design em 3D. Neste ponto, também fiz um botão de calibração e anexei um sensor de luz à minha janela, bem como um botão para atuar como o override.

Etapa 3: projetando o equipamento cego

Projetando o equipamento cego
Projetando o equipamento cego
Projetando o equipamento cego
Projetando o equipamento cego
Projetando o equipamento cego
Projetando o equipamento cego
Projetando o equipamento cego
Projetando o equipamento cego

Desmontei a cortina para ver como ficava a manivela com mais detalhes. Durante a desmontagem, encontrei uma pequena engrenagem de 16 dentes que estava presa por uma bobina tensionada, essa era a peça que eu procurava. Depois de projetar uma réplica do equipamento, adicionei os furos compatíveis com Lego necessários, imprimi as 3 partes separadas e, finalmente, uni-as com supercola. Tive problemas inicialmente em tornar a peça Lego compatível, no sentido de que minha impressora 3D não tinha a resolução de fazer o orifício “x” o suficiente, no entanto, não teve problemas com os orifícios circulares de cada lado dele. Então, substituí o “x” por um orifício circular e ele imprimiu bem. Então, depois de alguns testes, pude ver que ele aguentava o torque e o peso da cortina. Vou linkar meus designs para o equipamento abaixo ou você pode encontrá-lo no Thingiverse em:

Etapa 4: codificando o cego

Codificando o Cego
Codificando o Cego

Eu queria um código que abrisse e fechasse a cortina automaticamente quando chegasse a um nível de luz específico, mas que também tivesse um botão de anulação para que alguém pudesse abrir ou fechar a cortina quando quisesse. Vinculei meu GitHub à versão final do código aqui:

O código para o projeto me levou vários dias para ser concluído, eu tinha a lógica básica do programa funcionando corretamente com o sensor de luz, porém o botão de cancelamento momentâneo não estava funcionando corretamente. Ele alterou o estado da cortina ao ser pressionado, mas faltou a função de “travamento” que significaria que a cortina permaneceria na posição - significando que a cortina imediatamente a rolaria de volta ao que era antes. Corrigi isso usando um bloco “esperar até”, ligado a uma porta lógica OR que lê os valores do sensor de luz e do sensor de toque, que explicarei a seguir.

O código começa calibrando os motores e a cortina, começando com a cortina totalmente aberta e abaixando-a até atingir o sensor de toque na parte inferior, contando quantos quartos de volta são necessários para chegar ao fundo, que é salvo como "Rotações necessárias" variável. Em seguida, ele grava "false" na variável “BlindOpen” que é usada para rastrear a posição do blind. Nesse ponto, o código se divide em 4 loops.

Um desses loops é o loop “Buttonstate” que publica continuamente o estado do botão em uma variável chamada “ButtonPressed”. Isso elimina a necessidade de vários blocos de botão serem colocados no script.

O segundo loop é o “claro ou escuro” que compara continuamente o nível de luz fora da minha janela, a uma constante definida anteriormente no código. Se o resultado estiver abaixo dessa constante, o loop escreverá “falso” na variável “ItIsLight”, enquanto se estiver acima do valor ele escreverá “verdadeiro”.

O terceiro ciclo contém uma lista numérica de 3 opções que basicamente dizem ao cego o que fazer, 0 = cego para baixo, 1 = cego para cima, 2 = não fazer nada porque cego está no lugar correto. O loop começa lendo a variável “BlindShould” que especifica a tarefa correta que o cego deve estar fazendo, então realiza essa tarefa, altera a variável “BlindOpen” para a opção correta e então fica ocioso até que a variável “BlindShould” seja alterada onde ele se repete. Ele usa o valor “RotationsNeeded”, bem como um poder de +/- 100% para mover a persiana totalmente aberta ou fechada.

O quarto e último loop é o mais complexo, é o loop “Decider” que lida com todos os dados e decide o que fazer com cada permutação. Ele faz isso usando "bifurcações na estrada" com base em lógica, onde "o botão é pressionado", "Nível de luz", "Abertura às cegas" são as perguntas verdadeiras ou falsas. Todas as permutações têm uma resposta codificada, que é 0 = cego para baixo, 1 = cego para cima ou 2 = não fazer nada - este valor é escrito na variável “BlindShould” que é então tratada por um loop anterior. Algumas respostas irão então esperar que as variáveis “ItIsLight” e / ou “ButtonPressed” mudem antes de terminar o script, este é apenas o caso para as permutações ativadas pelo botão, caso contrário, ele tentaria imediatamente corrigir sua posição, significando que a cortina retornaria ao seu estado original. Esse processo é então executado em loop para criar um sistema automático robusto e relativamente simples, que pode ser facilmente adicionado e depurado. Ufa.

Etapa 5: toques finais

Toques finais
Toques finais

Decidi posteriormente conectar uma fonte de alimentação de 9 V ao meu EV3 usando alguns pinos de madeira e parafusos como "baterias", isso fez com que o produto não dependesse de baterias e me impediu de ter que trocar as baterias a cada dois dias.

Etapa 6: Avaliação do Projeto

Acho que o projeto correu bem no geral, acabei com um protótipo funcional para a montagem de persianas automáticas, que posso pegar todas as informações relevantes que encontrei durante o projeto e implementar na versão final. Codifiquei o dispositivo com sucesso e, mais tarde, não encontrei nenhum grande problema com o código até agora. Eu teria gostado de tornar o dispositivo mais atraente visualmente, mas mais uma vez é uma prova de conceito e vou me esforçar para torná-lo bonito quando fizer a versão final com um ESP8266. Quando eu fizer o projeto novamente, vou projetar o motor para ficar dentro da cortina, pois isso seria mais fácil de esconder. A maior lição que aprendi é depurar logicamente e pensar, documentar e testar meu código antes de implementá-lo.

Recomendado: