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)
arduino
temperature
1-wire
edebill
fonte
fonte
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.
fonte
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.
fonte
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
fonte
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