IC温度センサーADT7310の使い方

ADT7310 IC温度センサー センサー

IC温度センサーADT7310から温度データを読み取り、CSV形式でファイルに保存する方法を紹介します。

使用するマイコンはRaspberry Pi、プログラム言語はPythonです。

サンプルプログラムは、センサーからデータを読み取るだけでなく測定条件設定も行います。

センサーの主な仕様
測定範囲:-55℃~150℃
精度:±0.5℃
分解能:0.0078℃(16bit)

準備

ADT7310の購入

ADT7310はSOICと呼ばれる形状です。
センサー単体もしくはモジュールのどちらも購入出来ます。
はんだ付けに自信がない人は、モジュールの購入をお勧めします。

下の写真は秋月電子通商で購入したADT7310モジュールで、今回はこのモジュールを使用したサンプルプログラムを紹介します。

ADT7310 モジュール写真

モジュールとRaspberry Piの接続

接続図

ブレッドボードを使用したADT7310モジュールとRaspberryPiの接続【SPI】

接続写真

ブレッドボードを使用したADT7310【SPI通信】モジュールの接続写真 1
ブレッドボードを使用したADT7310【SPI通信】モジュールの接続写真 2

Raspberry Piの通信設定とPythonの操作方法

Raspberry PiのSPI通信設定を有効にします。
下の記事でRaspberry Piの通信設定とPythonの基本操作を説明しています。

SPI通信プログラミング

プログラムコード

Pythonプログラムです。

import spidev
import time

#SPIの設定
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 10000
spi.mode = 3

#センサーの設定(ADCの分解能を16bitにする場合に有効にする)
#spi.xfer2([0x01,0x80])

#ファイルオープン(書き込みモード)
f = open("adt7410.csv", "w")

#10回繰り返す
for i in range(10):

    #連続読み込み
    spi.xfer2([0x54]) 
    
    #データ読み込み
    ret = spi.xfer2([0xFF,0xFF])
    out = ret[0] << 8 | ret[1]
    out = out >> 3
    
    if(out >= 4096):
        out = out - 8192
    out = out * 0.0625
    
    #表示
    print(out)
    
    #データのCSV変換とファイルへの書き込み
    f.write(str(i+1) + "," + str(out) + "\n")
    
    time.sleep(0.5)

f.close()
spi.close()

プログラムの説明

プログラムの流れは以下の通りです。

  1. SPI通信の設定
  2. センサーの設定
  3. 保存用ファイルのオープン
  4. センサーから温度データを取得
  5. データを物理量へ変換し画面に表示
  6. CSV形式でファイルにデータを書き込み
  7. 10回繰り返してファイルをクローズし終了

1.SPI通信の設定

#SPI設定
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 10000
spi.mode = 3

spi.open(0,0)
Bus0をチップセレクト0でオープンします。

spi.max_speed_hz = 100000
クロックのスピードを10kHzにします。

spi.mode = 3
SPI通信のハードウェア設定です。

SPI通信の詳しい説明はこちら
シリアル・ペリフェラル・インタフェース」(2021年10月21日 (木) 02:31 UTCの版)『ウィキペディア日本語版』

2.センサーの設定(ADCの分解能を16bitデータにする場合に有効にします)

#センサーの設定(ADCの分解能を16bitにする場合に有効にする)
#spi.xfer2([0x01,0x80])

spi.xfer2([0x01,0x80])

ConfigurationレジスタでADCの分解能を16bitに設定します(デフォルトは13bit)。

レジスタ(設定項目の記憶場所)は以下の通りです。

0x01(Configuration Register)
D7(Resolution)
D6-D5(Operation mode)
D4(INT/CT mode)
D3(INT pin polarity)
D2(CT pin polarity)
D1-D0(Fault queue)

0x80(設定内容)
D7(1:16bit分解能)
D6-D5(00:デフォルト)
D4(0:デフォルト)
D3(0:デフォルト)
D2(0:デフォルト)
D1-D0(00:デフォルト)

D7 D6 D5 D4 D3 D2 D1 D0
1 00 0 0 0 00
8 0

