やりたいこと
ジェスチャーセンサーを利用してスマートコンセントと赤外線LEDの電源切り替え操作をする
利用するもの
・APDS9960ジェスチャーセンサー
・Espr Developer Rev.4(2G) : wifi接続用
・Arduino Uno R3
・Kasa スマートプラグ
(N極対応プラグ変換アダプタ)
・赤外線リモコン - ライト
・赤外線リモコン受信モジュール
・その他抵抗やコンデンサ、ブレッドボードなど
環境
・windows10
・Arduino IDE 1.8.12
・IFTTT
・Kasa Smartアプリ
※IFTTTが有料化されてました!
接続
APDS9960ジェスチャーセンサーは秋月電子通商で購入しました
センサー基盤裏のJP1とJP2 を結線しておきます
ツール
・ユニバーサル基盤に配置する際はmarmeloというエディタを利用しました
配置を反転させるのに便利でした
・カラー抵抗早見表も便利でした
実装
Arduino Unoでサンプル実行
目的 : 左右上下の手の動きを取得する
Arduino IDEを使って書き込みます
SparkFunのLibが使えるらしいので使います
サンプルも一緒になっているので、そちらを参考にするとジェスチャーによる判定ができます
明るさやRGBを読み取るサンプルも入っているので遊んでみると楽しいです
ジェスチャーのセンサー範囲ですが、おおよそ20cmほどまでのようでした
遮るものがあったりあまり遠くなると判定できません
また、NEARとFARは難しく、反応したりしなかったりでした
ゆっくり動かすと反応しやすいです
手を動かして出力した結果は以下の画像のような感じで出力されます
Espr Developer Rev.4でWifi接続
シリアル通信を使うため、ATコマンドの確認をします
ArduinoとEsprDevはTx-Rxとなるように接続します
ArduinoUno | EspDeveloper |
Rx | Tx |
Tx | Rx |
SoftwareSerialについてはいろんなところで詳しく書かれているので割愛します
シリアル通信ができ、ATコマンドを打てることが確認できたらOKです
私はこちらを参考にさせてもらいました
-- 注意点 --
EsprDeveloperには2つのモードがあります
IO0ピンの接続が間違っていると動きません
モード | 説明 | IO0ピン接続 |
Flash Boot Mode (実行モード) |
ATコマンドでやりとり、書き込んだスケッチを実行する | IO0 ピン HIGH |
UART Download Mode (書き込みモード) |
スケッチを書き込み、ファームウェアアップデートを行う | IO0 ピン LOW |
もしEsprDeveloperにスケッチを書き込んだ場合はファームウェアの書き直しが必要になります
ATコマンドについてはこちら
ATコマンドが使えればWifi接続も可能なはずです
SSIDを使って接続する場合はこちらの人がスケッチをアップしてくれていました
そのまま動くと思います
私はprintlnを使ってATコマンドを書き込み、WPSを利用しました
コマンドは以下を使っています
wifi変数で利用しているメソッドはESP8266libのメソッドです
AT+UART_DEF |
AT+CIPSTA? |
AT+CWMODE_CUR=1 |
wifi.setOprToStation() |
AT+WPS=1 |
wifi.disableMUX |
wifi.createTCP |
IFTTTとスマートプラグ
目的 : RIGHTやLEFTが来た時にスマートプラグの電源を切り替える
先ほど左右のイベントは取得できているので、まずはスマートプラグとIFTTT連携をします
IFTTTのアカウントを作成し、webhookを使ったアプレット作成をします
「If This」を選んで「webhook」を選択し、イベント名を入力してスマートプラグのONとOFFのイベントを追加します
次にスマートプラグの設定をします
スマートプラグのアプリ「Kasa Smart」を入れてアカウントを作成します
プラスアイコンから端末を追加=>スマートプラグ=>スマートプラグ「ライト」/「ミニ」を選択します
特に問題もなく簡単に設定できるので、Kasaの説明書通りに進めて設定してください
スマートプラグの設定をしたらIFTTTの設定をします
「create your own」ページの「Then That」を選択します
そこでスマートプラグの名称で検索してKasaで作成したアカウントで操作するデバイスを選択すればスマートプラグとの連携完了です
maker_webhookページのDocumentationを押下するとWebhookのURLが確認できます
あとはジェスチャーイベント発生時にこのURLを利用すればONOFFできるようになります
ジェスチャーのイベントはサンプル実行で取得できていますので
そこにONOFFトリガを追加します
ESP8266libのメソッドであるsendを使って通信しました
赤外線リモコンとLED照明
目的 : UPやDOWNが来た時に照明のONOFFを切り替える
赤外線の規格は各会社によって異なるようです
なので、実際にリモコン操作をしてフォーマットをみてみます
一旦いろいろ繋げていた物をArduinoUnoから外します
赤外線リモコン受信モジュールとIRemoteというLibを使って規格を調べます
データシートがあるのでInOutをみてArduinoUnoと繋げます
ArduinoUno | 赤外線受信モジュール |
5V | Vcc |
11(受信するピン) |
Output |
GND | GND |
あとはLibのソースをそのまま使います
IRecvDumpを実行してリモコン操作をすればデータが受信できるはずです
シリアルモニタは9600kbpsなので注意してください
データが取得できたと思いますので、ジェスチャーイベントが発生した際にIRemoteを使ってsendするだけです
これで照明のONOFFができます
ケース作成
ケースには3Dプリンタを使いました
モデリングにはFusion360を使ってます
無償版を利用してみましたが、上蓋と土台が接触しているかを確認することができてよかったです
また、初心者でも使いやすかったです
使い方はUdemyで勉強しました
実行結果
UP : 照明OFF
DOWN : 照明ON
RIGHT : スマートプラグOFF
LEFT : スマートプラグON
スマートプラグと携帯電話を繋いでいます
小さくて見えづらいですがONにすると充電中に切り替わります
青く光っているのはジェスチャーが読み取れた場合です
何かわからなかった場合は赤く光るようにしています
エラーなどでひっかかったところ
スケッチを書く前段階、環境を設定するまでにひっかかった内容を過去にFacebookにアップしています
ページトップに[困った問題 => 解決法]を書いてます
エラーではありませんが、スケッチでprintlnする際にFマクロを使うとSRAM使用量が少なくなることを初めて知りました
また、赤外線がカメラ越しなら光っていることがわかるということも今回初めて知りました