11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

obnizAdvent Calendar 2021

Day 20

あけちゃダメな箱の完成版と在宅医療への応用

Last updated at Posted at 2021-12-11

まずは完成版の動画をご覧ください。

obnizの距離センサーで箱を開けたことを感知して、箱を開けると光って声がし、さらにLINEで通知もくるという仕組みです。

背景

前回の記事では、箱を開けると光ってブザーがなるというものを作りました。

前回できなかったLINE連携ができたので記事にしていて、さらに音も前回のシンプルなブザーではなく入力した声が出るようにしています。

環境

ソフトウェア
Visual Studio Code v1.60.1
Node.js v16.10.0

ハードウェア
obniz Board 1Y
LEDライト
距離センサー
Grove_MP3
スピーカー(キャンドゥで500円の有線スピーカー)

LINEとの連携

前回できなかったLINE連携に関して、メッセージ起点ではなくobniz起点で動かしたいためプッシュメッセージを使うことがわかり、参考にした記事がこちらです。

登録した声を出す

単にブザーがなるよりも自分の声がしたほうが子どもたちが喜ぶと考えました。
参考にした記事がこちら。

ここで紹介されているGrove_MP3を使いました。

しかし、実際に使うまでにいくつもつまづいたので上記記事と重なる部分もありますがこちらに書いておきます。

まず、Grove_MP3を買うだけではObnizにつなげられません。
GROVE - 4ピン - ジャンパオスケーブルを買う必要があります。

また、Grove_MP3で使えるマイクロSDカードは8Gのものです。
コンビニや電気屋さんで買おうとすると16G以上のものしか売っていないことがほとんどなので、こちらも通販で買うことをお勧めします。

当然ですが、Grove_MP3ではMP3の音しか再生できません。
普通に声を録音するとMP4になってしまうので、こちらのアプリを使ってMP3に変換しました。

Grove_MP3を使用する際、「MP3」というフォルダを作って「0001.mp3」のように数字4桁のファイル名にしておく必要があります。
この4桁の数字を使うことで任意の音声を呼び出すことができます。

コード

実際のコードはこちらです。
'use strict';

const Obniz = require('obniz');
const obniz = new Obniz('obniz_ID');
const line = require('@line/bot-sdk');

const config = {
    channelSecret: 'チャネルシークレット',
    channelAccessToken: 'チャネルアクセストークン'
};
const client = new line.Client(config);

obniz.onconnect = async function () {
  // 超音波測距センサを利用する
  const hcsr04 = obniz.wired('HC-SR04', { gnd: 0, echo: 1, trigger: 2, vcc: 3 });
  // RGB LEDを利用
  const rgbled = obniz.wired('WS2811', { gnd: 5, vcc: 6, din: 7 });
  // MP3プレーヤーを利用
  const mp3 = obniz.wired("Grove_MP3", { gnd: 8, vcc: 9, mp3_rx: 10, mp3_tx: 11 });
  await mp3.initWait();
  //ボリュームを30に設定
  mp3.setVolume(30);

  setInterval(async function () {
      // 距離を取得
      let distance = await hcsr04.measureWait();
      console.log(distance + ' mm');
       // そのままだと小数点以下の桁数がやたら多いので整数に丸めてもよい
        //distance = Math.floor(distance);

       // 距離が8cm以上かどうかの判定
      if (distance > 80) { // 80mm = 8cm 以上の場合 
        await main();
        ///光る
        rgbled.rgb(255, 0, 0);
        //MP3フォルダ内の「0001」から始まるMP3ファイルを再生
        mp3.play(1);
      }else {
        rgbled.rgb(0, 0, 0);
        mp3.stop();
      }
  }, 4000); // 4000ミリ秒 = 4秒おきに実行
}

const main = async () => {

    const messages = [{
        type: 'text',
        text: '開けちゃいけない箱が開けられたよ!!'
    }];

    try {
        const res = await client.broadcast(messages);
        console.log(res);        
    } catch (error) {
        console.log(`エラー: ${error.statusMessage}`);
        console.log(error.originalError.response.data);
    }
}

子どもで実行

実際に子どもで試したのがこちら。

制作過程で「あけちゃダメって言っただろ」の声が漏れててネタバレしてたためか、「フフッ」と薄い反応でした、、、
もっと喜んでくれるかと思ったのに残念!!
次はもっと秘密裏に制作する必要がありそうです。

医療現場での応用について

私は在宅医療に携わる医師です。
この仕組みを用いれば、在宅医療の現場にも応用できると考えました。

たとえば、この箱の中に日々の内服薬を入れておくと、箱を開けるとLINE通知が家族に飛ぶようにできるので薬を飲んだかどうかを知ることができます。

また、今回は箱の中に距離センターを入れて蓋を開けたことを検知するようにしていますが、CDSを使って照度センサーとする仕組みを使えば、リビングが明るくなったらLINE通知して離れて住む家族の生活リズムを知ることもできます。
参考記事

また、以前書いた部屋の温度に反応する仕組みに今回の仕組みを応用すると、室温が上がると孫の声で「クーラーつけてね」と言って、離れた家族に通知が来るということも実装可能です。

ObnizとLINEがつながると、いろんな応用が効きますね!

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?