第一部 Raspberry Pi Pico 2 WHでつくる赤外線エアコンIoT

この資料では、Raspberry Pi Pico 2 WHを中心に、赤外線受信・赤外線送信・温湿度測定・タクトスイッチを組み合わせ、対象エアコン 日立 白くまくん RAS-AJ3626S の純正リモコン信号を学習して再送信できる装置を作る。電子工作の経験がほとんどない状態からでも、「何をどこへつなぐか」「なぜその部品が必要か」「何を確認すれば成功か」が分かる順番で進める。

→座学 →やりたい

1. 研究の目的

家にあるELEGOO Arduino UNO R3スターターキットの部品をできるだけ再利用し、不足する部品だけを追加購入して、エアコンを赤外線で操作できるIoT装置を作る。

第1部ではPico 2 WH単体で、赤外線信号の受信・保存・再送信、DHT20による温湿度測定、タクトスイッチによる手動操作まで完成させる。画面は付けない。動作確認はUSBシリアル出力で行う。第2部ではPico 2 WHのWi-Fiを使い、Raspberry Pi 4Bなどのサーバー側から命令を送る構成へ発展させる。

2. 今回の構成

部品入手方法役割
Raspberry Pi Pico 2 WH購入GPIO制御、I²C、赤外線処理、Wi-Fi通信を担当する中心装置
PL-IRM1838B購入約38kHzで変調された赤外線リモコン信号を受信・復調する
DHT20購入I²Cで温度・湿度を測定する
OSI5LA5A33A-B 940nm IR LED購入エアコンへ赤外線を送信する
BC337-40BU(秋月 105998)購入IR LEDに流す電流をON/OFFするNPNトランジスタ。ON Semiconductor品。TO-92、最大コレクタ電流800mA
タクトスイッチELEGOOキット手動で赤外線送信を実行する
2kΩ・5kΩ・330Ω・100Ωなどの抵抗ELEGOOキットI²Cのプルアップ、トランジスタのベース電流、IR LED電流の調整に使う
0.1µF セラミックコンデンサ(秋月 110147)購入DHT20のVDD-GND間のデカップリング
47µF 電解コンデンサ(秋月 117887)購入PL-IRM1838Bの電源フィルタ。+/−の極性あり
ブレッドボード・ジャンパ線ELEGOOキットはんだ付けせず回路を組む
部品を変更した理由
最初はELEGOO付属のDHT11モジュールとIR受信モジュールを使う予定だった。しかし、Arduino UNOは5V系、Pico 2 WHのGPIOは3.3V系なので、5V信号をPicoへ直接入力しないための電圧変換が必要になる。そこで、3.3Vで扱いやすいDHT20とPL-IRM1838Bへ変更した。IR送信側のトランジスタは、メーカーと足順を確定できるBC337-40BU(秋月105998)を購入して使う。抵抗はELEGOOキットのものを再利用する。
DHT20(秋月116732)の外付け部品は確定
秋月116732はDHT20本体を「モジュール」として販売しているもので、抵抗・コンデンサ付きの別基板ではない。メーカー標準回路に従い、SDAとSCLには外付けプルアップ抵抗を1本ずつ入れる。代表値4.7kΩに対し、今回は手元の5kΩをSDA用・SCL用に各1本使う。またVDD-GND間には0.1µF(100nF)のセラミックコンデンサを1個入れ、DHT20のできるだけ近くへ置く。

3. 完成後の流れ

純正リモコンエアコンへ赤外線送信 エアコン赤外線を受信して動作 PL-IRM1838B純正リモコン信号を受信→ パルス時間を記録 DHT20温度・湿度をI²Cで測定 Pico 2 WHMicroPython受信・保存・判断・送信Wi-Fiは第2部で使用 IR LEDBC337-40BU38kHz再送信

4. 電子工作の最低限の基礎

4-1. 3.3V、5V、GPIOは同じものではない

Pico 2 WHには3.3V電源出力があり、USB給電時にはVBUSに約5Vが来る。しかしGPIOの信号レベルは3.3Vで固定されている。したがって、5Vを電源として使える場合でも、5V信号をGPIOへ直接入力してはいけない。

