APDS9960ジェスチャーセンサーで電源切り替え

 

やりたいこと

ジェスチャーセンサーを利用してスマートコンセントと赤外線LEDの電源切り替え操作をする

 

利用するもの

・APDS9960ジェスチャーセンサー

・Espr Developer Rev.4(2G) : wifi接続用

・Arduino Uno R3 

・Kasa スマートプラグ

(N極対応プラグ変換アダプタ)

・赤外線リモコン - ライト

・赤外線リモコン受信モジュール

・その他抵抗やコンデンサ、ブレッドボードなど


環境

・windows10

・Arduino IDE 1.8.12

・IFTTT

・Kasa Smartアプリ

 

※IFTTTが有料化されてました!

 

接続

f:id:filot_nextd2:20201007171611j:plain

APDS9960ジェスチャーセンサー秋月電子通商で購入しました

センサー基盤裏のJP1とJP2 を結線しておきます

 

ツール

・ユニバーサル基盤に配置する際はmarmeloというエディタを利用しました

配置を反転させるのに便利でした

カラー抵抗早見表も便利でした

 

実装

Arduino Unoでサンプル実行

目的 : 左右上下の手の動きを取得する

Arduino IDEを使って書き込みます

SparkFunのLibが使えるらしいので使います

サンプルも一緒になっているので、そちらを参考にするとジェスチャーによる判定ができます

明るさやRGBを読み取るサンプルも入っているので遊んでみると楽しいです

ジェスチャーのセンサー範囲ですが、おおよそ20cmほどまでのようでした

遮るものがあったりあまり遠くなると判定できません

また、NEARとFARは難しく、反応したりしなかったりでした

ゆっくり動かすと反応しやすいです

手を動かして出力した結果は以下の画像のような感じで出力されます

f:id:filot_nextd2:20201007200817p:plain

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のイベントを追加します

f:id:filot_nextd2:20201007203048p:plain
f:id:filot_nextd2:20201007203052p:plain
f:id:filot_nextd2:20201007203055p:plain

次にスマートプラグの設定をします

スマートプラグのアプリ「Kasa Smart」を入れてアカウントを作成します

プラスアイコンから端末を追加=>スマートプラグ=>スマートプラグ「ライト」/「ミニ」を選択します

特に問題もなく簡単に設定できるので、Kasaの説明書通りに進めて設定してください

スマートプラグの設定をしたらIFTTTの設定をします

「create your own」ページの「Then That」を選択します

そこでスマートプラグの名称で検索してKasaで作成したアカウントで操作するデバイスを選択すればスマートプラグとの連携完了です

maker_webhookページのDocumentationを押下するとWebhookのURLが確認できます

f:id:filot_nextd2:20201008152233p:plain

あとはジェスチャーイベント発生時にこの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で勉強しました

 

実行結果

f:id:filot_nextd2:20201008165137g:plain

UP : 照明OFF

DOWN : 照明ON

RIGHT : スマートプラグOFF

LEFT : スマートプラグON

スマートプラグと携帯電話を繋いでいます
小さくて見えづらいですがONにすると充電中に切り替わります

青く光っているのはジェスチャーが読み取れた場合です
何かわからなかった場合は赤く光るようにしています

 

エラーなどでひっかかったところ

スケッチを書く前段階、環境を設定するまでにひっかかった内容を過去にFacebookにアップしています

ページトップに[困った問題 => 解決法]を書いてます


エラーではありませんが、スケッチでprintlnする際にFマクロを使うとSRAM使用量が少なくなることを初めて知りました

また、赤外線がカメラ越しなら光っていることがわかるということも今回初めて知りました