IR(赤外線)通信は、一般的で安価で使いやすい無線通信技術です。赤外線光は、わずかに長い波長を持っていることを除いて、可視光に非常に似ています。これは、赤外線が人間の目には検出できないことを意味し、ワイヤレス通信に最適な通信技術といえます。たとえば、テレビのリモコンのボタンを押すと、IR LEDが1秒間に38,000回オンとオフを繰り返し、テレビのIRフォトセンサーに情報(音量やチャンネルコントロールなど)を送信します。
このチュートリアルでは、最初に一般的なIR通信プロトコルの内部動作について説明します。次に、アルドゥイーノを使用してIRデータを送受信できる3つの例を紹介します。最初の例では、1838B IRフォトセンサーを使用して、一般的なリモートコントロールから着信IRデータを読み取ります。更にIRリモートをテストし、シリアルモニターに対応するボタン名を表示させます。その後IR受信機からデータを送信してLEDを制御する方法といった具合に学んでいきます。
赤外線光源は通常、上記でも触れましたが人には見ることのできない特定の光です。赤外線の波長は約950nmと、人が認識できる波長より長い値となっているためです。もし、赤外線を人が認識することができれば、日常生活において辺り一帯光だらけで生活できませんよね。ただし、赤外線だけ存在しても使うことができないので、赤外線光源を探知する媒体が必要になってきます。
そのため、IR通信には一般的に、38kHz変調と呼ばれる変調方式により、赤外線光源を探知します。38kHzの信号を規則的に持つものは自然界にはほとんどないため、その周波数でデータを送信するIRトランスミッターは最適な方式となります。もちろん他の周波数も使用できます。
こういった特性があるから赤外線が選ばれている理由の一つです。また赤外線LEDは簡単で安価なことも一つ理由です。
赤外線を利用すると例えば、リモコンのキーを押すと、IR LEDがほんの数秒間非常に速く点滅し、コードをTVやエアコンに送信します。
もし赤外線の動作を確認したい場合は、オシロスコープ を使うと確認することができます。
ただし送受信に関しての結果は同じなので、どちら側で調べても構わないです。ちなみに変調された信号は、受信デバイスのポイントは、信号を復調し、マイクロコントローラーが読み取れるバイナリ波形を出力するので、VS1838BのOUTピンを読み取ると、上記2番目にあるような波長が見て取れます。
熱を放射する全ての物は赤外光を放射します。したがって、赤外線が問題なく受信機に届くようにするには、いくつかの予防措置を講じる必要があります。搬送波周波数で信号を変調させる場合は、信号をノイズよりも際立たせる必要があります。変調は、特定の周波数で赤外線光源を点滅させます。赤外線受信機はその周波数に調整するため、たの赤外線光源は無効になります。
下の図では、左側のトランスミッターの赤外線 LEDを作動させる変調信号の動作を確認見ることができます。検出された信号は、反対側の受信機から出力されています。
(gifおよび赤外線ソースは SBProjects.com から提供を受けております。)
赤外線リモコンは、デバイスをワイヤレスで制御する最も安価な方法です。リモコンは、小さくて非常に単純な構造かつ安価な設計になっています。赤外線リモコンは世の中に非常に多く存在しますが、これらはすべて異なるエンコー
ド方法と物理ボタン、およびボタンが押されたときに受信する異なるコードで基本的には開発されています。
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 をクリックしてください。
DownLoad Url osoyoo.com