ラズパイでADT7410(温度センサーモジュールを使おう)
こんばんは。國松です。
今回はi2cが使えない問題の時に活躍?したADT7410温度センサーモジュールを使って温度を計測していきたいと思います。ラズパイのi2cを利用するための設定はすんでいるものとして進めて行きます。
参考サイト
Raspberry PiではじめてのI2C通信~温度計測編~
参考書籍
用意するもの
1.Raspberry Pi3 Model B+ (OsはRaspbian)
2.ブレッドボード
3.ADT7410温度センサーモジュール
4.ジャンパワイヤ×4
ADT7410とは
i2c対応の高精度・高分解能の温度センサーモジュールです。分解能は0.0078°C(16bit設定時)です。
基板には動作に必要な部品がすべてはんだ付けされているのでGND、電源、SCL、SDAの4線を配線するだけで動作します。
分解能とは?
装置などで対象を測定または識別できる能力のこと。測定できる間隔の細かさ、データを読み取る刻みの大きさの事です。
(ラズパイとの接続)
i2cに使うGPIOピンは決まっているので注意してください。
ラズパイ | ADT7410 |
3.3v | ADD |
i2c SDA(GPIO2) | SDA |
i2c SCL(GPIO3) | SCL |
GDN | GDN |
接続が終わったら
1 | i2cdetect -y 1 |
でモジュールが検出されるか確認します。
「48」と表示されていたら正しく接続されています。「48」が温度センサーモジュールのアドレスです。何も表示されなかったら接続をもう一度確認してみて下さい。
(ADT7410で温度を計測するプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # -*- coding: utf-8 -*- import smbus from time import sleep def read_adt7410(): word_data = bus.read_word_data(address_adt7410, register_adt7410) data = (word_data & 0xff00)>>8 | (word_data & 0xff)<<8 data = data>>3 # 13ビットデータ if data & 0x1000 == 0: # 温度が正または0の場合 temperature = data*0.0625 else: # 温度が負の場合、 絶対値を取ってからマイナスをかける temperature = ( (~data&0x1fff) + 1)*-0.0625 return temperature bus = smbus.SMBus(1) sleep(1) address_adt7410 = 0x48 register_adt7410 = 0x00 try: while True: inputValue = read_adt7410() print(inputValue) sleep(1) except KeyboardInterrupt: pass |
動画では見にくいのですがプログラムを実行するとターミナルに1秒おきに温度が表示されます。温度は0~4095の整数値ではなく摂氏で表された0.0625刻みの温度です。