Thermistor 0.1% - 1% recommendation?

Hi,

I am about to buy around 50 NTC thermistors and I would appreciate some input on what to buy.

Situation:

I have successfully used these (attached image) in combination with Nanos as variable resistors. 10k resistance, harvested from old battery packs.

I plan to follow this tutorial for lowered noise levels: Using a Thermistor | Thermistor | Adafruit Learning System

I only need to detect relative changes up or down in the range -5 to 37 Celsius.

If I go for either 0.1%, 1%, or even lower precision what types/brands should I get? Cheap is good.

Thanks in advance!

Thermometers are non linear so I cannot see why precision is important.

Google Arduino temperature sensor


For -5 to 37 Celsius, some examples:

TMP36 −40°C to +125°C, operation to +150°C

DS18B20 -55°C to +125°C

DHT22 -40 to 80°C

Further:

If the range was smaller (for example 30 to 40°C), then it is easier to achieve more accuracy.
The Adafruit NTC with 1% is not so bad. If that is good enough then I would use that one.

You can search at mouser.com for 0.1% NTC-Thermistors.

To really get that 0.1% or even 1%, you need to do everything right.
The resistor has to be 0.1% as well.
The Arduino Nano with 10-bit ADC might not be enough. I suggest a Arduino board with 12-bit ADC or external 16-bits ADC.
You need to know the numbers of the NTC and use a good calculation.

There are I2C temperature sensors that require no calibration or anything analog, they are 0.1% out of the box.
For example: https://www.tindie.com/products/closedcube/si7051-01degc-max-digital-temperature-sensor/.
Warning: Do not connect that 3.3V sensor to your 5V board, not with the power and not with the SDA and SCL pins !

You said "relative changes", so you don't need absolute accuracy ? That makes it a lot easier :stuck_out_tongue:
Then you can use the normal Adafruit NTC, with the normal calculations and perhaps even a normal Nano board.
To get beyond the 10-bit of the Arduino Nano, I use this: averageRead.ino. The usage of integers and float is specifically used that way to get beyond the 10-bits by taking the average of samples by using noise. A resistor and NTC will give enough noise to make it work.

There is no need to upgrade to a Arduino board with double precision floating point. The single precision floating point of the Arduino Nano is fine for this.

If that is not enough, then you can upgrade to a Arduino board with 12-bit ADC or add a external ADC to your Nano.

Koepel:
...You said "relative changes", so you don't need absolute accuracy ? That makes it a lot easier :stuck_out_tongue:
Then you can use the normal Adafruit NTC, with the normal calculations and perhaps even a normal Nano board.
To get beyond the 10-bit of the Arduino Nano, I use this: averageRead.ino. The usage of integers and float is specifically used that way to get beyond the 10-bits by taking the average of samples by using noise. A resistor and NTC will give enough noise to make it work.

I will definitely see if I can include averageRead in my sketch. And thanks for a great explanation.

I am not aiming for actual 1% accuracy, I just do not want to find out that the thermistors I buy has so low accuracy that on the total it will fail.

But when I start to search at mouser... it is a jungle.
Say that I would go for this: Thermistors at Aliexpress "Thermistor NTC-MF52-103/3435 10K Ohm 1%"

Would it be as good as the Adafruit NTC? I do not need it to be water proof or on wires. The shipping is too slow but it is still good to know.

Another thought: is 10k the optimal thermistor resistance in the scenario (relative change detection in the range of approximately-5 to 37 C)? What if I would use say 1k, would that affect the resolution?

Instead of the 10k, you can use a better value for the range of -5 to 37°C. The best accuracy is when the resulting voltage is in the middle.

Adafruit buys from serious suppliers and it should have a datasheet.
I can not find a datasheet, but they give a table to get the best accuracy by interpolation instead of a calculation.

Compare this link with your link (they are the same): https://www.aliexpress.com/item/1005002264422385.html.
At AliExpress, they might send you anything.
However, if you mainly want to measure if the temperature rises or falls, then those from AliExpress will do just fine.
It says that it is a MF52 103 type NTC. According to the datasheet of that NTC, there are also versions of that NTC with 10% accuracy, so you might get that one or a fake MF52 103.

Yes, mouser is a jungle. In Europe you can buy a cheap NTC at Reichelt such as this one or this one.

Is that table from Adafruit already somewhere online ? If someone wants to have fun with that table from Adafruit's NTC (either to use it for interpolating or for curve fitting), here are the numbers:

X-axis (temperature in Celsius)

-40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

Y-axis (resistor value in kΩ)

277.2 263.6 250.1 236.8 224.0 211.5 199.6 188.1 177.3 167.0 157.2 148.1 139.4 131.3 123.7 116.6 110.0 103.7 97.9 92.50 87.43 82.79 78.44 74.36 70.53 66.92 63.54 60.34 57.33 54.50 51.82 49.28 46.89 44.62 42.48 40.45 38.53 36.70 34.97 33.33 31.77 30.25 28.82 27.45 26.16 24.94 23.77 22.67 21.62 20.63 19.68 18.78 17.93 17.12 16.35 15.62 14.93 14.26 13.63 13.04 12.47 11.92 11.41 10.91 10.45 10.00 9.575 9.170 8.784 8.416 8.064 7.730 7.410 7.106 6.815 6.538 6.273 6.020 5.778 5.548 5.327 5.117 4.915 4.723 4.539 4.363 4.195 4.034 3.880 3.733 3.592 3.457 3.328 3.204 3.086 2.972 2.863 2.759 2.659 2.564 2.472 2.384 2.299 2.218 2.141 2.066 1.994 1.926 1.860 1.796 1.735 1.677 1.621 1.567 1.515 1.465 1.417 1.371 1.326 1.284 1.243 1.203 1.165 1.128 1.093 1.059 1.027 0.9955 0.9654 0.9363 0.9083 0.8812 0.8550 0.8297 0.8052 0.7816 0.7587 0.7366 0.7152 0.6945 0.6744 0.6558 0.6376 0.6199 0.6026 0.5858 0.5694 0.5535 0.5380 0.5229 0.5083 0.4941 0.4803 0.4669 0.4539 0.4412 0.4290 0.4171 0.4055 0.3944 0.3835 0.3730 0.3628 0.3530 0.3434 0.3341 0.3253 0.3167 0.3083 0.3002 0.2924 0.2848 0.2774 0.2702 0.2633 0.2565 0.2500 0.2437 0.2375 0.2316 0.2258 0.2202 0.2148 0.2095 0.2044 0.1994 0.1946 0.1900 0.1855 0.1811 0.1769 0.1728 0.1688 0.1650 0.1612 0.1576 0.1541 0.1507 0.1474 0.1441 0.1410 0.1379 0.1350 0.1321 0.1293 0.1265 0.1239 0.1213 0.1187 0.1163 0.1139 0.1115 0.1092 0.1070 0.1048 0.1027 0.1006 0.0986 0.0966 0.0947 0.0928 0.0909 0.0891 0.0873 0.0856 0.0839 0.0822 0.0806 0.0790 0.0774 0.0759 0.0743 0.0729 0.0714 0.0700 0.0686 0.0672 0.0658 0.0645 0.0631 0.0619

As data pairs for an array:

