Arduinoで赤外線センサーを使用する

赤外線(別名IR)センサーとは何ですか?

IRセンサーは、規格で定義された特定の周波数範囲のIR信号をスキャンし、出力ピン(通常は信号ピンと呼ばれます)で電気信号に変換する電子機器です。 IR信号は主に、すでにテレビのリモコンやその他の同様の電子機器で操作したような短距離(通常は数メートル)で空中にコマンドを送信するために使用されます。

IR通信プロトコル

各信号は特定のコードを表します。 電気信号は、送信者が送信した実際のデータ/コードに変換して戻すことができます。 テレビのリモコンのボタンを押すと、ボタンコード(オン/オフ、音量アップなど)に対応する信号が生成され、受信機(この場合はテレビ)に送信されます。 送信者と受信者の両方が一連のコードについて合意したため、受信者は各コードに基づいて何をすべきかを知ることができます。 信号が異なる規格で定義されているコードを変調(モデル化)する方法と、各センサーメーカーは通常、異なるデバイスで使用できるように、それらと互換性のある製品を製造しようとします。 最もよく知られている標準プロトコルの1つはNECのものです。 ウィキペディアのIRプロトコルの簡単な履歴は、Consumer IR titleで見つけることができます。

ステップ1:IRセンサーはどのように見えますか?

IRセンサーはさまざまなパッケージで利用できます。 ここでは、IRレシーバーの典型的なパッケージングを見ることができます。

ステップ2:IRセンサーブレイクアウトボード/モジュール

また、eBay、AliexpressまたはAmazonでIRモジュール/ブレイクアウトボードとして購入することもできます。 このようなモジュールには通常、上記のセンサーの1つと、センサーが信号を検出したときに点滅するLEDを備えたブレッドボードに優しいパッケージが組み込まれています。 そうすることで、データが転送されているかどうかがわかります。 これらのモジュールのいずれかから始めることを強くお勧めします。

注:未加工のIRセンサーを使用している場合、センサーのデータシートを確認して正しく配線していることを確認する必要があることを除いて、何も変わりません。時間。 私の言っていることが分かるよね ;)

ステップ3:必要な部品とコンポーネント

ここで、このチュートリアルを完了するために必要なコンポーネントのリストを見つけることができます。

eBayリンク:

  • 1 x Arduino Uno://rover.ebay.com/rover/1/711-53200-19255-0/1 ...
  • 1 xリモート付きIRセンサーモジュール://rover.ebay.com/rover/1/711 ....
  • 4 x 220オーム抵抗器://rover.ebay.com/rover/1/711-53200-19255-0 / ...
  • 4 x LED://rover.ebay.com/rover/1/711-53200-19255-0 / ...
  • 8 xデュポンケーブル://rover.ebay.com/rover/1/711-53200-3=4&too ...
  • 1 x無はんだブレッドボード://rover.ebay.com/rover/1/711-53200 -...
  • 1 xミニブレッドボード(オプション)://rover.ebay.com/rover/1/711-532 ...

Amazon.comリンク:

  • 1 x Arduino Uno://amzn.to/2uJfKy1
  • リモートx 1のIRセンサーモジュール://amzn.to/2uMS1eT
  • 1 x無はんだブレッドボード://amzn.to/2uMC6gl
  • 4 x 220オーム抵抗器://amzn.to/2hbGiDs
  • 4 x LED://amzn.to/2uMEtjy
  • 8 xデュポンケーブル://amzn.to/2eXCvbT
  • 1 xミニブレッドボード(オプション)://amzn.to/2vUelmC

Amazon.co.ukリンク:

  • 1 x Arduino Uno://amzn.to/2u8DXKD
  • リモートx 1のIRセンサーモジュール://amzn.to/2wagB8Y
  • 4 x 220オーム抵抗器://amzn.to/2uJCsGs
  • 4 x LED://amzn.to/2u8nNRo
  • 8 xデュポンケーブル://amzn.to/2vaLDQN
  • 1 x無はんだブレッドボード://amzn.to/2u8nkP2
  • 1 xミニブレッドボード(オプション)://amzn.to/2vaKtoc

