前書き

IR(赤外線)通信は、一般的で安価で使いやすい無線通信技術です。赤外線光は、わずかに長い波長を持っていることを除いて、可視光に非常に似ています。これは、赤外線が人間の目には検出できないことを意味し、ワイヤレス通信に最適な通信技術といえます。たとえば、テレビのリモコンのボタンを押すと、IR LEDが1秒間に38,000回オンとオフを繰り返し、テレビのIRフォトセンサーに情報(音量やチャンネルコントロールなど)を送信します。

このチュートリアルでは、最初に一般的なIR通信プロトコルの内部動作について説明します。次に、アルドゥイーノを使用してIRデータを送受信できる3つの例を紹介します。最初の例では、1838B IRフォトセンサーを使用して、一般的なリモートコントロールから着信IRデータを読み取ります。更にIRリモートをテストし、シリアルモニターに対応するボタン名を表示させます。その後IR受信機からデータを送信してLEDを制御する方法といった具合に学んでいきます。

準備

ハードウェア

ソフトウェア

IRについて

IRとは

赤外線光源は通常、上記でも触れましたが人には見ることのできない特定の光です。赤外線の波長は約950nmと、人が認識できる波長より長い値となっているためです。もし、赤外線を人が認識することができれば、日常生活において辺り一帯光だらけで生活できませんよね。ただし、赤外線だけ存在しても使うことができないので、赤外線光源を探知する媒体が必要になってきます。
そのため、IR通信には一般的に、38kHz変調と呼ばれる変調方式により、赤外線光源を探知します。38kHzの信号を規則的に持つものは自然界にはほとんどないため、その周波数でデータを送信するIRトランスミッターは最適な方式となります。もちろん他の周波数も使用できます。
こういった特性があるから赤外線が選ばれている理由の一つです。また赤外線LEDは簡単で安価なことも一つ理由です。
赤外線を利用すると例えば、リモコンのキーを押すと、IR LEDがほんの数秒間非常に速く点滅し、コードをTVやエアコンに送信します。

もし赤外線の動作を確認したい場合は、オシロスコープ を使うと確認することができます。
ただし送受信に関しての結果は同じなので、どちら側で調べても構わないです。ちなみに変調された信号は、受信デバイスのポイントは、信号を復調し、マイクロコントローラーが読み取れるバイナリ波形を出力するので、VS1838BのOUTピンを読み取ると、上記2番目にあるような波長が見て取れます。

変調

熱を放射する全ての物は赤外光を放射します。したがって、赤外線が問題なく受信機に届くようにするには、いくつかの予防措置を講じる必要があります。搬送波周波数で信号を変調させる場合は、信号をノイズよりも際立たせる必要があります。変調は、特定の周波数で赤外線光源を点滅させます。赤外線受信機はその周波数に調整するため、たの赤外線光源は無効になります。

下の図では、左側のトランスミッターの赤外線 LEDを作動させる変調信号の動作を確認見ることができます。検出された信号は、反対側の受信機から出力されています。

                                                                    (gifおよび赤外線ソースは SBProjects.com から提供を受けております。)

VS1838B 赤外線受信機の技術詳細

VS1838B 赤外線受信機のピン配列:

赤外線コントロールについて

 

 

赤外線リモコンは、デバイスをワイヤレスで制御する最も安価な方法です。リモコンは、小さくて非常に単純な構造かつ安価な設計になっています。赤外線リモコンは世の中に非常に多く存在しますが、これらはすべて異なるエンコー

 

 

ド方法と物理ボタン、およびボタンが押されたときに受信する異なるコードで基本的には開発されています。

赤外線リモートライブラリ:

注:使用するには、アルドゥイーノインストールに次のライブラリをインストールする必要があります!

https://osoyoo.com/wp-content/uploads/samplecode/IRremote.zip

注意:ライブラリIRRobotRemoteを備えたアルドゥイーノの最新バージョンを使用している場合、競合する可能性があるので、ライブラリを一旦削除する必要があります。アルドゥイーノ(root)/ libraries / RobotIRremoteを必ず削除してください。アルドゥイーノ(root)はアルドゥイーノのインストールディレクトリを指します。ライブラリRobotIRremoteにはIRremoteと同様の定義があり、エラーが発生します。

赤外線リモートからコードを読み取る

このレッスンでは、VS1838B 赤外線受信機とアルドゥイーノを使用して、赤外線リモートからコードを読み取る方法を見ていきます。赤外線リモートのボタンを押すと、受信機とアルドゥイーノが汎用の短距離通信インターフェイスになります。

まず赤外線リモートライブラリ がインストールされていることを確認します。アルドゥイーノライブラリのインストール方法については、 こちらをご覧ください。

接続

以下のように回路を構築します。

コードプログラム

上記の操作が完了したら、USBケーブルを使用してアルドゥイーノボードとコンピューターを接続します。緑の電源LED(PWRのラベル)が点灯します。アルドゥイーノIDEを開き、プロジェクトに対応するボードとポートタイプを選択し、アルドゥイーノボードに スケッチ をロードします。

#include <IRremote.h>  // IRRemote.hの関数を使用する
const int irReceiverPin = 2;  ///受信モジュールのSIGはpin2
IRrecv irrecv(irReceiverPin); //IRrecvタイプの変数を作成します
decode_results results;    // 結果

void setup()
{
  Serial.begin(9600);    //シリアルを初期化し、ボーレートは9600に設定する
  irrecv.enableIRIn();   // 赤外線受信機モジュールを有効にする
}

void loop() 
{
  if (irrecv.decode(&results)) //赤外線受信機モジュールの受信データ
  {  
    Serial.print("irCode: ");    //irCode:"の値を送信する 
    Serial.print(results.value, HEX); //シリアルに値を出力する
    Serial.print(",  bits: ");  //bitsを送信する         
    Serial.println(results.bits); //bitsを結果に出力する
    irrecv.resume();    // 次の値を受取る
  }  
  delay(600); //600ミリ秒待機
}

特定のボタンを押すことで、ソース設定に併せてモーターやLEDをオンまたはオフにします。

各ボタンを押した結果は、value()メソッドを呼び出すことで確認できます。

results.value

シリアルモニターに値を出力します。

Serial.println(results.value, HEX); //ボタンを押したときの16進値を出力します

実行結果

スケッチは、使用しているリモコンのタイプを自動的にデコードし、リモコンのどのボタンが押されているかを識別します。シリアルモニターを開き9600bpsに設定し、リモートボタンを押します。

リモコンボタンを適当に押すと下記動画のように表示されます。異なるボタンには異なるコードが表示されます。

赤外線リモートに関する、その他のコードは、 https://osoyoo.com/ja/?p=9211 をクリックしてください。