Ir ao conteúdo
  • Cadastre-se

Ajuda para ler sensor de temperatura com arduino.


Posts recomendados

Olá, estou com dificuldade para efetuar a leitura de um sensor de temperatura (PT100) com o arduino. Gostaria de saber de vocês se algúem ja trabalhou com este sensor. A única forma que eu encontrei para ler o sensor foi a seguinte: coloquei o sensor em série com um resistor de 2k e alimentei o circuito com 5V da porta do arduino, de modo que se formou um divisor de tensão, então eu liguei uma das portas analógicas do arduino de modo que ela lê a tensão sobre o PT100. Feito isso, fiz um gráfico da temperatura em função da tensão correspondente. A partir desse gráfico eu obtive um polinômio do segundo grau que relaciona a temperatura com a tensão lida. 

Por fim, fiz uma regra de três para transformar o valor lido na porta analógica no valor de tensão, em seguida joguei esse valor no polinômio, e teoricamente era pra eu ter o valor da temperatura, mas não é isso que esta acontecendo. Alguém sabe se estou cometendo algum erro ou se falta algo no circuito ? Desconfio que tenha que amplificar o sinal para posteriormente ler com a porta analógica uma vez que as variações são bem pequenas, por exemplo, para uma faixa de temperatura que varia de 0 à 650 º C, a tensão na porta analógica varia de 0,236 à 0,701V. O código do programa é simples e segue abaixo :

 

int ppt100 = A0; float temp;float vpt100;  void setup (){pinMode(ppt100, INPUT);Serial.begin(9600);}void loop(){  vpt100 = ((analogRead(ppt100))*5.0/1024.0);  / lê o valor da porta analógica e converte novamente em tensão  temp = -222.16 + 799.43*(vpt100) + 628.1*(vpt100*vpt100);    /polinômio da temperatura em função da tensão  Serial.println(temp);  delay(2000);}
 
Desde já agradeço e peço desculpas se me extendi demais na explicação.
Link para o comentário
Compartilhar em outros sites

@Otávio.,

 

Eu uso os PT100, mas não uso a famosa equação ..... Eu peguei o modelo exato do meu PT100, e peguei no site do fabricante uma tabela que me dá os valores de 1 a 1 grau, criei a tabela no meu programa, e simplesmente uso ela, com isso ganho um bom tempo de processamento.

 

Meu PT100 é de 10K a 25 graus, portanto usei um outro resistor de 10K 1% , fiz o divisor, e simplesmente meço a tensão e utilizo uma regra de tres para obter o valor do PT100, e com ele vou na tabela que criei e já retorno a temperatura. Mas tome cuidado porque não existe nenhuma garantia que a tensão de alimentação no Arduíno é de 5 Volts exatos, eu já peguei um que tinha 5,2 Volts, e me deixou doido nas conversões, então agora eu primeiro meço a tensão interna do Arduíno para usar esse valor na minha regra de tres.

 

Eu uso apenas o hardware do Arduíno, mas faço a programação em Bascom, então não posso te ajudar no código.

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Considere que o seu CAD possui 1024 valores possíveis na conversão.

Se a sua tensão de referência estiver conectada ao Vdd = 5V, então cada palavra de 10 bits terá a seguinte variação:

1024 está para 5V, assim como x valores do CAD está para a diferença de tensão entre a máxima e a mínima temperatura.

x = (0,701 - 0,236) * 1024 / 5 = 95,232

Ou seja. Entre esses extremos de temperatura o CAD fornecerá apenas 95 possíveis valores diferentes. De 0ºC a 650ºC. Sua variação de temperatura é de 650ºC (de 0ºC a 650ºC).

Então, cada valor do CAD conterá uma faixa de 650ºC / 95 Valores = Cerca de 6,8ºC/valor.

É óbvio que você precisa de amplificar o sinal do PT100 para que ele possa variar entre 0V e 5,00V. Somente assim é que o seu CAD poderá mostrar toda a faixa de temperatura.

Outra opção seria amplificar o sinal de tal modo, que a máxima temperatura de 650ºC coincidisse com o valor 650 do CAD. Assim a palavra do CAD já conteria o valor numérico da temperatura.

MOR_AL

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@aphawk

 

