Como este é o post número 100, cá está um belo de um vídeo demonstrativo do funcionamento.
Infelizmente o projecto complicou-se um pouco, mas já ficou resolvido. A lâmpada a partir da qual ia, supostamente, alimentar o circuito não á de 12V como inicialmente disse, mas sim de 230V AC.
Assim, vou usar uma saída regulada a 24V existente do motor (no circuito de controlo) e recorrer-me de um interruptor magnético para detectar quando o portão está aberto e usar o mesmo para alimentar ou não o circuito com o temporizador.
Estas são as fotos dos últimos testes e da construção do circuito em veroboard.
Não preciso acrescentar muito, quando a imagem fala por si.
Deixo a informação de que o comando que aparece na imagem é da "motorline" e o CI que o controla é um HT12E.
O projecto do portão da garagem teve um ligeiro atraso que já está a ser resolvido. Só poderei montar tudo no lugar no próximo fim de semana, pois este cabeça no ar esqueceu-se de comprar o cabo de 20m de 2 condutores para ligar o laser e o LDR.
A interrupção do laser faz reiniciar o contador.
Antes de fechar o portão, vai aguardar aprox. 5min, se o feixe não for interrompido, ele acciona o botão do comando.
PS: Realço o facto de o programa ser extremamente simples, pois é praticamente tudo feito por hardware...
O código (hi-tech C):
/** File: portao cod.c* Author: David Martins** Created on 14 de Outubro de 2012, 0:46*/// PIC12F675 Configuration Bit Settings#include <htc.h>__CONFIG(FOSC_INTRCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF);#define _XTAL_FREQ 4000000unsigned char botao;unsigned int conta;void interrupt INT(void){if (CMIE && CMIF) //interrupção do comparador{TMR0 = 0;conta = 0;PIR1bits.CMIF = 0;}if (T0IF && T0IE){conta++;if(conta==4578){botao=1;}INTCONbits.T0IF = 0;}}void main(){//PORT CONFIGGPIO = 0;TRISIO = 0b000011; //entradas do comparador//TIMER0 CONFIGOPTION_REGbits.nGPPU = 1;OPTION_REGbits.INTEDG = 0;OPTION_REGbits.T0CS = 0;OPTION_REGbits.T0SE = 0;OPTION_REGbits.PSA = 0;OPTION_REGbits.PS = 0b111; //prescaller 256//COMPARATOR CONFIGCMCONbits.CINV = 1;CMCONbits.CM = 0b010;//INTCON CONFIGINTCONbits.GIE = 1;INTCONbits.T0IE = 1; //habilita interrupçãoINTCONbits.T0IF = 0; //interrupt timer0 - off (flag)INTCONbits.PEIE = 1; //int comparadorPIR1bits.CMIF = 0; //limpa flagPIE1bits.CMIE = 1; //Enables the comparator interruptbotao = 0;conta = 0;while(!botao);GP4=1; //acciona o botão__delay_ms(500);GP4=0;//SLEEP modeSTATUSbits.nTO = 1;STATUSbits.nPD = 0;}
O circuito:
Vamos lá ver se este fim de semana próximo tenho tempo de fazer a montagem final deste sistema.
Alterações ao projecto
Vou aproveitar o facto de o motor ter uma lampada acoplada, que liga sempre que se abre o portão, para fazer 2 coisas: por um lado já não necessito de nenhum interruptor magnético ou semelhante para detectar se o portão está aberto ou não, pois isto já pode ser feito através da lampada. Vou poupar também cabos e material da alimentação do circuito, porque posso utilizar os 12V que alimentam a lampada.O micro a usar vai ser um 12F675, apenas por ter alguns disponíveis.
O LDR irá fazer divisor de tensão com outra resistência e entrar num dos input do comparador. No outro input ligarei um potenciômetro (também como divisor de tensão) para calibrar quando o COUT (registo interno) passa de 0 a 1, ou de 1 a 0.
Está a demorar mais tempo pois continuo a mudança de compilador e como tal as linguagens alteram.








