WeMosを使ってみる

赤外線リモコン送受信


比較的使う機会が多い赤外線リモコンの送受信を試してみました。
赤外線の送受信には、こちらの ライブラリ を使いました。
なお、このライブラリ、ものすごい勢いで更新されています。

まず、受信の確認ですが、結線は以下の通りで、使用した赤外線受信機は3.3V駆動が可能なTL1838です。
ノイズ対策として簡単なRCフィルターを付けていますが、結構効果が有ります。



WeMosのスケッチはライブラリのサンプルスケッチ(IRrecvDump)のままです。
なお、注意点としてリモコン入力に使えるのはGPIO_0 GPIO_2 GPIO_4 GPIO_5 GPIO12 GPIO_13 GPIO_14だけです。
GPIO_15 GPIO_16はなぜか使えません。

以下はテレビリモコンの電源ボタンを押した結果です。
それらしい値(210704FB)が読めています。
FFFFFFFFはNECフォーマットのリピートコードです。




注意点としてNECフォーマットの場合、メーカコード(先頭の1バイト)が0x00の場合
NECフォーマット(32Bit)にもかかわらず、6文字(24Bit)しか表示されません。

正解は「0x00FFxxxx」ですが、ArduinoのSerial.print()で16進表示したとき、先頭の00は表示することができま せん。
Serial.printf()を使えば"%08x"の書式で先頭の00を表示することができます。

  serialPrintUint64(results->value, 16); // 先頭の0は表示されない

  Serial.printf(" %08X\n",results->value); // 先頭の0が表示される

NECフォーマットには以下の規則があるので、正解のコードは簡単に求めることができます。
2文字目は1文字目の反転コード
4文字目は3文字目の反転コード
安価なリモコンはメーカコード(先頭の1バイト)が0x00の物が多いです。





受信したリモコンコードが正しいかどうか確認するために、リモコン送信をしてみました。
結線は以下の通りで、1.35V 100mAの赤外線LEDを使いました。

WeMosのスケッチは以下の通りです。
私の持っているテレビのリモコンは1つのボタンでON/OFFのトグル動作をする仕様です。
/*
 * IRremoteESP8266: IRsendDemo - demonstrates sending IR codes with IRsend
 * An IR LED must be connected to ESP8266 pin 0.
 * Version 0.1 June, 2015
 * Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009, Copyright 2009 Ken Shirriff, http://arcfn.com
 */

#include <IRremoteESP8266.h>
#include <IRsend.h>

int SEND_PIN = 16;

IRsend irsend(SEND_PIN); //an IR led is connected to GPIO pin 0

void setup()
{
  irsend.begin();
  Serial.begin(9600);
}

void loop() {
  Serial.println("ON");
  irsend.sendNEC(0x210704FB, 36);
  delay(5000);
  Serial.println("OFF");
  irsend.sendNEC(0x210704FB, 36);
  delay(5000);
}

このスケッチでテレビがON/OFFすることを確認しました。



赤外線受信モジュールですが、今までTL1838を 使っていました。
RaspberryPiではよく使うモジュールで、特に不満が無かったのですが、ESP8266ではあまり受信品質が良くありません。
近距離の正面からでないと受信データを正しく認識できないことが多いです。

TL1838(VS1838も同じ)のデータシート上のスペックは
Receiving distance 15M
Acceptance angle ±35Deg
となっていますが、データシートを見る限り、VISHAY製品(TSOPXXX38)の方が受信可能距離も受光可能角度も大きいので、
最近はTSOP38238を使っています。

実際に試してみましたが、TL1838の受講可能角度は45度ぐらいですが、TSOP38238は近距離(2M程度)であれば、
ほぼ真横からでもリモコンを認識します。



TSOP38238はたまたま手元に有ったモジュールですが、これを機会にVISHAY製品のスペックを調べてみました。
VISHAY製品の製品リストはこ ちらにありますが、赤外線受信モジュールの種類が豊富でどれを選べばいいのか迷います。
VISHAY製品の型番は以下のルールに基づいています。
・数字4桁の旧製品
TSOPXXZZ(XX:モデル/ZZ:対応周波数)
・数字4桁の製品
TSOPXYZZ(X:モデル/Y:AGC-TYPE/ZZ:対応周波数)
・数字5桁の製品
TSOPXXYZZ(XX:モデル/Y:AGC-TYPE/ZZ:対応周波数)
AGC-TYPEは1=AGC1,2=AGC2,3=AGC3,4=AGC4,5=AGC5,6=AGC6,S=AGC8ですが、1部の機種 (48ZZや348ZZ)では8もAGC2となります。

