やりたいことから始める 赤外線エアコンIoT (2/5)

第2章:赤外線受信の仕組み — PL-IRM1838B のデータシート確認と電源フィルタ

1. 受信モジュールの役割

前章で見たように、エアコンのリモコン信号は 38kHz の搬送波の上に、µs 単位の MARK/SPACE でデータが乗っています。Pico の GPIO は「光」を直接読めないし、38,000 回/秒の点滅をソフトウェアで追いかけるのは負荷が高いです。

そこで、以下の 2 つの処理をハードウェアで肩代わりしてくれる受信モジュールを使います:

つまり、受信モジュールを使えば、Pico は「µs 単位で GPIO の HIGH/LOW を読む」ことに集中でき、38kHz の復調という面倒な作業はモジュールに任せられます。

2. データシートを確認するとどうなっているか

Para Light Electronics, PL-IRM1838B Data Sheet 確認結果
  • 中心周波数:37.9kHz(38kHz に極めて近い)
  • 電源電圧:2.7V 〜 5.5V(3.3V 動作で問題なし)
  • 出力形式:アクティブ LOW(赤外線を検出している間が LOW)
  • 出力レベル:3.3V 給電時、HIGH は約 3V(Pico の GPIO に直接入力可能)
  • Pin 配置(受光部を正面から見て、足を下に):左から Pin 1=Output、Pin 2=Ground、Pin 3=Vcc
  • 推奨応用回路:VCC 直前に 47〜100Ω の直列抵抗、VCC-GND 間に 47µF のコンデンサを配置

データシートを確認すると、3.3V 給電で動作し、出力も 3V 程度なので Pico の GPIO へそのままつなげて安全であることが分かります。また、メーカーが推奨する電源フィルタがあることが判明しました。

選定:PL-IRM1838B
理由:3.3V 動作、38kHz 復調、出力レベルが Pico にそのまま入力可能。メーカー資料で Pin 配置(1=OUT, 2=GND, 3=VCC)が確定している。

3. 電源フィルタを入れる理由

データシートの「推奨応用回路」に従い、以下の部品を追加します:

部品接続場所役割
抵抗 100Ω ×1 3.3V → PL-IRM1838B VCC の直前 電源フィルタ。メーカー推奨の 47〜100Ω の範囲内。手元の ELEGOO キットに入っている可能性が高い。
電解コンデンサ 47µF ×1 PL-IRM1838B 側 VCC-GND 間 受信モジュールの電源ノイズを減らす。極性あり(+を VCC 側、−を GND 側)。秋月 117887 などを追加購入。
なぜフィルタが必要か
Pico の 3.3V 電源は比較的きれいですが、USB 給電や Pico 内部の動作によって微小なノイズが乗ることがあります。PL-IRM1838B はこのノイズを「赤外線信号」と誤認識してしまう可能性があります。直列抵抗と並列コンデンサで「急な電圧変化を吸収し、モジュールには滑らかな電圧だけを届ける」ことで、誤動作を防ぎます。

4. 配線を決める

データシートで確認した Pin 配置に従い、以下のように接続します。

PL-IRM1838BPico 2 WH理由
Pin 1 OUTGP16 / Pin 21受信信号を Pico へ入力。アクティブ LOW。
Pin 2 GNDGND共通の 0V 基準。
Pin 3 VCC3.3V(100Ω 経由)3.3V は動作範囲 2.7〜5.5V 内。フィルタ抵抗を直前に入れる。
47µF は VCC-GND 間に並列。+を VCC 側、−を GND 側。
3.3V (Pin 36) 100Ω 電源フィルタ 47µF GND PL-IRM1838B 1=OUT 2=GND 3=VCC 受光部を正面に OUT → GP16 Pico 2 WH GPIO 入力 メーカー推奨の電源フィルタでノイズを除去

図1:PL-IRM1838B の電源フィルタ回路。データシート推奨に従い、ノイズ対策を先に組み込む。

5. 純正リモコンの信号を観察する

PL-IRM1838B を接続したら、まず純正リモコン RAR-8P2 の信号を観察します。エアコンに向けたまま、横から受信モジュールで拾います。

日立の公開仕様では、赤外線キャリア周波数や通信フォーマットまでは確認できていません。そのため「日立だから NEC 方式」「必ず 38.0kHz」と決めつけず、PL-IRM1838B で純正リモコンの信号を実測します。PL-IRM1838B の中心周波数は 37.9kHz なので、まず実機の RAR-8P2 を受信できるかを確認し、受信できた MARK/SPACE 時間列をそのまま学習対象にします。

データシートで分かったこと
PL-IRM1838B は 37.9kHz の変調を復調するため、38kHz 帯のリモコン信号を受信できます。ただし、エアコンの正確なキャリア周波数はデータシートでは分からないため、実測で確認する必要があります。受信できた時間列をそのまま保存して再送信する「学習方式」を取ります。

6. 受信実験のコード

まずは独立した実験として、純正リモコンの信号を観察します。

from machine import Pin
from time import ticks_us, ticks_diff, sleep_ms

IR_RX = 16
pin = Pin(IR_RX, Pin.IN)
last = ticks_us()
pulses = []

def edge(p):
    global last
    now = ticks_us()
    pulses.append((p.value(), ticks_diff(now, last)))
    last = now

pin.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=edge)

print("純正リモコンをエアコンへ向けて1回操作")
sleep_ms(3000)
pin.irq(handler=None)
print(pulses)

これは最初の観察用コードです。各要素に入る時間は「直前のエッジから今回のエッジまで」の長さなので、最初の 1 要素をそのまま MARK 開始と決めつけず、信号の開始位置を確認してから MARK/SPACE へ整理します。