So-called "one-wire thermometers" from Dallas Semiconductors actually have one-signal wire, a ground wire and an power wire, but their interesting feature is that the signal wire can supply sufficient power if the thermometers are used in a restricted manner. The units have a pretty good factory calibration, but I wanted to see if I could make a group of thermometers a bit more self-consisistent by doing an intercomparison and adding a correction factor that is quadratic in temperature.
I placed 35 of the units (10 DS18S20's and 25 DS18B20's) close together on a prototype board that was in turn placed in a water-tight bag immersed in ice cubes within an ice chest. As the ice cubes melted the temperature had a plateau that stayed within 0.03 degrees for several hours. That was the first calibration point.
A couple of days after the ice cubes melted, the thermometers had returned to room temperature and reached a relative stable temperature. That provided a second calibration point.
Finally, the board in its bag was placed inside of 4 inches of styrofoam insulation and placed in our attic. The attic temperature's daily swing was typically between 60 degrees F and 120 degrees F, with excursions during the 16-day period to as low as 45 degrees and as high as 134 degrees. The styrofoam caused the temperature maximum and minimum to be broad enough to assure about 30 minutes of equilibrium at those extremes. The Linux cron daemon then ran the measurement program every 15 minutes, saving the data to a disk file for later analysis.
Since I don't own an calibrated temperature standard thermometer and since my main interest is in comparing temperatures, I have used the average factory calibration temperature readings of the 35 thermometers as my reference temperature and fit a quadratic correction equation to the deviations of the individual thermometers from that average. This made my thermometers agree over all calibration temperatures to within 0.03 degrees C (0.05 degrees F) of each other. The final calibration data (in degrees C) are:
Nbr Serial Nbr Deviation Before Correction Parameters Deviation After 1: 1048b635010800e8 0.01 +- 0.07 a = 0.0000106 b = 0.00288 c =-0.090 -0.00 +- 0.03 2: 1018bf3501080035 -0.07 +- 0.04 a =-0.0000160 b = 0.00285 c = 0.013 0.00 +- 0.02 3: 10ecbe3501080056 -0.15 +- 0.05 a =-0.0000436 b = 0.00428 c = 0.088 0.00 +- 0.03 4: 10e2ae3501080039 -0.11 +- 0.06 a = 0.0000096 b = 0.00206 c = 0.054 0.00 +- 0.03 5: 1096b435010800bc -0.08 +- 0.03 a = 0.0000170 b =-0.00048 c = 0.079 0.00 +- 0.02 6: 10f5ad35010800a9 0.09 +- 0.04 a =-0.0000087 b = 0.00180 c =-0.127 -0.00 +- 0.02 7: 10c39c35010800bf -0.04 +- 0.03 a =-0.0000135 b = 0.00104 c = 0.025 0.00 +- 0.02 8: 104bb535010800ff -0.09 +- 0.06 a = 0.0000269 b = 0.00179 c = 0.022 0.00 +- 0.02 9: 10c7ab35010800b6 -0.08 +- 0.08 a = 0.0001737 b =-0.00822 c = 0.127 -0.00 +- 0.04 10: 107fb135010800d1 0.05 +- 0.05 a = 0.0000148 b = 0.00111 c =-0.087 -0.00 +- 0.03 11: 28e0e4140100006f -0.08 +- 0.06 a =-0.0000007 b =-0.00204 c = 0.126 -0.00 +- 0.03 12: 2818e014010000a3 0.02 +- 0.05 a =-0.0001028 b = 0.00735 c =-0.110 -0.00 +- 0.02 13: 28b4f9140100000d 0.01 +- 0.06 a = 0.0000104 b =-0.00146 c = 0.016 -0.00 +- 0.04 14: 289cfd1401000005 0.00 +- 0.04 a =-0.0000241 b = 0.00064 c = 0.003 -0.00 +- 0.03 15: 28c2f814010000ea 0.00 +- 0.07 a =-0.0000017 b =-0.00410 c = 0.095 0.00 +- 0.02 16: 28d2de14010000d5 0.14 +- 0.05 a =-0.0000343 b = 0.00346 c =-0.190 -0.00 +- 0.03 17: 28deec14010000af 0.05 +- 0.04 a =-0.0000390 b = 0.00206 c =-0.064 -0.00 +- 0.03 18: 28a1e214010000b1 -0.08 +- 0.04 a =-0.0000292 b = 0.00227 c = 0.048 0.00 +- 0.03 19: 2885f71401000075 -0.06 +- 0.08 a =-0.0000011 b =-0.00427 c = 0.160 -0.00 +- 0.03 20: 28d7e41401000007 0.09 +- 0.06 a = 0.0000415 b =-0.00373 c =-0.040 0.00 +- 0.03 21: 28ef03150100004f -0.14 +- 0.06 a = 0.0000034 b =-0.00383 c = 0.226 -0.00 +- 0.02 22: 2818ee1401000001 0.01 +- 0.06 a =-0.0000076 b = 0.00344 c =-0.083 0.00 +- 0.02 23: 28d8f4140100005f -0.02 +- 0.04 a =-0.0000046 b = 0.00053 c = 0.014 0.00 +- 0.03 24: 28d8fd14010000ac -0.08 +- 0.09 a = 0.0000379 b =-0.00658 c = 0.205 -0.00 +- 0.03 25: 2894fc1401000069 0.01 +- 0.07 a =-0.0000523 b = 0.00613 c =-0.111 0.00 +- 0.03 26: 28f40015010000a2 0.08 +- 0.08 a = 0.0000259 b =-0.00558 c = 0.035 0.00 +- 0.03 27: 28cc0015010000ee 0.09 +- 0.09 a =-0.0000286 b =-0.00361 c = 0.016 0.00 +- 0.02 28: 2896fb1401000056 0.12 +- 0.05 a =-0.0000689 b = 0.00185 c =-0.108 0.00 +- 0.02 29: 2811de1401000013 0.10 +- 0.05 a = 0.0000294 b = 0.00105 c =-0.145 -0.00 +- 0.02 30: 2889f41401000046 0.07 +- 0.06 a =-0.0000412 b = 0.00159 c =-0.073 0.00 +- 0.04 31: 28b9e71401000099 -0.02 +- 0.03 a = 0.0000306 b =-0.00273 c = 0.058 -0.00 +- 0.02 32: 28c5e214010000ae 0.07 +- 0.04 a = 0.0000560 b =-0.00415 c =-0.018 0.00 +- 0.03 33: 28fdef140100000e 0.08 +- 0.06 a = 0.0000584 b =-0.00018 c =-0.124 -0.00 +- 0.03 34: 28cbea1401000083 0.03 +- 0.06 a =-0.0000235 b = 0.00318 c =-0.081 -0.00 +- 0.04 35: 2897ef1401000002 -0.07 +- 0.04 a = 0.0000080 b =-0.00043 c = 0.076 -0.00 +- 0.03
So if the temperatures obtained using built-in calibration in degrees C is called T_factory, I am considering the "true" temperature, T, in degrees C to be give by T = T_factory + a*T_factory*T_factory + b*T_factory + c
All data is stored in degrees C, but often converted to degrees F when printed out.
The first 10 of these thermometers are DS18S20 units (s/n starts with 10) and the remaining ones are DS18B20 units (s/n starts with 28).
Last updated: June 18, 2007
Contact Craig Van Degrift if you have problems or questions with this web site.