安価に入手できる38Khz(NECフォーマットに対応)の製品としてTSOP1738/1838/4838/31238/34438 /34838 /38238(型番が似ていて紛らわし い)などがありますが、
1738/1838は現在の製品リストにはない古い5V仕様のモデルです。
1738/1838のデータシートには、AGCに関する明記がありません。おそらくAGCの規格が制定される前の製品と思われます。

これらの製品の主なスペックを一覧にしてみました。
1738/1838はやはり古いモデルだけあってMinimum irradiance(最小放射照度/検出閾値)が大きい(弱い信号は検出できない)です。
また、数字4桁の製品は、Supply Currentが大きく、電池駆動には向かないです。
Model Product AGC
Type
Transmission
distance
Minimum
irradiance
Directivity
(Viewing Angle)
Supply
Voltage
Supply
Current
PinOut Width/Height
TSOP17 TSOP1738
35M 0.35mW ±45Deg 4.5〜5.5 0.6mA GND/VS/OUT 10/12.5
TSOP18 TSOP1838
35M 0.30mW ±45Deg 4.5〜5.5 1.2mA OUT/GND/VS 6/6.95
TSOP2 TSOP2138 AGC1 24M 0.12mW ±45Deg 2.5〜5.5 0.7mA OUT/VS/GND 6/6.95
TSOP2238 AGC2 24M 0.12mW ±45Deg 2.5〜5.5 0.7mA OUT/VS/GND 6/6.95
TSOP2438 AGC4 24M 0.12mW ±45Deg 2.5〜5.5 0.7mA OUT/VS/GND 6/6.95
TSOP4 TSOP4138 AGC1 24M 0.12mW ±45Deg 2.5〜5.5 0.7mA OUT/GND/VS 6/6.95
TSOP4838 AGC2 24M 0.12mW ±45Deg 2.5〜5.5 0.7mA OUT/GND/VS 6/6.95
TSOP4438 AGC4 24M 0.12mW ±45Deg 2.5〜5.5 0.7mA OUT/GND/VS 6/6.95
TSOP31 TSOP31138 AGC1 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA GND/VS/OUT 10/12.5
TSOP31238 AGC2 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA GND/VS/OUT 10/12.5
TSOP31338 AGC3 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA GND/VS/OUT 10/12.5
TSOP31438 AGC4 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA GND/VS/OUT 10/12.5
TSOP31538 AGC5 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA GND/VS/OUT 10/12.5
TSOP32 TSOP32138 AGC1 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/VS/GND 6/6.95
TSOP32838 AGC2 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/VS/GND 6/6.95
TSOP32338 AGC3 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/VS/GND 6/6.95
TSOP32438 AGC4 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/VS/GND 6/6.95
TSOP32538 AGC5 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/VS/GND 6/6.95
TSOP34 TSOP34138 AGC1 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 6/6.95
TSOP34838 AGC2 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 6/6.95
TSOP34338 AGC3 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 6/6.95
TSOP34438 AGC4 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 6/6.95
TSOP34538 AGC5 30M 0.08mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 6/6.95
TSOP38 TSOP38138 AGC1 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 5/6.95
TSOP38238 AGC2 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 5/6.95
TSOP38338 AGC3 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 5/6.95
TSOP38438 AGC4 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 5/6.95
TSOP38538 AGC5 24M 0.12mW ±45Deg 2.5〜5.5 0.35mA OUT/GND/VS 5/6.95

見てわかるようにモデルが同じものはAGC以外のスペックは同じです。
TSOP2とTSOP4、およびTSPO32とTSOP34は同じスペックでピン配置が違うだけです。

赤外線受信モジュールのピンは、向かって左から1 = OUT, 2 = GND, 3 = VSが一般的(これしかないと思っていました)ですが、
VISHAY製品には以下の3種類がある(もっとあるかもしれない)ので注意が必要です。
1 = OUT, 2 = GND, 3 = VS
1 = OUT, 2 = VS, 3 = GND (TSOP2シリーズ、TSOP32シリーズなど)
1 = GND, 2 = VS, 3 = OUT(TSOP31シリーズなど)

ほとんどの製品のピンピッチは2.54mmですが、TSOP31シリーズのVS-OUT間は5.08mmのピッチで、ブレッドボードでは4ピン分 の間隔が必要 になります。



家庭内で使う場合、受信可能距離は20Mあれば十分です。
そこで、AGC2とAGC4で何が違うのか調べてみました。
こちらによる と、以下のように記載されています。

