diy thermometer sensitivity

Guest
I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).

I saw this on the web:
http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me. I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.

A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground. Did that. A wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works. The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105. Room temperature at 23 C gave me 132.

I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature. But now the sensitivity seems to only be 3 degrees. Temperature will jump even on gradual heating by 3 degrees.

I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)

I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.

Any suggestions?

Thanks!

Michael
 
For my furnace thermostats, I ended up taking many readings and
averaging them, to "increase" the sensitivity. This works for me
because I realized that the noise in the readings was proportional to
the actual temperature (i.e. if it's actually 78.25 degrees, it will
read 78 most of the time and 79 some of the time, etc).
 
On Mon, 10 Jun 2013 10:28:29 -0700 (PDT), mrdarrett@gmail.com wrote:

I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).

I saw this on the web:
http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me. I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.

A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground. Did that. A wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works. The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105. Room temperature at 23 C gave me 132.

I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature. But now the sensitivity seems to only be 3 degrees. Temperature will jump even on gradual heating by 3 degrees.

I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)

I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.

Any suggestions?
As DJ recommends, over-sampling and then averaging will probably help.
On the other hand, a diode-connected transistor doesn't behave quite
like a thermistor. Linear has a good app note on this over at
<http://cds.linear.com/docs/en/application-note/an137f.pdf>.

On the other, other hand your current empirical approach can do the
job nicely if you get enough points to fit a low-order polynomial that
the Arduino can handle -- or just to accurately define your threshold
values and not worry about converting the A/D values to a temperature.
As far as increasing your overall sensitivity, try sticking an op amp
between the sense point and your A/D. That's often a good idea anyway,
to buffer the sensor from the A/D input impedance. You can adjust the
gain and offset of the op amp circuit to spread your range of interest
across the input range of the A/D. If you're a little rusty on how to
do that, read Chapter 4 of "Op Amps for Everyone", a free download at
<http://www.ti.com/lit/an/slod006b/slod006b.pdf> Note that the freebie
is the 2002 edition. There are later editions but this is still a good
book and it's, well, free!
 
On Mon, 10 Jun 2013 13:02:17 -0700 (PDT), mrdarrett@gmail.com wrote:

On Monday, June 10, 2013 12:48:48 PM UTC-7, George Herold wrote:


Well you'll have to calibrate it somehow though.


Ice bath (0 C), boiling water (100 C)... then again I used tap water not distilled, and I'm probably 70 ft above sea level... eh, good enough. Least-squares trendline in OpenOffice and... voila.


A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground.  Did that.  A wire goes from the B-C-resistor junction to the ADC input on the Arduino.



It works.  The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105.  Room temperature at 23 C gave me 132.



I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature.  But now the sensitivity seems to only be 3 degrees.  Temperature will jump even on gradual heating by 3 degrees.



I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)



I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.



Any suggestions?



The thermistor idea is OK. You can get 0.1 degree C thermistors for

(maybe) $10 and 0.2 C for less. You'll want to think about the error

sources in your measurement. (How 'good' does the +5V have to be?

What about the 10k ohm resistor?)



I've got a table for a 10k ohm (room temp.) thermistor, it doesn't go

up to 79 C, but at 59C the resistance is 2580 ohms and 2488 ohms at

60C. (to give you an idea of the sensitivity.)

You'll do a bit better if the second resistor is closer in value to

your thermistor resistance at your desired temperature.


Say... what *would* the resistance of a 2n3904 be at room temperature, with the base tied to the collector? I tried to put my DMM in series to measure the current with the resistor there, hoping to calculate R=V/I, but for some reason the Arduino refused to work this way (looked like an open circuit to the Arduino).
It's not "resistance", it's a Vbe of the transistor, ~0.7V at room
temperature, constant current, -2mV/°C change versus temperature.

To improve sensitivity put it in a bridge with an instrument amp after

the bridge and adjust the gain and bridge resistors to fill the span

of your ADC.


Ok, I will try that.

Thanks!

Michael
...Jim Thompson
--
| James E.Thompson | mens |
| Analog Innovations | et |
| Analog/Mixed-Signal ASIC's and Discrete Systems | manus |
| San Tan Valley, AZ 85140 Skype: Contacts Only | |
| Voice:(480)460-2350 Fax: Available upon request | Brass Rat |
| E-mail Icon at http://www.analog-innovations.com | 1962 |

