Introduction: Arduino TMP37 I2C Temperature Display
Here is a simple base for a temperature controller based on Arduino and a TMP37 Centigrade temperature sensor. Using a single analog-to-digital input and an I2C LCD display.
Step 1: How It Works
TMP37 Specifications and Pin Connections
The TMP37 is intended for applications over the range of 5 degrees C to 100 degrees C and provides an output scale factor of 20 mV per degrees C. The TMP37 provides a 500 mV output at 25 degrees C. Operation extends to 150 degrees C with reduced accuracy for all devices when operating from a 5 V supply. The low output impedance of the TMP35/TMP36/TMP37 and its linear output and precise calibration simplify interfacing to temperature control circuitry and ADCs. All three devices are intended for single-supply operation from 2.7 V to 5.5 V maximum. In my test a stable +5 volt supply must be used!
The supply current runs well below 50 uA, providing very low self-heating-less than 0.1 degrees C in still air. In addition, a shutdown function is provided to cut the supply current to less than 0.5 uA. In this project pin 1 is connected to +5 volts, pin 2 to the analog 0 input on the Arduino module, and pin 3 to ground. About the Program An analog to digital converter (ADC) in the ATMEGA168 or ATMEGA328 are 10-bit (1024 steps) and over a range of 5 volts is 5.0/1024 = 4.882 mV per step. The TMP37 produces an output of 20 mV / degrees C.
It's easy to see they don't divide equally. Using the original sample program that came with the part when I ordered worked, but was unstable to the extreme bouncing around as much as ten degrees. So beside rewriting the code to work with a LCD display instead of a computer serial port, I had to deal with the fact we were using very small real numbers and the fact the hardware didn't exactly match. But accuracy came out within a few degrees with a good 5-volt supply. This produced both a stable reading within 1.5 degrees of a laboratory analog thermometer. (I don't have digital version.)