Índice:

Testando sensores de temperatura - Qual para mim ?: 15 etapas (com fotos)
Testando sensores de temperatura - Qual para mim ?: 15 etapas (com fotos)

Vídeo: Testando sensores de temperatura - Qual para mim ?: 15 etapas (com fotos)

Vídeo: Testando sensores de temperatura - Qual para mim ?: 15 etapas (com fotos)
Vídeo: Como testar sensores de temperatura e degelo. 2024, Novembro
Anonim
Testando sensores de temperatura - qual para mim?
Testando sensores de temperatura - qual para mim?

Um dos primeiros sensores que os novatos na computação física querem experimentar é algo para medir a temperatura. Quatro dos sensores mais populares são o TMP36, que tem saída analógica e precisa de um conversor analógico para digital, o DS18B20, que usa conectividade de um fio, o DHT22, ou o um pouco mais barato DHT11, que só precisa de um pino digital, mas também fornece uma leitura de umidade e, por último, o BME680 que usa I2C (com SPI também em algumas placas de breakout) e fornece temperatura, umidade, gás (VOC) e pressão atmosférica, mas custa um pouco mais.

Quero ver se são precisos e descobrir quaisquer vantagens ou desvantagens. Já possuo um termômetro de mercúrio preciso, que sobrou da impressão fotográfica em cores na época do processamento químico, para compará-los. (Nunca jogue nada fora - você precisará disso mais tarde!)

Vou usar o CircuitPython e uma placa de desenvolvimento Adafruit Itsybitsy M4 para esses testes. Drivers adequados estão disponíveis para todos os dispositivos.

Suprimentos

Minha lista inicial:

  • Microcontrolador Itsybitsy M4 Express
  • cabo micro USB - para programação
  • TMP36
  • DS18B20
  • Resistor de 4,7 K Ohm
  • DHT22
  • BME680
  • Multímetro
  • Placa de ensaio ou placa de tiras
  • Fio de conexão

Etapa 1: circuitos

Circuitos
Circuitos

Os fios laranja são 3,3 V

Os fios pretos são GND

Na parte inferior da placa estão os pontos de teste para medir tensões. (3,3v, saída analógica GND e TMP36)

Os soquetes centrais são, da esquerda para a direita:

  • TMP36: 3,3v, saída de sinal analógico, GND
  • DS18B20: GND, saída de sinal digital, 3,3v
  • DHT22: 3,3v, sinal de saída, vazio, GND
  • BME680: 3.3v, SDA, SCL, vazio, GND

O conector traseiro, para conexão à placa IB M4E, da esquerda para a direita

  • 3,3v
  • TMP36 - saída analógica para pino A2
  • GND
  • DS18B20 saída digital para pino D3 - verde
  • DHT22 saída digital para pino D2 - amarelo
  • SDA - branco
  • SCL - rosa

O resistor de 4,7 K Ohm é um pullup do sinal para 3,3 V para conexão 0ne-wire no DS18B20.

Existem 2 faixas cortadas na parte de trás da placa:

Abaixo da extremidade esquerda dos fios rosa e branco. (Sob o fio amarelo.)

Etapa 2: Método

Método
Método

Para cada sensor, vou escrever um pequeno script para ler a temperatura (e outros itens, se disponíveis) várias vezes e verificar a temperatura em relação ao meu termômetro de mercúrio (Hg). Estarei olhando para ver se a temperatura se compara à leitura de mercúrio e se as leituras estão estáveis / consistentes.

Também examinarei a documentação para ver se as leituras se enquadram na precisão esperada e se há algo que pode ser feito para fazer melhorias.

Etapa 3: TMP36 - Teste inicial

TMP36 - Teste Inicial
TMP36 - Teste Inicial
TMP36 - Teste Inicial
TMP36 - Teste Inicial

A perna esquerda é 3,3 V, a perna direita é GND e a perna central é uma voltagem analógica que representa a temperatura usando a seguinte fórmula. TempC = (milivolts - 500) / 10

Então, 750 milivolts dá uma temperatura de 25 C

Parece haver alguns problemas aqui. A temperatura do termômetro de mercúrio 'normal' é muito mais baixa do que a do TMP36 e as leituras não são muito consistentes - há algum 'tremor' ou ruído.

O sensor TMP36 envia uma tensão proporcional à temperatura. Isso deve ser lido pelo conversor A / D antes que a temperatura seja calculada. Vamos ler a tensão diretamente da perna do meio do sensor com um multímetro e compará-la com o resultado do A / D. A leitura da perna central com meu multímetro é 722 milivolts, muito mais baixa e uma leitura muito estável.