AGC(Automatic Gain Control)とはノイズを制御する回路のことです。
AGC1は、低ノイズ環境でのコーディングスキームとの互換性および最大4 kbit / secのデータ伝送のために開発されました。
AGC2は、ノイズの多い環境で信頼できる機能を備えた典型的なリモートコントロールコーディングスキーム用に開発されました。
AGC3は、高速コーディングスキームと優れたノイズ抑制を備えた動作を実現し、AGC4は、調光LCDバックライトとプラズマディスプレイを含 む最高のノイズ抑制を実現しま す。


また、TSOP322XX, TSOP324XX, TSOP344XX, TSOP348XXのデータシートには以下のように記載されています。

TSOP324XX、TSOP344XXシリーズのデバイスは、CFLなどの省エネランプからのほぼすべてのスプリアスパルスを抑制するように最 適化されています。
TSOP324XX、TSOP344XXで使用されるAGC4は、一部のデータ信号を抑制する場合があります。
TSOP322XX、TSOP348XXシリーズは、主に古いAGC2デザインとの互換性のために提供されています。
新しいデザインは、新しいAGC4を含むTSOP324XX、TSOP344XXシリーズを好むはずです。
これらのコンポーネントは、自動車の仕様に従って認定されていません。

さらに、こちらに TSDPシリーズ の詳細資料が公開されています。
光ノイズ(OPTICAL NOISE)の部分を翻訳すると以下のようになりました。

赤外光は可視光の生成の副産物であるため、コンパクト蛍光灯(CFL)や調光LCDパネルのバックライトなどの多くのランプは、赤外スペクトルの ノイズを放出します。
それらが生成するノイズの周波数成分はTSDPレシーバーの通過帯域に近いため、これら2つのノイズ源に言及します。
受信機は変調信号を受信するように設計されているため、変調ノイズは一定(DC)ノイズよりも悪化します。
変調されたノイズを受信しないようにするには、有効な信号を通過させながらノイズを除去するため、有効なデータ信号と区別する必要があります。
これは、特別に設計された自動ゲイン制御(AGC)回路を使用して行われます。
TSDPシリーズには、AGC1とAGC3の2つの異なるAGCタイプが含まれています。
これらのAGCタイプは両方とも、6サイクル以上の短いバーストを受け入れることができます。
AGC1がノイズを区別するために使用する基準は、最悪の場合のデータパターン(2つの特定のデータパターンが最悪の場合として後で定義される) をより良く渡すために、 かなり緩やかに設定されます。
AGC1は、CFLやLCDパネルからのノイズのない比較的「きれいな」伝送媒体があることが事前にわかっている場合に使用でき、レシーバの出力 にスプリアスパルスを生成する可能性が高くなります。
通常、「クリーン」とは、そのような照明のない閉鎖環境または屋外での操作を意味します。
AGC3はより厳しい基準を適用し、ほとんどのタイプのCFLおよびLCDパネルからのノイズを抑制します。
このようなランプは、一般的な家庭、オフィス、または工場の設定で一般的です。
このようなノイズを効果的に抑制することの副作用は、特定のデータパターンが連続して送信されると、意図せずに抑制されることです。
したがって、データでAGCをトリガーすることなく、ノイズ抑制AGC3プロパティを利用する戦略を検討します。

AGC1よりもAGC4の方が単純に優れているというわけはなく、クリーンな環境であれば高速にデータ転送できるAGC1、
ノイズの多い環境あればノイズに強いAGC4を選ぶようです。
ノイズに強いということは、逆に言えば微弱な信号はカットしてしまう(一部のデータ信号を抑制したり、
特定のデータパターンが連続して送信される と、意図せずに抑制される)デメリットもあるということになります。

これらの資料から一般家庭の屋内(蛍光灯の元)で使う場合、高速データ転送は不要でノイズに強いAGC4の方が適していそうですが、
AGC2と比べるとAGC4の製品は少し値段が高く、入手性も悪いです。
AGC4の製品の中ではTSOP4438が比較的安く、簡単に入手することができます。



手持ちの赤外線受信モジュールです。
並べるとサイズや形状の違いが良く分かります。
左から
TSOP31238
TSOP4438
TSOP34838
TSOP38238
ノーブランド(TSOPXXXXとして売られていた)
ノーブランド(TSOPXXXXとして売られていた)
LFN-VS838

ノーブランドの製品もTSOPXXXXとして売られていたものです。
写真では良く分かりませんがVISHAY製品にはTOP部分に型番のマーキングが有り、簡単に区別することができます。
ノーブランドの製品はTOP部分に何もマーキングが有りません。


続く...