Eu também tenho a tabela do meu aqui, mas acho que fica complicado colocar ela inteira no programa, pois o intervalo que eu vou trabalhar é justamente de 0 à 650º C (não sei se a memória do arduino suportaria a tabela inteira). Estou tentando fazer um controlador de temperatura para uma máquina de um laboratório de incêndios florestais, primeiro estou tentando ler o valor de temperatura a partir do PT100  e depois vou pensar em alguma forma de projetar um sistema em que se possa determinar uma temperatura e quando o sensor atingir esta temperatura um relé será acionado, estava pensando em utilizar um potênciometro, mas por enquanto é só uma ideia. Se tiver alguma dica de como fazer isso também, ficarei muito grato se me ajudar.

Obrigado


@MOR

 

Bem pensado, deve ser isso mesmo, vou tentar fazer um amplificador que possua saída aproximadamente 0V quando a temperatura for 0ºC , e que possua saída 5V quando a temperatura for 650º C. Se tiver alguma dica de como fazer isto ficarei grato se me falar, ainda não tenho muita experiência com amplificadores para instrumentação.

 

Obrigado

Link para o comentário
Compartilhar em outros sites

....

@MOR

 

Bem pensado, deve ser isso mesmo, vou tentar fazer um amplificador que possua saída aproximadamente 0V quando a temperatura for 0ºC , e que possua saída 5V quando a temperatura for 650º C. Se tiver alguma dica de como fazer isto ficarei grato se me falar, ainda não tenho muita experiência com amplificadores para instrumentação.

 

Obrigado

Como dizia o Jack (o estripador). Vamos por partes:

1 - No seu caso, tendo que usar o PT100 eu faria o seguinte:

a) Colocaria um amplificador operacional (AO) entre o PT-100 e a entrada do CAD. O ganho (G) do AO seria de:

NPT = G * V(PT100) - A, onde:

NPT = número gerado na saída do CAD

Desejamos que para uma temperatura de 650ºC, NPT valha 650. deste modo, o valor de NPT será numericamente igual ao valor da temperatura.

V(PT100) = ao valor da tensão gerada no PT100.

Então, para uma temperatura de 650ºC, NPT = 650. Substituindo na equação de NPT, tem-se:

650 = G * 0,701V - A. Com isso temos uma equação com duas incógnitas (G e A). Falta uma equação para que possamos achar o valor de G e de A.

A outra condição é quando a temperatura for de 0ºC, a tensão do PT100 valerá 0,236. Substituindo novamente na primeira equação, tem-se:

0 = G * 0,236V - A

Subtraindo a terceira equação da segunda, tem-se:

650 - 0 = G * 0,701 - G * 0,236 - A - (-A) simplificando:

650 = G * (0,701 - 0,236) + 0

650 = G * 0,465, onde G valerá:

G = 650 / 0,465 = 1397,85

G = 1397,85

Substituindo G na terceira equação, tem-se:

0 = 1397,85 * 0,236 - A.

0 = 329,89 - A

A = 329,89

Substituindo os valores de G e de A na primeira equação, tem-se:

NPT = 1397,85 * V(PT100) - 329,89

Esta é a equação que deve ser formada com o AO.

Conferindo para a temperatura de 650ºC e V(PT100) = 0,701, tem-se:

NPT = 1397,85 * 0,701 - 329,89

NPT = 650,00, o que confere. Agora para a temperatura de 0ºC e V(PT100) = 0,236, tem-se:

NPT = 1397,85 * 0,236 _ 329,89

NPT = -0,09. Quase zero. O erro é de aproximação dos valores dos resultados de G e de A.

 

Com isso o valor do resultado do CAD será numericamente idêntico ao valor da temperatura.

 

Inconvenientes:

B) O PT100 não é linear com a temperatura, logo haverão erros. Quanto? Só plotando os valores de cada temperatura gerada pelo PT100 menos os valores obtidos na equação. Pode ser aceitável...

c) Um CAD com 10 bits precisa de uma tensão de referência entre 4,988V e 5,012V. O LM7805 não possui esta precisaão. TEM que usar um CI como o TL431.

d) O AO TEM que possuir uma tensão de offset e corrente de offset bem baixa, para que não interfira demasiadamente na tensão de saída do AO.

 

Há outra opção, que inclusive já existe até um AO dedicado ao circuito. Usando-se um termopar do tipo K. O CI é o MAX6675. Consulte o manual.

 

Qualquer sensor não vai te dar uma função linear. Em muitos casos pode-se conviver com o erro. Quando não se puder aceitar o erro, Há três técnicas a saber:

