重量センサ―で在席確認

#企画したもの

- 重量センサ―で在席確認！
クッション内に重りセンサーを埋め込むことで遠隔地でも在席確認できる。
おばあちゃん、ちゃんと座ってるかな？

応用すれば室内で椅子に何名が座っているか確認できると思う。


##使用したもの
- Obniz
千石電商 5980円(税込)
国産
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/d90ef5f0-4409-79cd-6164-3ce1bd86e7c3.png)


- ロードセル　シングルポイント（ビーム型）　SC133　20kg
秋月電子通商 540円(税込)
URL: http://akizukidenshi.com/catalog/g/gP-12034/
aliexpressの方が安かった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/59ee7679-d976-e071-6410-57c739de349f.png)

- HX711 ロードセル用ＡＤコンバータ　モジュール基板
秋月電子通商 350円(税込)
aliexpressの方が安かった

はんだごてとドライバーが必要になります！
持ってない人はついでに買うことをおすすめします。
10箇所はんだづけする為、ほぼ初心者の私はここが一番苦労しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/a67470e9-041e-d64e-c722-7c56a68798e9.png)

-ブレッドボード・ジャンパーワイヤ（オス－メス）　１５ｃｍ（白）　（１０本入）
秋月電子通商 220円(税込)
ほんとはもう少しカラーバリエーション欲しかった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/64c13c12-8262-f038-3be1-1bf911f69420.png)

- LTE対応USBドングル PIX-MT100 +SoracomSIM
Wifiが無い環境でもすぐに使用できるようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/765a9567-6a70-0fcb-86e0-92b8fcdc053c.png)


-タカノクッションR(めっちゃ座りやすいです！)
タカノ株式会社 10,000円(定価)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/070a211d-1318-85e7-50ed-f4074e8c89a8.png)


##作り方
物を買いそろえたら、
HX711 ロードセル用ＡＤコンバータ　モジュール基板を組み立てます。
HX711は買った時点ではバラバラの為、はんだごてを使って結合していきます。
取扱説明書
http://akizukidenshi.com/download/ds/akizuki/ae-hx711.pdf

下記の配線図に従って結線していきます。
配線図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/7b438673-1242-14b2-2f8f-ea2c9e30ae5a.png)

##実装方法
LINEチャネルを作成し、Server.jsを下記のように記載します。

##ソースコード
``` Server.js 
'use strict';

const express = require('express');
const line = require('@line/bot-sdk');
const PORT = process.env.PORT || 3000;
const Obniz = require('obniz');
var obniz = new Obniz("[obnizID]");
var strValue

const config = {
    channelSecret: '[secret]',
    channelAccessToken: '[AccessToken]'
};

const app = express();

obniz.onconnect = async function () {
  
    obniz.display.clear();
    const hcsr04 = obniz.wired("hx711" , {gnd:0, dout:1, sck:2, vcc:3} );
    
    while(true) {

    //ここの値でキャリブレーションする
      hcsr04.offset = 88815;
      hcsr04.scale = 88925;
      const val = await hcsr04.getValueWait(1);
      console.log(Math.abs(roundFloat(val, 4 )*10000));
      strValue=Math.abs(roundFloat(val, 4 )*10000);
      obniz.display.clear();
      obniz.display.print(val);
    
      await obniz.wait(100);
    }
    function roundFloat( number, n ) {
      var _pow = Math.pow( 10 , n );
      return Math.round( number * _pow ) / _pow;
    }
    
    }


app.get('/', (req, res) => res.send('Hello LINE BOT!(GET)')); //ブラウザ確認用(無くても問題ない)
app.post('/webhook', line.middleware(config), (req, res) => {
    console.log(req.body.events);

    //ここのif分はdeveloper consoleの"接続確認"用なので削除して問題ないです。
    if(req.body.events[0].replyToken === '00000000000000000000000000000000' && req.body.events[1].replyToken === 'ffffffffffffffffffffffffffffffff'){
        res.send('Hello LINE BOT!(POST)');
        console.log('疎通確認用');
        return; 
    }

    Promise
      .all(req.body.events.map(handleEvent))
      .then((result) => res.json(result));
});

const client = new line.Client(config);

function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    return Promise.resolve(null);
  }
  var strWeight
//大体1kgで座っている判定にする
  if (strValue >= 1000) {
    strWeight='席に座ってます';
    }else{
        strWeight='席に座ってませんよー！';

    }




  return client.replyMessage(event.replyToken, {
    type: 'text',
    text: strWeight //実際に返信の言葉を入れる箇所
  });
}

app.listen(PORT);
console.log(`Server running at ${PORT}`);

```

##LINEBOTのQRコード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399986/913bfe46-e8c0-703a-7944-1f73f6690e4d.png)
電源入れてないときは動かないです…