ドアの開閉状態をマトリックスLEDに表示する
コンテンツ
今回やること
obnizを2台使って、ドアの開閉状態をマトリックスLEDに表示します。ドアを開けっぱなしにして来てしまったかどうかを、ドアから離れた自席からでも、設置したマトリックスLEDに表示された顔の表情によって知ることができます。
用意するもの
- obniz Board* x2
- keyestudio マトリックスLED with HT16K33*
- HC-SR04(超音波距離センサー)*
- モバイルバッテリーなど
*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を電源に繋いで自席に設置すれば、ドアから離れた自席からでもドアの状態を確認することができます。



