# Can I use Ni1000 thermo sensor with Arduino Uno?

Hi, my first message in this forum: hope it will be interesting for you!

I have a Ni1000 passive (2 wires) thermo sensor already installed.
Is it possible to use it with Arduino Uno?
How shall I connect it? Is ther any library I may leverage?

Ni1000 varies its resistence with Temeprature, with 1000Ohm at 0°C, as for this diagram:

Will it be possible to calculate the right tempe with these info?

Regards
Andrea

Data sheet says its 1 kΩ at 0°C. It’s got a table of resistor values, showing this is a PTC.

Create a voltage divider with a resistor that’s roughly the value of this sensor at the average temperature you will use it, then you can read the mid point on an analog pin, calculate the resistance of the PTC, and using the table calculate the temperature (I’d just do a linear interpolation between values, will be good enough).

Basically the same as reading an NTC aka thermistor, just that in your case the resistance goes up with increasing temperature.

Almost the same temp/resistance variation of a PT1000, which is usually used with a breakout board.
Because of poor resolution when read directly with Arduino's 10-bit A/D (1-2degrees C steps).
Not sure if this breakout board will work for your sensor.
Leo..

wvmarle:
Create a voltage divider with a resistor that's roughly the value of this sensor at the average temperature you will use it, then you can read the mid point on an analog pin, calculate the resistance of the PTC, and using the table calculate the temperature (I'd just do a linear interpolation between values, will be good enough).

Thank you wvmarle.
I will try here to explain how to proceed:
I assume Vin (+5V) is applied to one end of the PTC thermistor, while the other end of it is connected both to Analog Pin and to ground with a R2 resistence.
I have appled this formula to link the PTC Thermistor Resitance (R1) changes to Tension changes:
Vout=R2*Vin/(R2+R1).

I know I can calculate Vin more accurately using the "Secret voltmeter", but here I assume Vin=5V

I then can linear interpolate the Vout values, calculated with the relarive R1 in the range of interest (-10..+30), with temeprature T.
With R2=1kOhm, I got the following: Vout=0,00547*T+2,4991.
This gives an Standard Deviations of 0,17335 of calcualted T vs. Ni1000 datasheet, that is an error of +/-0.2°C in the range -15..25°C

My doubts are:

1. is this approach correct?
2. Is R2=1kOhm adequate, with R1 in the range of 1kOhm?
3. Is Arduino accurate enaugh to measure Vout variations in the range of 4-5mV?

Thnaks for you great support.

Regards
Andrea

Time to study the difference between measuring a ratio and measuring a voltage.

The mid-point value of a thermistor and fixed resistor should NOT be measured as a voltage, but as a ratio.
Measuring it as a voltage (Secret voltmeter) is wrong.

If the therrmistor is about the same value as the fixed resistor, then you get the largest ratio variation.
Arduino's 10-bit A/D has 1024 A/D values spread over 5volt, so about 5mV per A/D step.
You should be able to work out how many A/D values you can expect for a certain temp change with the thermistor resistance table.
Leo..

To calculate the resistance of the PTC you don't need to know the input voltage, as all you need to know is the ratio between the two resistors, and that's what the ADC reading really gives you.
It's therefore a good idea to use a low tolerance R2, 1% or better (a 0.5% or 0.25% tolerance doesn't cost much extra than a standard 5% one), or measure the resistor accurately and use that value.

Wow, I have a lot to learn yet!

So if I connect as I described (Vin (+5V) applied to one end of the PTC thermistor, while the other end of it is connected both to Analog Pin and to ground with a R2 resistence), then I can have the resistor ratio reading AnalogRead and then determine the actual Thermistor resistance =(ADC*R2)!

That is reallly cool. I am going to try it.
Then I will use Steinhart-Hart proxy to get accurate interpolation.

Thanks!

That is one option - if you have the correct parameters.

Using a lookup table (based on the data sheet of your PTC) and interpolate between the two nearest points is the most accurate.

Did you already work out the number of A/D values (resolution) per degree C you're getting with this PTC and Arduino's 10-bit A/D.

Here are the calculations for the temp range between 40C and 50C with a fixed 1k resistor.
A/D at 40C: 1185,7 / (1185.7 + 1000) * 1024 = 555.5
A/D at 50C: 1235.0 / (1235.0 + 1000) * 1024 = 565.8
A/D difference between those two temps: 565.8 - 555.5 = 10.3.

That's about 10 A/D values for a temp span of 10 degrees C.
Or one A/D value (readout/display step) per degree C.

That gets worse if you get further away from 0 degrees C.

So what are you trying to measure, and how accurate does it have to be.
Leo..

Thank you wvmarle and Wawa for you replies.
I spent sometime today and study little bit more about how ADC works in Arduino and how to leverage resistance ratio.
With a circuit as described above, I can derive the Rt reading the ADC value (0..1023), knowing R1:

Then I have calucalted A, B and C coefficent of Steinhart-Hart formula, based on three known values of Rt at 3 Temps (-10°C, 10°C, 30°C).
This allows me to derive the Temperature given Rt with an accuarcy of less than +/-0,02°C in that range, which is fine.

The PTC is going to be used in a house on the mountains to check temp remotly and switch heating on.
The expected range of temp is -5°C..+25°C (delta=30°C).
According to this value, and following Wawa, I will get a 33,3 ADC difference.
That is 0,9°C per ADC step.
Is there any way to get a better accuracy, let's say 0,5°C per ADC step?

Andrea

Get a different probe. This PTC just doesn’t change fast enough with the temperature - most NTC probes change much faster, and have more like 5-10 ADC points per °C around the midpoint.

That failing, you could try to amplify the signal: you could use say an OpAmp configured to say 5x amplification, PTC signal on the positive input, a fixed voltage divider (set to produce a voltage that’s at or below the lowest voltage your PTC divider ever gets) on the negative pin, like this: AndreaR:
Is there any way to get a better accuracy, let's say 0,5°C per ADC step?

A digital DS18B20 has a resolution of 0.0625°C, and is factory calibrated to 0.5C.
The waterproof version already has a cable attached.
Several can exist on a single digital pin from the Arduino (OneWireBus).
Leo..

Wawa:
A digital DS18B20 has a resolution of 0.0625°C, and is factory calibrated to 0.5C.
The waterproof version already has a cable attached.
Several can exist on a single digital pin from the Arduino (OneWireBus).
Leo…

I know. I alredy used them and are they really good and cheap.
That would be my second choice as I’d need to replace the probe and it might be difficult.
But thank you all for the great support and learning.

Andrea