pessoal estou trabalhando em um projeto com ldr, porém o mesmo atua em tempo real, tipo quando a luz diminui a tal ponto imediatamente ele toma uma ação.

eu queria que o programa fizesse uma amostragem não precisa ser grande, somente para ter certeza que luz diminuiu mesmo e não é apenas um "pico" entenderam?

obrigado

Exibições: 884

Responder esta

Respostas a este tópico

pois nao... para isso tem de se acrescentar mais uma variavel de controlo do estado da saida.... mais logo posto a solução .. estou de saida  até logo :)

valeu vou tentando por aqui

Algo assim?

unsigned long TempodeInicio;

int luminosidadeMinima = 500;

int tempoDeEspera=200;//milisegundos

int potPin = 0; //ldr

int VariavelcontroloPrimeiraVez=1;

int varivelDeEstadoSaida=0;

 

void setup() {
 
TempodeInicio= millis();

valorLDR=analogRead(potPin);


}

void loop() {

valorLDR=analogRead(potPin);

 

       if(valorLDR < luminosidadeMinima ){

              if(VariavelcontroloPrimeiraVez==1){

                TempodeInicio= millis();

                VariavelcontroloPrimeiraVez=0;

              }

             if ((millis() - TempodeInicio) > tempoDeEspera) {
            

                //faz actuar a saída
               varivelDeEstadoSaida=1;
                TempodeInicio = millis();

            

            }

   }

if(valorLDR > (luminosidadeMinima – 1) ){

              VariavelcontroloPrimeiraVez=1;

            varivelDeEstadoSaida=0;

          //desactiva a Saída

    }

  

 

 

}

ta dando um erro no programa aqui, ja to ate vesgo de tanto olhar e não achei o pq?

Confere onde você está abrindo e fechando as chaves "{ }".

na quarta linha tem uma chave } q te fexando o loop inteiro e dexaindo de fora quase o resto do programa todo

não era este o problema não, removi a chave porém continuou a mesma coisa

Só agora consegui vir ao computador, passei quase um dia no hospital :(

Já vi que resolveu esse problema :) eu olhei para a imagem e vi que voce tem uma chave a fechar o loop a seguir
" valorLDR=analogRead(potPin);"  o que não confere com o que eu escrevi :)

Para  "suavizar" as leituras da LDR   , tb já vi que um utilizador deu essa ideia :) 

Parabéns por ter conseguido colocar esse programa a  funcionar :)   estamos cá para isto :)

Acho que já está otimamente resolvido com a média, mas queria só dar uma outra ideia, pra pensar:

Considere ALDR como o acumulador do LDR (uma variável criada) e LDR o valor instantaneo.

Em cada loop vc pode fazer:

ALDR=ALDR*0.9+LDR*0.1

Isso faz com que ALDR tenda a ter o valor exato de LDR depois de um tempo, mas se houver uma variação brusca de LDR ela é minimizada.

Matematicamente não sei qual o nome disso... mas já usei e deu super certo.

Eduardo, ficou show de bola, muito simples e funcional..

Funcionou perfeitamente,,

Como será o nome disso matematicamente..?

Saberia me explicar o porque de multiplicar o acumulardo por 0.9 e depois somar ao instantaneo multiplicado por 0.1?

Muito Obrigado

Abraços

A ideia é que o novo valor será composto por 90% de velho e 10% de novo.

Eh algo como a media entre as 10 ultimas leituras.

Só que na media o correto seria guardar as ultimas 10 leituras, sempre que vier uma nova vc despreza a mais velha e usa a que acabou de chegar.

Nesse metodo vc despreza 10% do valor quando multiplica por 0.9 (independente do valor exato, só joga fora 10%) e coloca uma nova amostra, reduzida pra ocupar esses 10%.

Se vc fizer por ex 99% e 1% estará fazendo "como que" uma media das ultimas 100 leituras.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço