Confiabilidade dos sensores de temperatura DS18x20

11

Estou usando o DS18x20 da Maxim (na verdade, tenho mais de uma variante) sensores de temperatura com 1 fio para registrar as temperaturas em vários cômodos da minha casa uma vez por minuto. Cerca de uma leitura em mil, recebo algo completamente falso. No meio de uma sequência que aumenta gradualmente de 65F para 70F, recebo algo como -32.1F ou 15.64F.

Alguém mais teve esse tipo de problema ou isso está errado com minha configuração? Se este é apenas um problema conhecido com essas coisas, terei que fazer algo como fazer três leituras e jogar fora o erro.

Apenas algumas declarações sobre minha configuração:

  • Estou rodando a 3.3V
  • Estou verificando a soma de verificação da leitura quando ela volta ao arduino e ela corresponde (ou acho que sim - sempre pode haver um erro nesse código).
  • Estes estão ficando sem energia normal, não com energia parasita.
  • Eu tenho o resistor de pull-up 4.7K no lugar.
  • Só estou usando um único sensor em cada plataforma de detecção.
  • O sensor está em uma PCB conectada ao arduino que está lendo.
  • Vejo o mesmo problema ao ler em uma variedade de diferentes arduinos (diecimilla, pro-mini, costume caseiro)
edebill
fonte

Respostas:

5

Eu tenho visto isso ocasionalmente com o DS18B20. Para o meu aplicativo, era bastante simples filtrar os resultados espúrios com código.

user274
fonte
É bom ouvir que alguém mais parece algo assim. Qual foi o seu algoritmo de filtragem?
Edebill 5/12/2009
Eu sugiro que você faça o que disse, faça 3 leituras, 5 seria melhor, 7 melhor que isso, mas se houver um erro de algo em torno de 1/1000, será necessário apenas 3. Pegue a mediana. Problema será resolvido. se você pegar 5, será uma ocorrência esquisita ter um problema.
Kortuk
Estou fazendo 5 agora. Tentei apenas elevar o valor mais alto de 2, mas um erro ainda ocorreu na noite passada (tenho 3 sensores lendo a cada minuto, então recebo milhares de pontos de dados por dia).
Edebill 06/12/2009
3

Se você não conseguir encontrar a fonte das leituras erradas, deve ser fácil filtrá-las e extrapolar das leituras anteriores , ou interpolar entre as leituras se a retrospectiva for importante. Como você está amostrando uma vez por minuto, pode até copiar a última leitura; a temperatura ambiente dificilmente mudará em um minuto.

stevenvh
fonte
3

Isso pode ocorrer devido à leitura incorreta do controlador de um ou mais bits da resposta de temperatura sob certas condições de alta carga ou devido à interferência elétrica que corrompe um ou mais bits.

Dê uma olhada na folha de dados aqui http://www.rentron.com/Files/ds18b20.pdf

Na página 5, mostra que a sequência binária exata para 85C é:

+85°C 0000 0101 0101 0000

Da mesma forma, para 25C, é:

+25.0625°C 0000 0001 1001 0001

Em alguns casos, se o controlador falhar um pouco, você obterá um valor que é a temperatura real, expressa em binário e com deslocamento de bit. Geralmente, esse valor é 1 / 2x o valor alvo em C.

Às vezes, você pode obter interferência elétrica na linha e o controlador lê um número inteiro de 1s. Nesse caso, você obterá um número como 15,64, que expresso em binário, na verdade, é muito próximo de números entre 65 e 70F, exceto com um monte de 1s no começo.

gbronner
fonte
2

Pelo que vale a pena, trabalhei um pouco com o DS18B20 há alguns meses. Eu gravei um vídeo curto e escrevi no meu blog, que possui links para exemplos e código de exemplo. Espero que isso possa ajudar um pouco! http://dailyduino.com/archives/552

Morgellon
fonte
2

Tenho 13 deles correndo em minha casa há cerca de quatro anos. O banco de dados é mais difícil de manusear (acompanhei todas as amostras). Mas eu não vi esse tipo de comportamento. Em vez disso, de vez em quando um sensor congela e bloqueia todos os outros, a única maneira de sair disso (que eu descobri) era desligar a tensão de alimentação por alguns segundos. Então, adicionei um pequeno relé à minha placa e, sempre que o micro detecta esse comportamento, ele redefine toda a cadeia de sensores. Isso acontece algumas vezes por semana.


fonte
Hmm. Talvez eu deva ligá-los apenas quando estiver prestes a fazer uma leitura.
227 edebill