ステップ4:IRセンサーをArduinoに接続する

ArduinoへのIRセンサー接続のセットアップは非常に簡単です。 VCCおよびGNDピンのほかに、センサーにはArduinoのデジタルピンの1つに接続する必要がある出力ピンが1つしかありません。 この場合、ピン13に接続されています。

私は、IRセンサーモジュールと未加工のIRセンサーセットアップの両方を実証しようとしました。 写真からわかるように、センサーモジュールのVCCピンとGNDピンの位置は、生のセンサーの反対です。 ただし、センサーには当てはまらない場合があるため、前のステップで述べたように、未加工のセンサーを使用する場合は、最初にデータシートを確認してください。

ステップ5:リモートの各キーに対応するコードを見つける

リモートでキーを押したときに何かをするようにArduinoをプログラムするには、まずそのキーに対応するコードを用意する必要があります。 キーコードは、通常16進数で表される番号です。 各リモートコントローラーには独自のキーコードセットがありますが、2つのコントローラーが異なる目的で同じコードを共有する可能性があります。 異なる周波数範囲の使用に加えて異なるキーコードを使用すると、異なるデバイスの2つのリモートコントローラーが干渉しないことが保証されます。 そのため、TVチャンネルを変更しても、DVDプレーヤーはまったく反応しません。

IRリモートのコードを検出するには、まずキーを押したときにセンサーからコードを読み取ろうとする簡単なスケッチを実行し、シリアルポート経由でコンピューターに送信して、シリアルモニターツールを使用してアクセスできますArduino IDE。 これが、このセクションに添付されているスケッチの機能です。 コードを確認し、コードのリストをどこかに書き留めて、今後このコードを再度実行する必要がないように、すべてのボタンを押す方が良いでしょう。 写真の表として表示されるキーコードのリストは、実際に安価なIRリモコンのボタンを押したときに受け取ったコードです。

ir-key-code-loggerのArduino Webエディターで共有されている実際のソースコードにアクセスすることもできます。

:FFFFFFのようなコードが中間にある場合でも、心配しないでください。 これは、ボタンをしばらく押したままにしていることを意味します。 後でまた説明します。 今のところ、それらを無視して他のコードに焦点を合わせてください。

添付ファイル

  • ir-code-logger.inoダウンロード

手順6:IRリモートを使用してLEDセットを制御する

各ボタンのコードが用意できたので、次はボタンの使用方法に焦点を合わせます。 通常、IRリモコンを使用してArduinoにコマンドを送信し、ランプのオン/オフ、特定の方向へのロボットの移動、LCD / OLED画面への表示などを行います。ここでは、単純な異なる色の4つのLEDで構成される回路。 IRリモートの専用ボタンを使用して、それぞれをオンまたはオフにします。 回路図でわかるように、次の方法でArduinoをLEDとセンサーに接続する必要があります。

Arduino GND-> IRセンサーGND。

Arduino VCC-> IRセンサーVCC。

Arduino 13-> IRセンサー信号出力。

Arduino 2->青色LEDのアノード(青色LEDの短いピン)

Arduino 3->緑色LEDのアノード(緑色LEDの短いピン)

Arduino 4->黄色LEDのアノード(黄色LEDの短いピン)

Arduino 5->赤色LEDのアノード(赤色LEDの短いピン)

Arduino GND-> 220オームの抵抗を介したすべてのLEDのカソード(LEDの長いピン)

この回路に対応するコードは、添付ファイルまたはir-led-controlのArduino Webエディターで見つけることができます。

添付ファイル

  • ir-led-control.inoダウンロード

ステップ7:トラブルシューティング

プロジェクトを設定して手順を実行しているときに、多くの奇妙な状況が発生する場合があります。 IRセンサーを使用しているときに発生する可能性のある一般的なエラーのリストを次に示します。


キーを押したときにFFFFFFを取得する