I love to cook with wine. Sometimes I even put it in the food.
 
On Monday, June 10, 2013 11:05:39 AM UTC-7, DJ Delorie wrote:
For my furnace thermostats, I ended up taking many readings and

averaging them, to "increase" the sensitivity. This works for me

because I realized that the noise in the readings was proportional to

the actual temperature (i.e. if it's actually 78.25 degrees, it will

read 78 most of the time and 79 some of the time, etc).

Oh ok, I'll keep that in mind. Thanks! The temperature changes within seconds; maybe I just have to take more samples... every few milliseconds or so
 
On Mon, 10 Jun 2013, mrdarrett@gmail.com wrote:

I have a need to measure temperature accurately from 78.0 C to 79.0 C
(eventually I'll need to turn on a solenoid valve for cooling water at
79 C and turn it off at 78 C).

I saw this on the web:
http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me. I read about how a 2N3904 can
function as a temperature sensor if you tie the base and collector
together, so I did that instead of placing an order and waiting for a
thermistor to arrive.

As someone said, the articles always used to tell you to use ice cubes and
boiling water to define those points, something you can easily replcate at
home. But then what's the linearity between those points? Some schemes
were better than others, and it's been so long.

But making a thermometer is actually different from a switch that turns on
at a given temperature. You might as well get a good thermometer, and
then adjust the trigger in the homemade sensor to switch at that point.
Turn up the heat until the thermometer reads what you want, then adjust
the trigger so it switches at that point. Then you don't have to fuss
about calibrating the sensor, or worry about whether it's linear over the
same range.

Michael
 
On Jun 10, 1:28 pm, mrdarr...@gmail.com wrote:
I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).

I saw this on the web:http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me.  I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.
Well you'll have to calibrate it somehow though.

A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground.  Did that.  A wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works.  The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105.  Room temperature at 23 C gave me 132.

I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature.  But now the sensitivity seems to only be 3 degrees.  Temperature will jump even on gradual heating by 3 degrees.

I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)

I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.

Any suggestions?
The thermistor idea is OK. You can get 0.1 degree C thermistors for
(maybe) $10 and 0.2 C for less. You'll want to think about the error
sources in your measurement. (How 'good' does the +5V have to be?
What about the 10k ohm resistor?)

I've got a table for a 10k ohm (room temp.) thermistor, it doesn't go
up to 79 C, but at 59C the resistance is 2580 ohms and 2488 ohms at
60C. (to give you an idea of the sensitivity.)
You'll do a bit better if the second resistor is closer in value to
your thermistor resistance at your desired temperature.
To improve sensitivity put it in a bridge with an instrument amp after
the bridge and adjust the gain and bridge resistors to fill the span
of your ADC.

George H.
Thanks!

Michael
 
On Monday, June 10, 2013 12:00:39 PM UTC-7, Rich Webb wrote:
On Mon, 10 Jun 2013 10:28:29 -0700 (PDT), mrdarrett@gmail.com wrote:



I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).



I saw this on the web:

http://playground.arduino.cc/ComponentLib/Thermistor



and I happen to have an Arduino on me. I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.



A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground. Did that. A wire goes from the B-C-resistor junction to the ADC input on the Arduino.



It works. The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105. Room temperature at 23 C gave me 132.



I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature. But now the sensitivity seems to only be 3 degrees. Temperature will jump even on gradual heating by 3 degrees.



I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)



I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.



Any suggestions?



As DJ recommends, over-sampling and then averaging will probably help.

On the other hand, a diode-connected transistor doesn't behave quite

like a thermistor. Linear has a good app note on this over at

http://cds.linear.com/docs/en/application-note/an137f.pdf>.



On the other, other hand your current empirical approach can do the

job nicely if you get enough points to fit a low-order polynomial that

the Arduino can handle -- or just to accurately define your threshold

values and not worry about converting the A/D values to a temperature.

As far as increasing your overall sensitivity, try sticking an op amp

between the sense point and your A/D. That's often a good idea anyway,

to buffer the sensor from the A/D input impedance. You can adjust the

gain and offset of the op amp circuit to spread your range of interest

across the input range of the A/D. If you're a little rusty on how to

do that, read Chapter 4 of "Op Amps for Everyone", a free download at

http://www.ti.com/lit/an/slod006b/slod006b.pdf> Note that the freebie

is the 2002 edition. There are later editions but this is still a good

book and it's, well, free!

Great! Thanks!

I've never used an opamp before. This will be fun. =)

Michael
 
On Monday, June 10, 2013 12:48:48 PM UTC-7, George Herold wrote:


Well you'll have to calibrate it somehow though.

Ice bath (0 C), boiling water (100 C)... then again I used tap water not distilled, and I'm probably 70 ft above sea level... eh, good enough. Least-squares trendline in OpenOffice and... voila.


A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground.  Did that.  A wire goes from the B-C-resistor junction to the ADC input on the Arduino.



It works.  The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105.  Room temperature at 23 C gave me 132.



I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature.  But now the sensitivity seems to only be 3 degrees.  Temperature will jump even on gradual heating by 3 degrees.



I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)



I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.



Any suggestions?



The thermistor idea is OK. You can get 0.1 degree C thermistors for

(maybe) $10 and 0.2 C for less. You'll want to think about the error

sources in your measurement. (How 'good' does the +5V have to be?

What about the 10k ohm resistor?)



I've got a table for a 10k ohm (room temp.) thermistor, it doesn't go

up to 79 C, but at 59C the resistance is 2580 ohms and 2488 ohms at

60C. (to give you an idea of the sensitivity.)

You'll do a bit better if the second resistor is closer in value to

your thermistor resistance at your desired temperature.

Say... what *would* the resistance of a 2n3904 be at room temperature, with the base tied to the collector? I tried to put my DMM in series to measure the current with the resistor there, hoping to calculate R=V/I, but for some reason the Arduino refused to work this way (looked like an open circuit to the Arduino).


To improve sensitivity put it in a bridge with an instrument amp after

the bridge and adjust the gain and bridge resistors to fill the span

of your ADC.

Ok, I will try that.

Thanks!

Michael
 
On Mon, 10 Jun 2013 10:28:29 -0700 (PDT), mrdarrett@gmail.com wrote:

I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).

I saw this on the web:
http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me. I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.

A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground. Did that. A wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works. The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105. Room temperature at 23 C gave me 132.
You're only using a fraction of the ADC range.

A Vbe multiplier would help.

+5-----R1-------+------+--- to ADC
| |
| |
R2 |
| C
+----B
| E
| |
R3 |
| |
| |
gnd gnd

The collector voltage will be about 0.6 * (1 + R2/R3) which can be
scaled up to, say, 3 volts at 80C.

You can Spice this. R1 might be, say, 5K and R3 maybe 10K.

I'd put a capacitor across R3 so the transistor doesn't rectify stray
RF.

As noted, signal average to remove ADC noise.


--

John Larkin Highland Technology, Inc

jlarkin at highlandtechnology dot com
http://www.highlandtechnology.com

Precision electronic instrumentation
Picosecond-resolution Digital Delay and Pulse generators
Custom laser drivers and controllers
Photonics and fiberoptic TTL data links
VME thermocouple, LVDT, synchro acquisition and simulation
 
On 11/06/13 01:28, mrdarrett@gmail.com wrote:
I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).

I saw this on the web:
http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me. I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.

A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground. Did that. A wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works. The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105. Room temperature at 23 C gave me 132.

I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature. But now the sensitivity seems to only be 3 degrees. Temperature will jump even on gradual heating by 3 degrees.

I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)

I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.

Any suggestions?

Thanks!

Michael
As another approach the dedicated temp. chips are very cheap and would
fill your needs.

Rheilly
 
mrdarrett@gmail.com wrote:
I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.

Won't 10 mA cause some self heating?
 
On Jun 10, 4:07 pm, Jim Thompson <To-Email-Use-The-Envelope-I...@On-My-
Web-Site.com> wrote:
On Mon, 10 Jun 2013 13:02:17 -0700 (PDT), mrdarr...@gmail.com wrote:
On Monday, June 10, 2013 12:48:48 PM UTC-7, George Herold wrote:

Well you'll have to calibrate it somehow though.

