はにゃぶろぐ はじめました

物欲情報とかTipsとかいろいろ載せていけたらいいなぁ

エレキジャックふろくの温度センサー 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バスをプルアップしていれば)ですから、使いやすいと思います。

次はもう少し精度の高い デジタル温度センサーを紹介します。