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
Tags:
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
}
}
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por