VBUSを使えるのはUSBから5Vが入っているとき
今回のIR LED回路はPicoをUSBで給電している間、Pin 40 VBUSを約5V電源として使う。将来USBを外してVSYSなど別の方法で給電する構成に変える場合は、VBUSをIR LED電源として使えるとは限らないため、電源回路を再確認する。
Pico 2 WH3V3(OUT) = 3.3V電源GPIO = 3.3V信号VBUSUSB給電時 約5VIR LEDの電源側に使用禁止5V → GPIO入力

4-2. GNDを共通にする

GNDは電圧を測る基準の0Vである。Pico、センサー、トランジスタが同じHIGH/LOWを理解するため、すべてのGNDを共通につなぐ。

4-3. 抵抗を入れる理由

抵抗は電流を制限する。IR LEDへ抵抗なしで電源をつなぐと大きすぎる電流が流れる可能性がある。またBC337-40BUのBASEにも抵抗を入れ、GPIOから流れる電流を制限する。

5. Pico 2 WHの使用ピン

用途GPIO物理ピン接続先
DHT20 SDAGP46DHT20 Pin 2 SDA(5kΩ プルアップ経由)
DHT20 SCLGP57DHT20 Pin 4 SCL(5kΩ プルアップ経由)
タクトスイッチGP1520スイッチ片側 → GND(内部プルアップ)
IR 受信GP1621PL-IRM1838B Pin 1 OUT
IR 送信GP18242kΩ → BC337-40BU BASE(Pin 2)
3.3V 電源36DHT20、PL-IRM1838B(100Ω フィルタ経由)
GND3/8/13/18/23/28/38 など全回路共通
USB 給電時の 5VVBUS40IR LED 送信回路の電源(330Ω 経由)

5-1. Pico 2 WHピン図

USBPico 2 WHUSB端子を上にした図 1 GP040 VBUS 約5V 2 GP139 VSYS 3 GND38 GND 4 GP237 3V3_EN 5 GP336 3V3(OUT) 6 GP4 ← SDA35 ADC_VREF 7 GP5 ← SCL34 GP28 8 GND33 AGND 9 GP632 GP27 10 GP731 GP26 11 GP830 RUN 12 GP929 GP22 13 GND28 GND 14 GP1027 GP21 15 GP1126 GP20 16 GP1225 GP19 17 GP1324 GP18 ← IR送信 18 GND23 GND 19 GP1422 GP17 20 GP15 ← SW21 GP16 ← IR受信

5-2. 今回使う抵抗・コンデンサの早見表

部品接続場所何のためか
抵抗5kΩ ×2DHT20のSDA→3.3V、SCL→3.3VI²Cの信号線をHIGHへ戻す外付けプルアップ。今回のDHT20では2本とも使用する。
コンデンサ0.1µF ×1DHT20のVDD-GND間電源の細かな揺れ・高周波ノイズを吸収する。
抵抗100Ω ×13.3V→PL-IRM1838B VCCの直前メーカー推奨の47〜100Ω電源フィルタ。手元の100Ωを使用する。
電解コンデンサ47µF ×1PL-IRM1838B側VCC-GND間受信モジュールの電源ノイズを減らす。秋月117887を購入して使用する。
抵抗2kΩ ×1Pico GP18→BC337-40BU BASE(Pin 2)GPIOからBASEへ流れる電流をおおむね1mA程度に制限し、トランジスタをスイッチとして駆動する。
抵抗330Ω ×1VBUS→抵抗→IR LEDIR LED電流を最初は約10mA級に制限する。
抵抗100ΩPL-IRM1838Bの電源フィルタに使用。IR LED直列には使わないIR LEDへ使うと上限寄りの概算で約34mAまで増えるため、初回のLED駆動には330Ωを使う。

同じ「抵抗」でも役割は異なる。5kΩは信号線の状態を決めるプルアップ抵抗、2kΩはトランジスタBASEへ流れる電流を抑えるベース抵抗、330ΩはIR LEDを守る電流制限抵抗である。値だけでなく「どこに何の目的で入れるか」を区別する。

6. ブレッドボード全体配置

Pico 2 WHはブレッドボード中央の溝をまたぐように挿す。片側にDHT20とIR受信、反対側にIR送信回路とボタンを置くと配線を追いやすい。

