HIH-6130 湿度センサー を使う

HIH-6130

スイッチサイエンスさんからRaspberry Piに使うi2c湿度センサーHIH-6130を購入してみました。このセンサーの主目的は湿度を測ることですが、オプション機能として温度も測れます。

このセンサーの回路図を見るとSDAとSCLが抵抗でプルアップされていますが、Raspberry Piでは既にプルアップされている為、この抵抗は必要無いはずだけど付いていて大丈夫なのだろうか?まぁ、無事に動いているようなので良しとしますが。

それでは、Raspberry Piとセンサーを接続してみましょう。今回はブレッドボード上で次のように配線しました。センサー側のAL_HとAL_Lは上限と下限の検出アラーム機能用なので今回は使いませんでした。アラーム機能を使うためには、コマンド・モードで上限と下限を設定してやる必要があります。

HIH-6130 connect
センサーを繋いだら、早速確認してみましょう。このセンサーのアドレスは0x27です。

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Arduinoのサンプルスケッチ以外は資料が乏しく、初めてのi2cとPythonのプログラミングで苦労しました。センサーから4 byteのデータを受信する方法がわからなかったのですが、read_i2c_block_data関数で問題が解決出来ました。

4byteのデータを受信するとステータスがわかり、0は最新データで、1が古い使い回しているデータ、3がコマンドモード、4が診断中とわかるので、ステータスが0か1ならリスト形式で[ステータス, 湿度, 温度]を返します。それ以外は[ステータス, 0.0, 0.0]を返します。

# coding: utf-8
import smbus
import time

# My Raspberry Pi is Revision 2
i2c = smbus.SMBus(1)

# ==============================================
# =   HIH-6130 Humidity/Temperrature Sensors   =
# =   for Measurement Data Fetch Mode          =
# ==============================================
def hih6130():
    # get 4 bytes
    buf = i2c.read_i2c_block_data(0x27, 0, 4)

    # get status
    sta = buf[0] >> 6 & 0x03

    # command mode or diagnostic mode are zero
    if sta >= 2:
            return [sta, 0.0, 0.0]

    # get digital output
    hum = (buf[0] & 0x3F) * 256 + buf[1]
    tem = buf[2] * 64 + (buf[3] >> 2)

    # convert digital output
    hum = round(hum / 16383.0 * 100, 1)
    tem = round(tem / 16383.0 * 165 - 40, 1)
    return [sta, hum, tem]

# print out Humidity and Temperrature
while True:
    print hih6130()
    time.sleep(1)

実行してみると、1秒ごとにステータスと共に湿度と温度を知らせてくれます。吐息をかけてみると湿度が上下に動くのがわかります。適当なところでキーボードからCTRL+Cで止めて下さい。

$ python test.py
[1, 43.2, 21.2]
[1, 42.9, 21.7]
[1, 42.9, 21.7]
[1, 42.9, 21.7]
[1, 42.9, 21.7]
^CTraceback (most recent call last):
  File "test.py", line 35, in <module>
    time.sleep(1)
KeyboardInterrupt

関連記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です