M5StackGrayで温度センサの動作テスト

2021.5.27 Coskx Lab  

1 はじめに

M5Stack Grayに温度センサATD7410(Analog Devices)を接続して温度を測定します。

ATD7410は,温度センサで温度を測定し,M5StackにはI2Cでデータを転送します。
ATD7410を基板上に取り付けた製品は多数ありますが,ここでは秋月電子で販売されているAE-ATD7410を使用します。

2 使用環境

3 接続

マニュアルのピンアサインを見てそのままつなげるだけです。
注意 AE-ATD7410説明書には「2.7~5.5V 入力」と書いてありますが,これは3.3Vのシステムでも5Vのシステムでも使えます(2.7~5.5Vのシステム)ということを表しています。
AE-ATD7410の電源に3.3Vを与えると3.3VでI2C通信し,5Vを与えると5VでI2C通信します。
M5Stackで使うとき,M5Stackの信号レベルは3.3Vであるため,3.3Vで通信したいのでAE-ATD7410の電源には3.3Vを与えます。
信号レベルが5Vのマイコンにつなげるときは,5Vで通信したいので5Vを与えます。




参考 M5Stackの裏側に書いてあるピンの名称

注意 SDA,SCLはI2C用に用途の定まったピンなので,他のピンを利用することはできません。


実際の様子です。

4 テストプログラム

http://independence-sys.net/main/?p=2912
を参考にさせていただきました。

単純なI2C通信です。AE-ATD7410のアドレスに2バイト送信要求して,2バイトを読み込みます。
(2バイトの温度データは上位バイト下位バイトの順に受信します。)
データは2バイト中の左詰め上位13bitが有効で2の補数表現です。受け取った値を16で割ると温度が摂氏で受け取れます。

  温度センサ動作テスト用プログラム本体

//TemperatureSensor_ATD7410Test.ino//

#include <M5Stack.h>
#include <Wire.h>

const int ADT7410I2CAddress = 0x48;
const int SDApin = 21; //SDAピン番号
const int SCLpin = 22; //SCLピン番号

void setup(void) {
  M5.begin();
  M5.Power.begin();

  Wire.begin(SDApin,SCLpin); //I2C通信の初期化,SDA,SCLのピンを設定
  M5.Lcd.setTextSize(2);
  M5.Lcd.print("Temp Sensor Test");
}

double getTemperature(){
  int16_t temperature16;
  double temperature;
  Wire.requestFrom(ADT7410I2CAddress, 2);      //2バイト要求
  temperature16 = (int16_t)Wire.read() << 8;   // 上位バイト読み出し
  temperature16 |= (int16_t)Wire.read();       // 下位バイト読み出し
  temperature16 >>= 3;                         // 算術シフトで13bit化
  temperature = (double)temperature16 / 16.0;  // 温度換算(摂氏)
  return temperature;
}

void loop(void) {
  M5.update();
  double temperature;

  temperature = getTemperature();
  M5.Lcd.setCursor(0, 20);
  M5.Lcd.printf("Temperature = %.2f\n",temperature);

  delay(1000); //[msec]
}

5 まとめ

M5StackGrayにて温度測定が測定ができました。
I2Cで2バイトのデータ転送だけなので,通信部分は簡単でした。