Ice bath (0 C), boiling water (100 C)... then again I used tap water not distilled, and I'm probably 70 ft above sea level... eh, good enough.  Least-squares trendline in OpenOffice and... voila.

A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground.  Did that.  A wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works.  The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105.  Room temperature at 23 C gave me 132.

I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature.  But now the sensitivity seems to only be 3 degrees.  Temperature will jump even on gradual heating by 3 degrees.

I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)

I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.

Any suggestions?

The thermistor idea is OK.  You can get 0.1 degree C thermistors for

(maybe) $10 and 0.2 C for less.  You'll want to think about the error

sources in your measurement.  (How 'good' does the +5V have to be?

What about the 10k ohm resistor?)

I've got a table for a 10k ohm (room temp.) thermistor, it doesn't go

up to 79 C, but at 59C the resistance is 2580 ohms and 2488 ohms at

60C.  (to give you an idea of the sensitivity.)

You'll do a bit better if the second resistor is closer in value to

your thermistor resistance at your desired temperature.

Say... what *would* the resistance of a 2n3904 be at room temperature, with the base tied to the collector?  I tried to put my DMM in series to measure the current with the resistor there, hoping to calculate R=V/I, but for some reason the Arduino refused to work this way (looked like an open circuit to the Arduino).

It's not "resistance", it's a Vbe of the transistor, ~0.7V at room
temperature, constant current, -2mV/°C change versus temperature.
Yeah What Jim said,

Here's a link to diode forward voltage vs temperature... (Lots of
stuff you don't need there, but you can look at the first figure.)

https://www.dropbox.com/s/gtrgm08ui2lre78/Diode%20calibration%20table.doc

You'll need to drive the diode with a current source. Part of the
problem with the diode is if you want to sense a 1 degree difference
that's only a 2mV change in signal level.
To improve sensitivity put it in a bridge with an instrument amp after

the bridge and adjust the gain and bridge resistors to fill the span

of your ADC.

Ok, I will try that.
A bridge is nice because it also reduces the 5 volt supply stability
requirements.

George H.
Thanks!

Michael

                                        ...Jim Thompson
--
| James E.Thompson                                 |    mens     |
| Analog Innovations                               |     et      |
| Analog/Mixed-Signal ASIC's and Discrete Systems  |    manus    |
| San Tan Valley, AZ 85140   Skype: Contacts Only  |             |
| Voice:(480)460-2350  Fax: Available upon request |  Brass Rat  |
| E-mail Icon athttp://www.analog-innovations.com|    1962     |

I love to cook with wine.     Sometimes I even put it in the food.- Hide quoted text -

- Show quoted text -
 
On Jun 10, 8:29 pm, John Larkin <jlar...@highlandtechnology.com>
wrote:
On Mon, 10 Jun 2013 10:28:29 -0700 (PDT), mrdarr...@gmail.com wrote:
I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).

I saw this on the web:
http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me.  I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.

A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground.  Did that.  A wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works.  The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105.  Room temperature at 23 C gave me 132.

You're only using a fraction of the ADC range.

A Vbe multiplier would help.

+5-----R1-------+------+--- to ADC
                |      |
                |      |
               R2      |
                |      C
                +----B
                |      E
                |      |
               R3      |
                |      |
                |      |
               gnd    gnd

The collector voltage will be about 0.6 * (1 + R2/R3) which can be
scaled up to, say, 3 volts at 80C.

You can Spice this. R1 might be, say, 5K and R3 maybe 10K.

I'd put a capacitor across R3 so the transistor doesn't rectify stray
RF.

As noted, signal average to remove ADC noise.
Umm, a silly question. Is this to 'gain-up' the transistor Vbe
voltage with transistor as temp sensor? Or to 'gain-up' a thermistor
stuck in as R2?

I was first thinking the later... but then changed my mind.

George H.
--

John Larkin         Highland Technology, Inc

jlarkin at highlandtechnology dot comhttp://www.highlandtechnology.com

Precision electronic instrumentation
Picosecond-resolution Digital Delay and Pulse generators
Custom laser drivers and controllers
Photonics and fiberoptic TTL data links
VME thermocouple, LVDT, synchro   acquisition and simulation
 
On Tue, 11 Jun 2013 06:31:04 -0700 (PDT), George Herold <gherold@teachspin.com>
wrote:

