Gostaria de confeccionar a sua própria placa de controle para seu portão automático? Com acionamento de 2 portões (2 motores) independentes? Com um simples PIC12F675? Leia mais…
O aumento de veículos levou a se construir casas com mais de uma garagem, ou com portões duplos. Em tais casos, necessita-se de 2 motores elétricos para acionar tais portões. O proposto por este projeto visa atender a esta necessidade. Caso deseje fazer uma placa para acionar um único motor, então veja o artigo ‘Como fazer uma placa para portão automático’.
Veja o esquema abaixo:
Para realizar o aprendizado dos controles foi usado 2 botões ‘LEARN’, sendo um para o motor ‘A’ e o outro para o motor ‘B’.
Os dois estão ligados ao pino 7 do pic, que ora se comporta como entrada e ora como saída. De tempos em tempos, este pino é testado para ver se um dos interruptores foi pressionado. Se forem pressionados por mais de 10 segundos, apagarão os controles gravados no respectivo canal. Por exemplo, apertando ‘LEARN_A’ por mais de 10 segundos apagará somente os controles gravados para acionar o motor ‘A’. O mesmo ocorre ao canal ‘B’ se ‘LEARN_B’ for pressionado por mais de 10 segundos. Também, o led ‘LEARN’ piscará 3 vezes para indicar o apagamento bem-sucedido. Para aprender um controle, aperte o botão do controle que deseja gravar e aperte momentaneamente o botão ‘LEARN_A’ OU ‘LEARN_B’, conforme deseje qual dos motores seja acionado. Em alguns casos, é pratico gravar o botão da esquerda para um motor e o da direita para o outro motor, de forma que, usando um único controle remoto, possamos acionar ambos motores, quando desejado. Note que esta versão aceita somente o aprendizado de controles remotos comerciais (chaveirinhos) que usem o ci interno HT6P20B e que sejam da mesma frequência do receptor da placa (se comprar para 433mhz , compre o receptor para esta frequência também). Permite gravar até 42 controles, do canal ‘A’ + ‘B’, no total.
Após aprendido um controle, ao aciona-lo, irá ligar um rele. Apertando de novo, irá desligar este rele. Um novo acionamento irá ligar o rele oposto (muda a direção). Aperte de novo, e este rele desligará. Assim, temos um ciclo de 4 tempos: liga RL1A, desliga RL1A, liga RL1B, desliga RL1B.
Quando o pino 6 está acionando como saída, o transistor e o rele RL1A, então o pino 5 vira entrada, para monitorar o acionamento do reed switch (S2) de final de curso. E quando o pino 5 estiver acionando o outro rele (RL1B), o pino 6 passa a ser entrada e monitora o reed switch de fim de curso (S1). O princípio é o mesmo para o canal ‘B’. É muito importante o posicionamento correto dos imãs que irão acionar os reed switch, quando chegar no final do curso desejado. Nunca regule a ponto de dar fortes pancadas contra o batente do portão, mas que desligue um 5 milimetros antes de encostar (no caso de portão deslizante).
O tempo máximo para um acionamento é de 30 segundos, temporizado internamente. Isto evita, em caso de travamento do portão, que se queime o motor. Caso necessite de menos ou mais tempo, mude o valor do equate ‘TMAX_MOTORLIGADO’, onde cada unidade vale por volta de 10 segundos.
OBS. Este artigo é apenas didático, sendo feita a montagem apenas em placa de protoboard, estando sujeito a bugs ainda não identificados. Esta sendo fornecido o arquivo ASM, que poderá ser modificado conforme a necessidade do hobista.
Segue o arquivo ASM:
Segue o arquivo HEX:
Para os amantes do compilador ‘C’, segue o código ‘c’ para esta placa (não reparem, pois é o primeiro programa feito em ‘c’)
O código ‘Hex’ gerado pelo compilador ‘C’:
O código ‘List’ gerado pelo compilador ‘C’:
Segue uma sugestão de Placa de circuito impresso (Descompactar e abrir com PcbExpress):
(Obs. Por favor, confira a placa com o esquema antes de executa-la, pois não foi ainda testada na prática)
Curiosidades:
Prós e contras da globalização
O perigo dos mares ‘ruidosos’
Primeiros sinais de anorexia
Não conte ‘carneirinhos’
Contaminação por termomêtros
Sua ligação foi completada – Como?
Ouvindo sons do espaço
Porque as estrelas são cintilantes?
Outros assuntos:
O Holocausto – Porque?
Como lidar com dívidas
Como resolver diferenças no casamento
Como tratar o conjuge com respeito
Como evitar ferir com palavras
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico
Está obcecado com sua aparência?
Até o próximo artigo!!!
Hola Claudio
estos entregados de ht en España no asisten aquí al
que asiste es el MC145026 yo pregunto se podrida cambiar
por el HT6P20B para el control del portón automático
SALUDOS MANUEL
Bom dia Claudio.
Sou estudante de tecnologia mecatrônica e estou fazendo um projeto para meu tcc e este projeto esta sendo muito útil para o que necessito e desde já agradeço por vc disponibiliza los.
Bom o que eu gostaria de saber e se existe uma maneira de contar o tempo entre um fim de curso e outro, mas podendo ser acionado o controle em qualquer momento mesmo fazendo a contagem, consegui fazer esta contagem mas não consigo acionar o controle a rotina fica presa. Você pode me dar alguma dica de como fazer? Obs: tem que ser em assembly. Desde já agradeço
Olá Tiago!
Desculpe, mas eu não entendi bem o que você quer fazer. Contar o tempo entre os fins de curso? Para que, se puder Informar? Tem que ser preciso? Para contar e receber você tem que colocar a sua rotina de tempo em uma posição que seja repetida na rotina de recepção do tx. Mas a precisão do tempo não será 100 por cento.
Claudio
Boa tarde Claudio obrigado por responder, estou fazendo um carregador e uma esteira, como funciona: o carregador pega uma peça e deposita na esteira, a peça ficara sempre em um local onde estará um fim de curso e levara esta peça para a esteira, quando ele soltar a peça a esteira começa a funcionar, qual o meu problema as vezes meu braço passa do fim de curso e solta a peça fora da esteira, então pensei que se consegui se medir o tempo de um fim de curso ao outro conseguiria desligar o motor sempre no lugar exato. Porque teria que ficar recebendo o tx: caso houvesse algum problema ou o carregador não pegasse a peça conseguira para lo e fazer voltar ao inicio.
Mudei o software para o pic 16f628a para ter mais pinos.
Muito obrigado pela atenção.
Olá Tiago!
Acredito que esteja usando motores cc com escovas. O fim de curso tem que ser regulado para acionar um pouco antes do ponto desejado, pois tem um tempo que continua girando, exceto se previu o freio dinâmico, com parada instantânea. Medir o tempo pode ser uma solução paliativa, pois com diferença de peso entre as peças, a lubrificação dos elementos do braço deficiente que endureça o movimento pode afetar também.
Não sei se estou errado mas não seria melhor usar motor de passo onde você poderia controlar a distancia programando quantos passos para ir de um lugar para o Outro!
Mesmo com peças de peso diferente ou enrijecimento do braço ele sempre manterá constante a distancia percorrida.
Mas não sou expert nesta área. Tente blogs de robótica com pic.
Caso queira continuar com a ideia de contar tempo, poderá usar o timer 0 com prescaller divindo por 256 , sem usar interrupção para não atrapalhar a rotina de recepção. No programa principal, você testa o flag de estouro do timer e se houve estouro, apaga o flag e incrementa um contador. Cada overflow do timer será de 65535 useg. Se o tempo for maior que 2 seg, use mais um contador em cascata para guardar o tempo. Use o fim de curso para entrar nesta rotina e o segundo para gravar o resultado. (Suponho mais ou menos que seja isto que você quer).
Cláudio
Muito obrigado Claudio é isso mesmo que preciso muito obrigado pelas dicas.
E gostaria de ressaltar minha gratidão e admiração pelo seu trabalho. Muito obrigado.
Olá Claudio,
Seria possível fazer uma versão com memoria externa 24c16?
Olá Silva45!
É possível de ser feita mas usando um microcontrolador com pelo menos 2 ports a mais para comunicar com a eeprom (i2c).
Cláudio
Claudio, uma boa opção seria incluir uma rotina que ao receber o comando do controle ele parta um motor e conte um tempo e depois parta o outro motor, dessa forma não necessitaria gravar dois botões! Me corrija por favor se minha lógica estiver equivocada! 😉
Agradeço por compartilhar seu códigos e sou um admirador do seu trabalho!
Olá Silva45! Agradeço muito por compartilhar sua opinião conosco. O objetivo de gravar 2 botões é justamente permitir o acionamento de forma individual dos motores , que, logicamente, abrirão/fecharão 2 portões distintos. Temos uma situação interessante em que 2 portões são deslizantes, sendo que para abrir um tem que fechar o outro (uma folha do portão cobre a outra). Quando se tratar de basculantes e pivotantes, poderíamos sim usar esta sua idéia, desde que o morador não se importe de ficar um pouco mais ‘exposto’ ao sair com o carro por se abrir 2 portões, ao invés de um único pelo qual passará. Até neste caso, nem precisaria de um tempo, acionando os 2 motores juntos. Mas pode ser que eu não tenha entendido bem o que você quer nos passar. Neste caso, de mais detalhes de como pensa em usar o método citado por você.
Cláudio
No comentário anterior me referia a um portão de folha dupla pivotante, esse tipo de portão um lado encaixa no outro e se o lado que estiver atrás partir primeiro empurraria o segundo, podendo ocasionar problemas, seria por esse motivo o delay de partida entre os motores…
Olá Silva45! Parece que cada caso de instalação necessita de uma solução diferente, como apresentado por você. Talvez seja uma matéria de estudo e um futuro novo artigo.
Obrigado por sua contribuição e serão sempre bem-vindas.
Cláudio
Salve!! Grande Larios… estava meio parado e resolvi recomeçar… escrevi um codigo em C para uma central de portao… utilizei teu receptor de controle do ht6p20 pq não sei esse código. Vendo esse post, vi que tem a versao em C. Teria como eu extrair a rotina de recepçao do controle(aprendizado, eeprom, e apagamento) para eu incluir no meu código e utilizar somente o pic 16f628A? pode me ajudar na separação do código? Grande abraço.
Olá Waymovie! Você poderá estudar as rotinas usadas e aproveitar aquilo que pode se encaixar em seu programa. Mas garanto, que por estarem ‘muito aninhadas’ estas rotinas, ficará um pouco complicado ‘extrair’ apenas pedaços. Tenter entender a idéia por trás de cada função escrita e adaptar para seu programa.
Claudio
Putz… dei uma boa analisada, mas meu conhecimento está aquém desse teu código… gostaria muito de montar meu projeto do Portão em um único PIC, mas vou ter que continuar a usar o 12F679 com o teu Receptor + o 16F628A com o meu códgo de movimentação do Portão. Achei muito complexo o código de decodificação do HT6P20. O ideal seria seria se alguém postasse aquele códifo do teu projeto do Receptor e C. Vou esperar pra ver… muito obrigado por teus projetos… são muitos legais. Abraço