ここでは、AD変換機能と半導体温度センサーを利用して、室温の計測を試みます。半導体温度センサーは温度に対応する電圧を出力するため、組み込みは容易ですが、精度を高めるためには「校正」や「アナログ参照電圧」の設定などが必要になります。

//tmp9700_ref
//MCP9700温度センサー
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sv = 0; // variable to store the value coming from the sensor
int tmp;
void setup() {
Serial.begin(9600);
}
void loop() {
// read the value from the sensor:
float tmv;
int tmp;
sv = analogRead(sensorPin);
Serial.println(sv);
tmv=(5000.0/1024.0)*sv;
Serial.println(tmv);
tmp=(tmv-500)/10;
//Serial.println(tmv);
Serial.print("tmp=");
Serial.println(tmp);
delay(500);
}
///結果1
154
751.95
tmp=25
///結果2
151
737.30
tmp=23
これで仕様から保証される温度範囲は ±4度 です。この場合、21度から29度の範囲ということになります。この誤差は 温度から出力を計算するときのパラメータの、10、500
が部品により異なるためです。analogReference(INTERNAL);INTERNAL の替わりに DEFAULT とすれば 5V、EXTERNAL とすると、外部端子(UNOの場合、ディジタル13番端子の二つ上にあるAREF端子)で設定した電圧を参照電圧とします。この機能を利用すると、アナログ入力の値は室温で 680 に増加します。
//MCP9700温度センサー
//アナログ参照電圧利用
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sv = 0; // variable to store the value coming from the sensor
int tmp;
void setup() {
Serial.begin(9600);
analogReference(INTERNAL); //内部1.1V
}
void loop() {
// read the value from the sensor:
float tmv;
int tmp;
sv = analogRead(sensorPin);
Serial.println(sv);
tmv=(1100.0/1024.0)*sv;
Serial.println(tmv);
tmp=(tmv-500)/10;
//Serial.println(tmv);
Serial.print("tmp=");
Serial.println(tmp);
delay(500);
}
///
681
731.54
tmp=23
680
730.47
tmp=23