プレゼンでデモするにあたり光ったり鳴ったりするとウケが良いだろうということで、3つほどデバイスを使ったのでご紹介します。使ったのは照度センサ、ブザー、マトリックスLEDで、今回は照度センサの話です。
ちなみにプレゼンしたのは Code BEAM Lite Vancouver というカンファレンスで Migrating live processes with Zenoh in widely distributed network というタイトルで発表しました。光ったり鳴ったりするデバイスがあると大ウケで、これまで発表したカンファレンスで発表後にもっとも多く声をかけられました。
ハードウェア
Nervesをいごかすスモールボードコンピュータは BeagleBone シリーズをよく使ってます。ハードウェアがオープンソースなのでラズパイより重宝してます。特に BeagleBone Green は I/O として Grove システム のコネクタがついてるのでデバイスの配線が楽で良いです。今回はこれを使います。開発元の Seeed Studio でも売ってますが国内ならスイッチサイエンスや秋月電子でも手に入ります。大きさは86 x 54 x 15 mmです。
センサモジュール
BeagleBone Green の Grove コネクタは2つあり、一つがUARTでもうひとつはI2Cです。なのでいろんなボードはUARTかI2Cだと楽ちんです。今回はスイッチサイエンスで売ってるBH1745NUC搭載デジタルカラーセンサモジュールというのを用いました。これはGroveの他にQwiic/STEMMA QTコネクタにも対応してます。大きさは 26.67 x 22.86mm です。
このモジュールに搭載されてるセンサはROHMのBH1745NUCです。R/G/B と Clear(照度相当)の4chを同時に計測できるカラーセンサです。データシートは Rohm のアカウントを取らないとダウンロードできないかもです。スイッチサイエンスではこちらのBH1745NUCのデータシートをモジュールのページに掲載していました。
Groveケーブル
細かい話になりますが、IoTやってるとケーブルだらけになるので、短いケーブルを重宝します。Groveのケーブルだと5cmというのが売ってます。
- スイッチサイエンス M5Stack用GROVE互換ケーブル
- Seeed Studio Grove 4ピンケーブル 5cm ツメ付き (5本入り)
- せんごくネット通販 Grove 4ピンケーブル ロックあり 5cm
ソフトウェア
今回このモジュール用にとにかく値を取れるだけのライブラリを作って公開しましたので、これを使います。
Nerves で実装
いつものお作法に従って作ります。以下、ターミナルへの入力のみ書いてますが、毎度どっさりお返事が来ます。
% mix nerves.new bh1745test
% cd bh1745test
% vi mix.exs # deps に {:bh1745luminance, "~> 0.1.0"} を追加する
% mix deps.get
% export MIX_TARGET=bbb
% mix firmware
% mix burn # SDカードに焼く
焼いたSDを BeagleBone Green に挿してブートしてください。その際に、SDからブートさせるために user ボタンを押しながら電源を入れることをお忘れなく。これでライブラリの入ったファームウェアが立ち上がります。
テスト
試してみます。値は16bitで、4つの値が取れます。順に、赤・緑・青とあとクリアと呼ばれる照度が取れます。
iex(1)> {:ok, ref} = BH1745Luminance.open()
{:ok,
%Circuits.I2C.I2CDev{
ref: #Reference<0.2173033012.764280844.186945>,
retries: 0,
flags: []
}}
iex(2)> BH1745Luminance.read_rgbw(ref) # 机の手元ライトを high にした
{1238, 2011, 950, 217}
iex(3)> BH1745Luminance.read_rgbw(ref) # 机の手元ライトを mid にした
{690, 1070, 485, 119}
iex(4)> BH1745Luminance.read_rgbw(ref) # 机の手元ライトを low にした
{376, 529, 221, 62}
iex(5)> BH1745Luminance.read_rgbw(ref) # 机の手元ライトを消灯した(環境光のみ)
{171, 176, 49, 25}
iex(6)> BH1745Luminance.close(ref)
まとめ
ダッシュで作ったプログラムで照度センサの値が取れるようになりました。
このライブラリではデフォルトのままセンサのパラメータを変えてないです。計測時間が160msでゲインが1xという最も鈍い側になってるので、センサの精度を活かしたい場合はパラメータを変えられるようにプログラムを改変する必要があります。そのうち時間が出来たらそのような拡張もやりたいですね。


