Voltage divider + Thermistor

Forgive me in advance... I'm a mechanical engineer, not an electrical...

Project: Wearable thermometer for firefighting

Background Info: Firefighting "bunker gear" has reached phenomenal levels of thermal protection. This thermal barrier, however, reaches an abrupt threshold where heat is no longer reflected and is instead absorbed. Unfortunately this thermal threshold is well above 500 degrees... meaning when the thermal liner of the gear becomes compromised, the firefighter is suddenly subjected to extremely high temps resulting in burns and even death. Current gear is so advanced, that firefighters generally have no idea how hot their environment really is. Old school firemen used the heat on their ears as indicators. Today's fireman are compromising their own safety by leaving key components of their ensemble off in order to expose bare skin to the environment in a burning building as a temp gauge.

Project Synopsis: By using a platinum RTD, an Arduino Pro Mini, and an LED bar graph, create a temperature gauge inside the mask of a firefighter which will alert them to the ambient temp of their environment.

So here's the deal... I'm assembling parts and beginning to write my code for this. I bought a Nano to be my prototype (USB power & breadboardable) as well as a 1PT100KN1515CLA RTD element from Omega Engineering (100Ohm @ 0 degrees C). The RTD was chosen for its incredibly small size (since this mounts to the face piece of a firefighter)

I'm thinking more or less this...

It's essentially the same as the bar graph tutorial with an RTD/thermistor instead of the potentiometer. The resistor on the other side of the RTD would be a 4k.

So... If I've done my math right...

