RTD Sensors and Thermal Mass

Our RTD shield for Arduino is super precise.  Almost too much so.

Some of our customers have asked questions and had concerns when the RTD shield they purchased from us shows +/- 2 degree fluctuations when exposed to ambient air.  It seems that people have been conditioned with slow moving temperature sensors that take ages to update.

If you think about it though, it should really not come as a surprise that there actually are large temperature gradients everywhere.  For example, when you exhale the temperature of your breath is (often) at a much different temperature than the ambient temperature.  This heat doesn’t instantly disappear into the environment.  Breath is just one example though: body heat, air conditioning, fans, clouds, and so on all affect the temperature.  They all radiate out and make the temperature change over large distances. These temperature differentials are actually physically present all around us.

However, folks usually see these swings as errors or noise.  They call in to question the performance of the shield and ask if other settings could make the results more “accurate”.  The first thing to do is to prove that the electronics on the shield are über-stable.  We don’t want our customers to just take our word for it.  Luckily, the shield can be easily validated by using a fixed resistor in place of an RTD sensor.  Wire one end of the resistor to the + terminal(s) and the other end of the resistor to the terminal(s) and then take readings with the shield.  The RTD is just a temperature controlled resistor.  Using a fixed resistor eliminates almost all of the temperature dependance (sure, most resistors have a little thermal dependance: like 200ppm, but this is good enough to validate the shield).  A Pt-100 RTD sensor measures 100-ohms at 0 degrees Celsius.  So using a fixed resistor around this value or a little more is a good choice as this is the most popular type of RTD sensor.  Using this setup our customers are able to validate the precision of the shield as reported here.  In fact, this approach is how we test the shields after production.

Some applications require the ability to quickly measure temperature changes.  However, many don’t, and I typically give the following list of suggestions:

  • Average the data coming from the RTD shield
  • Increase the thermal mass of the RTD sensor
  • Add a small capacitor to the screw terminals of the RTD shield

Averaging the RTD readings is pretty self-explanatory.  Collect a bunch of data and compute the mean of the data, or even better do something like what’s in the smoothing example to quickly find the average of a circular buffer of data.

Another approach is to increase the system’s thermal mass.  The idea here is analogous to inertia.  Something with a lot of thermal mass doesn’t change temperature easily.  Something with little thermal mass changes temperature very easily.  Ambient air has very little thermal mass: you can blow on the RTD sensor and see the change.  If you take an RTD sensor and immerse it in a liquid, then the liquid will add thermal mass and make it harder to change the temperature readings: if you blow at the liquid it probably won’t affect the RTD readings.  You could also shield the sensor from stray breezes by using a box or use thermal insulation around your sensor.

Adding a little capacitance is effectively the hardware approach to taking an average.  The capacitor makes it a little more difficult for the RTD sensor to change the signals on the inputs of the RTD shield’s analog-to-digital converter.  I would suppose that the capacitor to use could be calculated by determining the desired RC time constant, but I’ve never actually used this approach.  It’s pretty easy to just average values.

So maybe it’s time to trash all of those slow moving thermometers you have and buy one of our awesome RTD shields?

Arduino Multi-Channel RTD Shield with RS232 and RS485

Our first shield design rolled out last week. You can find the Arduino Multi-Channel RTD Shield with RS232 and RS485 in our store.  We also strive to have the best documentation possible.  The docs for the RTD + RS232 + RS485 shield are available here.

We left it running for days to make sure everything was stable.  Everything seems to be running great.  We set it up to read the resistance values of precision resistors that were connected in a four-wire configuration.  It took about 40 milliseconds to cycle through all of the channels and get a new reading back to the Arduino.  On the shield it takes multiple readings and calculates the median value, which it saves and reports to the Arduino when queried.  This provides some basic filtering and eliminates any outliers that may have been encountered.

The shield is easy to use and has some nice features.  We tried to come up with examples that showed how all of the routines work.  If you have any questions, let us know!

Lessons Learned

  • Don’t try to access the EEPROM while in the I2C slave interrupt.  You can’t read the data from the EEPROM fast enough to properly service the I2C slave response to the master even with clock stretching enabled.