Sensor de Temperatura

Dec 03
2010

Ja falei nele varias vezes sempre a dizer que havia de colocar aqui um post sobre o Tal sensor de temperatura que veio com o Kit que comprei na Inmotion pois bem aqui fica.

Depois de muito batalhar com o mesmo sensor, la consegui por o gajo a funcionar, é simples é so usar um esquema de um sensor de luz, algo que também falarei em breve,  e basicamente aquilo deita ca para fora os dados em mV e pumba, temos a temperatura. Facil. nao? ERRADO… não é assim tao facil, mas ao fim de muito pesquisar na net e de uma grande ajuda do Nuno e com o datasheet do (NTC_Thermistor) do respectivo componente enviado pelo Filipe la consegui por o bixo a deitar ca para fora a temperatura em graus centígrados.

Ora bem em primeiro lugar vamos ver o que precisamos:

  1. Arduino
  2. NTC Thermistor
  3. 1 Resistencia de 10Kohm
  4. Uma breadboard ou qualquer outra
  5. Cabos diversos. 3 bastam

Para fazermos as ligações fica aqui uma imagem tirada do livro “Getting Started with Arduino”. Espero mais uma vez nao ser processado por direitos de autor…

Apesar de na imagem estar representado um LDR aka Sensor de Luz, o esquema de ligação é o mesmo, por isso nao se assustem. Em seguida podem usar o codigo que indico para verem o que acontece. Apesar de no codigo estar defenido um Led, nao o indiquei nas peças necessarias, porque iremos usar o Led que vem onboard com o arduino.

// Example 06A: Blink LED at a rate specified by the
// value of the analogue input
#define LED 13
// the pin for the LED
int val = 0;	// variable used to store the value // coming from the sensor
void setup() { 
 
pinMode(LED, OUTPUT); // LED is as an OUTPUT
                  // Note: Analogue pins are
                  // automatically set as inputs
} 
 
void loop() {
val = analogRead(0); // read the value from the sensor
digitalWrite(13, HIGH); // turn the LED on
delay(val); // stop the program for some time
digitalWrite(13, LOW); // turn the LED off
delay(val); // stop the program for // some time
}

O que voces irão ver com este codigo é precisamente o que é indicado no inicio do post, ou seja o led vai piscar mais ou menos consoante a temperatura obtida pelo sensor. Podem testar aquecendo o sensor, nao usem um isqueiro como eu da primeira vez, que ia queimando os cabos…
Bem, agora que ja vimos como isto funciona, vamos alterar um pouco o codigo para percebermos que valores é o que sensor está a dar.

int analoginput=1;
 
void setup() {
  pinMode(analoginput, INPUT);
  Serial.begin(9600);
}
 
void loop()
{
  Serial.println(analogRead(analoginput));
  delay(1000);
}

Com este codigo sem mais nada o que vão conseguir ver é os mV do sensor a passar no Serial Port. Será, se tiverem tudo bem montado, algo parecido com

808
800
793
791
793
795
797

e por ai fora…bem…isto nao nos diz muito, e ainda por cima se aquecerem o sensor, vão verificar que os valores diminuem em vez de aumentarem… por isso é que me deu luta, mas ao fim de algum tempo lá consegui encontrar um código que em conjugação com a datasheet me permitiu converter para graus. Aqui deixo a parte do codigo que faz isso e vou tentar explicar…

 
#include <math.h>; //penso que esta lib nao é obrigatoria, mas testem das duas maneiras.
 
int value=0;
int analoginput=0;
int R1=1000;  // Valor da Resistencia
int Vin=5;
float tmp=0.0;
float Vout=0.0;
float f=0.0;
 
void setup() {
 pinMode(analoginput, INPUT);
 Serial.begin(9600);
}
 
void loop()
{
 //Serial.println(analogRead(0));
 Vout=1023-analogRead(0); // Invert the number because of setup
 //Serial.println(Vout);
 Vout=(Vout/1024.0)*5;
 Serial.println(Vout);
 f=1000*exp(-20000/298.15); // 298.15K = 25C, 20000 é o valor standard para o NTC a 25º com uma resistencia de 10Kohms
 tmp=(R1*Vin)/Vout-R1;
 value=(20000/log(tmp/f))-273.15;
 Serial.println(value+7);
 delay(1000);
}

Simples não? ok eu sei que não é assim tão simples, mas basicamente os valores mais importantes são o R no qual é definida a resistência que esta no circuito e o 20000 que é o valor que vem indicado na datasheet para uma temperatura media de 25º.
Também importante é o +7 que aposto que se lerem o código vão ficar a pensar, mas porque raio é que este gajo meteu aqui um +7, ele nao percebe nada disto…bem a parte de não perceber nada disto é verdade, mas pronto… na realidade o +7 é o que gosto de chamar uma “VALENTE martelada” porque meti um termometro “oficial” ao lado do meu e 7º era a diferença de graus que estava a obter. Sei que deve haver uma maneira mais correcta de fazer isto, mas para já este funciona e da-me os valores mais ou menos correctos.

Enfim…este post ja se alongou muito, mas espero que de para perceber alguma coisa e ja sabem duvidas e sugestões, como sempre são bem vindas…inclusive melhores sensores de temperatura a preços acessíveis 🙂

4 Responses to “Sensor de Temperatura”

  1. Luis Sismeiro says:

    Se calhar o +7 é a “calibração” necessária para ficar a funcionar correctamente. Também pode depender da tolerância das resistências usadas já que pode haver um erro de +-5% para cor ouro e +-10% para cor prata. Isto pode justificar o “erro” do valor obtido.

  2. rechena says:

    De facto penso que este sensor tem um erro de fabrica de +-5% mas obrigado pela excelente dica das resistencias. Sei que tive que mudar de uma de 1K para 10K para que os valores fossem mais correctos, agora nao me tinha lembrado da questao do prata/ouro.

    Thanks

  3. Temperatura+Arduino+Mysql=RDDTool « JAPAB says:

    […] de muito pesquisar e muito bater com a cabeça eis o codigo que usei para retirar os dados do sensor de temperatura que ja falei anteriormente e inserir na BD. #include #include #include #include   byte […]

Leave a Reply

Follow Me