{
  { -40 , 277.2  },
  { -39 , 263.6  },
  { -38 , 250.1  },
  { -37 , 236.8  },
  { -36 , 224.0  },
  { -35 , 211.5  },
  { -34 , 199.6  },
  { -33 , 188.1  },
  { -32 , 177.3  },
  { -31 , 167.0  },
  { -30 , 157.2  },
  { -29 , 148.1  },
  { -28 , 139.4  },
  { -27 , 131.3  },
  { -26 , 123.7  },
  { -25 , 116.6  },
  { -24 , 110.0  },
  { -23 , 103.7  },
  { -22 , 97.9   },
  { -21 , 92.50  },
  { -20 , 87.43  },
  { -19 , 82.79  },
  { -18 , 78.44  },
  { -17 , 74.36  },
  { -16 , 70.53  },
  { -15 , 66.92  },
  { -14 , 63.54  },
  { -13 , 60.34  },
  { -12 , 57.33  },
  { -11 , 54.50  },
  { -10 , 51.82  },
  { -9  , 49.28  },
  { -8  , 46.89  },
  { -7  , 44.62  },
  { -6  , 42.48  },
  { -5  , 40.45  },
  { -4  , 38.53  },
  { -3  , 36.70  },
  { -2  , 34.97  },
  { -1  , 33.33  },
  { 0   , 31.77  },
  { 1   , 30.25  },
  { 2   , 28.82  },
  { 3   , 27.45  },
  { 4   , 26.16  },
  { 5   , 24.94  },
  { 6   , 23.77  },
  { 7   , 22.67  },
  { 8   , 21.62  },
  { 9   , 20.63  },
  { 10  , 19.68  },
  { 11  , 18.78  },
  { 12  , 17.93  },
  { 13  , 17.12  },
  { 14  , 16.35  },
  { 15  , 15.62  },
  { 16  , 14.93  },
  { 17  , 14.26  },
  { 18  , 13.63  },
  { 19  , 13.04  },
  { 20  , 12.47  },
  { 21  , 11.92  },
  { 22  , 11.41  },
  { 23  , 10.91  },
  { 24  , 10.45  },
  { 25  , 10.00  },
  { 26  , 9.575  },
  { 27  , 9.170  },
  { 28  , 8.784  },
  { 29  , 8.416  },
  { 30  , 8.064  },
  { 31  , 7.730  },
  { 32  , 7.410  },
  { 33  , 7.106  },
  { 34  , 6.815  },
  { 35  , 6.538  },
  { 36  , 6.273  },
  { 37  , 6.020  },
  { 38  , 5.778  },
  { 39  , 5.548  },
  { 40  , 5.327  },
  { 41  , 5.117  },
  { 42  , 4.915  },
  { 43  , 4.723  },
  { 44  , 4.539  },
  { 45  , 4.363  },
  { 46  , 4.195  },
  { 47  , 4.034  },
  { 48  , 3.880  },
  { 49  , 3.733  },
  { 50  , 3.592  },
  { 51  , 3.457  },
  { 52  , 3.328  },
  { 53  , 3.204  },
  { 54  , 3.086  },
  { 55  , 2.972  },
  { 56  , 2.863  },
  { 57  , 2.759  },
  { 58  , 2.659  },
  { 59  , 2.564  },
  { 60  , 2.472  },
  { 61  , 2.384  },
  { 62  , 2.299  },
  { 63  , 2.218  },
  { 64  , 2.141  },
  { 65  , 2.066  },
  { 66  , 1.994  },
  { 67  , 1.926  },
  { 68  , 1.860  },
  { 69  , 1.796  },
  { 70  , 1.735  },
  { 71  , 1.677  },
  { 72  , 1.621  },
  { 73  , 1.567  },
  { 74  , 1.515  },
  { 75  , 1.465  },
  { 76  , 1.417  },
  { 77  , 1.371  },
  { 78  , 1.326  },
  { 79  , 1.284  },
  { 80  , 1.243  },
  { 81  , 1.203  },
  { 82  , 1.165  },
  { 83  , 1.128  },
  { 84  , 1.093  },
  { 85  , 1.059  },
  { 86  , 1.027  },
  { 87  , 0.9955 },
  { 88  , 0.9654 },
  { 89  , 0.9363 },
  { 90  , 0.9083 },
  { 91  , 0.8812 },
  { 92  , 0.8550 },
  { 93  , 0.8297 },
  { 94  , 0.8052 },
  { 95  , 0.7816 },
  { 96  , 0.7587 },
  { 97  , 0.7366 },
  { 98  , 0.7152 },
  { 99  , 0.6945 },
  { 100 , 0.6744 },
  { 101 , 0.6558 },
  { 102 , 0.6376 },
  { 103 , 0.6199 },
  { 104 , 0.6026 },
  { 105 , 0.5858 },
  { 106 , 0.5694 },
  { 107 , 0.5535 },
  { 108 , 0.5380 },
  { 109 , 0.5229 },
  { 110 , 0.5083 },
  { 111 , 0.4941 },
  { 112 , 0.4803 },
  { 113 , 0.4669 },
  { 114 , 0.4539 },
  { 115 , 0.4412 },
  { 116 , 0.4290 },
  { 117 , 0.4171 },
  { 118 , 0.4055 },
  { 119 , 0.3944 },
  { 120 , 0.3835 },
  { 121 , 0.3730 },
  { 122 , 0.3628 },
  { 123 , 0.3530 },
  { 124 , 0.3434 },
  { 125 , 0.3341 },
  { 126 , 0.3253 },
  { 127 , 0.3167 },
  { 128 , 0.3083 },
  { 129 , 0.3002 },
  { 130 , 0.2924 },
  { 131 , 0.2848 },
  { 132 , 0.2774 },
  { 133 , 0.2702 },
  { 134 , 0.2633 },
  { 135 , 0.2565 },
  { 136 , 0.2500 },
  { 137 , 0.2437 },
  { 138 , 0.2375 },
  { 139 , 0.2316 },
  { 140 , 0.2258 },
  { 141 , 0.2202 },
  { 142 , 0.2148 },
  { 143 , 0.2095 },
  { 144 , 0.2044 },
  { 145 , 0.1994 },
  { 146 , 0.1946 },
  { 147 , 0.1900 },
  { 148 , 0.1855 },
  { 149 , 0.1811 },
  { 150 , 0.1769 },
  { 151 , 0.1728 },
  { 152 , 0.1688 },
  { 153 , 0.1650 },
  { 154 , 0.1612 },
  { 155 , 0.1576 },
  { 156 , 0.1541 },
  { 157 , 0.1507 },
  { 158 , 0.1474 },
  { 159 , 0.1441 },
  { 160 , 0.1410 },
  { 161 , 0.1379 },
  { 162 , 0.1350 },
  { 163 , 0.1321 },
  { 164 , 0.1293 },
  { 165 , 0.1265 },
  { 166 , 0.1239 },
  { 167 , 0.1213 },
  { 168 , 0.1187 },
  { 169 , 0.1163 },
  { 170 , 0.1139 },
  { 171 , 0.1115 },
  { 172 , 0.1092 },
  { 173 , 0.1070 },
  { 174 , 0.1048 },
  { 175 , 0.1027 },
  { 176 , 0.1006 },
  { 177 , 0.0986 },
  { 178 , 0.0966 },
  { 179 , 0.0947 },
  { 180 , 0.0928 },
  { 181 , 0.0909 },
  { 182 , 0.0891 },
  { 183 , 0.0873 },
  { 184 , 0.0856 },
  { 185 , 0.0839 },
  { 186 , 0.0822 },
  { 187 , 0.0806 },
  { 188 , 0.0790 },
  { 189 , 0.0774 },
  { 190 , 0.0759 },
  { 191 , 0.0743 },
  { 192 , 0.0729 },
  { 193 , 0.0714 },
  { 194 , 0.0700 },
  { 195 , 0.0686 },
  { 196 , 0.0672 },
  { 197 , 0.0658 },
  { 198 , 0.0645 },
  { 199 , 0.0631 },
  { 200 , 0.0619 },
};

