Interfacing MAX31865 RTD Sensor with Arduino

1,200 views

Introduction

Temperature sensing is a crucial aspect in various fields such as manufacturing, research, and automation. One of the most popular temperature sensors in use today is the Resistance Temperature Detector (RTD). It is highly accurate, reliable, and has a stable output. However, reading and processing the output signal from an RTD requires a specialized electronic circuit. This is where the MAX31865 RTD sensor comes in.

In this article, we will explore the “MAX31865 RTD sensor” and how to interface it with an Arduino board.

What is MAX31865 RTD Sensor?

The MAX31865 RTD sensor is a type of temperature sensor that uses a resistance temperature detector (RTD) to measure temperature. RTDs are highly accurate temperature sensing devices that operate on the principle of the change in electrical resistance of a metal wire with temperature. The MAX31865 RTD sensor is designed to work with platinum RTDs, which offer a high degree of accuracy and stability over a wide temperature range.

Hardware Components

To interface the MAX31865 RTD sensor with Arduino, you’ll need the following hardware components to get started:

ComponentsValueQty
Arduino UNO1
USB Cable Type A to B1
DC Power for Arduino1
RTD Sensor MAX318651
Jumper Wires1

RTD MAX31865 Sensor Pinout

RTD MAX31865 Sensor Pinout
RTD MAX31865 Sensor Pinout
Pin NamePin Description
GNDAnalog Ground. Connect to GND1.
SDISerial-Data Input
CLKData Clock Input
CSActive-Low Chip Select. Set CS low to enable the serial interface.
SDOSerial-Data Output
3V3Analog Supply Voltage Input. Connect to a 3.3V power supply. Bypass to GND1 with a 0.1µF bypass capacitor.

MAX31865 RTD Circuit

Make connections according to the circuit diagram given below.

Wiring / Connections

ArduinoRTD Sensor
5VVCC
GNDGND
D10CS
D11SDI
D12SDO
D13CLK

Installing Arduino IDE

First, you need to install Arduino IDE Software from its official website Arduino. Here is a simple step-by-step guide on “How to install Arduino IDE“.

Installing Libraries

Before you start uploading a code, download and unzip the following libraries at /Program Files(x86)/Arduino/Libraries (default), in order to use the sensor with the Arduino board. Here is a simple step-by-step guide on “How to Add Libraries in Arduino IDE“.

Code

Now copy the following code and upload it to Arduino IDE Software.

#include <Adafruit_MAX31865.h>
 
// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 thermo = Adafruit_MAX31865(10, 11, 12, 13);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);
 
// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF      430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  100.0
 
void setup() {
  Serial.begin(115200);
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
 
  thermo.begin(MAX31865_3WIRE);  // set to 2WIRE or 4WIRE as necessary
}
 
void loop() {
  uint16_t rtd = thermo.readRTD();
 
  Serial.print("RTD value: "); Serial.println(rtd);
  float ratio = rtd;
  ratio /= 32768;
  Serial.print("Ratio = "); Serial.println(ratio,8);
  Serial.print("Resistance = "); Serial.println(RREF*ratio,8);
  Serial.print("Temperature = "); Serial.println(thermo.temperature(RNOMINAL, RREF));
 
  // Check and print any faults
  uint8_t fault = thermo.readFault();
  if (fault) {
    Serial.print("Fault 0x"); Serial.println(fault, HEX);
    if (fault & MAX31865_FAULT_HIGHTHRESH) {
      Serial.println("RTD High Threshold");
    }
    if (fault & MAX31865_FAULT_LOWTHRESH) {
      Serial.println("RTD Low Threshold");
    }
    if (fault & MAX31865_FAULT_REFINLOW) {
      Serial.println("REFIN- > 0.85 x Bias");
    }
    if (fault & MAX31865_FAULT_REFINHIGH) {
      Serial.println("REFIN- < 0.85 x Bias - FORCE- open");
    }
    if (fault & MAX31865_FAULT_RTDINLOW) {
      Serial.println("RTDIN- < 0.85 x Bias - FORCE- open");
    }
    if (fault & MAX31865_FAULT_OVUV) {
      Serial.println("Under/Over voltage");
    }
    thermo.clearFault();
  }
  Serial.println();
  delay(1000);
}

Code Explanation

This Arduino code is for interfacing the MAX31865 RTD sensor with an Arduino board. It begins with including the Adafruit_MAX31865 library, which provides functions for interfacing with the sensor.

The code initializes an instance of the Adafruit_MAX31865 class, specifying the pins used for the software SPI interface. Alternatively, you can use hardware SPI by passing only the CS pin.

The code then sets up the serial communication with the computer and initializes the sensor using the begin() function, specifying the type of connection (2WIRE or 4WIRE).

The loop() function reads the RTD value using the readRTD() function, converts it to resistance and calculates the temperature using the temperature() function. The temperature is then printed to the serial monitor along with any faults detected by the sensor. The faults are identified by a bit mask and can include issues like high or low threshold, under/over voltage, and open or shorted connections.

The delay function is used to pause for a second before repeating the loop to prevent overwhelming the serial monitor with too much output. Overall, this code demonstrates how to use the MAX31865 RTD sensor with an Arduino and obtain accurate temperature readings.

Applications

  • Temperature measurement in industrial processes
  • Automotive temperature sensing
  • HVAC (heating, ventilation, and air conditioning) systems
  • Food industry temperature monitoring
  • Medical equipment temperature monitoring
  • Home automation systems
  • Laboratory temperature measurement
  • Scientific research temperature measurement
  • Climate control systems
  • Aerospace temperature measurement
  • Energy management systems
  • Weather monitoring stations
  • Process control systems.

Conclusion

The MAX31865 RTD sensor with an Arduino is a straightforward process that offers accurate temperature readings in various applications. By following the steps outlined in this article, you can easily set up your own temperature monitoring system using this sensor.