ブレッドボード全体配置例 3.3VGND Pico 2 WHUSBを上側Pin 36 → 3.3VレールGND → GNDレールPin 6/7 → DHT20Pin 21 → IR受信Pin 24 → IR送信Pin 20 → ボタン DHT205kΩ×2 + 0.1µFSDA / SCL / 3.3V / GND PL-IRM1838BOUT / GND / VCC電源: 100Ω + 47µF IR送信回路2kΩ + BC337-40BUIR LED + 330Ω タクトスイッチGP15 ↔ GND LCDは使用しない。動作確認はUSBシリアル出力で行う。

7. DHT20の詳細配線

DHT20はI²C通信を使う。SDAがデータ線、SCLがクロック線である。I²Cでは信号線を部品が直接HIGHへ押し上げるのではなく、LOWだけを作り、HIGHはプルアップ抵抗で作る。このためSDAとSCLそれぞれに数kΩ程度の抵抗を3.3Vへつなぐ。DHT20のデータシート例は4.7kΩだが、4.7kΩと5kΩの差は約6%なので、今回の短いブレッドボード配線では手元の5kΩを使う。

3.3VGND DHT201 VDD / 2 SDA3 GND / 4 SCL 5kΩ 5kΩ Pico GP4 / Pin 6 → SDASCL ← Pico GP5 / Pin 7 0.1µF 0.1µFはVDD-GND間に、できるだけDHT20の近くへ置く。
DHT20Pico 2 WH理由
Pin 1 VDD3V3(OUT) Pin 363.3VはDHT20の2.2〜5.5V動作範囲内。
Pin 2 SDAGP4 Pin 6I²Cのデータ線。
Pin 3 GNDGND共通の0V基準。
Pin 4 SCLGP5 Pin 7I²Cのクロック線。
5kΩ×2SDA→3.3V、SCL→3.3VI²C信号をHIGHへ戻すプルアップ。データシート例4.7kΩの代わりに手元の5kΩを使う。
0.1µFVDD-GND間電源ノイズを吸収する。

7-1. なぜ5kΩでよいのか

I²Cのプルアップ抵抗は「4.7kΩでなければ動かない」というものではない。小さすぎるとLOWへ下げるときの電流が増え、大きすぎるとHIGHへ戻る速度が遅くなる。今回は配線が短く、手元の5kΩがデータシート例の4.7kΩに近いため5kΩを使う。

抵抗値今回の判断理由
4.7kΩ基準値DHT20資料の代表例。
5kΩ今回使用4.7kΩとの差が小さく、短いブレッドボード配線では同じ目的で使える。
2kΩDHT20には今回は使わない5kΩよりLOW時の電流が増える。5kΩがあるためそちらを優先する。

7-2. 0.1µFコンデンサは何をしているのか

抵抗が電流の流れ方を決める部品なのに対し、コンデンサは一時的に電気をためたり放したりできる。DHT20が測定や通信をするときに生じる短い電源の揺れやノイズを吸収するため、0.1µFコンデンサをVDDとGNDのすぐ近くへつなぐ。

DHT20の0.1µFコンデンサ3.3VGNDDHT200.1µFVDD-GND間に並列接続する。セラミックコンデンサなので極性はない。
今回のDHT20配線は確定
SDA→3.3Vに5kΩを1本、SCL→3.3Vに5kΩを1本、VDD-GND間に0.1µFを1個入れる。DHT20のメーカー資料では、外付けプルアップ抵抗(例4.7kΩ)を使うことと、VDD-GND間へ100nFのデカップリングコンデンサをセンサーの近くに置くことが示されている。

8. PL-IRM1838Bの詳細配線

PL-IRM1838Bは、内部で約37.9kHzの赤外線キャリアを検出して復調する。つまりPicoは38,000回/秒の光を直接数えるのではなく、「赤外線が来ている区間/来ていない区間」をHIGH/LOWとして読む。出力はアクティブLOWなので、赤外線を検出している間はLOW側になる。

