LusoRobótica - Robótica em Português

Electrónica => Componentes Genéricos => Tópico iniciado por: Psycop em 21 de Janeiro de 2012, 19:28

Título: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 21 de Janeiro de 2012, 19:28
Olá

Tenho andado a explorar o Arduino ligado a um Temperature Sensor – LM335A, mas não estou a conseguir fazer medições correctas.

Estou a usar o seguinte esquema de ligações:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.danielandrade.net%2Fwp-content%2Fuploads%2F2008%2F07%2Farduino-temperature-sensor-lm35.png&hash=d56ebee75a33a16511d19307c63943c92034ed85)

E o Seguinte Código:
Código: [Seleccione]
float temp;
int tempPin = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  temp = analogRead(tempPin);
  temp = (temp * 0.48828125) - 273.15;
  Serial.println(temp);
  delay(1000);
}

Obtenho sempre leituras na ordem dos 300 / 301. Isso não é possivel, O que estou a fazer de mal?

Tentei também com este exemplo:

(https://lh6.googleusercontent.com/-RsfzgB4YwGk/TXoz9VYShII/AAAAAAAAAFk/KQ5fouPUASA/s400/Untitled+Sketch_bb2.png)

Mas usei um resistor de 10k, mas também não consegui medições correctas, com o seguinte código:

Código: [Seleccione]
float temp_in_celsius = 0, temp_in_kelvin=0, temp_in_fahrenheit=0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{

  //Reads the input and converts it to Kelvin degrees
  temp_in_kelvin = analogRead(0) * 0.004882812 * 100;
 
  //Converts Kelvin to Celsius minus 2.5 degrees error
  temp_in_celsius = temp_in_kelvin - 2.5 - 273.15;
 
  temp_in_fahrenheit = ((temp_in_kelvin - 2.5) * 9 / 5) - 459.67;

  //Print the temperature in Celsius to the serial port
  Serial.print("Celsius: ");
  Serial.println(temp_in_celsius);                 

  //Print the temperature in Fahrenheit to the serial port
  Serial.print("Fahrenheit: ");
  Serial.println(temp_in_fahrenheit);
  Serial.println();


  delay(1000);
}

Alguém me poderá dar umas dicas?

Cumps
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: CBX em 21 de Janeiro de 2012, 20:21
o output do LM335A é em Kelvin e são 10mV por grau

http://www.national.com/mpf/LM/LM335A.html#Overview (http://www.national.com/mpf/LM/LM335A.html#Overview)

portanto a temperatura em ºC será:

(((temp/1023)x5)x100)-273

se não me engano  ;)
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 21 de Janeiro de 2012, 20:23
Podias explicar-me melhor esses cálculos?

E porquê?

Cumps
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: CBX em 21 de Janeiro de 2012, 20:38
o valor lido vai ser um valor de 0 a 1023, mas quer-se um valor em Volts logo: (temp*5)/1023

o output do LM335 é em mV, para converter para Volts multiplica-se por 100

com isto obtens um valor em Kelvin, para converter para Celsius subtrais 273

0 ºK = -273 ºC
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 21 de Janeiro de 2012, 20:41
Mas para isso funcionar tenho de usar o resistor de 10k?

É que tentei isso com o primeiro esquema e estou a receber temps de 28ºc o que não esta correcto!

Cumps
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: CBX em 21 de Janeiro de 2012, 20:45
não, ligado dessa maneira serve para calibrar, para uso normal basta assim:

(https://labitat.dk/w/images/8/8c/Circ-10-lm335-diagram.png)
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 21 de Janeiro de 2012, 21:03
Ou seja, posso ligar os pinos directamente ao arduino sem usar qualquer resistência.

Mas porque é que dessa maneira me está a dar cerca de 10ºc acima do real?

Cumps
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: CBX em 21 de Janeiro de 2012, 21:09
basta usar a R1 do esquema

tens outro para testar?
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 21 de Janeiro de 2012, 21:11
Não tenho outro para testar!

O R1 que dizes é directamente não é? Sem qualquer resistor?

Um facto curioso é que quando coloco o dedo sobre o sensor os valores deviam aumentar, mas diminuem!

Porque será?

Tenho algo invertido?

Cumps
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: CBX em 21 de Janeiro de 2012, 21:37
R1 é o nome da resistencia nesse circuito, o LM335 serve de divisor de tensão que varia conforme a temperatura, essa resistencia é sempre necessária ou os valores não serão os reais.

ligas o pino 0 ao 2º pino do LM335, o 3º ao GND e uma resistencia de 1k dos 5V ao 2º pino do LM335

pode ser que esta imagem seja mais esclarecedora:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.nearsys.com%2Fcatalog%2Fexperiments%2Flm335.jpg&hash=d8c6dda545fcb766329b1011681f66029a7ec087)
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 21 de Janeiro de 2012, 22:01
Olá

