Mostrar mensagens com a etiqueta Proj. Port. Garagem. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Proj. Port. Garagem. Mostrar todas as mensagens

Como este é o post número 100, cá está um belo de um vídeo demonstrativo do funcionamento.


O portão estava aberto tal como era de esperar :).

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 4000000


unsigned 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 CONFIG
    GPIO   = 0;
    TRISIO = 0b000011;                                    //entradas do comparador

    //TIMER0 CONFIG
    OPTION_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 CONFIG
    CMCONbits.CINV = 1;
    CMCONbits.CM   = 0b010;
               
    //INTCON CONFIG
    INTCONbits.GIE    = 1;
    INTCONbits.T0IE   = 1;                               //habilita interrupção
    INTCONbits.T0IF   = 0;                                //interrupt timer0 - off (flag)
    INTCONbits.PEIE   = 1;                              //int comparador
               
    PIR1bits.CMIF     = 0;                                  //limpa flag
    PIE1bits.CMIE     = 1;                                  //Enables the comparator interrupt
   
    botao = 0;
    conta = 0;
   
    while(!botao);
   
    GP4=1;                                                            //acciona o botão
    __delay_ms(500);
    GP4=0;
   
   
    //SLEEP mode
    STATUSbits.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.
Deste micro vou utilizar, além do clock, o timer, saídas digitais, etc..., vou recorrer ao módulo comparador.
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.
Isto além de ser muito útil vai também tornar tudo mais prático, pois não tenho de reprogramar várias vezes, até acertar no valor da ADC que corresponde a aberto ou fechado.

Está a demorar mais tempo pois continuo a mudança de compilador e como tal as linguagens alteram.

Este é mais um daqueles projectos relâmpagos para ficar pronto em 1 semana, ou seja, no próximo fim de semana tenho de aplicar isto.

Problema:

Já não é a primeira vez que o portão da garagem fica aberto por distracção. Este portão automático tem apenas a função de abrir e fechar, ordenada sempre pelo comando remoto.
Numa saída mais repentina de casa, aliada a um simples esquecimento, faz com que o portão fique aberto todo o dia deixando a garagem à mercê de quem quiser...

Solução:

A solução será algo bastante simples.
1º - aguardar que o portão se abra;
2º - assim que o portão abrir, ligar um feixe de laser, que deverá embater numa LDR;
3º - contar o tempo que já passou sem que o feixe fosse interrompido;
4º - passado 1min sem interromper o feixe, o circuito accionará o botão de um comando remoto para fechar o portão;
5º - aguardar que o portão feche;
6º voltar ao 1º passo;

Explicação de cada passo:

Um interruptor magnético ficará preso na parede e um iman no portão. O interruptor, NA (normalmente aberto), impedirá que o circuito seja alimentado. Assim: circuito desligado = portão fechado.

Um laser dos chineses, tal como já AQUI mostrei, irá ser colocado do interior da garagem e fará incidir a luz numa LDR, do outro lado do portão.
Sempre que a luz estiver contra a LDR, esta terá uma resistência baixa, caso contrário terá uma resistência muito elevada.

Iniciar o timer de um pequeno MCU, fazendo o reset ao mesmo sempre que o feixe for interrompido.


Se no final de 1min, o feixe não foi mais interrompido, quer dizer que o carro já saiu. É gerado então um pulso na direcção de um transistor. O transistor actuará como "chave" e fará a vez do "dedo humano", ao pressionar o botão do comando.

Após tudo isto, o circuito iniciará uma nova contagem de apenas 30 segundos. Se nestes 30 segundos, a alimentação não for cortada (pelo interruptor magnético) repetir-se-à o passo 4.

Fim das tarefas, com o circuito tudo em OFF.