PL-IRM1838B 詳細配線(メーカー推奨電源フィルタ込み) PL-IRM1838B1 OUT / 2 GND / 3 VCC Pico GP16 / Pin 21← OUT (Pin 1) Pin 2 → GND 100Ω Pico 3V3(OUT) Pin 36 47µF+をVCC側、−をGND側 GND 100Ωは3.3V電源と受信モジュールの間。47µFは受信モジュール側VCCとGNDの間に置く。
PL-IRM1838Bのメーカー推奨電源フィルタ
メーカーの応用回路では、PL-IRM1838BのVCC直前に47〜100Ωの直列抵抗を入れ、受信モジュール側のVCC-GND間に47µFコンデンサを置く構成が示されている。電源ノイズが受信回路へ入りにくくするためである。手元の100Ω抵抗はこの用途に使える。47µFには秋月117887(47µF・35V・電解コンデンサ)を使用できる。電解コンデンサは極性があるため、+を受信モジュール側VCC、−をGNDへ接続する。
PL-IRM1838Bの足順も確定
メーカー外形図で、受光部(丸いレンズ側)を正面から見て足を下にすると左から Pin 1=Output、Pin 2=Ground、Pin 3=Vcc。今回の3.3V給電では出力HIGHも約3Vなので、Picoの3.3V GPIOへ直接入力できる。

9. IR LED送信回路の詳細

IR LEDをGPIOへ直接つながない。GPIOは「トランジスタをON/OFFする指令」だけを出し、LEDの電流はVBUS側から流す。

IR送信回路GP18 / Pin 242kΩBC337-40BUNPNBCE→ GNDIR LEDKAOSI5LA5A33A-B330ΩVBUS Pin 40USB給電時 約5V電流の主経路: VBUS → 330Ω → IR LED → Collector → Emitter → GND
IR LEDとBC337-40BUの向き
IR LEDは アノードを330Ω/VBUS側、カソードをBC337-40BUのCollector側へ接続する。BC337-40BUは平らな面を手前・足を下にして左から C(Pin 1)- B(Pin 2)- E(Pin 3)

9-1. なぜBC337-40BUを使うのか

IR LEDはある程度の電流を流した方が遠くまで届く。一方、GPIOからLED電流を直接取り出す設計にはしない。そこでNPNトランジスタBC337-40BUを電子スイッチとして使う。秋月105998はON Semiconductor製で、BC337-40BUは45V・800mAのTO-92品なので、今回の約10mA級のIR LED駆動には十分な余裕がある。GP18がHIGHになるとBASEへ少量の電流が流れ、COLLECTOR–EMITTER間がONになり、LED側の電流が流れる。

9-2. なぜBASEに2kΩを入れるのか

BASE–EMITTER間はダイオードに近い性質を持つので、GPIOをそのままBASEへつなぐと電流が流れすぎる。今回は手元の2kΩを使う。BASE–EMITTER間電圧をおよそ0.7〜1.0V程度とみなすと、ベース電流はおおむね (3.3V − 0.7〜1.0V) ÷ 2000Ω ≒ 1.15〜1.3mA 程度になる。IR LEDを330Ωで約10mA級から試す構成には十分余裕のある駆動である。LED電流を大きく変更する場合は、ベース抵抗も再計算する。

9-3. なぜIR LEDに330Ωを入れるのか

OSI5LA5A33A-Bの代表的な順電圧を約1.6V、USB給電時のVBUSを約5Vとすると、トランジスタの電圧降下をいったん無視した上限寄りの概算は (5 − 1.6) ÷ 330 ≒ 0.0103A、約10.3mAとなる。実際にはBC337-40BUのCOLLECTOR–EMITTER間にも少し電圧がかかるため、LED電流はこれよりわずかに小さくなる。最初の動作確認では安全側の約10mA級から始めるため、今回は330Ωを使う。

IR LED直列抵抗上限寄りの概算電流※今回の扱い
330Ω約10.3mA最初に使用。安全側で送信確認する。
220Ω約15.5mA手元にあれば次の候補。330Ωで距離不足のときに検討する。
100Ω約34mA最初から使わない。LED定格だけでなくパルス幅・デューティ比・BC337-40BUの駆動条件を確認してから検討する。

※ VBUS=5V、LED順電圧=1.6V、トランジスタの電圧降下を無視して計算した値。実際の電流は少し小さくなる。

抵抗値を小さくするとLED電流は増えて赤外線が強くなる可能性があるが、その分LEDとBC337-40BUへの負担も増える。「LEDの最大順電流が100mAだから100mAまで自由に流してよい」という意味ではない。連続電流とパルス電流では許容条件が異なるため、まず330Ωで動作を確認する。

