エレキジャックふろくの温度センサー LM73を Galileoから使ってみる
LM73は校正されているデジタル温度センサーで、I2Cバスでマイコンと接続することで、
簡単に温度測定ができます。
測定精度は 電源電圧 2.7V-4.5Vでは
- 10°C to 80°C: ±1.0°C (max)
- 25°C to 115°C: ±1.5°C (max)
- 40°C to 150°C: ±2.0°C (max)
※電源電圧 4.5V ~ 5.5Vでは、各々0.5℃追加
このLM73にはI2Cアドレスが違う2タイプがあり、ピン設定と組み合わせてバスあたり6個接続できるようになっていますが、付録はT731=LM73CMIK-1でした。
ADDR端子をオープンで使いますので、I2Cのアドレスは 0x4cです。
サンプルコードとして記載しているものは、
Arduinoでエレキジャック付録のLM73を使う:初心者の電子の館:So-netブログ
に書かれているコードに対して、Wireクラスのメソッドの変更だけ行ったものです。
なお、消費電力を抑えるためにはワンショットモードもありますが、ここでは使いません。
#include <Wire.h> int I2CAdrs = 0x4c; // スレーブアドレス int ret; void setup() { Serial.begin(9600); Wire.begin(); Wire.beginTransmission(I2CAdrs); Wire.write((byte)0x04); Wire.write(0x60); // 14bit ret = Wire.endTransmission(); Wire.beginTransmission(I2CAdrs); Wire.write(0x00); ret = Wire.endTransmission(); delay(100); } void loop() { int data=0; Wire.beginTransmission(I2CAdrs); ret = Wire.requestFrom(I2CAdrs, 2); data = 0; if (Wire.available()) { data = Wire.read(); } else { Serial.println("Wire not available."); } if (Wire.available()) { data = (data << 8 )| Wire.read() ; } ret=Wire.endTransmission(); printdata(data); delay(2000); } void printdata(int data) { int data2; int data3; float data_f; boolean negative=false; if (data < 0 ) { // マイナスならbooleanにtrueをセットしプラスに変換 negative=true; data = -data; } data2 = data >> 7; // 小数値切り捨て data_f = (float)(data >> 2 ) / 32; data_f = data_f - data2 ; data3 = data_f * 100 ; Serial.print ("Current temperature is "); if (negative) { Serial.print("-"); } Serial.print(data2); Serial.print("."); Serial.print(data3/10); Serial.print(data3 % 10); Serial.println(" C. "); }||< 実行結果 >|| Current temperature is 26.31 C. Current temperature is 26.34 C. Current temperature is 26.37 C. Current temperature is 26.37 C. Current temperature is 26.37 C.
I2C接続の温度センサーとしては外付け部品はパスコン1個だけ(ホスト側がI2Cバスをプルアップしていれば)ですから、使いやすいと思います。
次はもう少し精度の高い デジタル温度センサーを紹介します。