Hello, I am new to using Arduino Uno and RTDs. I have a PT100 RTD sensor that is attached to a 4-wire Micro M12 Female signal/power connector, which is then attached to an Adafruit Max 31865 amplifier connected to an Arduino. I've connected every wire similar to the instructions on Adafruit Max31865 procedurehttps://learn.adafruit.com/adafruit-max31865-rtd-pt100-amplifier/arduino-code, using 4-Wire settings, and changing their code such as RREF to 430.0 and RNOMINAL to 100.0 to match 4-wire. I am still getting an incorrect an inconsistent reading from my current set up (See image).
I'm sure the error has to do with how I am arranging the wires coming from the M12 female connector but no matter how I arrange them, either I get fault errors (RTD LOW/HIGH Threshold), inconsistent alternating readings, or an incorrect consistent reading of -230 C. I am not familiar with identifying which wire would be F-, RTD-, RTD+, F+ and not having a red/blue color coding on my female M12 connector doesn't help. Using a multimeter, the resistance between the brown and black wire is 109.8 Ohms but for some reason, my multimeter cannot measure the resistance of the other wires (maybe because their resistance is below 1 Ohms). Also, here are the signal outputs for each of the 4-wire coming from my RTD sensor but I don't know what this means or if I am using the right chart since there are two (here's the pdf of the signal outputs page 15: chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.wika.com/media/Operating-instructions/Operating-instructions/Temperature/Resistance-thermometers/oi_tr33_en_de_fr_es.pdf
)
Brown => Signal: L+, 10...30 V
White => Signal: VQ, not connected
Blue => Signal: L-, 10....30 V
Black => Signal: C, not connected
Lastly, I'll post the code and my current set up that I am using in the comments but it is the same code that Adafruit provides for the max31865.
Thank you for your time and sorry for the long post. Any help is greatly appreciate!
Lastly, here is the code that Adafruit provides for their Max31865 amplifier:
/***************************************************
This is a library for the Adafruit PT100/P1000 RTD Sensor w/MAX31865
Designed specifically to work with the Adafruit RTD Sensor
----> https://www.adafruit.com/products/3328
This sensor uses SPI to communicate, 4 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 <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(9600);
Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
thermo.begin(MAX31865_4WIRE); // 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);
}
Did you carefully go through Adafruit's setup guide?
Do you understand the purpose of each of the four sensor wires? From the data sheet, you should have no problem telling which is which. Check the ordering information of the sensor, as advised by the sensor data sheet:
@jremington From what I understand, 4-wire is used in pairs so that the resistance between each pair can be deducted from the additional external resistance from the cable. It seems that the pairs should have a resistance of 2 Ohms, and the resistance from one pair to another is 110 Ohms. As I said before, I'm fairly new to this and don't have a deep understanding of this and may be interpreting this incorrectly. I tried following tutorials on YouTube but can't seem to find one that answers my question.
As per the Adafruit instructions, you should be able to get it working if you just connect the inner two sensor wires to the appropriate input terminals on the amplifier, and set the jumpers correctly.
But if your solder connections are not perfect, it won't work well or at all! You are dealing with very low voltages and currents.
Yes, I used a DMM but the only resistance reading I was able to obtain was from the brown and black wires on my connector, which read 109.8 Ohms. As with the rest of the wires, my DMM couldn't pick up their resistance. Maybe because they were below 1 Ohms but do you have any recommendations or ideas why this may be the case?
If you look at the image in my previous post, you are supposed to measure nearly zero ohms between two pairs.
What pairs do you measure near zero Ohms?