Raspberry Pi Picoで赤外線リモコンを使う方法!【受信編】

  • URLをコピーしました!

皆さんこんにちは。yossyです。

電子工作をしていると、遠隔で操作をしたいといったことがよくあると思います。ですが、WiFiやBluetoothを使うと複雑になる悩みがありますよね。

そこで今回はRaspberry Pi Picoで赤外線リモコンを受信する方法について、初心者の方でも簡単に試せるように、配線やコード、使い方まで丁寧に解説します!

目次

赤外線リモコンとは?

赤外線リモコンとは、目に見えない光である赤外線を使ったリモコンのことです。テレビやエアコンといった一般的な家電でよく使用されています。

リモコンの先端にはこのように赤外線LEDがついています。
(カメラ越しでボタンを押している様子を見ると、赤外線を見ることができます。)

何ができる?:離れたところから操作できる

赤外線リモコンはケーブルが不要なので少し離れたところからでも操作ができます。

  • 手の届きにくい場所に置いた装置
  • ロボットカーの操作
  • 音量や光り方を変える

といった操作を手元で行えるのでとても便利です!

通信の仕組み

赤外線リモコンは、赤外線LEDを高速点滅させて情報を送っています。
リモコン側の点滅を受信モジュールを使って読み取ると、「ON/OFFのパルス列」に変換して出力してくれます。

その後、パルス列を実際のデータに変換することで、操作の内容を確認することができます。

パルス列をデータに変換するとき使われるフォーマットは主に3つです。

  • NECフォーマット
  • AEHAフォーマット
  • SONYフォーマット

この中でNECフォーマットは最も普及している規格で、電子工作に使うのにぴったりです。


Raspberry Pi Picoで赤外線リモコンを使う方法

ここからは、Raspberry Pi Picoで赤外線リモコンを使う方法について紹介します。

必要なもの

必要なものはこちら。

  • Raspberry Pi Pico
  • 赤外線リモコン
  • 赤外線受信モジュール(VS1838B等)
  • ブレッドボード
  • ジャンパワイヤー

・赤外線受信モジュール VS1838B

・赤外線リモコン

赤外線リモコンは使わない家電のリモコンを流用します。今回はFireTV用のリモコンを使います。

yossy

(購入できるおすすめリモコンは見つけ次第掲載します!)

必要なライブラリのインストール

次の3つのライブラリをラズピコに保存してください。

yossy

ir_utilsの内部で送受信ライブラリが使われています!

配線

今回はVS1838Bをそのまま使いました。
感度や寿命のことを考えると、VCCとGNDの間に0.1uFの積層セラミックコンデンサを入れた方がいいでしょう。

他のモジュールの場合はデータシートを確認してみてください。

ラズピコのピン名接続先説明
3V3受信モジュール VCC電源
GND受信モジュール GNDGND
GP0受信モジュール OUT受信信号

VS1838Bのピン配置は正面左から「OUT・GND・VCC」です。

プログラム

受信したデータを表示するプログラムはこちら!

import time
import ir_utils

RX_PIN = 0    # 受信モジュール OUT
WAIT_MS = 2000  # 受信待ち時間

result = ir_utils.ir_read(pin=RX_PIN, wait_ms=WAIT_MS)

print("--- 受信結果 ---")
print("Format   :", result["ir_type"])
print("UserCode :", result["user_code"])
print("DataCode :", result["data_code"])
print("IR DATA (ノイズ除去) :", result["read_data"])
print("ORIGINAL DATA           :", result["org_read_data"])
yossy

ピンの指定はmachine.Pinではなく番号をそのまま渡します!

プログラムの解説

プログラムの内容はシンプルで、

result = ir_utils.ir_read(pin=RX_PIN, wait_ms=WAIT_MS)

このプログラムを実行してからWAIT_MS(ミリ秒)以内に赤外線を受信すると、結果が辞書型で返ってきます。
WAIT_MSは1000にすると動作が安定しなかったので、2000以上あるといいでしょう。

NECフォーマットであればUserCodeとDataCodeを確認できます。
UserCodeは「何のリモコンか」・DataCodeは「何の信号か」を表すので、リモコンのボタンごとに操作を割り当てたい時便利です。


実際に使ってみた

リモコンのボタンでLEDを切り替えるようにしてみました。

プログラムサンプル
import time
from machine import Pin
import ir_utils

led = Pin(14, Pin.OUT)
RX_PIN = 0
WAIT_MS = 2000

# 試すときは左側のDataCodeを書き換えてください。
REMOTE_MAP = {
    "48b7": "上 (UP)",
    "4db2": "下 (DOWN)",
    "4eb1": "左 (LEFT)",
    "49b6": "右 (RIGHT)",
    "4ab5": "決定 (OK)",
}

print("リモコン操作待機中...")
print("対応ボタン: 上, 下, 左, 右, 決定")

try:
    while True:
        result = ir_utils.ir_read(pin=RX_PIN, wait_ms=WAIT_MS)

        # 信号が受信できているか、かつ辞書に登録されているコードか確認
        if result["data_code"] != None:
            data = result["data_code"]
            
            # 辞書から操作名を取得(登録がない場合は "不明" とする)
            action = REMOTE_MAP.get(data, f"未登録のボタン ({data})")
            
            print(f"--- [受信] {action} ---")
            
            # もし「決定」が押されたらLEDの切り替え
            if action == "決定 (OK)":
                print(">> 決定コマンドを実行しました! <<")
                led.toggle()

except KeyboardInterrupt:
    print("\n終了します。")

まとめ

今回は、Raspberry Pi Picoで赤外線リモコンを使う方法を紹介しました!
受信モジュールとライブラリを組み合わせることで、受信と解析を簡単にすることができました。

今回は受信だけでしたが、次回は送信について説明します。送信ができれば家電の操作ができるようになるので、IoTのようなこともできるようになります!

yossy

次回をお楽しみに!

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次