ゴミ捨てをする人を決めましょう。

## 1. 家事を１人でやらなきゃいけない専業主婦の年収は本来1400万円と言われていますが
家事といえばどんなことがあるのでしょうか。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554996/58a652c1-c572-ef64-4996-78408d46cb66.png"width="450">
これだけでも大変そうですね。
テクノロジーの進歩とともに家事に関する商品はかなり進化しているようにも思います。
洗濯機やエアコンなどは遠隔操作ができるようになりました。
ルンバは自動で部屋をスキャニングして掃除をしてくれます。

**しかし**

風呂掃除、トイレ掃除、ごみ捨てなど、ボタン１つでは解決できないようなことも多くあります。
そんな中で今回はゴミ捨てというところにフォーカスしました。

## 2. ゴミ袋はどれくらい溜まったら出しますか
毎週回収される曜日が決まっていて、その日にとりあえず袋を縛って出すというなら、それは大正解だと思います。
しかし２４時間出し放題のところも増えてきています。
そうなるとゴミ出しのタイミングを自分で決めなければなりません。
どのくらい満タンになったら出せばいいのかは、その時の感覚次第になります。
私は１人暮らしなので、ゴミを出すタイミングを逸しても誰にも文句は言われませんが
どうしても後回しにしてしまいます。
「もう少しゴミ入りそう。」
「まだ捨てに行くの面倒だな。」
「袋もったいないしな。」
とあらゆる言い訳が思い浮かんでしまい
ゴミを捨てるタイミングを決められません。

ですが、無駄が大嫌いの僕はふと思います。

**ゴミをいつ捨てるかを考えている時間はものすごく無駄なんじゃないか。**

なので、ゴミをいつ捨てるかを定性的に決められるようにしました。
ゴミ袋を縛ってゴミを出すタイミングは、obnizの超音波センサーに決めてもらおうと思います。
そもそもゴミ袋が満タンになりすぎると縛りにくくなって無駄が増えることもあります。
機械がいつも同じタイミングでゴミ捨てを促してくれるようになればそういった無駄がなくなります。

ゴミ袋の上の方から袋の底に向けてobnizの超音波センサーを設置しました。
残り10cmを切ってゴミが溜まっていると判定されると
アラームがなり
LEDライトが点灯し
LINEBotからゴミを捨てるように通知が来るようにしました。

<details><summary> 作成したコード</summary>

```js
const Obniz = require('obniz');
const obniz = new Obniz('******');

'use strict';

const line = require('@line/bot-sdk');

const config = {
    channelSecret: '********',
    channelAccessToken: '********'
};
const client = new line.Client(config);


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);
    }
}

obniz.onconnect = async () => {
    // 超音波距離センサを利用
    const hcsr04 = obniz.wired('HC-SR04', {
        gnd: 3,
        echo: 2,
        trigger: 1,
        vcc: 0,
    });

    // LEDを利用
    const led = obniz.wired('LED', { anode: 10, cathode: 11 });

    //スピーカーを利用
    const speaker = obniz.wired('Speaker', { signal: 6, gnd: 7 });

    // obnizディスプレイ（初期表示）
    obniz.display.clear();
    obniz.display.print('obniz Ready');

    //カウント用意
    let count = 0;

    // setIntervalで定期実行
    setInterval(async () => {
        // 距離を取得
        let distance = await hcsr04.measureWait();
        // 小数点以下がたくさんあるのでここでは整数にします
        distance = Math.floor(distance);
        // 距離をコンソールに表示
        console.log(distance + ' mm');
        // 距離をobnizディスプレイに表示
        obniz.display.clear();
        obniz.display.print(distance + ' mm');

        //10cm以下になった回数をカウント
        if (distance < 100.0) {
            count += 1;
        }else {
            count = 0;
        }

        //カウントが2以上で（2分間センサーからゴミまでの距離が100mm以内と判定されると）
        if (count >= 2) {
            //obnizの画面で警告
            obniz.display.clear();
            obniz.display.print('Garbage can is full!!');
            // LEDオン
            led.on();
            // 音を鳴らす
            speaker.play(1000); 
            //LINE botにプッシュメッセージ
            main();
        }else{
            //カウントが0に戻る（ゴミまでの距離が100mm以上に離れると）タイミングでアラートを消す
            led.off();
            speaker.stop();
        }

        //console.log(count);
       
    }, 60000); // 60000ミリ秒 = 1分ごとに実行
};
```
</details>

***届いたLINE***
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554996/3c54c7d6-d17b-3fe8-464c-c14dc954de2c.png"width="250">
センサーの距離が１０ｃｍを切った状態が２分続くと
作動するようにしました。

センサー、スピーカー、LEDライトはこのように接続しました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554996/24e5fb3e-88ac-d527-f704-010fd35df1f2.jpeg"width="250">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554996/018cb3bf-3e55-8796-bc1c-9229da235160.jpeg"width="250">

CambrianRobotics obniz Board 1Y

抵抗内蔵5mm赤色LED（5V用）640nm　OSR6LU5B64A－5V

超音波距離センサー　HC－SR04[101-60-142 / 20-019-100-A]

ミニブレッドボード　BB－601（白）

ブレッドボード・ジャンパーワイヤ（オス－オス）10cmセット「BBJ-20」



## 3. 今回のプロダクトの作成手順
以下のものを用意します。
* CambrianRobotics obniz Board 1Y
* 抵抗内蔵5mm赤色LED（5V用）640nm　OSR6LU5B64A－5V
* 超音波距離センサー　HC－SR04[101-60-142 / 20-019-100-A]
* ミニブレッドボード　BB－601（白）
* ブレッドボード・ジャンパーワイヤ（オス－オス）10cmセット「BBJ-20」
### 3-1. obnizの初期設定をします
obniz 1YにUSB-typeCを接続して電気供給をします。
説明書通りに設定を進めてWi-Fi接続を完了させます。

### 3-2. 開発環境を設定します
npm i obniz
を実行してobnizパッケージをインストールします。

npm i @line/bot-sdk
を実行してLINE Bot SDKパッケージをインストールします。

npm i express
を実行してexpressをインストールします。

### 3-3. アクセストークン、シークレットキー等を作成したコードに入力します
結果的にはこのように作動します。

<iframe width="560" height="315" src="https://www.youtube.com/embed/Mw6PersaU5w?si=-Cf5nGnyHiH7s-DH" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

### 4. まとめ
ゴミ捨てというやらなければならないことをどのタイミングでやるのかを自分で決める必要がなくなりました。
2人以上で暮らしていて、誰がゴミを捨てるべきか揉めることがある場合は、このLINEBotと同居人全員で友達になり、アラームがなる直前にゴミを入れた人がゴミ袋を縛ってステーションにゴミを捨てることにしてしまえば、争いもストレスもなくなり、ゲーム性もあってよいのではないでしょうか。
無駄な時間も減ると思います。
人に指摘されることを嫌う人も納得しやすいのではないでしょうか。
ぜひ作ってみてください。
ここまでお読みいただきありがとうございました。