ここでは、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