IC温度センサーADT7310から温度データを読み取り、CSV形式でファイルに保存する方法を紹介します。
使用するマイコンはRaspberry Pi、プログラム言語はPythonです。
サンプルプログラムは、センサーからデータを読み取るだけでなく測定条件設定も行います。
センサーの主な仕様
測定範囲:-55℃~150℃
精度:±0.5℃
分解能:0.0078℃(16bit)
準備
ADT7310の購入
ADT7310はSOICと呼ばれる形状です。
センサー単体もしくはモジュールのどちらも購入出来ます。
はんだ付けに自信がない人は、モジュールの購入をお勧めします。
下の写真は秋月電子通商で購入したADT7310モジュールで、今回はこのモジュールを使用したサンプルプログラムを紹介します。
モジュールとRaspberry Piの接続
接続図
接続写真
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()
プログラムの説明
プログラムの流れは以下の通りです。
- SPI通信の設定
- センサーの設定
- 保存用ファイルのオープン
- センサーから温度データを取得
- データを物理量へ変換し画面に表示
- CSV形式でファイルにデータを書き込み
- 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にします。
out = out >> 3
13bitデータが16bitの入れ物に左詰めで入っているので、右に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 | 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回分のデータが保存されています。
温度データ表示だけでなく、”/home/pi/” ディレクトリに adt7310.csvファイルを作成します。
以上、ADT7310からSPI通信で温度データを読み込んでCSV形式で保存するサンプルでした。
まとめ
ADT7310モジュールからRaspberry PiにSPI通信でデータを読み込んで表示するサンプルでした。如何でしたでしょうか。
I2C通信仕様のADT7410という温度センサーもあります。仕様はほとんど変わらないので、環境に合わせて使い分けることができます。以下にADT7410の使い方も紹介しますので、参考にしてください。
プログラミングやソフトウェアの記事です。
コメント