On Jun 10, 8:29 pm, John Larkin <jlar...@highlandtechnology.com
wrote:
On Mon, 10 Jun 2013 10:28:29 -0700 (PDT), mrdarr...@gmail.com wrote:
I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).

I saw this on the web:
http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me.  I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.

A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground.  Did that.  A wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works.  The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105.  Room temperature at 23 C gave me 132.

You're only using a fraction of the ADC range.

A Vbe multiplier would help.

+5-----R1-------+------+--- to ADC
                |      |
                |      |
               R2      |
                |      C
                +----B
                |      E
                |      |
               R3      |
                |      |
                |      |
               gnd    gnd

The collector voltage will be about 0.6 * (1 + R2/R3) which can be
scaled up to, say, 3 volts at 80C.

You can Spice this. R1 might be, say, 5K and R3 maybe 10K.

I'd put a capacitor across R3 so the transistor doesn't rectify stray
RF.

As noted, signal average to remove ADC noise.

Umm, a silly question. Is this to 'gain-up' the transistor Vbe
voltage with transistor as temp sensor? Or to 'gain-up' a thermistor
stuck in as R2?
It multiplies Vbe of the transistor. Vbe changes about 2.5 millivolts per degree
C, and you can multiply that by, say. 5:1 and still be in the ADC range.

LM34 is a nice temp sensor, 10 mv per degree F.


--

John Larkin Highland Technology Inc
www.highlandtechnology.com jlarkin at highlandtechnology dot com

Precision electronic instrumentation
Picosecond-resolution Digital Delay and Pulse generators
Custom timing and laser controllers
Photonics and fiberoptic TTL data links
VME analog, thermocouple, LVDT, synchro, tachometer
Multichannel arbitrary waveform generators
 
On Tuesday, June 11, 2013 8:07:33 AM UTC-7, Michael Terrell wrote:
mrdarrett@gmail.com wrote:



I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.





Won't 10 mA cause some self heating?

It might. I touched the transistor and wondered if it was getting warm, but maybe it was just my imagination.

I wasn't brave enough to tie the transistor base and collector directly to +5V... I didn't want to ruin my Arduino.

Thanks for the advice, everyone! My head is spinning. So many things to try.

Michael
 
On Tuesday, June 11, 2013 6:31:04 AM UTC-7, George Herold wrote:

....

You're only using a fraction of the ADC range.



A Vbe multiplier would help.



+5-----R1-------+------+--- to ADC

                |      |

                |      |

               R2      |

                |      C

                +----B

                |      E

                |      |

               R3      |

                |      |

                |      |

               gnd    gnd



The collector voltage will be about 0.6 * (1 + R2/R3) which can be

scaled up to, say, 3 volts at 80C.



You can Spice this. R1 might be, say, 5K and R3 maybe 10K.



I'd put a capacitor across R3 so the transistor doesn't rectify stray

RF.



As noted, signal average to remove ADC noise.



Umm, a silly question. Is this to 'gain-up' the transistor Vbe

voltage with transistor as temp sensor? Or to 'gain-up' a thermistor

stuck in as R2?



I was first thinking the later... but then changed my mind.



George H.

A follow-up silly question... is the temperature-sensing transistor R2?

Thanks for the circuit John!

Michael
 
On Monday, June 10, 2013 5:38:34 PM UTC-7, Rheilly Phoull wrote:
On 11/06/13 01:28, mrdarrett@gmail.com wrote:

I have a need to measure temperature accurately from 78.0 C to 79.0 C (eventually I'll need to turn on a solenoid valve for cooling water at 79 C and turn it off at 78 C).



I saw this on the web:

http://playground.arduino.cc/ComponentLib/Thermistor



and I happen to have an Arduino on me. I read about how a 2N3904 can function as a temperature sensor if you tie the base and collector together, so I did that instead of placing an order and waiting for a thermistor to arrive.



A friend said to put the 10k resistor on the +5V line, then have the transistor below that, then tie the emitter to ground. Did that. A wire goes from the B-C-resistor junction to the ADC input on the Arduino.



It works. The serial port monitor tells me that for ice water, the 10-bit ADC value is 141. Boiling water from the microwave gives me 105. Room temperature at 23 C gave me 132.



I made a best-fit line with my OpenOffice spreadsheet and had the Arduino calculate the temperature. But now the sensitivity seems to only be 3 degrees. Temperature will jump even on gradual heating by 3 degrees.



I would like to expand the range from 105 to 141 somewhat (10 bits should get me 0 to 1023, right?)



I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA, should be ok) but still didn't get much improvement in sensitivity.



