WioTerminalで赤外線リモコン

作製例

ソニー製テレビの操作ができます

  • 他社のテレビは所有していないので確認していません。

メリット

  • WioTerminal には、赤外線送信パーツが組み込まれているので、別にパーツを用意したり、配線したりする必要がありません。

参考

参考にしたサイト

ピンなど

  • WIO_LIGHT は内蔵光センサーのピンです。光センサーは A13 に接続されています。

準備

Wio Terminal 用赤外線ライブラリのインストール

  • Seeed_Arduino_IR リポジトリにアクセスする。
    https://github.com/Seeed-Studio/Seeed_Arduino_IR
  • をクリックします。
  • Download ZIPをクリックします。
  • ZIPファイルを適当なところに保存してください。
  • Arduino IDEで作業を続けます。
  • スケッチ > ライブラリをインクルード > ZIP形式のライブラリをインストール を選択します。
  • 先ほど保存したZIPファイルを選択します。
  • ライブラリがインストールされました。

光センサーの使い方(受光部)

信号の確認と測定

使用回路

  • 赤外線リモコン受信モジュール(OSRB38C9AA)を使用して下記のように回路を組んで、波形を見てみました。
    https://akizukidenshi.com/catalog/g/g104659/
  • 波形を見てみたいために測定しましたが、測定しなくても作製できます。
  • 結果の波形は、時間軸(横軸)が異なることにご注意ください。
  • いずれも、リモコンの電源ボタンを押したときの波形です。

結果1:ソニー テレビ

結果2:ダイキン エアコン

結果3:パナソニック LED照明

結果4:山善 扇風機

スケッチ

リモコンコード(抜粋)

  • 赤外線リモコンの送信データ
    https://github.com/probonopd/irdb
  • 使いそうなものを抜粋して表にまとめました。
  • この表のCODEをスケッチで使用します。
functionname function 00001&2進数 反転 CODE
CHANNEL UP 16 000010010000 000010010000 090
CHANNEL DOWN 17 000010010001 100010010000 890
VOLUME UP 18 000010010010 010010010000 490
VOLUME DOWN 19 000010010011 110010010000 C90
MUTE 20 000010010100 001010010000 290
POWER ON/OFF 21 000010010101 101010010000 A90
INPUT SCROLL 37 000010100101 101001010000 A50
POWER ON 46 000010101110 011101010000 750
POWER OFF 47 000010101111 111101010000 F50
INPUT VIDEO 1 64 000011000000 000000110000 030
INPUT VIDEO 2 65 000011000001 100000110000 830
INPUT VIDEO 3 66 000011000010 010000110000 430

リモコンスケッチの例

  • ファイル > スケッチ例 > Seeed Arduino IR > send を参考にしました。
  • ボタン操作を加えました。
  • ブザー鳴らすようにしました。
  • 液晶画面に何か表示するようにするともっと良いと思います。
/* send.ino Example sketch for IRLib2
 *  Illustrates how to send a code.
 */
#include <IRLibSendBase.h>  // First include the send base
//Now include only the protocols you wish to actually use.
//The lowest numbered protocol should be first but remainder
//can be any order.
#include <IRLib_P01_NEC.h>
#include <IRLib_P02_Sony.h>
#include <IRLibCombo.h>  // After all protocols, include this
// All of the above automatically creates a universal sending
// class called "IRsend" containing only the protocols you want.
// Now declare an instance of that sender.

IRsend mySender;

void setup() {
  pinMode(WIO_KEY_A, INPUT_PULLUP);
  pinMode(WIO_KEY_B, INPUT_PULLUP);
  pinMode(WIO_KEY_C, INPUT_PULLUP);

  pinMode(WIO_5S_UP, INPUT_PULLUP);
  pinMode(WIO_5S_DOWN, INPUT_PULLUP);
  pinMode(WIO_5S_LEFT, INPUT_PULLUP);
  pinMode(WIO_5S_RIGHT, INPUT_PULLUP);
  pinMode(WIO_5S_PRESS, INPUT_PULLUP);

  pinMode(WIO_BUZZER, OUTPUT);
}

void loop() {
  if (digitalRead(WIO_KEY_A) == LOW) {
    mySender.send(SONY, 0x750, 12);  // Power ON
    playBUZZER();
  } else if (digitalRead(WIO_KEY_B) == LOW) {
    mySender.send(SONY, 0xF50, 12);  // Power OFF
    playBUZZER();
  } else if (digitalRead(WIO_KEY_C) == LOW) {
    mySender.send(SONY, 0xA50, 12);  // 入力切替
    playBUZZER();
  }

  if (digitalRead(WIO_5S_UP) == LOW) {
    mySender.send(SONY, 0x490, 12);  // Volume Up
    playBUZZER();
  } else if (digitalRead(WIO_5S_DOWN) == LOW) {
    mySender.send(SONY, 0xC90, 12);  // volume Down
    playBUZZER();
  } else if (digitalRead(WIO_5S_LEFT) == LOW) {
    mySender.send(SONY, 0x890, 12);  // channel Down
    playBUZZER();
  } else if (digitalRead(WIO_5S_RIGHT) == LOW) {
    mySender.send(SONY, 0x090, 12);  // channel Up
    playBUZZER();
  } else if (digitalRead(WIO_5S_PRESS) == LOW) {
    mySender.send(SONY, 0x290, 12);  // Mute
    playBUZZER();
  }
}

void playBUZZER() {
  analogWrite(WIO_BUZZER, 128);
  delay(100);
  analogWrite(WIO_BUZZER, 0);
  delay(100);
}