Creative Commons images are CC BY-NC-SA 3.0


added to your
shopping cart

Out of stock Out of stock
1.50 1+ units
1.35 10+ units
1.20 100+ units

We have a purchase for 7000 units. We expect some of these to arrive next on Apr 29, 2014.

Incoming stock values are estimates, and subject to change without warning.

Notify Me

Description: This is the same temperature sensor that is included in our SparkFun Inventor's Kit. The TMP36 is a low voltage, precision centigrade temperature sensor. It provides a voltage output that is linearly proportional to the Celsius temperature. It also doesn't require any external calibration to provide typical accuracies of ±1°C at +25°C and ±2°C over the −40°C to +125°C temperature range. We like it because it's so easy to use: Just give the device a ground and 2.7 to 5.5 VDC and read the voltage on the Vout pin. The output voltage can be converted to temperature easily using the scale factor of 10 mV/°C.


  • Voltage Input: 2.7 V to 5.5 VDC
  • 10 mV/°C scale factor
  • ±2°C accuracy over temperature
  • ±0.5°C linearity
  • Operating Range: −40°C to +125°C


Comments 54 comments

  • I don’t see the voltage => ºC equation at hand. So, to save others the trouble:

    The datasheet says 1ºC/10mV, and 750mV @ 25ºC. With V as our independant and ºC as our dependant variable, we can set up a point-slope form: ºC - 25ºC = 1ºC/10mV * (mV - 750mV). Solving and converting to V, I think this gives the formula:

    ºC = 100 * V - 50.

    This checks out with the graph on the datasheet, with 0.3v for -20ºC and 1.2v for 70ºC (158ºF).

    I haven’t tested it yet, but this looks great for working with an Xbee: they should run on the same supply voltage, and expected temperatures should fit within the Xbee’s ADC range (max. 1.2v).

    • Your formula is correct.

    • Nice piece of work and it seems to explain the graph in the datashete well. However, the formula did not work for me. I ended up guessing the scale factor as 30mV/C from the 750mV at 25C. The guess is working well despite my sensor being TMP36. Further, the reason this formula did not work for me is because it is based on the assumption that the scale factor is 10mV/C.

  • I used this sensor with the sparkfun inventor’s kit. I used the example circuit #7. It was giving me inconsistent (temperature jumps of 10 degress F) and low readings. If I touched any of the wires in the system the temperature reading jumped. I replaced the ground to sensor wire with a 330 Ohm resistor, this made the reading consistent and accurate.

  • A word of warning! This sensor works great, but the leads are rather frail. while working on one for a school project a lead completely disconnected. Make sure you keep this unit fairly stable and don’t bend the leads excessively.

    I will be getting one for myself, and plan to hot glue the leads to secure them in place.

    • ANOTHER WORD OF WARNING! If you put this sensor in backwards, as in the positive is connected to ground and vice versa, the sensor will heat up to 481.5 degrees F! I am a newbie, so it may just be that I don’t know electronics very well, but if you are like me, take precaution when handling circuits.

  • For the life of me, I couldn’t figure out why my TMP36 was logging 283, 290, 256. I mean, it’s hot today, but I don’t think it’s that hot…..After longer than I should admit, I realized I was using this So word the wise, don’t mix your thermistors with transistors.

  • Good sensor. Here, a calcul in order to have the temperature in °C : tempC = ((temp * 0.004882)-0.50)*100

    tempC is the temperature. temp is the value of the input. The variables are “double”.

    The accuary is around 1°C.

  • When I hooked this up and converted the analog value from an arduino to mv (value * 4.887585532746823) and divided by 10 as shown, I got the temperature in F not C. Sure enough, if I put the answer in the F to C conversion formula, I ended up with the correct temp. in C. The units in the description are wrong, that’s all.

    • The sensor has an off set value of 100mV. -40C = 100mV; 25C = 750mV; 125C = 1750mV. Scroll down to my other comment explaining how to map on the arduino.

    • Could I grab your code? I am stumped on how to do the mv -> Celcius -> Farenheit conversion.

      • Using this as a base: applying degF = (degC * 1.8) + 32, change line 30 to this: temperature = (((temperature - .5) * 100) * 1.8) + 32;

  • I’ve got one of these on my arduino inventors kit board in my refrigerator. The arduino is also hooked up to a relay control board and I have the arduino programmed to act as a thermostat and control the compressor. When ever the relay is turned on the temperature reading jumps up about 3.5F

    I’ve got the arduino plugged into a 110v wall wart for power, so there ought to be plenty of current to prevent brown outs, but something is still skewing the reading pretty wildly.

    • I’m having this exact issue now. Where you able to solve it?

    • Try grounding the arduino and the relay board to a central ground point rather than bringing relay ground back on board the arduino. I’ve had analog readings skewed by changing currents in the ground path. Also try filtering the analog Vcc separately from the digital Vcc.

      • I did notice that the ground path that i connect the relay board to does seem to fluctuation (~20mv) when i turn on the relays, so what i did was plug the relay control board ground into one ground pin on the Arduino and connect my protoboard ground rail to another ground pin. This seemed to solve the ground voltage fluctuations (i measured it using DMM wrt the ground pin on the voltage reg). I’m also running the TMP36 off the 3v3 rail which only has a 1mv fluctuation wrt to ground when the relay’s turn on. Despite all this i still see ~20mv jump in the output reading (on DMM) on the TMP36 when i turn on the relays (which draw ~180ma of current from +5v).

        Anyone have any ideas?


      • No, sorry, but back EMF has nothing to do with this. EMF is only produced in a continuously varying magnetic field, such as in a motor. A relay only produces emf at the moment the coils open, or closes. The relay in question only opens, or closes, once or twice over the course of an hour and also on it’s own breakout board with it’d own coil driver circuit.

        No, the culprit here is that the relay driver draws to much current from the regulated supply on board the arduino and it’s causing the 5v rail to drop enough skew the results. Once I had the relay board take it supply voltage directly from the walwart, and not through the arduino the problem went away.

        • your noob-ness, underestimated, i have.

          • I’m sorry you have problems with basic electronics concepts, but there is no need to be rude. You might want to think about picking up an oscilloscope, and some books.

            • ….. i was aknowledging the fact that you diagnosed your problem correctly, and at the same time admiting my mistake of quickly assuming you were not compensating for such a basic mistake (common for new guys when dealing with relays).

              at the moment of my post… i was in a star wars mindset and thus attempted to “speak” like Yoda (clearly unsuccesfully), which is probably the reason for this misscommunication…

              should it have been my intention to insult or disrespect i would not have attempted to help in the first place… in any case… i appologize

              in case you are wondering, i already have an oscilloscope (a fancy one too!) since 2007 …FTW.

  • It is very frustrating that such a basic sensor is out of stock. Especially when there are not alternatives in the store.

  • I ordered 3 of these and they were all crap. The first one worked for a few weeks before crapping out. The other two didn’t work at all.

    • That’s bizarre, I have never had a problem. You can send an email to Sparkfun Support and I’m sure they’d be happy to replace it for you.

  • Hello.

    For my fist post, please, excuse my poor english…

    I was running the 7th sketch of the SIK with this sensor an I got really strange results. Inside my house, in winter but with heating on, I got around 12°C. I don’t have other temp sensor to check but I’m sure it was not so cold inside ! Actually, I use my lovely RedBoard on my Mac Pro Retina. The computer was on ceiling power cord. After unplugging it, the temp sensor gave me around 20°C witch is much more realistic..

    Any ideas ? Problem with the high current of Mac USB ?

  • I have used. Centigrade = (X -100)/2 …..

    and it worked I matched the temperature with the thermostat exactly the same. i traced back the value i initially had 160 from sensor, thermo 27C

    =(X*5) -500 /10

    =5( X - 100) / 10

    =(X -100)/2

    i would like to know other’s thought on this

  • For you Arduino folks, here is how I got mine to work in regards to mapping the input voltage at a 5V referance: TempReadingCelcious = map(TempReading, 20, 358, -40, 125); Keep in mind that at a 5V referance you get steps 0 - 1023 at 4.8828mV steps (don’t use 4.9mV from the Arduino website for actual calculations… you get offset results very quickly). With 10mV steps of the sensor you will run into +-1 degree fluctuation and +-2degree Fahrenheit fluctuation.

    To fix this issue do the following: use analogReference(EXTERNAL) (Make sure you refer to this site so you do not damage your board: ) and limit the reference voltage externally to about 2 volts by connecting the 3.3V out to the AREF pin through a 20k resistor (2 x 10k in series will do the trick). The reason you get about 2 volts (2.030769V +- resistor tolerance) as Reference is due to the internal 32k pull down resistor acting as a voltage divider. The formula is provided on the Arduino site for other voltage calculations.

    To calculate the new mapping we will do the following: 1. New 0 - 1023 resolution = 2030.769mV / 1024 steps = 1.98317mV per step; 2. Calculate your maximum and minimum mapping values. TM36 -40C = 100mV; 25C = 750mV; 125C = 1750mV; 100mV / 1.98317mV = 50.4243 so lets call it 50; 1750mV / 1.98317mV = 882.4256 so lets call it 882; 3. Plug in the new mapping values in the Arduino map line: TempReadingCelcious = map(TempReading, 50, 882, -40, 125);

    I hope this helps everyone that wants to use these for an Arduino project. I get consistent readings at full C steps by taking the average of 5 readings before mapping. I don’t own a thermometer so I used my AC thermostat as reference and both my Arduino and thermostat were reading the same temperature. In theory this should let you get down to 0.2C steps accurately but I haven’t tried this yet.

    • Just got done doing a 0.2C step test. Works pretty well with minimal fluctuation (I got a reading of 24.4C with every 3-5 reading set giving me 24.6C with a readout interval of 1 second). Change your map line to this using int values: TempReadingCelcious = map(TempReading, 50, 882, -400, 1250); TempReadingFahrenheit = (1.8 * TempReadingCelcious) + 320; Taking an additional set of average readings smooths out the fluctuation (I take 5 base readings, average, take 5 averages and average again).

      You will get 3 digit readings: 244 which equals 24.4C. Fahrenheit goes in 0.4F steps using this.

  • Description says “no external calibration required” yet I get about 10 deg C difference when using my UNO, and my Nano. Any ideas why? …. once I hooked it up to a wallwart it seems to have sorted itself out….I assume it has something to do with power over the USB…odd.

  • This is a nice sensor to learn about A/D manipulation with uC’s. Don’t know if anyone else has experienced this, but when used remotely even less than 3ft, the noise susceptibility makes Vout will jump around by a few mV. I placed a 680 Ohm resistor in series with the output per the datasheet suggestions, and it helped somewhat but did not get rid of enough noise. Tried capacitors between Vin and Gnd, no change. Tried sampling 5 times then averaging the result - not good enough. Did not try shielded cable.. instead I got the DS18B20 and never looked back. (Not sure if the noisy signal of the TMP36 is a result solely of the Arduino or of the remote cable length. By noisy, I mean typically +/- 1 deg F bounce - too much for a temperature controller for a sensitive application.)

  • Need HELP!!! Please!!! I am using a TMP36 sensor in my truck with an embedded Atmega328 chip and lcd display. Everything worked fine when I breadboard the circuit with an Arduino Uno. Once I made a prototype board and hooked it up to my truck, powered by a USB car charger, the temp readings fluctuate anywhere from -55F to over 90F. I do have a 220uF capacitor across pos. and neg. rails on the prototype board. Thanks

  • Ok so tech pride aside; is the sensor good or no good with an Arduino and some modest relays off the 5v regulator on the Arduino?

  • just gought it

  • I got one of these in my starter kit. I setup it up exactly like the sik guide said but am getting constant negative values, -50. Anyone else have this issue? I’m assuming its a bad sensor?

  • yo, the above description is wrong.. you don’t simply divide voltage by 10mv/C… you solve for the temperature as Mark Ficket pointed out about below… happy temp. monitoring…

    ºC = 100 * V – 50.

  • I need help. I’m fairly knew to this but I need a circuit I can build that will sense the heat from a laser module. I have a 12VDC Micro Fan that covers the heat sink along with a 2 watt micro laser driver with a 2 watt laser blue diode, as you can see heat is a issue. I want a circuit that will sense a temp of about 90deg and activate the micro fan. Keep in mind my laser unit is the size of a small iPod so i need as much saved space as possible. thank you.

  • appropriately how long could the wires connecting this sensor to an arduino be before the SNR is too low?

  • Reading 320-340 in an 80deg F house. I’m assuming my conversions are correct making 331 3 deg F. This is obviously wrong. Does it appear to be a fault of my own or is my TMP36 faulty?

    sensor = 331 degC = -16 degF = 3

  • Buyer beware: They sent me 2 TM335, instead of the TMP 36. Couldn’t figure out why I was getting strange readings. Had to go talk with the EEs who figured it out, and that I now need pull up resistors, different code. Not happy.

  • Any idea on an ETA for these?

  • confusion: if this device produces an analog output, wouldn’t it be linearly proportional to temperature measured on any scale (celsius, fahrenheit, kelvin, etc.)? or does it actually produce a step pattern of voltages that precisely correspond to celsius degree divisions?

    • Well the output is linear, so I don’t see any reason why it would be an issue. I wouldn’t want to deal with converting to and from the different temperature scales because of the way microcontrollers handle floating point arithmetic.

      • I’m not sure why you’re concerned about using floating point arithmetic.

        Precision shouldn’t be an issue when converting to another temperature scale, since it’s only good to +/- 1 deg. C at best anyway.

        And there’s no need to use multiplication. If you want to convert to Fahrenheit, add 32 degrees to 0 deg. C, and add or subtract 1.8 deg. F for every change of 1 deg. C.

        Or use a lookup table to convert values over your likely range of Celcius temperatures.

        • “…add or subtract 1.8 deg. F for every change of 1 deg. C.”

          Where I come from, we call that multiplication.

  • I’d recomend throwing the sample code from the SIK. this is about the easiest to use temp sensor, it’s designed to work at 3.3V, already calibrated, works out of the box. and on mine i'v reversed the polarity for a extended time and it’ll still work fine after.

Related Products