購入するIR LEDは型番が分かっているため極性と定格も確定できる
OSI5LA5A33A-Bのメーカー資料ではPin 1がAnode(アノード)、Pin 2がCathode(カソード)。DC順電流の絶対最大定格は100mA、パルス順電流は最大1000mAだが、パルス幅10ms以下・デューティ比1/10以下という条件付きである。今回の初期回路は330Ωで約10mAに抑えるため、最大定格近くを狙わない。
BC337-40BUの足順は確定
秋月105998はON Semiconductor製BC337-40BUで、メーカー資料のTO-92端子番号は 1=Collector、2=Base、3=Emitter。平らな面を手前、足を下にして見ると左から C-B-E になる。今回の回路ではPin 1 CollectorをIR LEDのカソード側、Pin 2 Baseを2kΩ経由でGP18、Pin 3 EmitterをGNDへ接続する。

10. タクトスイッチの詳細配線

スイッチはGP15とGNDの間へ接続し、Pico内部のプルアップを有効にする。押していないときはHIGH、押すとGNDへつながってLOWになる。外付け抵抗は不要。

タクトスイッチGP15 / Pin 20タクトスイッチGND通常 HIGH → 押す → LOW

11. 対象エアコンと赤外線信号について

対象は日立 白くまくん RAS-AJ3626S。日立公式の2026年AJシリーズ資料では、このシリーズの付属ワイヤレスリモコンはRAR-8P2と確認できる。

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

12. 実験1:PL-IRM1838Bで純正リモコンを受信する

RAR-8P2は受信モジュールへ向けるのではなく、普段どおりRAS-AJ3626Sへ向ける。PL-IRM1838Bは、その送信光を横から同時に受けられる位置へ置く。

  1. Picoの電源を外した状態でPL-IRM1838Bを配線する。
  2. USBでPicoをPCへ接続する。
  3. MicroPythonでGP16を入力に設定する。
  4. 立ち上がり・立ち下がりの時刻を記録する。
  5. 純正リモコンRAR-8P2をRAS-AJ3626Sへ向けて電源ONを押す。
  6. エアコンが反応し、同時にGP16へパルス列が入ることを確認する。
  7. 電源OFF、温度変更、モード変更でも同様に記録する。
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へ整理する。長い信号やWi-Fi動作中ではMicroPythonの割り込みだけでは精度が不足する場合がある。その場合はRP2350のPIOを使って受信処理をハードウェア寄りに移す。

13. 実験2:赤外線信号を「時間列」として保存する

PL-IRM1838Bは38kHzキャリアを復調するので、保存するのは主に「赤外線がある区間(MARK)」と「ない区間(SPACE)」の長さである。エアコンのプロトコルを最初からNECなどと決めつけず、まず実測値を保存する。

MARKSPACEMARKSPACE

操作名と時間列を対応付けて保存する。例:power_oncool_26dryなど。エアコンリモコンは設定状態をまとめて送る機種が多いため、「温度+ボタン」だけを単独コマンドと考えず、実際に受信したフレームを基準にする。

14. 実験3:まず38kHzでIR LEDを点滅させる

赤外線受信モジュールは単にIR LEDを点灯しただけでは反応しにくい。赤外線リモコンでは数十kHzの搬送波で高速点滅させる。RAR-8P2の正確な搬送波周波数は公開仕様で未確認なので、まずPL-IRM1838Bの中心周波数に近い38kHzで試す。PicoではPWMで38kHzの搬送波を作れる。

from machine import Pin, PWM
from time import sleep_ms

pwm = PWM(Pin(18))
pwm.freq(38000)
pwm.duty_u16(32768)   # 約50% duty
sleep_ms(1000)
pwm.duty_u16(0)
pwm.deinit()

この段階ではエアコンを動かす必要はない。スマートフォンのカメラでIR LEDが点滅しているかを見る方法もあるが、機種によって赤外線カットが強く見えないことがある。より確実なのはPL-IRM1838Bで送信を受信して確認すること。

15. 実験4:学習したMARK/SPACEを再送信する

MARK区間だけPWMをまず38kHzで出し、SPACE区間ではPWMを止める。これを受信時に記録した順番どおり繰り返す。エアコンが反応しない場合は、受信時間列だけでなく搬送波周波数も検討対象にする。

