Bom dia
Fiz um termostato digital e gostaria de saber como faço uma média de leitura do sensor de temperatura.
vi algum exemplos com "for", contudo não consegui entender a lógica, pra fazer funcionar.
Se alguém tiver a paciência de explicar eu agradeceria muito.
Tags:
Oi TA, bom dia,
Qual tecnologia você está usando para medir a temperatura?
Esta pergunta é porque algumas tecnologias "gastam" muito tempo (muitos milsegundos) para
enviar a temperatura para o ucontrolador.
Como não citou qual ucontraldor está usando, vou tentar explicar em "C" standard.
O for é um "loop"controlado por uma variavel.
Vou escrever um exemplo aqui.
Voce precisa definir uma variavel de contagem.
pode ser:
byte ; (no caso do arduno vai de 0 até 256);
ou
unsigned int; (no caso do arduno vai de 0 até 65535);
ou ainda em qq outro tamanho.
depende da qtde de vezes que vai querer no for.
Agora o for:
byte i = 0; // Variável para usar no for
long accuml = 0; // Variável para guardar o valor acumulado da temperatura
long temp = 0; // Variável para guardar o valor lido da temperatura
for ( i = 0; i<50; i++) // for de 50 vezes: de 0 a 49 = 50 vezes
{
temp = ??? ; // le o valor da temperatura
accuml = accuml + xpto; // Acumula 50 vezes as temperatura lidas
}
temp_M = accuml / 50; // calcula a temperatura média das ultima 50 leituras
O for funciona assim:
Qual o programa chega no for ele olha o que diz o primeiro parâmetro:
ele diz: i = 0 ---> inicie com i = 0.
executa uma vez as instruções dentro das chaves incrementa o "i" (i ++, terceiro parâmetro) ,
volta no for e olha o segundo parâmetro, neste caso diz para executar enquanto "i" for menor que 50.
Então executa + uma vez as instruções dentro das chaves incrementa o "i.
Quando o i for 50, ele saí do for e continua na sequencia do programa.
Espero não ter esquecido nada. kkkk
Rui
Oi TA,
onde usei long, use float , assim terá casas decimais no resultado.
Rui
Rui obrigado, clareou minhas duvidas, fazia tempo que tinha esta duvida, é pouco trabalhado a questão das medias de leitura.
esta semana fiquei sem tempo para os testes, quando finalizar o código posto aqui.
tava mexendo aqui, achei a função que fiz para tirar média do Lm35, mas serve pra qq outro sensor com algumas modificações
//LM35
float lerTemp()// faz a leitura do LM35
{
float Temp = 0;
const int LM35 = 0; //Define o pino do Arduino que o LM35 está conectado
analogReference(INTERNAL);
for (int i = 0; i < 100; i++) //Necessario pois as primeiras leituras apos a mudança de referencia são imprecisas, nao serao utilizadas, aumente ou diminua de acordo com o q perceber necessario
{
Temp = Temp + analogRead(LM35);
delayMicroseconds(300);
}
Temp = 0;
for (int i = 0; i < 1000; i++)
{
Temp = Temp + analogRead(LM35);
}
Temp = Temp / 1000; //Media de mil leituras
Temp = (Temp * 0.1075268817204);// converte a leitura do LM35 em graus Celcius tensão 1.1v AREF/1023
analogReference(DEFAULT);
delay(100); // se notar q nao foi tempo suficiente para estabilizar aumente o valor
return Temp;
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por