ドアの開閉状態をマトリックスLEDに表示する

今回やること

obnizを2台使って、ドアの開閉状態をマトリックスLEDに表示します。ドアを開けっぱなしにして来てしまったかどうかを、ドアから離れた自席からでも、設置したマトリックスLEDに表示された顔の表情によって知ることができます。

用意するもの

*Starter Kitに同梱されています。

組み立て方

HC-SR04(超音波距離センサー)keyestudioのマトリックスLED with HT16K33のライブラリを参考に、以下の表や図・画像のように配線します。

ドアに設置するもの

obniz1 超音波距離センサー
0 GND
1 Echo
2 Trigger
3 Vcc

自席に設置するもの

obniz2 マトリックスLED with HT16K33
0 GND
1 Vcc
2 SDA
3 SCL

プログラム

マトリックスLEDに図を表示するために、drawOpenFace関数内やdrawClosedFace関数内でHTMLのcanvasにドット絵を描いています。obnizでライブラリを使ってマトリックスLEDを繋げると、canvasに描いたものをそのままマトリックスLEDに表示することができます。
canvasへの図形描画について、詳しくは canvasに図形を描く – 開発者ガイド | MDN をご覧ください。
async function drawOpenFace(_ctx, _matrix) {
  await _matrix.clear();
  await _ctx.clearRect(0, 0, _matrix.width, _matrix.height);
  for (let i = 0; i < _matrix.height; i++) {
    _ctx.fillRect(i, 4, 1, 1);
    _ctx.fillRect(i, 7, 1, 1);

    if (i === 0 || i === 7) {
      _ctx.fillRect(i, 0, 1, 1);
      _ctx.fillRect(i, 2, 1, 1);
      _ctx.fillRect(i, 5, 1, 1);
      _ctx.fillRect(i, 6, 1, 1);
    } else if (i === 1 || i === 6) {
      _ctx.fillRect(i, 1, 1, 1);
    } else if (i === 2 || i === 5) {
      _ctx.fillRect(i, 0, 1, 1);
      _ctx.fillRect(i, 2, 1, 1);
    }
  }
  _matrix.draw(_ctx);
}

 

完成したプログラム

うごかす

超音波距離センサーを繋いだobniz Boardに電源を繋ぎ、画像のようにドアを開いた側の壁に設置します。

そして、マトリックスLEDを繋いだobniz Boardを電源に繋いで自席に設置すれば、ドアから離れた自席からでもドアの状態を確認することができます。


(今回の方法では、完全にドアが開いた状態開いている状態としています。)