ボタンを押すと、ほとんどの場合、FFFFFFのようなコードが報告されることに気付くでしょう。 これは、ボタンを押してしばらく押したままにすると、短時間でも発生します。 シナリオは、最初にボタンを押すと、IRリモートはボタンコードを送信し、ボタンを押している間はFFFFFFの送信を繰り返します。つまり、ユーザーはまだ最近報告されたボタンを押し続けています。 それは大丈夫でしょう。 単に省略できます。 実際のコードは、シリアルモニターでFFFFFFの直前に取得したコードです。


IRセンサーはまったく反応せず、暖かくなっているようです!

電源を切る!!! キーコードロガーのスケッチが正しいことを確信している場合、問題はおそらくあなたのワイヤーの間違ったセットアップによるものです。 私に起こったシナリオは、IRモジュール(ボードに接続されているモジュール)に対して、逆の方法でVCCとGNDを接続したことです(フックアップワイヤに適切な色を使用していないため)。 そうすることで、センサーコンポーネントが燃焼し、素敵な青い煙が発生しました。 生のIRセンサーのパックを購入し、交換しようとしましたが、今では魅力のように機能します:)。 残念ながら、未加工のIRセンサーでテストしていたときに同じ間違いをしましたが、今回はセンサーが暖かくなった以外は何も起こりませんでした。 したがって、電源を入れる前に必ず回路をチェックしてください!


センサーは、今まで見たことのないコードを検出することがあります

これは最も一般的な問題の1つです。 次のいずれかの理由が考えられます。

  • IRリモコンをセンサーに直接向けていない

これにより、これまでに受信したことのない新しいコード(主に長いコード)がいくつか作成され、通常は既に持っているコードの長さと一致しなくなります。 そのため、常にリモコンをセンサーに向けることを忘れないでください。

  • 安価なIRリモート(このチュートリアルで使用したようなリモート)を使用している

安価な予測不可能なリモコンを使用する代わりに、テレビまたはDVDプレーヤーのリモコンまたは使用しているデバイスのIRリモコンを使用して同じシナリオを試すことができます。 それらは通常、良好な信号/ハードウェア品質を持ち(そしてもちろんより高価です)、私の経験に基づいて、それらは通常、リモートをセンサーに直接向けなくても正常に機能します。


ログに記録されたコードがゴミではないかどうかを知る方法

コードは通常16進形式で表示されます。 それらを対応するバイナリ値に変換すると、最後のバイトのバイナリ表現はその前にあるバイトの否定であることがわかります。 これを知っている場合は、コードでこのチェックを行い、受け取ったコードが実際に有効なコードであるかどうかを確認できます。 例として、FF7A85を取得した場合、そのバイナリ表現は次のようになります。

 1111 1111 0111 1010 1000 0101 

左から順に、4桁の各バッチは元の16進数の文字を表しています。 ご覧のとおり、7に対応するバッチは0111であり、8に対応するバッチは1000です。これは正確な否定です。 否定とは、すべての0が1であり、すべての1が0に置き換えられることを意味します。 次のA(1010)と5(0101)についても同様です。

ステップ8:次に行うこと

今ではあなたの番です。 この小さなシンプルなセンサーを使って何ができるかを見るのは想像力次第です。 最初にいくつかのアイデアを示します。

  • 自宅にあるデバイス(TV、ステレオなど)のいずれかのIRリモートコントロールを使用して、Arduinoプロジェクトで使用してみてください。
  • キーを押してすべてのLEDを一度にオンにしてから、別のキーを使用してオフにします
  • リモコンの上/下ボタンを使用して、すべてのLEDがオン/オフになるまでLEDを1つずつオン/オフします
  • LEDを使用して信号機を作成し、リモコンを使用して制御します
  • 手元に小さなDCモーターがある場合は、IRリモート経由で起動/停止または回転方向の変更を試みてください。
  • テレビのリモコンを使用してロボットを制御したり、ロボットのセンサー/アクチュエータを有効/無効にしたりできます

コメントについて教えてください、IRリモートを使用して何をしますか(または、すでにやったことがありますか)。

関連記事