[ADDED] I scrolled down that page at Adafruit, and there it was: "Lookup table in text format". O, well, it was not much work with an editor with column-mode and a macro recorder.

Koepel:
Instead of the 10k, you can use a better value for the range of -5 to 37°C. The best accuracy is when the resulting voltage is in the middle.

Thanks a lot, this set me straight. Actually it seems like the needed range will be around +5 to 37ºC so then I judge that a voltage divider consisting of a 10k thermistor and a 10k resistor would be pretty good.
And thanks for the Reichelt links. Cheap and only 5-7 days shipping to Sweden!

larryd:
Thermometers are non linear so I cannot see why precision is important.

Non-linear does not mean unpredictable. You can get perfectly accurate results from a non-linear sensor; chances are that under the hood in popular sensors like the DS18B20 is a small thermistor that does the actual sensing. You just have to know the actual profile of the sensor. Single degree steps is enough, between that linear interpolation is very close to the actual curve.

Lower tolerance (which is what the OP prbably means, as thermistors normally come with a tolerance rather than an accuracy rating) in both the beta-factor (which is a measure of the non-linearity) and nominal resistance means that after calibrating one you have less spread in the other 49.

The tolerance (and temperature coefficient, as it presumably also changes in temperature!) of the pull-up resistor is also important.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.