Any suggestions?



Thanks!



Michael





As another approach the dedicated temp. chips are very cheap and would

fill your needs.



Rheilly

Yes, I was starting to wonder if the best approach would be to simply bite the bullet and pay the $2 for the thermistor.

But the methods everyone suggested will probably get me to where I need to go.

Thanks!

M
 
On Tue, 11 Jun 2013 03:28:29 +1000, <mrdarrett@gmail.com> wrote:

I have a need to measure temperature accurately from 78.0 C to 79.0 C
(eventually I'll need to turn on a solenoid valve for cooling water at
79 C and turn it off at 78 C).

I saw this on the web:
http://playground.arduino.cc/ComponentLib/Thermistor

and I happen to have an Arduino on me. I read about how a 2N3904 can
function as a temperature sensor if you tie the base and collector
together, so I did that instead of placing an order and waiting for a
thermistor to arrive.

A friend said to put the 10k resistor on the +5V line, then have the
transistor below that, then tie the emitter to ground. Did that. A
wire goes from the B-C-resistor junction to the ADC input on the Arduino.

It works. The serial port monitor tells me that for ice water, the
10-bit ADC value is 141. Boiling water from the microwave gives me 105.
Room temperature at 23 C gave me 132.

I made a best-fit line with my OpenOffice spreadsheet and had the
Arduino calculate the temperature. But now the sensitivity seems to
only be 3 degrees. Temperature will jump even on gradual heating by 3
degrees.

I would like to expand the range from 105 to 141 somewhat (10 bits
should get me 0 to 1023, right?)

I tried substituting 500 ohms for the 10k resistor (5V/500 ohms = 10 mA,
should be ok) but still didn't get much improvement in sensitivity.

Any suggestions?

Thanks!

Michael
Use a DS18B20 => digital output and .25 degree C accuracy out of the box
(if you buy genuine from someone like newark, mouser or element 14)
 
On Tue, 11 Jun 2013 09:10:26 -0700 (PDT), mrdarrett@gmail.com wrote:

On Tuesday, June 11, 2013 6:31:04 AM UTC-7, George Herold wrote:

...

You're only using a fraction of the ADC range.



A Vbe multiplier would help.



+5-----R1-------+------+--- to ADC

                |      |

                |      |

               R2      |

                |      C

                +----B

                |      E

                |      |

               R3      |

                |      |

                |      |

               gnd    gnd



The collector voltage will be about 0.6 * (1 + R2/R3) which can be

scaled up to, say, 3 volts at 80C.



You can Spice this. R1 might be, say, 5K and R3 maybe 10K.



I'd put a capacitor across R3 so the transistor doesn't rectify stray

RF.



As noted, signal average to remove ADC noise.



Umm, a silly question. Is this to 'gain-up' the transistor Vbe

voltage with transistor as temp sensor? Or to 'gain-up' a thermistor

stuck in as R2?



I was first thinking the later... but then changed my mind.



George H.


A follow-up silly question... is the temperature-sensing transistor R2?

Thanks for the circuit John!

Michael
The sensor is the transistor itself, the Vbe junction drop multiplied by
1+R2/R3. All the resistors are ordinary resistors.

If 1+R2/R3 is 5, the collector voltage will be roughly 3 volts at 80C, dropping
about 12 or so millivolts per degree C, 5 times the usual Vbe change with
temperature.

Cute, but a tacky way to measure temperature.


--

John Larkin Highland Technology Inc
www.highlandtechnology.com jlarkin at highlandtechnology dot com

Precision electronic instrumentation
Picosecond-resolution Digital Delay and Pulse generators
Custom timing and laser controllers
Photonics and fiberoptic TTL data links
VME analog, thermocouple, LVDT, synchro, tachometer
Multichannel arbitrary waveform generators
 

Welcome to EDABoard.com

Sponsor

Back
Top