記事の詳細

WP-スライダーBIG61

前回の記事では、今回発売となるゼロワンシリーズ第二弾から、明るさセンサ基板とリレー基板を使って、暗くなると点灯する自動ライトを作成しました。
今回は、前回作ったライトの明るさセンサのシステムに迫っていきます。


 

Node-REDの構成

01_LX

I2Cノードは初期状態ではインストールされていないので、右上のメニュー->パレットの管理 から「ノードを追加」タブでを開き、”i2c”で検索してください。
いくつか候補が出てくるので、”node-red-contrib-i2c”ノードを追加してください。

1. 初期設定

このフローでは、injectノードの自動遅延起動の機能を使い、初期設定を行ってから読み込みを開始するようになっています。
画面上側のフロー群が初期設定を行うフローとなります。3つのレジスタに設定値を書き込む必要があるため、100msずつ遅延させながらI2Cへ出力し、センサの初期設定を行っています。

02_01_INI

I2C outノードには出力先のアドレス、書き込むコマンドと値を設定する項目があります。
今回は、上から順番に以下の表のように設定しました。

順番アドレスコマンド
119128255
2191300
319132157

2. メイン処理

下にあるフロー群が、明るさセンサの値を取り込み、しきい値によってON/OFF判別を行うメインの処理になります。
このフローはinjectノードの機能で、初期設定が終わる十分な時間を見込んで待機したのち、一定の間隔(この例では0.1秒)で作動するようになっています。

最初に、センサの値を読み取ります。I2C inノードにはアドレス、コマンドの他、読み取るバイト数を設定します。このセンサでは以下のように設定します。

アドレスコマンドバイト数
191334

受け取ったデータは配列の形なので、functionノードにてデータを結合し一つの数値にします。
中身は以下の通りです。

msg.payload = (msg.payload[0] << 8)+ msg.payload[1]; return msg;

このデータを、Switchノードに入力します。このノードは、入力値に応じ様々な条件で出力する端子を変えることが出来ます。

02_04_func

今回は以下のように条件を設定しました。

02_02_Switch

1000以上であれば1番端子(フローの上側)、1000未満であれば2番端子(フロー下側)にデータが流れていきます。
このデータはまだ数値データのため、changeノードで2値化します。

02_03_true

分岐の後に無条件で代入を行い、1000以上はtrue,1000未満はfalseが流れるようにします。
最後にrbeノードを接続します。このノードは、流れてくるデータに変化があった時だけ、そのデータを出力します。
MQTTのbrokerサービスやGoogleスプレッドシートAPIなどでは、時間当たりのデータ量に制限があり、オーバーするとしばらくの間サービスが使えなくなったりするため、こういった機能を使いデータ量を削減することが大切です。

このようにして、明るさセンサからの値をTrue/falseに変換し、MQTTへの送信を行うことで暗くなると点灯する自動ライトの機能を実現しています。

関連記事

ページ上部へ戻る