Introduction: Arduino Temperature Measurement With RTD PT100 4-20mA Transmitter

About: Projects, Articles & tech reviews for Home & Industry


In the industrial world where broad temperature ranges and harsh working environment are predominant, the use of Thermocouples and RTDsare very common. All of them have their respective pros and cons, (there isn't an absolute winner) the final application and working conditions are who decide which one is better in every specific case

An RTD is a thin filament, usually made of Platinum, whose resistance varies in a very way related to the temperature applied. One of the winning points of a RTDs is their high linearity across the entire working range (-200 to 850 C) and its stability over time. The most common type is the PT100, which shows a 100 Ohm resistance at 0 C

Some of the components needed for building & testing:

For more information, please visit:


Here is the list for the required components for this project with the absolute lowest prices! If you find something cheaper somewhere, please msg me!

Step 2: PT100 to 4 -20 MA TRANSMITTERS


knowing the temperature applied on an RTD based on its resistance is a little complex task, because the variation of the resistance is in the tenths of ohms for every Celsius degree. Precision circuits are required, like Wheatstone bridge. The main pitfall in the industrial world, is that usually the temperature measurement place (process) is very far away from measurement and control equipment cabinets. To cover this distance, very long wires are required, which resistance can affect the temperature measurement

To solve this problem, there is an old known in the industrial world: 4-20 mA temperature transmitter. This encloses all the precision electronics needed to interface the RTD and is placed as close as possible to it. This device automatically adjusts the wire resistance using the third terminal.

The transmitter "translates" signals from temperature sensor to current signals from 4 to 20 mA. A current signal can be sent over very long wires without signal disturbance due to wire resistance.

Step 3: PT100, ARDUINO, 4-20 MA

PT100, ARDUINO, 4-20 MA

A metal sheathed RTD probe was used and a 4-20 mA transmitter spanning from -50 to 150 C. To convert the current signal into voltage signal a 250 Ohm resistor was used in the ADC pin of the Arduino. When the signal is 4mA there will be 1V at the ADC and when the signal is 20mA there will be 5V at the ADC. To power the loop a 24V DC power supply was used.

To convert voltage signals into temperature, the Arduino app does a mapping with min and max signal values. In this case -50 C is 1V, or in ADC read is 205. For 150 C the ADC reading is 1023

The Arduino app listens for a byte in the serial port, and then answers with a temperature measurement in ASCII format, so it can be visualized in a serial port terminal application



A small visual application was programmed using Python and TkInter, based on the Andreas Boesh example. This app has an independent thread to manage serial port tasks (send a byte, wait and read the temperature from Arduino) and other task related to GUI things, like update values, move progress bar, etc. To run it python serial and python tk packages are required.

Step 5: Test and Conclusions

Test and Conclusions

Right after the application was started, ambient temperature was displayed ( well surrounding stuff temperature: computer, lamps, etc. ). Next the RTD was immersed in very hot water. After a minute or so the sensor is showing a temperature a few Celsius degrees below boiling point.

For the last test, a mug with a block of ice (with an orifice for the sensor) was used. After a few minutes the temperature stabilizes near water icing point.

Generally speaking RTDs give very precise measurements, however, they have a kind of slow response to temperature changes, and last but not less important, the accuracy in the measurement relies heavily on how good calibrated is the 4-20 mA transmitter, and the precision of the measuring resistor.

For more info, please visit: