エアコンIoT自由研究 ― 座学編
Raspberry Pi Pico 2 WHで、日立「白くまくん RAS-AJ3626S」の純正リモコン信号を学習し、赤外線LEDから再送信する。さらにDHT20で温度・湿度を測る。その工作を「なぜその配線になるのか」から理解するための資料。
対象部品:Pico 2 WH / DHT20 / PL-IRM1838B / OSI5LA5A33A-B / BC337-40BU / EIC-801 / 5kΩ・2kΩ・330Ω・100Ω / 0.1µF・47µF
配線手順を暗記するのではなく、①電圧・電流・抵抗、②GPIO、③I²C、④トランジスタ、⑤赤外線通信、⑥コンデンサ、が今回の回路のどこで使われているかを説明できる状態を目指す。
1. 全体像
2. 電圧・電流・抵抗
3. ブレッドボード
4. Pico 2 WH
5. 今回の4種類の抵抗
6. コンデンサ
7. BC337トランジスタ
8. 赤外線リモコン
9. PL-IRM1838B
10. I²CとDHT20
11. タクトスイッチ
12. ソフトウェアとの対応
13. 実験で何を確かめるか
14. 壊さないための原則
15. 用語集
16. 確認問題
1. この自由研究の全体像
Pico 2 WHは「判断して信号を出す中心装置」。DHT20から温度・湿度を読み、PL-IRM1838Bで純正リモコンの赤外線信号を受信し、必要なときはBC337-40BUを介して赤外線LEDを点滅させる。
完成品を作るだけでなく、「受信した純正リモコン信号を測定 → 時間列として記録 → 自分の回路で再現」という流れそのものが実験になる。リモコン方式を最初からNEC方式などと決めつけず、実測から確認する。
2. まず電圧・電流・抵抗を理解する
2-1. 電圧 V
電気を動かそうとする「差」。今回よく出るのは3.3Vと約5V。PicoのGPIO信号は3.3V系であり、5VをGPIOへ直接入れてはいけない。
2-2. 電流 A
実際に流れる電気の量。LEDやトランジスタには「流してよい電流」に限界があるため、抵抗で制限する。
2-3. 抵抗 Ω
電流を流れにくくする部品。抵抗値が大きいほど、同じ電圧なら電流は少なくなる。
I = V ÷ R。たとえば3.4Vを330Ωにかけると、理想計算では約0.0103A = 10.3mA。
2-4. GNDとは
回路の電圧を考える基準点。Pico、DHT20、IR受信器、IR送信回路はGNDを共通にする。同じ基準を共有しないと、GPIOのHIGH/LOWを正しく判断できない。
2-5. ショートとは
電源とGNDを非常に小さな抵抗で直接つないでしまうこと。大電流が流れ、部品やUSB電源を壊す原因になる。
3. ブレッドボード EIC-801は何をしているか
ブレッドボードは、ハンダ付けせずに部品同士を電気的につなぐための板。EIC-801は今回のPico 2 WHと周辺回路を試作するのに十分な大きさがある。
見た目で穴同士が近くても、内部でつながっているとは限らない。逆に、離れて見える電源レールが内部で一直線につながっている場合がある。配線前にブレッドボードの接続方向を理解する。
4. Pico 2 WHの電源とGPIO
| 名称 | 今回の意味 |
|---|---|
| 3V3(OUT) | 3.3Vの電源。DHT20やPL-IRM1838Bへ供給。 |
| GPIO | 3.3V系のデジタル信号端子。入力・出力・PWM・I²Cなどに使う。 |
| GND | 回路全体の0V基準。 |
| VBUS | USB給電時にUSB由来の約5Vが現れる。今回のIR LED電源側に使用。 |
VBUSの約5VをIR LEDの電源として使うことはできるが、5VをGPIOへ直接入力してよいという意味ではない。GPIOは3.3V系。
今回の割り当ては、DHT20のSDA=GP4、SCL=GP5、ボタン=GP15、IR受信=GP16、IR送信=GP18。
5. 今回は「4種類の抵抗」があり、役割が全部違う
| 値 | 場所 | 役割 |
|---|---|---|
| 5kΩ ×2 | DHT20 SDA・SCL → 3.3V | I²Cのプルアップ。信号線をHIGHへ戻す。 |
| 2kΩ ×1 | GP18 → BC337 Base | Baseへ流れる電流を制限し、GPIOを守る。 |
| 330Ω ×1 | VBUS → IR LED | IR LEDへ流れる電流を約10mA級に制限。 |
| 100Ω ×1 | 3.3V → PL-IRM1838B VCC | 47µFと組み合わせ、IR受信器の電源ノイズを減らす。 |
5-1. 5kΩが「電流制限」ではなくプルアップなのはなぜ?
I²Cでは機器が信号線を主にLOWへ引き下げる。誰もLOWにしていないときは、抵抗を通して3.3V側へ引っ張り、HIGHを作る。これがプルアップ。
DHT20の資料で例示される4.7kΩに対し、5kΩは約6%大きいだけ。今回の短いブレッドボード配線・低速なセンサー用途では実用上ほぼ同じ範囲として扱える。
5-2. 330ΩでIR LEDにどのくらい流れる?
VBUSを5V、IR LEDの順電圧を約1.6Vとし、まずトランジスタの電圧降下を無視すると、(5 - 1.6) ÷ 330 ≒ 0.0103A。つまり約10.3mA。実際はBC337にも少し電圧がかかるため、少し小さくなる。
| IR LED直列抵抗 | 上限寄りの概算電流※ | 今回の扱い |
|---|---|---|
| 330Ω | 約10.3mA | 最初に使用。安全側で送信確認する。 |
| 220Ω | 約15.5mA | 手元にあれば次の候補。330Ωで距離不足のときに検討する。 |
| 100Ω | 約34mA | 最初から使わない。LED定格だけでなくパルス幅・デューティ比・BC337-40BUの駆動条件を確認してから検討する。 |
※ VBUS=5V、LED順電圧=1.6V、トランジスタの電圧降下を無視して計算した値。実際の電流は少し小さくなる。
6. コンデンサは「電気を一時的に蓄える」
抵抗が電流を抑える部品なのに対し、コンデンサは電荷を一時的に蓄え、急な電圧変化をなだらかにする。
6-1. DHT20の0.1µF
DHT20のVDD-GND間、できるだけセンサーの近くに置く。高周波の細かなノイズを吸収するデカップリング用。セラミックコンデンサなので極性はない。
6-2. PL-IRM1838Bの47µF
IR受信器の電源を安定させるための比較的大きなコンデンサ。100Ωと組み合わせて、電源から来るノイズを受信器へ伝えにくくする。
47µFは+と−を逆にしない。今回なら+をVCC側、−をGND側。0.1µFセラミックは極性なし。
7. BC337-40BUは「GPIOで大きい側の電流をON/OFFするスイッチ」
GPIOからIR LEDへ直接大きな電流を流す設計にせず、GPIOはBC337のBaseを操作するだけにする。IR LEDの主電流はVBUS→330Ω→IR LED→BC337→GNDという別の経路を流れる。
BC337-40BUは平らな面を手前、足を下にして左からC-B-E。Pin 1=Collector、Pin 2=Base、Pin 3=Emitter。
Base-Emitter間はダイオードのように電流が流れるため、GPIOを直結すると流れすぎる。2kΩでおおむね1mA程度に抑え、GPIOは「スイッチを操作する小さい電流」だけを担当する。
8. 赤外線リモコンは「見えない光を高速点滅させる」
OSI5LA5A33A-Bは940nmの赤外線LED。肉眼には見えない。普通の照明の赤外線や太陽光と区別するため、リモコンは赤外線を数十kHzで高速点滅させ、その点滅のまとまりで情報を送る。
8-1. 38kHzとは
1秒間に約38,000回の周期。1周期は約26.3µs。IR LEDをずっとONにするのではなく、この速さでON/OFFする。
8-2. MARKとSPACE
MARKは搬送波を出している時間、SPACEは出していない時間。リモコンデータは、このMARK/SPACEの長さの並びとして観察できる。
RAS-AJ3626Sの純正リモコンRAR-8P2について、公開資料だけでは正確な搬送波周波数・通信フォーマットを確定していない。まずPL-IRM1838Bで受信できるかを調べ、実測した時間列を保存する。
9. PL-IRM1838Bは「38kHz付近の細かい点滅を消して、情報だけ出す」
PL-IRM1838Bの中心周波数は37.9kHz付近。内部で受光・増幅・フィルタ・復調を行うため、Pico側は38kHzそのものを1周期ずつ測る必要がない。
受信出力は一般にactive-low。赤外線搬送波を検出している区間でOUTがLOW側になる。したがって「HIGH=赤外線あり」と思い込まない。
10. I²CとDHT20
10-1. I²Cとは
複数のデジタル機器を、主にSDA(データ)とSCL(クロック)の2本で接続する通信方式。GNDと電源も必要なので、DHT20への物理配線は合計4系統になる。
10-2. DHT20の端子
| Pin | 名称 | 接続 |
|---|---|---|
| 1 | VDD | 3.3V |
| 2 | SDA | GP4 + 5kΩで3.3Vへプルアップ |
| 3 | GND | GND |
| 4 | SCL | GP5 + 5kΩで3.3Vへプルアップ |
DHT20のI²Cアドレスは0x38。I²Cスキャンで0x38が見えれば、配線・電源・I²C通信の基本部分が成立していると判断できる。
I²Cは各機器が線を積極的にHIGHへ押し上げる方式ではなく、主にLOWへ引き下げて通信する。そのため、誰もLOWにしていないときにHIGHへ戻す役目を5kΩ抵抗が持つ。
11. タクトスイッチと内部プルアップ
タクトスイッチはGP15とGNDの間につなぎ、Pico内部のプルアップ抵抗を有効にする。
| 状態 | GP15 | 意味 |
|---|---|---|
| 押していない | HIGH | 内部抵抗が3.3V側へ引っ張る |
| 押した | LOW | スイッチでGNDへ直結される |
ここではPico内部にプルアップがあるため、外付け抵抗を1本増やす必要がない。
12. 回路とソフトウェアはどう対応するか
| 回路側 | ソフト側 | 役割 |
|---|---|---|
| DHT20 / SDA・SCL | I²C | 温度・湿度を読む |
| PL-IRM1838B / GP16 | GPIO入力・エッジ時刻 | MARK/SPACEの長さを測る |
| BC337 / GP18 | PWM | 38kHz前後の搬送波を作る |
| タクトスイッチ / GP15 | GPIO入力 + PULL_UP | 手動送信のきっかけ |
| USB | シリアル出力 | LCDなしで値・状態を見る |
12-1. PWM
GPIOをソフトで1回ずつHIGH/LOWする代わりに、ハードウェア機能で一定周期の矩形波を出す。38kHz付近の搬送波生成に向く。
12-2. PIO
PicoにはGPIOタイミング処理を専用ハードウェアへ任せられるPIOがある。長いエアコン信号をµs単位で正確に再現するとき、通常のMicroPythonループより安定させやすい。
13. 実験は「何が分かったか」を1段ずつ切り分ける
| 段階 | 実験 | 成功すると何が分かる? |
|---|---|---|
| 1 | Pico単体をUSB接続 | MicroPythonとPC通信が動く |
| 2 | PL-IRM1838Bだけ接続 | RAR-8P2の赤外線を38kHz受信器で観測できるか |
| 3 | 複数ボタンのMARK/SPACEを保存 | 操作ごとに信号列がどう変わるか |
| 4 | BC337 + IR LEDで38kHz送信 | 送信回路そのものが動く |
| 5 | 記録波形を再送 | エアコンを自作回路から操作できるか |
| 6 | DHT20のI²C scan | 0x38が見え、I²C配線が成立 |
| 7 | 温湿度を読み出す | センサー値を制御判断へ使える |
| 8 | ボタン統合 | 手動操作と自動処理をまとめられる |
全部を最初から接続すると、動かなかったときに原因が分からない。電源→受信→送信→センサー→統合の順で進めると、故障箇所を限定できる。
14. 壊さないために覚える原則
- 配線を変えるときはUSB電源を抜く。
- 3.3VとGNDを直接つながない。
- VBUS約5VをGPIOへ入れない。
- LEDには必ず電流制限抵抗を入れる。
- BC337のC-B-Eを確認する。
- 47µF電解コンデンサの+/−を逆にしない。
- すべてのGNDを共通にする。
- 最初は安全側の330ΩでIR LEDを試す。
- DHT20のSDA/SCLプルアップと0.1µFを忘れない。
15. 用語集
| 用語 | 意味 |
|---|---|
| GPIO | プログラムからHIGH/LOWの入出力などを制御できる端子。 |
| HIGH / LOW | デジタル信号の2状態。今回のGPIOではおおむね3.3V側 / 0V側。 |
| プルアップ | 信号が誰にも駆動されていないとき、抵抗でHIGH側へ保つ。 |
| I²C | SDAとSCLを共有して複数機器と通信する方式。 |
| PWM | 一定周期でON/OFFを繰り返す信号をハードウェアで生成する機能。 |
| デカップリング | 部品の近くにコンデンサを置き、電源ノイズや瞬間的変動を抑える。 |
| トランジスタ | 小さい信号で別の電流経路を制御できる半導体部品。 |
| Collector / Base / Emitter | 今回使うNPNトランジスタBC337の3端子。 |
| 搬送波 | 情報を運ぶための高速な周期信号。今回まず試すのは約38kHz。 |
| MARK / SPACE | 赤外線搬送波を出している区間 / 出していない区間。 |
| 復調 | 高速な搬送波から情報部分を取り出すこと。 |
16. 確認問題
Q1. Picoに約5VのVBUSがあるのに、なぜGPIOへ5Vを入れてはいけない?
VBUSは電源端子であり、GPIOの信号電圧仕様とは別だから。GPIOは3.3V系として扱う。
Q2. DHT20のSDAとSCLに5kΩを入れる目的は?
I²Cの信号線を、誰もLOWへ引き下げていないときに3.3VのHIGHへ戻すプルアップ。
Q3. IR LEDの330Ωは何のため?
IR LEDへ流れる電流を制限し、LEDや回路への負担を抑えるため。
Q4. なぜIR LEDをGPIOへ直接つながずBC337を使う?
GPIOはBC337のBaseだけを小電流で操作し、IR LED側の主電流を別経路でON/OFFするため。
Q5. 0.1µFと47µFは同じ役割?
どちらも電源安定化に関係するが、0.1µFはDHT20近傍の高周波ノイズ対策、47µFはPL-IRM1838B電源側でより大きな変動を抑える用途。47µF電解には極性がある。
Q6. PL-IRM1838Bがあると、Picoは38kHzの1周期ずつを測る必要がある?
基本的には不要。PL-IRM1838Bが搬送波を復調し、Picoは主にMARK/SPACEの時間列を受け取る。
Q7. 今回「38kHz」と言い切ってよい?
送信実験の最初の値としては使うが、RAR-8P2の正確な搬送波は実機確認対象。PL-IRM1838Bで受信できるか、再送で動作するかを実験する。
Q8. 全部一度につないで試さない方がよい理由は?
失敗したときに原因を特定しにくくなるから。受信、送信、DHT20、ボタンを個別に確認してから統合する。
参考資料
- Raspberry Pi Ltd.「Raspberry Pi Pico 2 W Datasheet」
- Aosong / ASAIR「DHT20 Data Sheet」
- Para Light Electronics「PL-IRM1838B Data Sheet」
- OptoSupply「OSI5LA5A33A-B Data Sheet」
- Fairchild / ON Semiconductor「BC337/338 Datasheet」
この座学編は回路の原理理解用。実際の穴位置・物理ピン位置・作業順は「第一部 自由研究資料」のブレッドボード配線編を使用する。