obnizでゴミ箱の蓋を動かした


# この記事の内容

・[obniz advent calender 2019](https://qiita.com/advent-calendar/2019/obniz)の6日目
・LINE Thingsとobnizとサーボモータでゴミ箱の蓋を動かした
・作ったプロダクトや、詰まったポイントを紹介

## 機器情報
OS更新サボってます（ごめんなさい）。今から使う人は最新版を使ってください。

・obniz（v1.1.0）
・obniz.js（v1.16.1）
・サーボモーター（GWServo S03TXF/STD/J）

# 作成したプロダクト
5月末に大阪で開催されたデジットハッカソンにて、その場で結成されたチームの５人で作成しました。

## [未来ゴミ箱](https://protopedia.net/prototype/814a9c18f5abff398787c9cfcbf3d80c)
維持費を自分で稼ぐゴミ箱。電子決済、自走、ログ収集機能を備えています。
![71912200_433881360570942_6423214773323694080_n.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/91a7ee4c-6613-f710-556e-80ec6116fa4d.jpeg)

## 構成図
決済系、制御系、センサ系に分けて実装しました。
![mirai_pay_icon-1024x490.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/8d80229a-62b9-51a5-3faa-efc87352a7d5.png)

## 詳細
以下、ブログにて紹介されてますのでご覧ください。

- [【速報】ROHM OPEN HACK CHALLENGE 2019 最終審査会開催！](http://open.rohm.com/jp/events/rohc2019_190930)
- [LINE ThingsとLINE Pay APIを活用したプロダクト「未来ゴミ箱」がROHM OPEN HACK CHALLENGE 2019にて最優秀賞を獲得しました。](https://engineering.linecorp.com/ja/blog/miraigomibako-linethings/)
- [【使用例】未来ゴミ箱（ ROHM OPEN HACK CHALLENGE 2019　最優秀賞）](https://keigan-motor.com/future-dustbox/)

# obnizの使用部分
LINE Thingsと連携して、フタを開け閉めする部分にobnizを使いました。使った理由は、サーボモーター用にはんだ付けしたくなかったからです。（当方ネットワークエンジニア）

## 物理構成
obnizにサーボ直繋ぎしました。電源はモバイルバッテリーです。
![フレーム-07-10-2019-10-09-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/597be965-25cc-6a9c-0cc3-1646e8906635.png)
フタの中に収めるとこんな感じです。シリコンケースの中にobnizがあります。
![dZn2K2vmQXy4vEV%ErzdtA.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535537/288f1f22-1268-f234-b4c0-208314225e6c.jpeg)

## 参考にした記事
LINE Thingsは各地でハンズオンがあり、資料もたくさんあります。

- [LINE Things Developer Trial ハンズオン](https://qiita.com/hktechno/items/bb83cc898c75819b2664)

obnizとの連携はこのあたりを参考にしました。

- [obniz で LINE Things！](https://qiita.com/youtoy/items/d4d34da3f5427d11077f)
- [obniz を LINE Things のデバイスとして使う](https://qiita.com/wicket/items/ed01ea580f26f776e468)

## コード
LINE Thingsとの連携はGitにあるので割愛します。以下はいずれも `obniz.onconnect = async function`の中です。サーボの電源をon/offしてるのは節電です。

### サーボモーターの準備 
      var servo = obniz.wired("ServoMotor", {gnd:0, vcc:2, signal:4});
      servo.off();
### フタの開け閉め
	  writeCharacteristic.onwritefromremote = function(address, newvalue) {
	    if (newvalue[0] <= 1 ) {
	      obniz.display.clear();
          if ( newvalue[0] == 1 ) {
            servo.on();
            servo.angle(90);
            obniz.display.print("Open");
            obniz.wait(1000);
            servo.off();
          } else {
            servo.on();
            servo.angle(15);
            obniz.display.print("Close");
            obniz.wait(1000);
            servo.off();
          }
### BLE通信終了時にフタを閉める
      obniz.ble.peripheral.onconnectionupdates = function(data){
          console.log("remote device ", data.address, data.status);
          servo.on();
          servo.angle(15);
          obniz.wait(1000);
          servo.off();
      };

## 嵌ったところ
### BLE通信終了時にフタを閉める？
BLE通信終了時にフタを閉める処理を`obniz.onclose`に書いてました。obnizとの通信が切れてる状態なので、サーボの制御ができませんでした。代わりに`obniz.ble.peripheral.onconnectionupdates`を使うと上手くいきました。LIFF終了時に呼び出されて、その後またすぐ繋がるような動作をしてますが、まぁ良しとします。

### サーボモータに過電流？
obnizにサーボモータを直接接続すると「output voltage is too low when driving high」というエラーが出て上手く動きませんでした。調べると過電流の検知のようで、ブレッドボード上の配線くらい、小さな抵抗を挟めば大丈夫なようです。はんだ付けしたくなかったので、抵抗の代わりに延長コードを使いました。概ね、上手くいってます。（接触が良すぎる場合は、グラグラさせて接触不良にしてます）

### Wi-Fi、BLE、飛びまくり！
ハッカソンのタッチアンドトライや、各展示会ではWi-Fi・BLEが飛びまくりで、LINE Things - obnizは10回試せば3回動くくらいの不安定さでした。KeiganMotorのBLEは安定してましたので、フタの内部に収めているのが問題かもしれません。obnizOS v2.1.1で、BLE通信の改善がされたようなので期待です。

### カバーどこに売ってるの！？
ネットで調べると個人制作のカバーがいくつか見つかります。そこそこ良いお値段（カバー２個でobniz買えちゃう）するので、適当なシリコンケースを買って収めました。両面テープが全然くっつかなくて大変でした。放熱も心配です。良いケースが公式で売られると嬉しいな。

### 展示会場ごとにwi-fiを再設定...
未来ゴミ箱は色んな展示会に出したのですが、その度にWi-Fi設定変えるのは中々しんどかったです。また、Free Wi-Fiの認証あるパターンだと接続に失敗します。モバイルルータやスマホのテザリングでいつも同じSSID・パスワードだと便利です。

# まとめ
電子工作の知識やプログラミングの知識が乏しくても、obnizなら何とか動きます。