A thermopile is a device that converts thermal energy into electrical voltage.  It's what you find in those in-ear infrared thermometers or remote temperature probes used in the food industry.

there are lots of cool applications they can be used for including motion sensors, temperature probes, fire alarms, heat flow detectors, robot sensors, forge temperature monitors or low resolution thermal imaging to name a few ideas.

This Instructable will describe the practical application of a thermopile (in particular a TS118-3) and show how to get a readout using an Arduino.

I'm fairly new to the world of electronics and I found experimenting with this to be great way to learn.  I have attempted to write this Instructable so it is easy to understand by beginners and useful to experts.  Please feel free to leave constructive comments!

I will publish another Instructable soon describing how to build a practical circuit using a thermopile for a Heat Activated Soldering Fan.

Step 1: Part Requirements

Here is what you need.  Except for the thermopile which I had to buy the choice of other components was based on what I had to hand.
  • TS118-3 Non-contact Infrared Sensor Infrared Temperature Sensor (the thermopile)
    • I got mine from Ebay
  • LM358 Dual Op-Amp
  • Resistors:
    • 3 x 1K
    • 2 x 8K2
    • 1 x 47K
    • 1 x 68K
    • 1 x 1M
  • 1 x 100nF Capacitor
  • Arduino
  • breadboard
<p>Hi! Good instructable!</p><p>What's the thermopile's responsivity like? is it fast?</p>
<p>thank you for me to understand a lot of things. One question. In the heat balance equation, the unit of temperature may be in Kelvin. Isn't it?</p>
<p>I set up your circuit exactly from Step 5 and tried your code, but the thermistor and thermopile values stay constant, and I get an overflow and nan error for the calculated values. Any idea what's wrong? Thanks.</p>
<p>Hi,</p><p>I have a question on how thermopile sensor works. I assumed that the thermopile part would feed me with a continuous analog voltage when being subjected to a heat source in the right wavelenght. I guessed that this would work regardless if the thermistor part is connected or not. </p><p>But, what seems to happen is that I get periodic bursts of data from the sensor if I hold my hand over it. It sends voltages for ~1sec then goes 0.0 for ~2sec, and this pattern repeats itself.</p><p>The question is - why? Is it suppose to do that? The link below does not provide much documentation but sufficient for my application idea where I don't really care about reading a temperature, only detect increasing and decreasing heat energy..</p><p>Anyone experienced this? Any ideas? Below is the link to the sensor..</p><p><a href="http://www.apollounion.com/en/p-Infrared-Thermopile-temperature-Sensor-TS118-3-78.html." rel="nofollow">http://www.apollounion.com/en/p-Infrared-Thermopil...</a> </p><p>Thanks for a great guide!</p>
<p>Hi I liked your explanation is very understandable, you may be able to send me the code you used in Arduino? Thanks. Greetings.</p>
<p>Hi the Arduino code is attached to step 5 as Thermopile.zip. Download it an unzip it.</p>
<p>Hi I liked your explanation is very understandable, you may be able to send me the code you used in Arduino? Thanks. Greetings.</p>
<p>Hola, es posible que puedan enviarme el codigo que usaron en Arduino. Saludos.</p>
Hola, es posible que puedan enviarme el codigo que usaron en Arduino. Saludos.<br>
<p>Okay. I made it. It is a good tutorial, but a lots of bugs. First, if you follow this tutorial step-by-step. it won't work. I promise, it happened with me (and a user from different forum). The sheet don't work. You don't need R3 at all. With R3, there is no different if you mesure 100&deg;C or 25&deg;C. TS118 gives 0V at 25&deg;C. Above that it give you negative voltage. LM358 cant make negative output voltage (max 5v, min 0v, as my teacher said). I m fighting these problem about 3 weeks. I thougth this tutorial is perfect and tested. I write this post, if somebody made it, and won't work, don't be suprised. I keep fighting, and i will report, how did i make it.</p>
<p>I did get it to work with this setup but (as I found later) it doesn't work consistently. You are right that the LM358 isn't ideal. I've been meaning to revisit this project and design a better circuit but haven't had the time. Take note of the comments left by HKB1 below. I haven't yet tried his suggestions but they sound interesting.</p><p>As I pointed out in the introduction I'm a bit of a newbie when it comes to electronics and I used this project as a learning exercise.</p><p>I will be very interested to hear how you go at improving it.</p>
You have the R2 and R1 values switched.
I don't follow the comment about R2 and R1 being switched, but my comment about using common mode rejection needs correcting. I am not sure what I have proposed is optimum (although it does work), as I cannot see how the negative feedback could work without including input resistors between the sensor outputs and the op amp inputs. A better arrangement might be a standard differential amplifier such as in figure 6 here: http://cecs.wright.edu/~phe/EGR199/Lab_2/ As long as the two input resistors (R1 in figure 6) are well matched in value, then common mode signal rejection should be quite good. And the design allows precise control over gain.
I am using the same sensor to detect body heat. The changes in voltage are tiny, only 0.4mV at one metre, so I am using the op amp inputs in common mode. R1 is 10M, R2 and R3 are removed and the sensor connected directly to the op amp inputs, and then a 10K resistor is added from each input to a bias point (at half the supply voltage - 2.5V). This arrangement cancels any noise common to both inputs (common mode rejection) and gives a gain of 1000. Any residual high frequency noise can be attenuated with a 1n capacitor in parallel with the 10M feedback resistor. Using common mode noise rejection may give you a cleaner output - when I tried your circuit a lot of mains hum was being picked up and amplified, but in common mode there was none. <br>
Strictly speaking the sensor output is supposed to be negative below ambient temperature and positive above ambient temperature. So if the sensor is at 25C, then your statement above will hold, but if it is at 20C, the result would be a little different, although not by much. I am not convinced the cheap sensor that I bought is very accurate, but as I am only detecting relative temperature in my application (detection of a human by a robot) that is not a big problem.
Please see my other comment about common mode rejection to remove noise and interference.
Really well researched project, and an informative 'Ible.

About This Instructable




More by number8wire:Razor Sharp Razor Blade Knife Geiger Counter with Touch Interface! Long Distance Laser Night Vision Flashlight 
Add instructable to: