K-Type Thermocouple varies by over 10 Degrees Celcius rapidly

Hello,

I am using a K-Type Thermocouple, wired into an AD595AQ Amplifier for testing the air temperature of a room. It will later be used for water temperature. It is a simple two-wire thermocouple.

I have wired the thermocouple according to the following:

As you can see here in the Serial Monitor, the temperature is all over the place. As low as 19, and as high as 35:

It is a very simple program. But if the temperature is varying so widely, it is not any use to me. I eventually need to closely monitor the temperature of water. If it makes any difference, I was originally using the 36GZ Temperature Sensor that Arduino supplies, and that sensor had a good accurate reading of the room, within a degree or two. This Thermocouple is so widely off, I don't know what is going on.

Thank you for any input anyone has!

The code used is here:

const int TempSensorPin = A0;                                                                          
const float baselineTemp = 22.0;                        
const int ledPinR = 6;
const int ledPinB = 7;
const int ledPinG = 8;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);                   

void setup() {
  
  Serial.begin(9600);                                   
  lcd.begin (16, 2);
  lcd.print("Temperature");
  lcd.setCursor (0, 1);
  lcd.print("Initializing..");
  pinMode(ledPinR, OUTPUT);
  pinMode(ledPinB, OUTPUT);
  pinMode(ledPinG, OUTPUT);
  delay(1000);
  
 }  

void loop() {

int TempSensorVal = analogRead(TempSensorPin);                
Serial.print("Temp Sensor Value: ");                      
Serial.print(TempSensorVal);
Serial.print(", Degrees C: ");
float temperature = ( ((TempSensorVal * 4.88) - 0.0027 ) / 10.0 );                   
Serial.println(temperature);
  if (temperature < baselineTemp - 1.5) {
     lcd.clear ();
    lcd.print("Air Temp: LOW!");
    lcd.setCursor(6, 1);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(1, 1);
    lcd.print(temperature);
    digitalWrite(ledPinB, HIGH);
    digitalWrite(ledPinG, LOW);
    digitalWrite(ledPinR, LOW);
  } 
  else if (temperature >= baselineTemp - 1.5 && temperature < baselineTemp + 1.5) {
     lcd.clear ();
    lcd.print("Air Temp: OK");
    lcd.setCursor(6, 1);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(1, 1);
    lcd.print(temperature);
    digitalWrite(ledPinG, HIGH);
    digitalWrite(ledPinB, LOW);
    digitalWrite(ledPinR, LOW);
  } 
  else if (temperature >= baselineTemp + 1.5) {
     lcd.clear ();
    lcd.print("Air Temp: HIGH!");
    lcd.setCursor(6, 1);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(1, 1);
    lcd.print(temperature);
    digitalWrite(ledPinR, HIGH);
    digitalWrite(ledPinB, LOW);
    digitalWrite(ledPinG, LOW);
  }
  delay(1000);
}

You might have a bad connection. Check all your wiring for continuity, while wiggling wires.

It sounds like a loose connection or a bad thermocouple. Your frizzy drawing is useless a real schematic would be a big help. As far as thermocouples for room temperature you probably picked the worse one. It has a measuring range of 1450 degrees C spread over about 56mv. Analog Devices publishes an application note #369, I highly recommend reading it, you will learn about junctions and all that other dull reading stuff. You state "I eventually need to closely monitor the temperature of water", what does that tell us. plus minus 1/1000 degree maybe plus minus 2 degrees. For the temperature range you appear to be working with I would suggest one of the semiconductor 1 wire devices. They are much easier to work with and probably more accurate then you need. Take a step back and determine what the measurement temperature range is, accuracy, read rate, lead length etc. Then with these as part of your spec fill in the blanks with the appropriate pards and do read about the parts so you understand there limits.

gilshultz:
... As far as thermocouples for room temperature you probably picked the worse one. It has a measuring range of 1450 degrees C spread over about 56mv. ...For the temperature range you appear to be working with I would suggest one of the semiconductor 1 wire devices.

Thank you for your detailed reply. You are probably right here. I am very unfamiliar with sensor equipment and have to familiarize myself with the equipment in a limited time window, and a thermocouple seemed super simple to work with.

I will re-wire the circuit later and check all connections. It's a brand new sensor so I am hoping it is not bad. Looking up the 1-wire semiconductor devices, they do seem to have a tighter range and therefore more accuracy. I will read up on those more. I was thinking maybe I had picked the wrong amplifier, but it is likely that the thermocouple I have is not for the accuracy needed (+/- 3 degrees at most). Perhaps the thermocouple will be useful later for broader measurements down the road.

The DS18B20 is very easy to use with Arduino, accurate and reliable.

Be careful to not mix the types of wires used to connect to the thermocouple. Different metal types will create junctions that will add voltage or will subtract voltage from your thermocouple.
Paul

A thermocouple is not the best device for measuring near ambient temperatures - its output is proportional to the temperature difference between itself and the junction in the AD device - something like 40microvolts per deg C.
The AD device has a temperature sensor to sense the temperature of itself and add that reading to the thermocouple sensor . Plenty of scope for error near ambient temperatures .
If you don’t use proper compensating cable for your connections then you introduce other junctions which can create voltages and upset your accuracy .

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.