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.

Exibições: 7690

Responder esta

Respostas a este tópico

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;
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço