MAX31855 Random Temperature Readings Problem

Hello everyone,

I am quite a newbie here and I have a problem with a K-Type thermocouple combined with a MAX31855, on an Arduino UNO card.

Everything is connected where it should be and I am using a standard code from the MAX31855 library. The problem is that the temperatures shown seem to be absolutely random, fluctuating from -300 C to 2000 C. I know that the thermocouple seems to works because the temperature goes up when I put my hand on it but it goes back to random values after.

As I said, everything is connected where it should be. I read that it may be a problem caused by noise in bad connections, but I would like not to solder my connections since I want to try first if it works.

If anyone has any ideas, it would be really appreciated. Attached are the lines of code, the serial monitor of the readings and my setup.

Thanks in advance!

Setup_2.png

Photo_MAX31855.png

Photo_Setup.png

Setup_2.png

Photo_MAX31855.png

Photo_Setup.png

Hi, that is not the easiest thing to start with.

Can you add more links ? for example to your module, the chip, and so on. I will help to give a few links.

Manufacturer's page: MAX31855 Cold-Junction Compensated Thermocouple-to-Digital Converter | Analog Devices.
Do you have the module from Adafruit ? Thermocouple Amplifier MAX31855 breakout board (MAX6675 upgrade) : ID 269 : $14.95 : Adafruit Industries, Unique & fun DIY electronics and kits.
With this example ? Adafruit-MAX31855-library/serialthermocouple.ino at master · adafruit/Adafruit-MAX31855-library · GitHub.

The MAX31855 is a 3.3V chip and the Uno is a 5V board. As far as I know, only the module from Adafruit can be used with both 3.3V Arduino boards and 5V Arduino boards.

Breadboard have often bad contacts. Can move everything to an other location on the breadboard ?
Jumper wires can be broken. Can you check every jumper wire ?
How did you connect the thermocouple wires ? Can you show a photo of that ?

Please always show text as text (not as a picture). Put the sketch between code-tags. The </> button is for code tags.

First of all, thank you for your answer!

The module that I bought is this one: MAX31855

The thermocouple that I use: Thermocouple

I am using the 3.3V source of my UNO board (it has both 3.3V and 5V).

I have tried moving everything to another location, changed every jumper wire. It does not change my results.

Thank you for the tips, this is my first post so it could be that I was unclear about my problem. I hope this clears it up. I'll put the pictures that you asked for on the original post.

This is the code, which is the same link you put:

/***************************************************
  This is an example for the Adafruit Thermocouple Sensor w/MAX31855K

  Designed specifically to work with the Adafruit Thermocouple Sensor
  ----> https://www.adafruit.com/products/269

  These displays use SPI to communicate, 3 pins are required to
  interface
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <SPI.h>
#include "Adafruit_MAX31855.h"

// Default connection is using software SPI, but comment and uncomment one of
// the two examples below to switch between software SPI and hardware SPI:

// Example creating a thermocouple instance with software SPI on any three
// digital IO pins.
#define MAXDO   3
#define MAXCS   4
#define MAXCLK  5

// initialize the Thermocouple
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);

// Example creating a thermocouple instance with hardware SPI
// on a given CS pin.
//#define MAXCS   10
//Adafruit_MAX31855 thermocouple(MAXCS);

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

  while (!Serial) delay(1); // wait for Serial on Leonardo/Zero, etc

  Serial.println("MAX31855 test");
  // wait for MAX chip to stabilize
  delay(500);
  Serial.print("Initializing sensor...");
  if (!thermocouple.begin()) {
    Serial.println("ERROR.");
    while (1) delay(10);
  }
  Serial.println("DONE.");
}

void loop() {
  // basic readout test, just print the current temp
   Serial.print("Internal Temp = ");
   Serial.println(thermocouple.readInternal());

   double c = thermocouple.readCelsius();
   if (isnan(c)) {
     Serial.println("Something wrong with thermocouple!");
   } else {
     Serial.print("C = ");
     Serial.println(c);
   }
  // Serial.print("F = ");
  // Serial.println(thermocouple.readFahrenheit());

   delay(1000);
}

This is the serial monitor (It should be showing around 22C).

MAX31855 test
Initializing sensor...DONE.
Internal Temp = 127.94
C = 1469.25
Internal Temp = 127.94
C = 1437.00
Internal Temp = 127.94
C = 1464.25
Internal Temp = 127.94
C = 1460.75
Internal Temp = 127.94
C = 1460.00
Internal Temp = 127.94
C = 1461.75
Internal Temp = 127.94
C = 1460.50
Internal Temp = 127.94
C = 1452.00
Internal Temp = 121.69
C = 1460.50
Internal Temp = 122.00
C = 1459.50
Internal Temp = 127.94
C = 1449.25
Internal Temp = 123.50
C = 893.25
Internal Temp = 127.94
C = -237.00
Internal Temp = 127.94
C = -237.50
Internal Temp = 127.94
C = -263.75
Internal Temp = 127.94
C = -245.25
Internal Temp = 127.94
C = -235.50
Internal Temp = 127.94
C = -126.75
Internal Temp = 127.94
C = -9.00
Internal Temp = 127.94
C = 421.75
Internal Temp = 127.94
C = 653.00
Internal Temp = 127.94
C = 766.25
Internal Temp = 127.94
C = 698.00
Internal Temp = 127.94
C = 1383.00

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