S-8100Bは、セイコーエプソンの CMOS 温度センサICです (入手先:秋月電子)。 -20℃〜80℃が測定範囲です。 電源電圧範囲は 3.0[V]〜5.0[V]ですので、3.3[V]動作、5[V]動作のArduinoに 直接つないで使うことが出来ます。30℃のときの出力電圧が1.508[V](代表値)で 温度が1度上がると80[mV]電圧が下がります(温度係数が-80[mV/℃])。
このスケッチではS-8100BをArduinoのA0ピンにつなぎます。 analogReadで読んだそのままの値と温度[℃]に変換した値をシリアルへ出力します。 Arduinoの電源が3.3[V]のときはAREFを3300にします。 出力インピーダンスが高いのでS-8100BのVOUT (ArduinoのA0)とGNDの間に0.1[uF]の コンデンサをつないで試しました。
正確な温度が必要なときは Arduino の電源を AC アダプタから供給し、 キャリブレーションします(基準となる温度を2点以上で測り、OFFSETの値と 8.0を変えて合わせる)。 電源を AC アダプタから供給するのは USB 端子の 5[V]はパソコンのポートや、USBケーブルの長さなどで変わってしまうからです。
const float AREF = 5000.0; /* 電源が3.3[V]のときは 3300.0 */ const int OFFSET = 1508.0; /* 30℃での出力電圧[mV] */ void setup() { Serial.begin(9600); while (!Serial) {} } void loop() { int T; float t; t = T = analogRead(A0); t = 30.0 - (t / 1024.0 * AREF - OFFSET) / 8.0; Serial.print(T); Serial.print(" "); Serial.println(t); delay(500); }