データシートの『Table 8. Configuration Register(Register Address 0x01)』に、詳しい情報があります。

3.保存用ファイルをオープン

#ファイルオープン(書き込みモード)
f = open("adt7310.csv", "w")

f = open(“adt7310.csv”, “w”)

“adt7310.csv”ファイルを書き込みモードでオープンします。
ファイルが存在しない場合は新規作成します。存在する場合は上書き保存します。

上書きせずに追記する場合は、2番目の引数を “w” から “a” にします。
ファイルは、/home/pi ディレクトリに保存されます。

4.センサーから温度データを取得

#連続読み込み
spi.xfer2([0x54]) 

spi.xfer2([0x54])

連続読み取りモードをアクティブにします。
データシートのCONTINUOUS READ MODE』に0x54の記載があります。

#データ読み込み
ret = spi.xfer2([0xFF,0xFF])

ret = spi.xfer2([0xFF,0xFF])
ダミーのSCLCKを送り温度データを読み取ります。

5.データを物理量へ変換し画面に表示

out = ret[0] << 8 | ret[1]
out = out >> 3

out = ret[0] << 8 | ret[1]
8bitの ret[0]と ret[1]を、16bitにします。

8bit×2を16bitデータへ変換

out = out >> 3
13bitデータが16bitの入れ物に左詰めで入っているので、右に3bitシフトします。

16bitの入れ物に入った13bitデータを右に3bitシフト
if(out >= 4096):
    out = out - 8192

if(out >= 4096):
out = out – 8192

2の補数表現を符号ありに変換します。

13bit データ 符号なし 符号あり
1000000000000 4096 -4096
1000000000001 4097 -4095
1111111111110 8190 -2
1111111111111 8191 -1
0000000000000 0
0000000000001 1 1
0000000000010 2 2
0111111111111 4094 4094
0111111111111 4095 4095

2の補数の詳しい説明はこちら
2の補数」(2021年10月12日 (火) 17:00 UTCの版)『ウィキペディア日本語版』

out = out * 0.0625

print(out)

out = out * 0.0625
0.0625を掛けて温度に変換します(0.0625℃/digit)。

print(out)
結果を画面に表示します。

6.CSV形式でファイルにデータを書き込み

#データのCSV変換とファイルへの書き込み
f.write(str(i+1) + "," + str(out) + "\n")

f.write(str(i+1) + “,” + str(out) + “\n”)

f.write()のカッコの中をファイルに書き込みます。

カッコの中は、データをカンマ区切りのCSV形式にしています。
str(i+1) と str(out)をカンマで区切っています。最後に改行コード(\n)を追加します。

CSV形式の詳しい説明はこちら
Comma-Separated Value」(2021年10月25日 (月) 05:33 UTCの版)『ウィキペディア日本語版』

7.10回繰り返してファイルをクローズし終了

#10回繰り返す
for i in range(10):

for i in range(10):
繰り返し命令です。10回繰り返します。

※この『for i in range(10):』は、17行目のfor文です。

f.close()
spi.close()

f.close()
ファイルをクローズします。

spi.close()
SPI通信を終了します。

プログラムの実行結果

以下の手順でプログラムを実行します。

①Runボタンを押します。
②温度データを0.5秒間隔で画面に10回表示します。
③CSV形式で10回分のデータが保存されています。

PythonのRunボタン
ADT7310のプログラムの実行結果

温度データ表示だけでなく、”/home/pi/” ディレクトリに adt7310.csvファイルを作成します。

adt7310.csvファイル

以上、ADT7310からSPI通信で温度データを読み込んでCSV形式で保存するサンプルでした。

まとめ

ADT7310モジュールからRaspberry PiにSPI通信でデータを読み込んで表示するサンプルでした。如何でしたでしょうか。

I2C通信仕様のADT7410という温度センサーもあります。仕様はほとんど変わらないので、環境に合わせて使い分けることができます。以下にADT7410の使い方も紹介しますので、参考にしてください。

プログラミングやソフトウェアの記事す。

コメント