from machine import Pin, PWM
from time import sleep_us

IR_TX = 18
pwm = PWM(Pin(IR_TX))
pwm.freq(38000)

# 例。実際には学習した時間列を使う
signal = [9000, 4500, 560, 560, 560, 1690]

for i, us in enumerate(signal):
    if i % 2 == 0:          # MARK
        pwm.duty_u16(32768)
    else:                   # SPACE
        pwm.duty_u16(0)
    sleep_us(us)

pwm.duty_u16(0)
pwm.deinit()
MicroPythonのsleep_us()だけで長いエアコン信号を完全に再現できない場合は、PIOを使う方式へ進む。Picoを使う利点の一つが、このようなµs単位のGPIO処理をPIOへ任せられる点である。

16. 実験5:DHT20で温度・湿度を読む

DHT20のI²Cアドレスは0x38。まずI²Cスキャンで存在を確認する。

from machine import Pin, I2C

i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=100000)
print([hex(x) for x in i2c.scan()])
# 0x38 が見えればDHT20を認識している

DHT20は起動後の待ち時間、測定開始コマンド、測定完了待ち、6バイトのデータ読出しという手順で測定する。まずはI²Cスキャン成功までを独立した実験として確認し、その後にDHT20用ドライバを組み込む。

17. 実験6:タクトスイッチを読む

from machine import Pin
from time import sleep_ms

sw = Pin(15, Pin.IN, Pin.PULL_UP)

while True:
    if sw.value() == 0:
        print("button pressed")
        sleep_ms(300)
    sleep_ms(10)

最終的には、このボタンが押されたら学習済みIR信号を1回送る。

18. 全機能を統合する

MicroPython開始DHT20から温度・湿度を読むUSBシリアルへ状態を出力GP15のボタンを確認押されていたらIR信号を送信繰り返す

19. 実験を進める順番

段階作業成功条件失敗したら確認
1Pico 2 WHへMicroPythonを入れるPCからREPLを開けるUSB、BOOTSEL、ファームウェア
2PL-IRM1838Bだけ接続純正リモコン操作でGP16が変化Pin 1/2/3の向き、3.3V、GND
3IR信号を記録操作別の時間列を取得受信位置、信号終了判定
4IR送信回路だけ接続38kHzをPL-IRM1838Bで受信LED極性、BC337-40BUのC/B/E、抵抗
5学習信号を再送信エアコンが同じ操作を再現MARK/SPACE、38kHz、距離・方向
6DHT20だけ接続I²C scanに0x38SDA/SCL、5kΩ×2、0.1µF、3.3V、GND
7温湿度測定温度・湿度を取得測定コマンド、待ち時間
8タクトスイッチ押すとLOWGP15、GND、PULL_UP
9統合温湿度・ボタン・IRが同時動作一機能ずつ無効化して切り分け

20. 電源を入れる前のチェック

21. 自由研究として記録する内容

実験変える条件記録するもの
IR受信電源ON/OFF、温度、モードMARK/SPACEの時間列
再現性同じ操作を5回程度時間列がどの程度一致するか
IR送信距離0.5m、1m、2m、3mエアコンが反応した距離
IR送信角度LEDの向きを変える反応できる角度
温湿度時間経過温度・湿度の推移
統合動作ボタン操作押下からIR送信までの結果

22. 第1部の完成条件

23. 第2部へのつながり

第1部が完成したら、Pico 2 WHを「エアコンの近くに置く実働機」にする。PicoはDHT20、IR受信、IR送信を担当し、Wi-Fi経由でRaspberry Pi 4Bなどのサーバーと通信する。4B側はSSH、Nostr、ログ保存、外部からの命令受付などを担当する。

Raspberry Pi 4BSSH / Nostr / ログ命令と判断Wi-FiHTTP / MQTT等Pico 2 WHDHT20 / IR実際のGPIO処理

24. 参考資料

この資料では、手元の5kΩ・2kΩ・330Ωを利用し、まず安全側の電流で一つずつ動作確認する。IR LEDの到達距離を伸ばすために抵抗値を小さくする場合は、LEDの連続・パルス定格、デューティ比、BC337-40BUのベース電流とコレクタ電流を確認してから変更する。