Help us understand the problem. What is going on with this article?

赤外線リモコンデコーダ

More than 1 year has passed since last update.

赤外線リモコンデコーダ

by katsumin
1 / 8

はじめに

  • M5Stack用PLUSエンコーダ(2019年の正月休みのオモチャとして購入)には赤外線LEDが搭載されています。
  • そこで、M5Stackを使った汎用リモコンを作ってみようと思い立ちました。(だいぶ枯れた題材だと思いますが)
  • まずは、ウチに転がっている各リモコンがどんな信号を出しているかを調べようと作成したのが、今回の「赤外線リモコンデコーダ」です。

仕様

  • 赤外線リモコンの通信フォーマットで解説されている、NECフォーマット/AEHAフォーマット/SONYフォーマットの3種に対応する。
    • ウチにあるリモコンのうち、ひとつだけがこれらのフォーマットに合致しなかったんですが、使用していないエアコン用のリモコンなのでスルーしました。
  • 表示内容(下記情報を受信ごとにスクロール表示)
    • 受信した赤外線パターン(8bit単位で表示)
    • フォーマットタイプ(NEC/AEHA/SONY)
    • カスタマーコード(SONYフォーマットではアドレス)
    • データ
  • 受信時の状況はこんな感じ IMG_0286.jpeg

受信信号の解析について

  1. 赤外線の変調単位Tの算出
    • 受信信号を平均して算出することにする。
      • いくつかのリモコンを読み込ませて実測したところ、規定値とのずれがそれなりにあった。(サンプルタイミングを調整すれば定数(例えば、NECフォーマットでは約560μs)比較でもよいのかもと思ったんですが、面倒だったので。)
    • 信号の特徴から、発光部分か無発光部分のどちらかはパルス幅が一定になる(はず)。
      • ので、特異値(極端に長い幅)を含まない方の平均値を変調単位Tとして採用する。
      • 例えば、NECフォーマットでは無発光部分の幅がbit値によって変化する。(発光部分のパルス幅の平均値をTとする)
  2. フォーマットタイプの判定
    • 受信信号の先頭データ(Leader)の発光部分のパルス幅で判定する。
      • 変調単位Tの10倍(規定では16倍)以上なら、AEHAフォーマット
      • 変調単位Tの6倍(規定では8倍)以上なら、NECフォーマット
      • 変調単位Tの2倍(規定では4倍)以上なら、SONYフォーマット
      • 上記以外は、フォーマット不明としてエラー扱い
  3. bit値(1/0)の判定
    • NEC/AEHAフォーマットの場合、無発光部分のパルス幅がTの1.5倍より大きい(1)かどうかで判定。
    • SONYフォーマットの場合、発光部分のパルス幅がTの1.5倍より大きい(1)かどうか判定。
  4. カスタマーコード(16bit)のL/H判定
    • 明確に定義された資料を見つけられなかったので、L→Hの順に16bitコードが転送されていると解釈することにした。
      • 解説記事によると、bitパターンはLSBファーストで転送される。
      • 素直に考えれば、リトルエンディアン(L→Hの順)となるのでは。
  5. パリティチェック
    • AEHA
      • 先頭2byteと続く1byteの下位4bitをnibble単位(計5nibble)でxorし、0になればOK
    • NEC
      • 3byte目と4byte目のxorがFFになればOK
    • SONY
      • なし

解析例

  • 作成したデコーダでの解析結果(抜粋)

    機器メーカ フォーマットタイプ カスタマーコード/アドレス ボタン データ 機器 備考
    日立 AEHA 1001 運転/停止 0048B701FE 空気清浄機 データの後半4byteは2byteごとに反転
    日立 AEHA 1001 モード 0048B704FB 空気清浄機
    日立 AEHA 1001 風量 0048B702FD 空気清浄機
    パナソニック AEHA 522C 全灯 002C25 天井灯
    パナソニック AEHA 522C 消灯 002F26 天井灯
    パナソニック AEHA 522C 省エネ 002D24 天井灯
    ビームテック NEC E384 全灯 20 天井灯
    ビームテック NEC E384 消灯 24 天井灯
    ビームテック NEC E384 お好み 2A 天井灯
    東芝 NEC BF40 電源 12 テレビ
    東芝 NEC BF40 入力切替 0F テレビ
    東芝 NEC BF40 01 テレビ
    SONY SONY 093A PLAY 32 プレステ2 DVD操作用(093A)とコントローラ用(1B5A)でアドレスが違う
    SONY SONY 093A STOP 38 プレステ2
    SONY SONY 1B5A × 32 プレステ2

課題

  • リモコンの中にはLeaderを持たないものがあるらしいが、対応できていない。
  • 発光部分と無発光部分の両方の幅が変化するタイプのリモコンには、対応できない。

実装コード

  • GitHubで公開しています。

リモコン送信実験

  • 試しに、東芝製テレビの電源ボタン相当のコードだけ送信するプログラムを書いて、動かしてみました。
  • 結果は、テレビの受光部から20cmほどまで近づけないと反応しませんでした。
  • PLUSエンコーダ上の赤外線LEDは、ちょっとパワーが弱いようです。
    • 電流制限抵抗に470Ωが使われているようなので、小さくしてどうなるか試してみようと思っています。
    • まず、順方向電流(IF)を実測してみました。
      • 測定箇所は、赤外線LEDの+側になります。
      • 変調周波数は約38kHzで、無発光時の電圧が3.52V、発光時の電圧が1.36Vとなっていることがわかります。
      • 発光時に流れる電流は、2.16/470=4.6mAとなります。(かなり絞っている印象) SDS00032.jpg
    • 抵抗を変えてみました。
      • 100Ω(約22mA)にしたら、テレビまで1.3m離れたところで反応するようになりました。
      • 22Ω(約87mA)にしたら、テレビまで1.9m離れたところで反応するようになりました。
        • 発光時の電圧は1.6Vになりました。(1.92/22=87mA)
        • 一般的な赤外線リモコンだと、もう少し離れても反応しますが、床に座った状態で天井灯をON/OFFするくらいにはなったので、これでよしとしました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away