How to read temperature using arduino uno board with RT100 RTD sensor?

I am new to arduino programming. And almost inexperienced.

I want to program my Arduino Uno board to read a 2/3/4 wire configuration of a PT100 RTD sensor (accurate to 0.5 Β° C). Temperature range from 0 to 400 Β° C and from -50 to 100 Β° C.

Since I'm completely new to this field, I would appreciate fairly descriptive information with goals, images, and code.

I studied a lot of this topic, but could not get anything useful or significant to solve my problem.

In addition, I cannot use a thermistor or any IC to read temperatures, since the machine on which RTD is installed has a PID, but I would like to create a data logger that can receive temperatures on the computer itself.

+6
source share
2 answers

PT100 increases its resistance to heat. The temperature and resistance characteristics are described in the pt100 resistance table.

Arduino can read the voltage at the analog input. To get degrees Celsius, we must:

  • read analog input as voltage
  • calculate resistance value (voltage divider)
  • celsius search from resistance table

voltage divider

Vin - 5 volts from arduino R1 - this is the resistance of a known value in my program, 220 Ohm in fact R2 is pt 100 Vout should be connected to the output of the arduino analog input (for example, A0)

R2 = R1 * 1 / (Vin / Vout - 1)

The scheme can be made based on the figure above, it is quite simple.

The sketch I wrote contains information about the resistance from 0C - 80C (can be easily expanded) To get degrees from the resistance value, I use my version of the MultiMap function, which uses a single float array as resistance values ​​and uses linear interpolation to calculate the exact degrees

float in[] = { 100.00, 100.39, 100.78, 101.17, 101.56, 101.95, 102.34, 102.73, 103.12, 103.51, 103.90, 104.29, 104.68, 105.07, 105.46, 105.85, 106.24, 106.63, 107.02, 107.40, 107.79, 108.18, 108.57, 108.96, 109.35, 109.73, 110.12, 110.51, 110.90, 111.29, 111.67, 112.06, 112.45, 112.83, 113.22, 113.61, 114.00, 114.38, 114.77, 115.15, 115.54, 115.93, 116.31, 116.70, 117.08, 117.47, 117.86, 118.24, 118.63, 119.01, 119.40, 119.78, 120.17, 120.55, 120.94, 121.32, 121.71, 122.09, 122.47, 122.86, 123.24, 123.63, 124.01, 124.39, 124.78, 125.16, 125.54, 125.93, 126.31, 126.69, 127.08, 127.46, 127.84, 128.22, 128.61, 128.99, 129.37, 129.75, 130.13, 130.52 }; // known resistance in voltage divider int R1 = 217; float MultiMap(float val, float* _in, uint8_t size) { // calculate if value is out of range if (val < _in[0] ) return -99.99; if (val > _in[size-1] ) return 99.99; // search for 'value' in _in array to get the position No. uint8_t pos = 0; while(val > _in[pos]) pos++; // handles the 'rare' equality case if (val == _in[pos]) return pos; float r1 = _in[pos-1]; float r2 = _in[pos]; int c1 = pos-1; int c2 = pos; return c1 + (val - r1) / (r2-r1) * (c2-c1); } void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: int pt100 = analogRead(A0); float Vout = pt100 * (5.0 / 1023.0); float R2 = R1 * 1/(5.0/Vout - 1); float c = MultiMap(R2,in,80); Serial.print("Resistance: "); Serial.print(R2); Serial.println(" Ohm"); Serial.print("Temperature: "); Serial.print(c); Serial.println(" C"); delay(400); } 
+3
source

Chris, although your solution works, there is room for some improvement.

1) 220 ohm attraction is too small. Direct current flows continuously through the pt100, which can interfere with accuracy. A very minimalist approach is to increase the pull-up to reduce this current and increase the voltage on the divider, see http://www.avrfreaks.net/sites/default/files/pt100.JPG

2) when there are noticeable cable routes and a standard industrial environment, you can choose a standard measurement bridge circuit. It uses four wires, of which two are used as a direct current source. (Unlike a stall resistor, a constant current source provides a stable full-range reading and should have better temperature stability. A simple pullup itself can have significant drift. The other two wires are used as a differential input. There is no current flowing on these wires, so the actual distance between sensor conductors will not affect accuracy.This approach is shown here: https://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/4wire2.svg/286px-4wire2.svg.png , and in fact all industrial sensors work on this principle.

3), you can use the analog interface instead of shifting your analog circuit. AD7714 http://www.seekic.com/circuit_diagram/Measuring_and_Test_Circuit/Temperature_measurement_circuit_composed_of_the_AD7714_and_Pt100.html and much more professional solutions here: http://www.ti.com/europe/downloads/2-%203-%204-%204%%4 % 20Measurement.pdf

+3
source

Source: https://habr.com/ru/post/986440/


All Articles