What Are RTD Sensors and How Do They Work?
RTD stands for Resistance Temperature Detector. Unlike thermocouples that generate a voltage from a thermal gradient, or thermistors that use semiconductors with highly non-linear resistance curves, an RTD relies on the predictable, nearly linear positive temperature coefficient (PTC) of pure metals. As the metal heats up, its atomic lattice vibrates more intensely, scattering electrons and increasing electrical resistance. Platinum is the industry standard for RTDs because its resistance-to-temperature relationship is exceptionally stable, repeatable, and resistant to oxidation over time.
The two most common variants you will encounter on the bench are the PT100 and the PT1000. The numbers denote their nominal resistance at 0°C: a PT100 reads exactly 100Ω at 0°C, while a PT1000 reads 1000Ω at 0°C. Both typically follow the IEC 60751 standard with an alpha coefficient (α) of 0.00385 Ω/Ω/°C. While a PT100 is the legacy industrial workhorse, the PT1000 is rapidly becoming the default for embedded microcontroller projects because its higher base resistance makes it far more forgiving of lead-wire resistance and ADC noise.
The Output Signal: Resistance, Not Voltage
A critical mistake beginners make is assuming an RTD outputs a voltage or a digital signal directly out of the probe. An RTD is a purely passive component. It outputs a change in resistance. If you connect a PT100 directly to an Arduino analog pin, you will not get a meaningful temperature reading; you will just create a floating node or a dead short.
Furthermore, do not conflate RTDs with 4-20mA temperature transmitters. In industrial settings, an RTD probe is often wired into a separate head-mounted transmitter that converts the resistance into a 4-20mA current loop. But at the bare-wire level, the sensor itself is just a resistor.
Wiring Configurations and MAX31865 Pinout
Because an RTD measures small resistance changes (a PT100 changes by only ~0.385Ω per °C), the resistance of the copper lead wires connecting the sensor to your microcontroller can introduce massive errors. A standard 24 AWG copper wire adds about 0.08Ω per meter, which translates to nearly 0.2°C of error per meter in a 2-wire setup. To solve this, RTDs come in 2-wire, 3-wire, and 4-wire configurations.
To interface these with an ESP32 or Arduino, the MAX31865 is the definitive SPI interface IC. It handles the excitation current, the ADC conversion, and the 3-wire lead compensation math internally. Below is the wiring table for a typical MAX31865 breakout board.
| Breakout Pin | Function | Microcontroller Connection | Notes / Supply Range |
|---|---|---|---|
| VIN / VCC | Logic & Power Supply | 3.3V or 5V | Supply range: 3.0V to 5.5V. Match to your MCU logic level. |
| GND | Ground | GND | Common ground required. |
| SCK | SPI Clock | SPI SCK (e.g., Pin 18 on ESP32) | Max clock speed: 5MHz. |
| SDO (MISO) | SPI Data Out | SPI MISO (e.g., Pin 19 on ESP32) | Master In, Slave Out. |
| SDI (MOSI) | SPI Data In | SPI MOSI (e.g., Pin 23 on ESP32) | Master Out, Slave In. |
| CS | Chip Select | Any GPIO (e.g., Pin 5) | Active LOW. Pull high when idle. |
| RDY | Data Ready | Optional GPIO / Interrupt | Goes LOW when conversion finishes. |
| RTD+, RTD- | Sensor Terminals | PT100/PT1000 Probe | Screw terminals. Observe 2/3/4 wire jumpers on the PCB. |
Raw-to-Unit Math: Converting ADC Readings to Celsius
The MAX31865 features a 15-bit delta-sigma ADC. It does not output temperature directly; it outputs a raw digital code representing the ratio of the RTD resistance to a reference resistor ($R_{REF}$) soldered onto the breakout board. For a PT100 board, $R_{REF}$ is 400Ω. For a PT1000 board, $R_{REF}$ is 4000Ω.
Step 1: Convert Raw ADC to Resistance
The raw ADC value ranges from 0 to 32767 ($2^{15}-1$). The formula to extract the actual RTD resistance is:
R_RTD = (Raw_ADC / 32768) * R_REF
For example, if your PT1000 board ($R_{REF}$ = 4000Ω) returns a raw ADC value of 8980:
R_RTD = (8980 / 32768) * 4000 = 1095.9Ω
Step 2: Convert Resistance to Temperature (Linear Approximation)
For basic applications between 0°C and 100°C, you can use the linear approximation based on the alpha coefficient (α = 0.00385):
T = (R_RTD - R_0) / (R_0 * α)
Where $R_0$ is 100 for PT100, and 1000 for PT1000. Using our 1095.9Ω PT1000 reading:
T = (1095.9 - 1000) / (1000 * 0.00385) = 95.9 / 3.85 = 24.9°C
Interference, Self-Heating, and Signal Integrity
RTDs are highly susceptible to specific environmental and electrical interference sources. Ignoring these will result in noisy or offset readings.
- Lead Wire Resistance (Copper Tempco): Copper wires change resistance with ambient temperature just like the platinum sensor does. If your 3-wire cable runs through a hot conduit, the copper resistance increases, skewing the 3-wire compensation math. Always use matched-length, identical-gauge wires for all RTD legs.
- 50/60Hz Mains EMI: Because the excitation current is tiny (<1mA) and the resulting signal voltage is in the millivolt range, RTD wires act as excellent antennas for AC mains noise. If running probes longer than 3 meters, you must use shielded twisted-pair (STP) cable, with the shield grounded at the microcontroller end only to prevent ground loops.
- Self-Heating: Passing current through the RTD generates $I^2R$ heat. The MAX31865 pulses the excitation current only during the ADC conversion window to minimize this. If you build your own analog conditioning circuit, ensure the continuous DC current never exceeds 1mA (preferably 0.5mA for PT100s in still air or insulated environments).
Decision Matrix: Choosing Your RTD and Interface IC
Selecting the right combination of sensor and interface depends on your physical environment and required precision. Use the decision path below to terminate on a concrete hardware pick.
| Application Constraint | Sensor Choice | Wiring Topology | Rationale |
|---|---|---|---|
| Short distance (<1m), basic HVAC monitoring | PT1000 | 2-Wire | High base resistance makes 2-wire lead error negligible over short runs. |
| Medium distance (1-10m), general lab/bench use | PT1000 | 3-Wire | 3-wire compensates for lead resistance; PT1000 minimizes ADC noise floor issues. |
| Long distance (>10m), high-precision industrial | PT100 | 4-Wire | 4-wire completely eliminates lead resistance error; PT100 is standard for industrial transmitters. |
| Legacy replacement, existing 2-wire infrastructure | PT100 | 2-Wire | Required for backward compatibility, but demands software offset calibration. |
The Default Recommendation:
If you are building a new embedded project from scratch (ESP32, Raspberry Pi, Arduino) and need reliable, high-accuracy temperature logging without fighting analog noise, choose a 3-wire or 4-wire PT1000 probe paired with the Adafruit MAX31865 PT1000 Breakout (Product ID 3328). The PT1000's 1000Ω baseline renders minor breadboard contact resistances and thin jumper wires virtually invisible, while the MAX31865 handles the SPI isolation, CVD math, and fault detection (like broken wire alerts) directly in hardware.






