Raspberry Pi で照度センサ TSL2561 を使う

組み込み
スポンサーリンク

ストロベリー・リナックスから低価格版の照度センサとして TSL2561 のモジュールが発売されています.

これを Raspberry Pi 上の Python から使う方法を紹介します.

スポンサーリンク

混乱するライブラリ

TSL2561 を使ったモジュールは秋月電子からも発売されているので,すでにいろんなライブラリがあるかと思いきや,なかなか定番がありません.

その辺の混乱ぶりは,下記の記事によく表れています.

Raspberry Pi 2でAdafruit TSL2561を正しく使うメモ
http://shimobayashi.hatenablog.com/entry/2015/07/27/001708

照度を取得するだけなのに作業内容が多く,そこで紹介されている下記のライブラリは何故かノイズを拾いやすい設定(測定期間13ms, 16倍ゲイン)を使っているという状況.

下記のライブラリはバグ持っており,通常ゲインにすると値がおかしくなります.

janheise/TSL2561
https://github.com/janheise/TSL2561

Python 用の TSL2561 ライブラリ

そこで,『Raspberry Pi で温湿度センサ HDC1050 を使う』で作成した i2cbus モジュールを使って TSL2561 を制御するライブラリを作成してみました.

こんな感じ.

やっていることは次の通りです.

  1. Block Read を使って,光全体用のセンサ値と,赤外用のセンサ値の 2 つを取得.
  2. 積算時間の設定に基づき,データシートの下記の記述に従ってスケーリング変換.
    TSL2561のスケーリング換算式
  3. データシートの下記の記述に従って LUX に変換.
    TSL2561のLUX換算式

データシートに載っているサンプルコードは,浮動小数点を使わずに計算するために,パッと見複雑な感じになっています.実際の内容としては上記のようにシンプルです.

Python による TSL2561 の制御

TSL2561 を制御するスクリプト全体は次のようになります.

これを tsl2561.py という名前で保存して実行すると次のように,LUX が出力されます.

ライブラリ化

以上のコードをライブラリ化したものを下記に置いてます.
https://github.com/kimata/rasp-python

コメント

  1. 鹿渡愼一郎 より:

    貴重な情報を提供いただきありがとうございます。raspberryPi3にjessieをセットアップしpython3で計測関係を学び始めましたが、tsl2561によるLUXの計測で困っています。次のようなエラー表示が出ます。何かヒントになるようなことがあればご教示くださいますようお願い申し上げます。

    Traceback (most recent call last):
    File “/home/pi/tsl2561.py”, line 127, in
    print(‘LUX: %d’ % (tsl2561.get_lux()))
    File “/home/pi/tsl2561.py”, line 111, in get_lux
    if (ch1/ch0) <= 0.52:
    ZeroDivisionError: float division by zero

    • kimata より:

      TSL2561 との通信がうまくいっていないのが原因と思われます.
      簡易オシロスコープ等で通信ラインの波形を確認されると解析は進むと思います.

  2. 小川竹雄 より:

    TSL2561はもう廃番のようで今更ですが、手元に残っていたので使いたく、いろいろなページをさまよってこちらに来ました。スクリプトが大変参考になりました。ありがとうございました。
    最後のスクリプトの62行目、その上のスクリプトは31行目の
    self.i2cbus = i2cbus.I2CBus(bus) は
    self.i2cbus = I2CBus(bus) でないとエラーが出ますね。
    新しい環境だとそうなるのかな?一応、報告しておきます。

    • kimata より:

      コメントありがとうございます.
      I2CBus クラスを別ファイルにしてimport,の形を取らず同一ファイルに記載するとそのようになると思います.