アレクサでライトやエアコンをコントロールしましょう（まだできない）


# モチベーション
最近、プロトアウトでIoTに関する授業を受けました。メインはObnizで、いくつかセンサーやアクチュエータを試しました。授業の内容を復習のため、何か面白いことを作ろうと思いました。
みんなさんは眠いのに、ライトのリモコンを見つけられなかったことがありますか。その時、拍手でライトをオンにできると、いいじゃないですか。それで、今回、obnizでリモコンの信号を模倣してライトやエアコンをコントロールする制作を作りたいと思います。

# 概要
そんな制作を作るために、2つ部分が必要です。1番目はデバイス（エアコンやライト）のコントロールする部分です。
2番目は人間のコマンドを認識する部分です。

## リモコンのしくみ
リモコンは[赤外線](https://ja.wikipedia.org/wiki/%E8%B5%A4%E5%A4%96%E7%B7%9A)もしくはラジオで動いています。うちのリモコンは赤外線（以下はIRとする）のほうです。
IRリモコン（送信機）は、特定のバイナリコードを表す赤外線のパルスを送信します。 これらのバイナリコードは、電源オン/オフや音量アップなどのコマンドに対応しています。 TV、ステレオ、またはその他のデバイスのIRレシーバーは、光のパルスをデバイスのマイクロプロセッサーが理解できるバイナリデータ（1と0）にデコードします。 次に、マイクロプロセッサは対応するコマンドを実行します。([ソース](https://electronics.howstuffworks.com/remote-control1.htm))
リモコン側はIR LEDがあって、デバイスのほうはIRレシーバー(IRセンサー)があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521590/96dd7954-18bf-1d45-785b-c5980548ad90.png)

リモコンの種類ごとに異なる種類のバイナリコードを使用するため、まず、IRレシーバーでリモコンのバイナリコードを検出しないといけません。それから、そのバイナリコードをコピーしてobnizでデバイスに通信します。



## 人間のインプット

obnizは音センサー（CN07）で回りの音を聞いて、もし音の大きさはある値より大きく場合は拍手と判定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521590/de974655-37dd-5b87-76fb-01835a9c005f.png)


ただ、センサーを購入した時、音声センサーが忘れてしまいました。もちろん再購入するのは問題ないですが、家にアマゾンエコーがあるので、「アレクサ、エアコンをつけて」や「アレクサ、僕はねたい」などの音声でコントロールするのはもっと面白いじゃないですね。

だから、やりたいことは少し変更しました。人間のコマンドは拍手でなく、音声です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521590/e097d378-df23-e927-9149-df337eb91add.png)


必要もの：
+ obniz
+ アレクサ（アマゾンエコーもしくはスマートフォン）
+ AWSアカウント
+ IR センサー([OSRB38C9AA](https://obniz.com/sdk/parts/IRSensor/README.md))
+ IR LED([OSI5FU5111C](https://obniz.com/sdk/parts/InfraredLED/README.md))

# 実装
計画：
1. IRセンサーでリモコンの信号を受けて信号のバイナリコードを分析する
2. 受けたバイナリコードを記入する（例えば：ライトオン：[1,1,0,....], ライトオフ：[1,0,0,...], エアコンオン:[1,1,1,...]）
3. obnizをコントロールするアレクサのスキルを作成する
4. コマンドによってobnizがIRLEDで2番のバイナリコードをデバイスに送る
## IRセンサーのバイナリコード
![iOS の画像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521590/25d251d1-e6cf-92aa-7ab9-be86b8214d0b.jpeg)
IRセンサーをobnizに接続してみて、バイナリコードを読み込みました。

```js
var sensor = obniz.wired('IRSensor', {vcc:0, gnd:1, output: 2});
sensor.duration = 130;
sensor.start(function (arr) {
  console.log(JSON.stringify(arr));
})
```
バイナリコードはarrにあります。例えば：

```
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
```

ただ、問題が発生しました。同じボータンを押したのに、結果は毎回違います。バイナリコードをコピーしてIR LEDを送ってみたが、ライトは受けられないみたいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521590/e62564c0-360a-4dcc-a0b9-fcf787b7639f.png)


### 赤外線リモコンの種類

赤外線リモコンは、900nm帯の赤外線をキャリアとして利用した無線制御システムで、家電製品には当たり前のように使われています。よく利用される通信フォーマットには主に、NEC/家製協/SONYフォーマットがあり、これら3種類で日本国内の殆どの家電をカバーします（[ソース](http://elm-chan.org/docs/ir_format.html)）。その3種類の中、実際の結果に比べて一番近くパータンは家製協(AEHA)フォーマットです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521590/5093a6c8-300b-af5c-cde0-00a90bf30f2f.png)

ただ、そのパータンを適用しても、結果はまだパラパラです。

### ノイズ
今回はビット単位で送受信信号を使用しているので、ノイズの影響を受けやすいです。残念ながら、今の状態はどうやってこのノイズを対応するのかわからないです。
今後、解決できると、ぜひ記事をアップデートします。

================================================================================================================

### アップデート：解決できました
↑の問題はやはりノイズです。実際の環境は完璧ではないので、ノイズ避けられないです。ただ、ライトやエアコンのセンサーはノイズがあっても信号を受けてコマンドを理解できます。
だとすれば、なぜテストした時、受けられないですか？それは間隔の問題です。IR LEDについて具体的に話しましょう。

## IR LED
![irled.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521590/23c8c68a-c045-7ce4-bc4e-beeb7a747633.jpeg)

以上の写真はうちのライトリモコンのIR LEDです。活躍範囲は5mぐらいです。

ただ、買ったIR LEDの活躍範囲は10~20㎝ぐらのため、ライトのセンサーに近く持って行かないと動かないです。一つ解決方法はオペアンプ(増幅器。例えば：[2n2222](https://akizukidenshi.com/catalog/g/gI-09406/))で発動範囲を拡張します。いったん、オペアンプがない状態で進めます。
ObnizとIR Led参考：https://obniz.com/sdk/parts/InfraredLED/README.md


## アレクサスキル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521590/a46b3ff1-883d-048b-fcf6-ac8c646d3652.png)


##アレクサとObnizと連携

# 結果
残念のため、最初のステップはまだできていない状態です。
実装するのは難しいですね。