1 - Usar tabelas. O problema de se usar tabelas é que para cada temperatura com valor inteiro (no seu caso são 651 valores (o zero está incluído)), Serão necessários dois bytes para poder registrá-los. Então serão necessários 1302 bytes. Isso pode ocupar muita memória de programa.

2 - Usar a equação que relaciona a tensão com a temperatura, que é fornecida pelo fabricante. O inconveniente é que é necessário operação em ponto flutuante (float). Isso aumenta muito a necessidade de memória de programa.

3 - Dividir a curva do PT100 em alguns trechos de retas. Isso reduz as operações a simples soma, subtração, multiplicação e divisão com números inteiros. Fiz um projeto com o termopar tipo K, que pode ser visto no sítio do fórum abaixo

http://www.forumnow.com.br/vip/mensagens.asp?forum=41935&grupo=56847&topico=3012209&pag=1&v=1

 

Bom.

Agora é com você.

Se quiser aprender um pouco de AO estude o meu tutorial a seguir

http://forum.clubedohardware.com.br/forums/topic/1059617-amplificador-operacional-para-novatos-e-enferrujados/

Bons estudos e projetos.

MOR_AL

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Otávio.,

Se voce olhar no site do fabricante existe a equação prontinha para o seu PT100. Mas , como o Mor falou, vai ter de fazer ponto flutuante.

Me diga uma coisa :

1 - qual o valor do seu PT100 ?

2 - qual a resolução de temperatura que voce vai precisar ? Por exemplo, 5 graus de erro está bom para o seu projeto ?

A respeito de tabela com todos esses valores, cabe tranquilamente na memória do Arduíno. Estou supondo dois bytes para a temperatura e dois bytes para a resistencia, seriam menos de 3k para um microprocessador que deve ter 32k.

Quanto a usar um amplificador operacional, pode ser necessário, sim. Seria um tipo de amplificador de diferença de tensão, do jeito que o Mor colocou acima. Mas mesmo assim , se você precisa de muita precisão, vai ter de implementar ou a equação ou a tabela.

Porisso que fiz as perguntas acima, ok ?

Paulo

Link para o comentário
Compartilhar em outros sites

@MOR

 

Ótima pela explicação, ja estudei o básico de Amplificadores Operacionais, vou dar uma analisada mais detalhada nas suas dicas.

 

Obrigado


@aphawk

 

O meu PT100 é 100 ohms à 0ºC, e à  650º C, seu valor é de 329,64 ohms. Quanto à precisão da leitura, um erro de 5º C está aceitável, se for mais que isso não vai compensar devido ao custo dos materiais que estou usando (relé de estado sólido, PT100, arduino, etc).Estava vendo e realmente é possível gravar toda a tabela no microcontrolador, pois como você disse sua memória é 32k. Vou refletir com calma qual alternativa é mais viável, se amplificar o sinal , ou utilizar a tabela.  

 

Só mais uma dúvida sobre o PT100 : no documento que consegui baixar, não diz nada a respeito dos parâmetros máximos que o sensor suporta, porém ouvi dizer que para um PT100, uma corrente de alguns poucos miliamperes (cinco por exemplo) pode danificá-lo, é verdade isso ?

 

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • Membro VIP

É isso aí. Um PT100 até que é meio linear se comparado a um termopar. Pra este último existem até tabelas de linearização. Pra certa aplicação do passado distante para controlar certa faixa de temperatura, até usei este artifício "tabeliístico" em detrimento às formulas

Link para o comentário
Compartilhar em outros sites

Putz, as equacoes dos termopares sao de quinta ordem para cima, logo em algum intervalo elas devem estar proximas em valor da sua de 2¤ grau mas depois a dispersao deve ser grande.

Nem tanto.

Fiz uma aproximação da curva do termopar do tipo k por um grupo de retas. O erro permitido ficava abaixo de 1ºC. Se ainda me lembro, o intervalo ia de 0ºC até 1370ºC.

Não usei ponto flutuante. Usei inteiro com 32 bits.

Fiz uma apresentação, que explica o método. O problema é que está com extensão .pps e não dá para colocar aqui.

Coloquei no 4share, mas se não se inscrever ou logar, vai ficar sendo muito desviado. Acho que eles querem que você se registre, aí fica fácil baixar o arquivo.

Segue o link.

http://www.4shared.com/office/WLBWwyoTba/Termopar2__2_.html

Espero que gostem.

MOR_AL

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!