Eu estou a colocar assim como está na imagem em anexo!

Estou a fazer mal?
Ainda sou muito noob em esquemas electrónicos!
Cumps

Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: CBX em 21 de Janeiro de 2012, 22:21
assim penso que esteja bem
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 21 de Janeiro de 2012, 22:51
Penso que era eu que tinha a resistência errada!

Estava a usar uma com o seguinte código de cores: (Dourado, Laranja, Preto, Castanho) e dava valores negativos, cerca de -2ºc)

Experimentei com uma (Dourado, e Depois 3 Tons de Vermelho) e começou a dar  temperaturas na ordem dos 18ºc que é +/- a temperatura que está realmente (cerca de 17ºc / 17.5ºc).

Cumps
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: CBX em 21 de Janeiro de 2012, 23:01
a 1ª era de 10k essa é de 2.2k
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 21 de Janeiro de 2012, 23:15
Pois, eu ainda ando muito baralhado com essas coisas!

Amanhã irei procurar pelos códigos de cores de cada uma, e corrigir! No entanto com a de 2.2 parece estar a funcionar bem!

Cumps
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Njay em 22 de Janeiro de 2012, 01:13
(...) o seguinte código de cores: (Dourado, Laranja, Preto, Castanho) (...)
Não admira que andes baralhado, estás a ler o código de trás para a frente :); ou seja essa resistência lê-se castanho-preto-laranja-dourado. O código começa a ler-se do lado em que a risca de cor está mais perto da extremidade da resistência, ou do lado em que estão 3 riscas mais juntas, ou então decoras que dourado e prateado indicam a tolerância e é sempre no final do código.

O LM335 tem um erro inicial de até +/-9ºK (não é explicito na datasheet que é +/- mas é a única forma de fazer sentido), mas podes calibrá-lo com um pot ou corrigir o erro em software. Isto quer dizer que tens que o submeter a uma temperatura conhecida, medir o valor que ele dá na saída e daí aplicar um valor que corrija esse erro em todas as leituras. Por exemplo, se o submeteres a 25ºC e o arduino ler 32º, o erro é de +7º e então passas a subtrair sempre 7ºC às leituras no arduino.

2.2K parece-me uma boa resistência. Essa resistência tem que permitir entre 0.4mA e 5mA de corrente pelo sensor. O intervalo de funcionamento do sensor é entre -40ºC e 100ºC. A 25ºC a saída do sensor está perto de 3V (valor da datasheet). Como é de 10mV/ºC, a 100ºC o sensor terá 3V + (100 - 25) x 10mV = 3V + 750mV = 3.75V, e a -40ºC a saída do sensor é de cerca de 3V + (-40 - 25) x 10mV = 3V + (-650mV) = 2.35V. Aplicando agora a Lei de Ohm podemos calcular a corrente que passa pelo sensor em amos os extremos de temperatura, que é a mesma que passa pela resistência, para vemos se está sempre entre 0.4mA e 5mA:

a -40ºC : (5V - 2.35V) / 2200 Ohm ~ 1.2 mA -> OK!
a 100ºC : (5V - 3.75V) / 2200 Ohm ~ 0.568 mA -> OK!

Com a resistência de 10K o sensor não ia funcionar bem a todas as temperaturas possíveis. Por exemplo a 100ºC, a corrente seria (5V - 3.75V) / 10000 Ohm = 0.125 mA, que é muito baixo para o sensor funcionar.

É melhor a corrente ser baixa do que ser alta, porque quanto maior for a corrente mais o sensor aquece pela potência dissipada nele próprio, introduzindo um erro extra na leitura (o sensor aquece-se a si próprio!).

Fui claro?
Título: Re: Dificuldade com Temperature Sensor – LM335A
Enviado por: Psycop em 22 de Janeiro de 2012, 01:28
Olá

Sim foste muito esclarecedor! =)

De momento os testes que tenho feito usando a resistência de 2.2 k tenho obtido valores bastante correctos, falhando por cerca de 0.5ºc \ 1ºc o que para mim é aceitável!

Irei estar mais atento a estes pequenos pormenores que podem fazer a diferença!

Cumprimentos