Nintendo Switch Labo で 家電コントロール
最近SwitchのNintendo Laboを手に入れまして家族で楽しんでいます。
SWITCHコントローラの機能を巧みに駆使してダンボールで釣り竿やバイクのハンドルを実現しちゃうんです。任天堂すごすぎる。マジで!
ラボの釣りコントローラのゲームは、長男くんが生まれて初めてまともに楽しんでできたゲームとなりました。大物をたくさん釣って喜んでます 😀
更に驚くのがコントローラのボタンや振動、IRカメラをつかって自分で色々作れちゃうのです。
早速作ってみたのが以下の簡易ピアノ。コントローラのIR(赤外線)カメラで指の位置を検出して音を鳴らしてます。あとは紙にガイド書いただけw
ここまでできるとSWITCH以外の外部デバイス動かしたくなっちゃいますよねぇ。。。
ということで前置きが長くなりましたが、ここではSWITCHコントローラの赤外線をインターフェースとして外部マイコンと通信してTVを制御してみました。
目次
全体構成
SWITCH本体のボタンを押すとコントローラのIRカメラから赤外線出力するように設定。コントローラからの赤外線をマイコンで受けて対応するTVリモコン用赤外線信号をだしてTVを制御します。
テレビリモコン赤外線信号解析
まずはマイコンから出力するための自宅のテレビリモコンの赤外線信号の解析を行います。
構成
部品
Arduinoコード
Arduinoの赤外線を扱う以下のライブラリをインストールします。
https://github.com/z3t0/Arduino-IRremote
インストールしたIRremoteライブラリのexampleコードを使用します。
Arduinoメニュー[ファイル]→[スケッチ例]→[IRremote]→IRrecvDumpV2.ino
解析
上記コードを実行しリモコン受信モジュールに向けてテレビリモコンのボタンを押します。
うまく赤外線が受信できるとシリアルモニタに信号解析結果が表示されます。
我が家のテレビリモコンの通信フォーマットはNECフォーマットでした。リモコンの電源、Ch1、Ch2ボタンを解析してCodeをメモしておきます(上図は電源ボタンの1C6F00F)。
SWITCH IR送信設定
Toy-ConガレージでSWITCH画面をタッチするとコントローラのIRカメラから赤外線を出力するようにします。
タッチボタンは三つ用意。
Powerボタン:タッチすると1回IR出力
Ch1ボタン:タッチすると2回IR出力 (IR出力間隔は0.5sec)
Ch2ボタン:タッチすると3回IR出力(IR出力間隔は0.5sec)
SWITCH IR信号受信、TVリモコン信号送信
構成
SWITCHコントローラからのIR出力受信用フォトリフレクタQTR-1AとTVへのリモコン信号送信用赤外線LEDをArduinoに接続します。
部品
-
マイコン Arduino UNO
-
SIR-34ST3F赤外線LED
- フォトリフレクタ QTR-1A
Arduinoコード
TVリモコン解析時に使用したIRremoteライブラリと以下のフォトリフレクタQTR-1A用ライブラリを使用します。
https://github.com/pololu/qtr-sensors-arduino
それぞれのスケッチ例
IRsendDemo.ino
QTRARawValuesExample.ino
を参考にプログラムしています。
フォトリフレクタが赤外線を感知して1.6秒間の間のIR検知数をカウント。カウンタ数に応じてTVリモコン信号を赤外線LEDから出力します。
IR 1回検出:TV電源信号出力
IR 2回検出: Ch1電源信号出力
IR 3回検出: Ch2電源信号出力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#include <QTRSensors.h> #include <IRremote.h> IRsend irsend; #define NUM_SENSORS 1 // number of sensors used #define NUM_SAMPLES_PER_SENSOR 1 // average samples per sensor reading #define EMITTER_PIN QTR_NO_EMITTER_PIN // 単体ではエミッタピン無し QTRSensorsAnalog qtra((unsigned char[]) {0}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned int sensorValues[NUM_SENSORS]; int IRstate = 0; int count = 0; unsigned long timeIR = 0; void setup() { Serial.begin(9600); } void loop() { //フォトリフレクタ値取得 qtra.read(sensorValues); Serial.println(sensorValues[0]); //IR出力カウント if(IRstate == 0 && sensorValues[0] < 30){ if(count == 0){ timeIR = millis(); } IRstate = 1; }else if(IRstate == 1 && sensorValues[0] > 50){ IRstate = 0; count++; } Serial.println(count); if(millis() - timeIR > 1600){ //赤外線送信 switch (count) { case 1: //Power irsend.sendNEC(0x001C6F00F, 32); break; case 2: //Ch1 irsend.sendNEC(0x001C600FF, 32); break; case 3: //Ch2 irsend.sendNEC(0x001C6807F, 32); break; } count = 0; timeIR = 0; } } |
動作
SWITCHコントローラのIRカメラをフォトリフレクタに向け、TVの近くに置きます。
コントローラのIRカメラ出力を使ってNintendo Laboで外部デバイス操作が可能であることを確認できましたー。
これは可能性広がりますね。高機能な部品が手に入った感じです!
さてどう応用しようか 🙄 ?