Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、TSL2572センサーで明るさを測定する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。
更新日 : 2024年9月28日概要
TSL2572センサーに対応した拡張基板を用いることで、Raspberry Piで明るさ(照度)を測定することが可能になります。一方で、ハードウェアがあっても、センサーを制御するソフトウェアがなければ測定を行うことはできません。
そこで、Indoor Corgi製のRaspberry Pi拡張基板に搭載されているセンサーを一括して制御できるソフトウェア「cgsensor」を開発しました。
コマンドラインツールを使えば1行もコードを書かずに測定ができるほか、Pythonパッケージでご自身のプログラムから簡単にセンサーを制御できます。本記事では明るさセンサー TSL2572を制御する方法について解説します。
拡張基板
TSL2572を搭載している拡張基板以下の通りです。詳細は製品ページを参照して下さい。
Raspberry Pi 5について
2024年2月20日時点の安定版OSにおいて、I2C信号タイミングがシビアすぎるためTSL2572センサーを認識しない問題が起きています。修正済みのkernel6.6.yで解決することを 確認しています。将来のkernelのアップデートを待つか、手動でプレリリース版にアップデートするなどして対応してください。
I2C有効化
センサーとはI2Cで通信しますので、以下の記事を参考にI2Cを有効化して下さい。
インストール
センサー制御ソフトウェア「cgsensor」をインストールするには、以下のコマンドを実行します。ターミナルを開き、$に続くコマンドを実行して下さい。最新版へのアップグレードも同じコマンドで可能です。
ソースコードやサンプル、ライセンスはGitHubページに公開しています。
$ sudo python3 -m pip install -U cgsensor --break-system-packages
エラーが出る場合は最後のオプションを指定せずにお試しください。
$ sudo python3 -m pip install -U cgsensor
インストールが完了すると、cgsensorコマンドが使用可能になります。以下のように-hオプションを指定すると、使い方が画面に表示されます。
$ cgsensor -h
測定
tsl2572コマンドで、測定を行い、結果をlux単位で表示します。
$ cgsensor cgsensor tsl2572
TSL2572 測定
明るさ[lux]: 141.8
薄暗い室内から晴天の屋外まで、幅広い明るさを測定できるようにTSL2572では測定時間や倍率を変更できます。適切でない設定を用いると、測定レンジ外となったり、測定レンジに対して暗すぎて精度が悪化してしまいます。cgsensorでは、周囲の明るさに合わせてこれらの設定を自動的に最適化して測定を行うプログラムになっています。
-vオプションを指定すると、実際に使用した測定倍率、時間、および2つのセンサーのADCレジスターの値を表示することができます。
$ cgsensor tsl2572 -v
TSL2572 測定
明るさ[lux]: 141.7
測定倍率: 16
測定時間[ms]: 349.44
ADC Ch0: 18294
ADC Ch1: 2724
全センサーの一括測定、記録
cgsensorには対応する全センサーを一括で測定したり、連続で測定、結果をファイルに保存するといった、便利な機能が備わっています。cgsensor all … コマンドを利用します。
1回のみの測定
オプションを指定しない場合は、対応するセンサーを検出して測定し、結果を表示します。
$ cgsensor all
BME280
温度[°C]: 29.3
湿度[%]: 59.1
気圧[hPa]: 1022.1
BME280#2
温度[°C]: 34.0
湿度[%]: 41.1
気圧[hPa]: 1022.8
TSL2572
明るさ[lux]: 149.3
SCD41
CO2濃度[ppm]: 472
連続測定
-cオプションに続けて秒数を指定すると、指定した秒数おきに測定を連続して行い、時刻と測定結果を画面に表示します。値の変化を画面上でモニターしたい場合に便利です。
以下の例では、RPZ-IR-Sensorの基板上のBME280センサーと、TSL2572センサーの測定結果が表示されています。一番右の列がTSL2572の明るさのデータです。
Ctrl+Cで終了します。
$ cgsensor all -c 10
時刻, BME280#2 温度[°C], BME280#2 湿度[%], BME280#2 気圧[hPa], TSL2572 明るさ[lux]
2021/10/13 16:58:12, 36.4, 31.4, 1021.5, 141.6
2021/10/13 16:58:22, 36.2, 31.7, 1021.5, 141.3
2021/10/13 16:58:33, 36.1, 31.9, 1021.5, 141.3
2021/10/13 16:58:43, 36.0, 32.1, 1021.5, 141.7
...
ファイルに保存
-fオプションに続けてファイル名を指定すると、時刻と測定結果をcsv形式で保存します。結果の保存や解析に便利です。
ファイルが既に存在する場合は、最後の行に追記していきます。追記する場合は、センサーの増減が無いようにして下さい。増減があると列がずれる場合があります。
以下のコマンドで、1回測定を行って結果を「sensor_log.csv」に保存します。
$ cgsensor all -f sensor_log.csv
-cオプションを併用すると、一定間隔で測定を行い、かつ結果を「sensor_log.csv」に保存していきます。
$ cgsensor all -c 60 -f sensor_log.csv
きっちりと決まった時刻に測定したい場合はcronなどの定期実行ソフトウェアと連携させて下さい。以下を/etc/crontabに追記すると、毎時0分、10分、20分、30分、40分、50分に測定を行い、結果を/home/pi/sensor_log.csvに保存します。
*/10 * * * * pi cgsensor all -f sensor_log.csv
設定ファイルの編集方法が分からない場合は、以下の記事を参考にして下さい。
Pythonパッケージの利用
これまでコマンドラインツールでセンサーを制御する方法について解説しました。一方、ご自身のPythonプログラムからセンサーを使いたい場合は、cgsensorパッケージを利用することで簡単に制御することができます。
1度だけ測定して結果を表示するサンプルコードを用意しています。
インポート
使用前の準備として、cgsensorパッケージをインポートしておきます。
import cgsensor # インポート
TSL2572クラス
TSL2572の機能はTSL2572クラスにまとめられています。まずは以下のようにインスタンスを作成します。
tsl2572 = cgsensor.TSL2572() # TSL2572制御クラスのインスタンス
測定
TSL2572クラスの各種メソッドや変数にアクセスしてセンサーを制御できます。
ここではsingle_auto_measureで測定します。このメソッドは、
- ゲイン1倍、短めの時間で測定実行
- ADCレジスター読み出し
- 結果に応じて、最適なゲイン、時間を決める
- 測定実行
- ADCレジスター読み出し
- 実際の明るさを計算
という一連の測定の処理を全て行ってくれます。
single_auto_measureが正常に完了すると、illuminance変数に結果が入るので、それを画面に表示しています。
tsl2572.single_auto_measure() # 条件を自動で調整しながら1回測定を行い, luxに結果を入れる
print('明るさ {}lux'.format(tsl2572.illuminance)) # 明るさを取得して表示
例外
センサーが接続されていない場合も含め、センサーとの通信に失敗するとIOError例外が発生します。必要に応じて処理して下さい。
その他の機能
その他のメソッド等を利用すると、より細かい制御も可能です。ソースコードのコメントおよび、TSL2572データシートも合わせてご確認下さい。
注意事項
本ページの内容は、TSL2572に関する資料をIndoor Corgiが解釈した結果、および実際に動作させた結果をもとに記載しております。センサーに関する情報の正確性を保証するものではありません。
センサーについての情報はams社の資料をご確認下さい。
まとめ
センサー制御ソフトウェア「cgsensor」を利用して、TSL2572センサーで明るさを測定する方法の解説は以上です。Pythonプログラムや他のソフトウェアと連携することで、センサーを使った様々なシステムを簡単に実装することができます。
また、「RPZ-PowerMGR」拡張基板と組み合わせると、指定した時刻だけ起動して測定することもできます。モバイルバッテリーを使って、電源の確保できない環境でのセンシングも可能になるので、検討してみてはいかがでしょうか。
人感センサーとラズパイで人や動物が通ったら撮影する (RPZ-PIRS)
人感センサー(PIR/焦電赤外線センサー)は、人や動物の動きを検知できます。そこで、Raspberry Pi(ラズパイ)、カメラと組み合わせて、人や動物が通ったら写真や動画を撮影する方法を解説します。実際に動作するプログラムも用意しています。人感センサー搭載のRPZ-PIRS拡張基板を利用します。
指定時刻にラズパイ/Jetsonの電源をON/OFF (RPZ-PowerMGR)
RPZ-PowerMGRを使って、指定時刻にRaspberry Pi(ラズパイ)やJetson Nanoの電源ON/OFFする方法の解説です。決まった時間だけ起動して消費電力を抑えることが可能で、モバイルバッテリーやソーラーシステムでの運用に最適です。
RPZ-PIRS (Raspberry Pi用 人感/明るさセンサー/赤外線 拡張基板)
Raspberry Pi(ラズパイ)に人感、明るさセンサー、赤外線送受信機能を搭載できる拡張基板です。人感センサーで人や動物を検知してカメラで撮影したり、赤外線で照明をONするような使い方が可能です。周囲の明るさをモニターできる他、外付温湿度/気圧センサー(別売り)を接続することで、温度、湿度、気圧の測定機能を追加できます。7色表示可能なRGB LEDにステータスを表示したり、スイッチを押すことで特定の動作をさせることができます。