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.


Após algumas peripécias, lá consegui fazer o RS.
É possível ver que o prato de baixo está partido, pois foi a unica forma de lhe poder fazer um furo para passar os cabos. Furar cerâmica é tarefa complicada.... muito complicada...

Ficam alguma fotos em baixo da construção e no fim um gráfico da evolução da temperatura ao longo de uma noite, já com o sensor no exterior (obviamente).

PS: Esta semana, o circuito já ficou em teste real em casa. No fim de semana, vou ver se tudo correu bem e se está pronto a ser soldado na PCB, que também já está pronta.
Um obrigado ao Diogo V. Correia, pela ajuda dada na produção da PCB.


A mais antiga gravação de uma voz americana e a primeira atuação musical alguma vez gravada foram recuperadas e digitalizadas por investigadores. A gravação de 78 segundos foi feita em Saint Louis, nos EUA, em 1878 numa folha de alumínio num fonógrafo inventado por Thomas Edison.

Segundo a agência AP, a gravação áudio segundos começa com um pequeno solo de corneta seguido pela voz de um homem a recitar uma cantiga de embalar.

Os investigadores digitalizaram a gravação para que possa ser reproduzida sem destruir a folha de alumínio original.

"Eles fizeram um mapeamento óptico da gravação. Nós não podiamos tocar-lhe. Tocar-lhe iria destruí-la", disse John Schneiter, curador no Museu de Inovação e Ciência dos EUA, citado pelo The Telegraph.

"A lâmpada fundiu... hum... deixa-me ver,  isto com 2 LED's ficava novo!"
Assim aconteceu. Tirar a carcaça do relógio, tirar a lâmpada, fazer algumas medições, soldar os LED's, cobrir de cola a ponta dos LED's para difundir a luz, montar tudo outra vez, está feito!

PS: O teste em breadboard foi feito apenas para verificação de PWM, mas nesta linha não existe.


Após todos os testes estarem realizados é hora de fazer a PCB para implementar o circuito.

O cristal externo é mais estável com variações de temperatura do que o interno que estava usando até agora. A freq escolhida foi de 2MHz, para que na leitura e envio dos dados, conseguisse um bom baud-rate.

Usando este cristal as contas são bastante simples...
Pretendo criar uma interrupção a cada segundo e fazer contagens de 900 segundos, ou seja, 900 interrupções.

O timer utilizado é o Timer 1, que é de 16bits, com um prescaller de 8.

Os cálculos estão feitos em baixo, mas o resumo é que o Timer incrementa a cada 16us, e que o overflow aconteceria a 1.0486s. Para facilitar, inicio o Timer em 3036, para que então a interrupção seja feita a cada segundo.

Esta vem da loja do chinês mais próxima eheheh. Comprei ainda há pouco, pelo preço justo (penso), de 6,5€.
É uma lâmpada composta por 3 LED's de alto brilho, fazendo um total de 3W, com uma durabilidade de 30000h (não ponho muita confiança, tendo o fabrico que tem) e com um brilho equivalente a uma lâmpada de 30W.
Eis algumas fotos. Infelizmente não consegui tirar ao circuito, pois não queria estar a forçar muito (isto do chinês já se sabe :D ), no entanto dá para perceber que possui um pequeno transformador e que não é, como outras, feito em "transformerless".

Esta lâmpada foi substituir uma outra comum de filamento de 60W de potência.
Como é obvio a iluminação não é a mesma, mas vem de encontro ao que queria, que era uma luz menos intensa, no entanto faz um pouco mais do que a metade que eu esperava.


Vale a pena trocar?

Sim! Sem dúvida.
Além de ter mais horas de vida, etc..., temos ainda o consumo.

Lâmpada anterior, 60W, 4h por dia, ao longo de um ano:
Lâmpada LED, 3W, 4h por dia, ao longo de um ano:

Vamos agora para uma comparação de duas lampadas em pé de igualdade, 30W de filamento vs 3W LED.
10 lâmpadas, 30W filamento, 5h por dia, durante um ano:
10 lâmpadas, 3W LED, 5h por dia, durante um ano:

Em suma, em 1 ano as lâmpadas pagam-se a si mesmas e ainda dá para ter lucro!

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.

Vaivém espacial está a deslocar-se através da cidade, em direção ao museu California Science Center

O vaivém Endeavour está a caminho da sua última morada, o California Science Center, em Los Angeles, mas para esta derradeira viagem não precisou de levantar voo, o que é algo insólito para a uma nave espacial.

O percurso de 19 quilómetros, entre o aeroporto internacional e o museu, onde oEndeavour vai juntar-se a outras peças que fizeram a história da conquista espacial, está desde ontem a ser feito por estrada, através da cidade, entre arranha-céus e fileiras de árvores.

Aos 185 milhões de quilómetros percorridos pela nave ao longo de duas décadas no activo, entre a superfície da Terra e a sua órbita, juntam-se agora mais 19 quilómetros, que estão a ser percorridos a uma velocidade média de 3,9 quilómetros por hora. A jornada tem o fim previsto para a próxima madrugada (hora de Lisboa).

A viagem pode ser seguida em directo
no link:

Resumo do fim de semana

Postado por David Martins às 00:15 0 Comments

É triste passar todo um fim de semana na luta com um problema, quando a solução está mesmo ali!

A desinstalar:  MPLABx       ;  - tem de ficar mais "maduro"
A instalar:       MPLAB 8.85 ;

Este senhor (que dispensa qualquer apresentação), está de parabéns!



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.