V(divider) = (R2/(R1+R2))
V(divider) = (4000/(100+4000)
V(divider) = .975v @ 0 degrees C

If I follow that the RTD will change resistance according to the Callendar-Van Dusen equation, then from 0-600 degrees there is a potential difference of .048v

So given that the resolution of the analog inputs is roughly .0049 volts per unit that gives me ROUGHLY 10 units ;D ... One for each LED on the bar graph.

Is my logic sound here?

Final note: I know the reaction time of the RTD is quite slow. This is intentional... this acts as a buffer for localized thermal events (i.e. the hosestream removes a radiant heat source, but the ambient temp will remain quite elevated)

Not that I want to keep you from this worthwhile project, but what about some kind of passive sensor? Just some stuff on a tag that melts at the right temperature. To me as someone not involved fire-fighting, that would look like a more robust and fail-safe approach. Just attach a new tag once the old one was used up when cleaning the gear.


So you've got 5v into 100ohm into 4000 ohm to ground, and you have the 100 ohm/4000 ohm junction being measured by the arduino? (with Aref at 5v also?)
Vout = Vin * (4000/(4000+100)) = 4.878V with Vin at 5v.
(4000 not being a standard resistor value, 3.9K is tho, I imagine you'd want one with very low tolerance - also, how will you keep the arduino cool? I don't imagine the stock ones are rated to work over +85C. Are batteries good at elevated temps also)

What is the variation over temperature?
I found this article
which would lead to a series like this:
(I am not sure how 100 ohm at 0C comes out of this)

DegreeC x DegreeC^2*
RT Degree C 1 0.0039083 -5.775E-07 Vout = 5V(4000/(4000+RT))
139.083 100 1 0.39083 -0.005775 4.831988148
176.27952 120 1 0.468996 -0.008316 4.788951483
216.60268 140 1 0.547162 -0.011319 4.74315498
260.05248 160 1 0.625328 -0.014784 4.694777845
306.62892 180 1 0.703494 -0.018711 4.644003552
356.332 200 1 0.78166 -0.0231 4.591018315
409.16172 220 1 0.859826 -0.027951 4.536009625
465.11808 240 1 0.937992 -0.033264 4.47916486
524.20108 260 1 1.016158 -0.039039 4.420670003
586.41072 280 1 1.094324 -0.045276 4.360708454

Is that the kind of thing you are looking to develop? If so, seems pretty straightforward.
I don't know if 5v for Aref is best, or if the internal (1.1v?) Aref is better.

The above is just some simple excel using the formula in the article, I can send it to you if have trouble recreating it:
RT = temp cell (1+(temp cell * .0039083)-(temp celltemp cell*.0000005775))

Got my curiosity going.
Robert, electrical engineer

From a user-interface point of view, is it actually so useful to have a granularity of ten equal steps of LEDs? Not all of the leds have equal informational importance, and arguably, you've currently got more information channels devoted to the lesser important information. Also, that bargraph would demand a certain amount more cognitive interpretation than simply all the greens = a green led, all the yellows = a yellow, and all the reds = a red (and maybe top red = pulsing to indicate exceptional circumstances). That way the visual signal can be made less cluttered, and streamlined, with more efficient information conveyance. Especially so if it didn't inherit the “bargraph” symbolism which affords quantification but requires thinking about with a measuring hat on, but rather, state change symbolism, which affords merely recognition — so that if the yellow led is on, the green isn't any more, and if the red led is on, the yellow isn't any more. The signal is cleaner, rather than a mix of some green with some yellow in there with perhaps a dash of red in the mix too.

Ian, artist.

All valid thoughts! Thank you guys.

As for the use of a passive device, this is to enable the firefighter to make snap judgment calls. Instead of a completely binary answer as to the "is it hot" question, there is some room for interpretation... which allows them to judge whether or not they have the means to continue. For example, if there is a known victim inside... we'll push it to the absolute limit and we need to know where that limit exists.

That indeed is the Callendar-Van Dusen equation ( Wiki )

The tolerance on the resistor would be quite tight, I think. I threw out 4k kinda arbitrarily, 3.9 would suffice as well I think. As I calculate it today, the current at the RTD is slightly over 1mA... which is just above the recommended current for the RTD, so I may have to put something in-line there as well in the end.

The Arduino/display/power source will all be contained INSIDE the firefighter mask. This limits the smoke exposure and heat exposure. I'm not 100% on the high humidity yet, but that can be easily combated with an epoxy shell I think.

Firefighter masks (at least the model I'm currently working with) have diaphragms on the sides to help facilitate communication. They vibrate as you talk to help your sound be transferred outside the mask.

(The round shapes on either side)

Most departments buy these special amplifiers that go in place of the diaphragm. These eliminate the need for the diaphragm and only go on one side.

This leaves the other diaphragm to sit and do nothing, haha. If I mount my RTD in a covering in this location, then I have a port to the outside environment without drilling holes (and subsequent need to seal said holes).

The bar graph can sit inside the mask in a dead area that can easily be seen by peripheral vision but not interfere with visibility (there are tubes that connect the diaphragms with the nose cup... mount it on them)

As for the granularity, you bring up an interesting thought. I have two conflicting things working here...

If I continue to use the 100ohm RTD in this fashion, I have a VERY limited window to work with. Should I want to calibrate it down (to say 100-500 degrees F) then the change across the divider is too small to be caught by the Arduino (there would be approx 4 points). This lends itself to a 4 point system like you mention, but takes away some of the judgment information (i.e. am I in the low yellow or the high yellow)

If I were to change to a 1000ohm RTD my window of available points jumps considerably! Some rough math says that I'd have a total voltage difference potential of .23 volts (from 0-600 degrees C)... which would give nearly 50 points of resolution. This comes at the added expense of a 1000ohm RTD, increased weight, increased size. It's certainly food for thought and I appreciate the input!

Final bit... here are the RTDs in question... being the ME I am, I'm all about the weight savings and packaging, haha.


I don't understand your perceived lack of range.
The equation I used results in a 0.043V difference every 20C (10 bits of A/D difference), increasing to 0.063 as the temp gets higher all the way to 600C.
I calculate this would A/D readings of 988 at 100C, decreasing by 9-10 or so every 20 degrees, with a reading of 681 at 600C.
You could then easily set your colors to represent what you want.
Increasing Greens up to say 260C (500F), then Yellows up to 440C( ~850F), and Red at 550C (100F) & 600C (>1000F).

Vout = A/D 1 bit
RT Degree C 5V(4000/(4000+RT)) 0.00489 DegreeF
Diff to
100.2 77.0 prior
139.1 100.0 4.8320 988.6 212.0
176.3 120.0 4.7890 0.043 979.8 248.0
216.6 140.0 4.7432 0.046 970.4 284.0
260.1 160.0 4.6948 0.048 960.6 320.0
306.6 180.0 4.6440 0.051 950.2 356.0
356.3 200.0 4.5910 0.053 939.3 392.0
409.2 220.0 4.5360 0.055 928.1 428.0
465.1 240.0 4.4792 0.057 916.4 464.0
524.2 260.0 4.4207 0.058 904.5 500.0
586.4 280.0 4.3607 0.060 892.2 536.0
651.7 300.0 4.2995 0.061 879.7 572.0
720.2 320.0 4.2371 0.062 866.9 608.0
791.8 340.0 4.1738 0.063 854.0 644.0
866.5 360.0 4.1097 0.064 840.8 680.0
944.4 380.0 4.0450 0.065 827.6 716.0
1025.3 400.0 3.9798 0.065 814.3 752.0
1109.4 420.0 3.9143 0.066 800.9 788.0
1196.6 440.0 3.8486 0.066 787.4 824.0
1287.0 460.0 3.7829 0.066 774.0 860.0
1380.5 480.0 3.7171 0.066 760.5 896.0
1477.1 500.0 3.6516 0.066 747.1 932.0
1576.8 520.0 3.5863 0.065 733.8 968.0
1679.7 540.0 3.5213 0.065 720.5 1004.0
1785.6 560.0 3.4568 0.065 707.3 1040.0
1894.8 580.0 3.3928 0.064 694.2 1076.0
2007.0 600.0 3.3295 0.063 681.2 1112.0

I must have had a calculation error. Let's see if this is right...

So that puts me more like 50 steps from high to low... right?


I don't think so.
I am calculating more like a difference of 300 from 100C to 600C.
You have the part now? Wire it up and do some testing with you toaster oven.
Here's the idea, showing part of an arduino.

Great to see someone thinking of using an arduino for a serious project. A fibre optic type bendy line could present the colours to the user's preferred eye-line without having to place bulky components in his field of vision (though you can get some amazingly small LEDs these days) Note also that you may need some conditioning system to brighten LEDs in daylight and dim them in black darkness. Any extraneous light will be undesirable.

However you may be using a sledge hammer to crack quite a small nut

Have you considered using an LM3914 LED driver chip to do exactly what you want. See http://www.national.com/ds/LM/LM3914.pdf for details.


It would seem to me that there's plenty of pins available to drive some LEDs, especially where he doesn't need 20mA of blinding brightness - some 3mm LEDs recessed in a case (think stop lights with their glare shield) with a bussed resister network

for current limiting would do the trick.
Or do similar with surface mount parts. Probably fit it all on a little CCA that can be mounted on the back of the nano - then just have 2 wire going to the RTD and 2 wires to the battery.

I'll admit to having never crawled into a burning building but I'd be very wary of anything that could compromise my nightvision. I think red light is the safest in this respect. However, have you consider other means of communicating with the user? Perhaps some sort of vibration?

Most newer masks have a heads up display that shows bottle pressure as a funciton of several LEDs. This is located in the regulator (the part at the very front of the mask). They aren't exceptionally bright and I don't think the bar graph (or the 3 light system) would be too bright either. You're far more likely to be blinded by your partners survivor light (jumbo flashlight attached to your coat) or helmet light.

I've looked at that driver before and had thought perhaps that could be the kind of thing I might one day put into production... but for now the Arduino allows me greater flexibility in trying out things like flash patterns, tripping additional alarms, or even tying in to a central telemetry system (so the incident commander can see things and make a choice to pull out or not)

I've also thought about using a nano or pro mini with the LED bar graph though-hole soldered to the outputs so everything is in a super tight package.

What is the purpose of coming back to the reference voltage pin? Why can I not follow the design of the bar graph tutorial?


Sounds like a cool (no pun intended) project. Hope you have success.

See 23.5 thru 23.7 of the datasheet.
If you want 1023 data points at 0.0048/point, then I think Vref needs to be 5V.
If you do not have Vref at 5, than your voltage is only compared to 1.1V.

"Single ended channels that exceed Vref will results in codes close to 0x3FF."

I could be wrong. I just realized my equation in the picture is wrong, but the data I had listed in earlier post is correct.

Vout = Vin(3900/(3900+100))

Thus at 100 ohm Vout = 4.875 which is over the 1.1 internal reference.
Unless you plan to also add a 1.1V reference to the design. Will need a smaller 2nd resister than to keep the 1mA recommended for the RTD.

But its easy to plop the parts on a breadboard and try some measurements.

Good on you Nerdy,

You've thought about and eliminated the obvious simple route to provide for extra facilities. I like the idea of feeding back by telemetry.

Have you thought about also adding an infrared sensor so's you can "see" the location of the heat source in thick black smoke.

The 100 ohm RTD may give too poor a resolution since the buffer resistor to control bias current is so small, so the use of higher value units (1000 ohm) might be a better option. Rather than using a simple tapped voltage divider, you'd be better to use a bridge configuration. That way you can bias the arduino input with a reference voltage that is independant of battery voltage (to eliminate drift as the battery voltage drifts or varies. This would require a supply voltage separate from that which drives the arduino but this could easily be achieved by using a dc/dc convertor chip driven by the same battery that drives the arduino.


I think Ian has a valid point here, that bar can get big. Have you though about a smaller user interface, for example 2 leds, one red one green or a bi-colour led and to indicate the urgency with the frequency of the flashing:- constant green: No fire is around, you're not even at the beach but the system is running.

  • slow green flashing: below the limit but there's heat. Are topless beach-babes around playing volleyball?
  • slow green-red alternating flashing: things get interesting
  • red only flashing medium fast: Uncomfortable situation
  • red only flashing very fast: Ears are burning
    No flashing or constant light: Something is borked or you're at the wrong party. This interface would reduce the data to one small spot and might be more effective than the bar graph. If you scale properly the flashing-rate, you might transmit a good sense of urgency. As a start I would select slow as 60 to 80 pulses per minute (about the heart-rate at rest) and go with very fast with up to 10 - 15 pulses per second.

Once the whole things works properly, you might consider moving to a smaller processor like the ATtiny at 3.3V to save power. In the end, you just need the sensor and the leds, so 1 analogue input and 2 digital outputs are enough. Not even a crystal should be necessary. This will make the whole setup very, very compact, specially if you find a friendly soul you can build the circuit using SMD components for you. But that's only an optimisation once you're ready to move past the prototype stage.


Proof of concept...

No Vref required :smiley:

There you go then.