Existem duas coisas que podemos tentar. Substitua o TMP36 por um potenciômetro e ajuste a tensão no cálculo para a tensão real do microcontrolador. Veremos então se a tensão calculada está mais próxima e se o ruído / jitter é reduzido.

Vamos medir a tensão real que está sendo usada no microcontrolador e no A / D. Presumiu-se que era 3.3v, mas na verdade é apenas 3.275v.

Etapa 4: Resultados da Substituição do Potenciômetro

Resultados de substituição de potenciômetro
Resultados de substituição de potenciômetro

Isto é muito melhor. As leituras estão dentro de alguns milivolts com muito menos ruído. Isso sugere que o ruído é do TMP36 e não do A / D. A leitura no medidor é sempre estável - sem jitter. (O medidor pode estar 'suavizando' a saída instável.)

Uma maneira de melhorar a situação pode ser fazer uma leitura média. Faça dez leituras rapidamente e use a média. Também irei calcular o desvio padrão enquanto estou mudando o programa, para dar uma indicação da disseminação dos resultados. Também contarei o número de leituras dentro de 1 desvio padrão da média - quanto maior, melhor.

Etapa 5: Leituras médias e um resultado

Leituras médias e um resultado
Leituras médias e um resultado

Ainda há muito ruído e a leitura do TMP36 ainda é maior do que a do termômetro de mercúrio. Para reduzir o ruído, incluí um capacitor 100NF entre o sinal e o GND

Em seguida, procurei outras soluções na internet e encontrei estas: https://www.doctormonk.com/2015/02/accurate-and-re… Dr. Monk sugere incluir um resistor de 47 k Ohm entre o sinal e o GND.

www.desert-home.com/2015/03/battery-operate … Enquanto esse cara sugere ordenar 15 leituras e calcular a média do centro 5.

Modifiquei o script e o circuito para incluir essas sugestões e incluí uma leitura do termômetro de mercúrio.

Afinal! Agora temos leituras constantes dentro da faixa de precisão da descrição do dispositivo.

Foi um grande esforço fazer o sensor funcionar, que só tem a precisão do fabricante de:

Precisão - Mais alta (mais baixa): ± 3 ° C (± 4 ° C) Eles custam apenas cerca de US $ 1,50 (£ 2)

Etapa 6: DS18B20 - Teste Inicial

DS18B20 - Teste Inicial
DS18B20 - Teste Inicial

Tenha muito cuidado. Este pacote se parece muito com o TMP36, mas as pernas são ao contrário com 3.3v à direita e GND à esquerda. O sinal de saída está no centro. Para fazer este dispositivo funcionar, precisamos de um resistor de 4,7 k Ohm entre o sinal e 3,3 V. Este dispositivo usa o protocolo de um fio e precisamos baixar alguns drivers para a pasta lib do Itsybitsy M4 Express.

Isso custa cerca de US $ 4 / £ 4 Especificações técnicas:

  • Faixa de temperatura utilizável: -55 a 125 ° C (-67 ° F a + 257 ° F)
  • Resolução selecionável de 9 a 12 bits
  • Usa interface de 1 fio - requer apenas um pino digital para comunicação
  • ID exclusivo de 64 bits gravado no chip
  • Vários sensores podem compartilhar um pino
  • ± 0,5 ° C Precisão de -10 ° C a + 85 ° C
  • Sistema de alarme de limite de temperatura
  • O tempo de consulta é inferior a 750 ms
  • Utilizável com alimentação de 3,0 V a 5,5 V

O principal problema com este sensor é que ele usa a interface Dallas 1-Wire e nem todos os microcontroladores possuem um driver adequado. Estamos com sorte, existe um driver para o Itsybitsy M4 Express.

Etapa 7: DS18B20 funcionando bem

DS18B20 funcionando bem
DS18B20 funcionando bem

Isso mostra um ótimo resultado.

Um conjunto estável de leituras sem nenhum trabalho extra e sobrecarga de cálculo. As leituras estão dentro da faixa de precisão esperada de ± 0,5 ° C quando comparadas com meu termômetro de mercúrio.

Há também uma versão à prova d'água por cerca de US $ 10, que usei no passado com igual sucesso.

Etapa 8: DHT22 e DHT11

DHT22 e DHT11
DHT22 e DHT11

O DHT22 usa um termistor para obter a temperatura e custa cerca de $ 10 / £ 10 e é o irmão mais preciso e caro do menor DHT11. Ele também usa uma interface de um fio, mas NÃO é compatível com o protocolo Dallas usado com o DS18B20. Ele detecta umidade e também temperatura. Esses dispositivos às vezes precisam de um resistor pull up entre 3,3 ve o pino de sinal. Este pacote já tem um instalado.

  • Baixo custo
  • 3 a 5 V de potência e E / S
  • 2,5mA máximo de uso de corrente durante a conversão (ao solicitar dados)
  • Bom para leituras de umidade de 0-100% com precisão de 2-5%
  • Bom para leituras de temperatura de -40 a 80 ° C precisão de ± 0,5 ° C
  • Taxa de amostragem não superior a 0,5 Hz (uma vez a cada 2 segundos)
  • Tamanho do corpo 27 mm x 59 mm x 13,5 mm (1,05 "x 2,32" x 0,53 ")
  • 4 pinos, espaçamento de 0,1"
  • Peso (apenas o DHT22): 2,4g

Comparado ao DHT11, este sensor é mais preciso, mais preciso e funciona em uma faixa maior de temperatura / umidade, porém é maior e mais caro.

Etapa 9: Resultados DHT22

Resultados DHT22
Resultados DHT22

São resultados excelentes com muito pouco esforço. As leituras são bastante estáveis e dentro da tolerância esperada. A leitura da umidade é um bônus.

Você só pode fazer leituras a cada segundo.

Etapa 10: Teste DTH11

Teste DTH11
Teste DTH11

Meu termômetro de mercúrio mostrava 21,9 graus C. Este é um DHT11 bem antigo que recuperei de um projeto antigo e o valor da umidade é muito diferente das leituras do DHT22 de alguns minutos atrás. Custa cerca de $ 5 / £ 5.

Sua descrição inclui:

  • Bom para leituras de umidade de 20-80% com 5% de precisão
  • Bom para leituras de temperatura de 0-50 ° C com precisão de ± 2 ° C - menor que o DTH22

A temperatura parece ainda estar na faixa de precisão, mas não confio na leitura de umidade deste dispositivo antigo.

Etapa 11: BME680

BME680
BME680

Este sensor contém temperatura, umidade, pressão barométrica e recursos de detecção de gás VOC em um único pacote, mas é o mais caro dos sensores em teste aqui. Custa cerca de £ 18,50 / $ 22. Existe um produto semelhante sem o sensor de gás que é um pouco mais barato.

Este é um sensor padrão ouro dos cinco. O sensor de temperatura é preciso e com drivers adequados, muito fácil de usar. Esta versão usa I2C, mas a placa breakout Adafruit também pode usar SPI.

Como o BME280 e BMP280, este sensor de precisão da Bosch pode medir umidade com precisão de ± 3%, pressão barométrica com precisão absoluta de ± 1 hPa e temperatura com precisão de ± 1,0 ° C. Como a pressão muda com a altitude e as medições de pressão são tão boas, você também pode usá-lo como um altímetro com ± 1 metro ou melhor precisão!

A documentação diz que é necessário algum 'tempo de queima' para o sensor de gás.

Etapa 12: Qual devo usar?

Qual devo usar?
Qual devo usar?
  • O TMP36 é muito barato, pequeno e popular, mas bastante difícil de usar e pode ser impreciso.
  • O DS18B20 é pequeno, preciso, barato, muito fácil de usar e possui uma versão à prova d'água.
  • O DTH22 também indica umidade, tem preço moderado e é fácil de usar, mas pode ser muito lento.
  • O BME680 faz muito mais do que os outros, mas é caro.

Se eu só quiser temperatura, eu usaria o DS18B20 com precisão de ± 0,5 ° C, mas meu favorito é o BME680 porque ele faz muito mais e pode ser usado em um grande número de projetos diferentes.

Um pensamento final. Certifique-se de manter o sensor de temperatura bem longe do microprocessador. Alguns HATs Raspberry Pi permitem que o calor da placa principal aqueça o sensor, dando uma leitura falsa.

Etapa 13: Pensamentos adicionais e experimentação

Reflexões adicionais e experimentação
Reflexões adicionais e experimentação

Obrigado gulliverrr, ChristianC231 e pgagen por seus comentários sobre o que fiz até agora. Lamento o atraso, mas estou de férias na Irlanda há algumas semanas sem acesso ao meu kit de eletrónica.

Aqui está uma primeira tentativa de mostrar os sensores trabalhando juntos.

Eu escrevi um script para ler os sensores por vez e imprimir os valores de temperatura a cada 20 segundos ou mais.

Coloquei o kit na geladeira por uma hora, para esfriar tudo. Liguei no PC e fiz Mu imprimir os resultados. A saída foi então copiada, transformada em um arquivo.csv (variáveis separadas por vírgula) e gráficos extraídos dos resultados no Excel.

Levou cerca de três minutos para tirar o kit da geladeira antes que os resultados fossem registrados, portanto, ocorreu algum aumento de temperatura nesse intervalo. Suspeito que os quatro sensores têm capacidades térmicas diferentes e, portanto, aqueceriam em taxas diferentes. Espera-se que a taxa de aquecimento diminua conforme os sensores se aproximam da temperatura ambiente. Registrei isso como 24,4 ° C com meu termômetro de mercúrio.

As grandes diferenças de temperatura no início das curvas podem ser atribuídas às diferentes capacidades térmicas dos sensores. Estou satisfeito em ver que as linhas convergem para o final conforme se aproximam da temperatura ambiente. Estou preocupado porque o TMP36 é sempre muito mais alto do que os outros sensores.

Pesquisei as folhas de dados para verificar novamente a precisão descrita desses dispositivos

TMP36

  • Precisão de ± 2 ° C acima da temperatura (típico)
  • Linearidade ± 0,5 ° C (típico)

DS18B20

± 0,5 ° C Precisão de -10 ° C a + 85 ° C

DHT22

temperatura ± 0,5 ° C

BME680

temperatura com precisão de ± 1,0 ° C

Etapa 14: gráfico completo

Gráfico Completo
Gráfico Completo

Agora você pode ver que os sensores finalmente se estabilizaram e concordaram com a temperatura mais ou menos dentro da precisão descrita. Se 1,7 graus forem retirados dos valores TMP36 (± 2 ° C é esperado), há uma boa concordância entre todos os sensores.

A primeira vez que executei este experimento, o sensor DHT22 causou um problema:

saída main.py:

14.9, 13.5, 10.3, 13.7

15.7, 14.6, 10.5, 14.0

16.6, 15.6, 12.0, 14.4

18.2, 16.7, 13.0, 15.0

18.8, 17.6, 14.0, 15.6

19.8, 18.4, 14.8, 16.2

21.1, 18.7, 15.5, 16.9

21.7, 19.6, 16.0, 17.5

22.4, 20.2, 16.5, 18.1

23.0, 20.7, 17.1, 18.7

Erro de leitura DHT: ('Sensor DHT não encontrado, verifique a fiação',)

Traceback (última chamada mais recente):

Arquivo "main.py", linha 64, em

Arquivo "main.py", linha 59, em get_dht22

NameError: variável local referenciada antes da atribuição

Então, modifiquei o script para lidar com esse problema e reiniciei a gravação:

Erro de leitura DHT: ('Sensor DHT não encontrado, verifique a fiação',)

25.9, 22.6, -999.0, 22.6

Erro de leitura DHT: ('Sensor DHT não encontrado, verifique a fiação',)

25.9, 22.8, -999.0, 22.7

25.9, 22.9, 22.1, 22.8

25.9, 22.9, 22.2, 22.9

Erro de leitura DHT: ('Sensor DHT não encontrado, verifique a fiação',)

27.1, 23.0, -999.0, 23.0

Erro de leitura DHT: ('Sensor DHT não encontrado, verifique a fiação',)

27.2, 23.0, -999.0, 23.1

25.9, 23.3, 22.6, 23.2

Erro de leitura DHT: ('Sensor DHT não encontrado, verifique a fiação',)

28.4, 23.2, -999.0, 23.3

Erro de leitura DHT: ('Sensor DHT não encontrado, verifique a fiação',)

26.8, 23.1, -999.0, 23.3

26.5, 23.2, 23.0, 23.4

26.4, 23.3, 23.0, 23.5

26.4, 23.4, 23.1, 23.5

26.2, 23.3, 23.1, 23.6

Não tive problemas com a segunda execução. A documentação da Adafruit avisa que às vezes os sensores DHT perdem as leituras.

Etapa 15: Conclusões

Conclusões
Conclusões

Esta curva mostra claramente que a maior capacidade térmica de alguns sensores aumenta seu tempo de reação.

Todos os sensores registram temperaturas subindo e descendo.

Eles não são muito rápidos em atingir uma nova temperatura.

Eles não são muito precisos. (Eles são bons o suficiente para uma estação meteorológica?)

Você pode precisar calibrar seu sensor com um termômetro confiável.

Recomendado: