赤外線リモコン
2025.01.24
YouTube でも紹介しています。画像をクリックすると再生できます。
赤外線リモコンの評価用モジュールを作ってみました。
●赤外線受光モジュール

OSRB38C9AA
テレビ・ビデオ等に使用されている受光モジュールです。
小型パッケージにPINフォトダイオード、アンプ、フィルタを内蔵しており、各種マイコンと簡単にインタフェースすることができます。

データシートにある回路図です。
47Ω抵抗と47uFのキャパシタを取り付けるのみです。

●赤外線発光モジュール
以前メルカリで購入したキットの部品を利用しました

トランジスタ技術2018年3月号 AI電脳製作

●SIR-34ST3F

(3.3V - 1.6V)/12Ω = 142mA
●M28SL-D-T92-K

ピンヘッダーは左からTX,RX,Vin,GNDになっています。
●Adafruit QT Py ESP32-S2 WiFi Dev Board with STEMMA QT
・ESP32-S2 240MHz
・4 MB Flash & 2 MB PSRAM
・2.4 GHz Wi-Fi (SoC)
・Two I2C ports
・Hardware UART
・Hardware SPI
・Hardware I2S on any pins
・3.3V regulator with 600mA peak output
Adafruit QT Py ESP32-S2
Qt Py ESP32-S2 Pinout
受信した信号の解析はメモリーを消費するので、Arduino UNOなどではエラーが発生するかもしれません。
●配線
| IR Module | - | QT Py ESP32-S2 | - | Raspberry Pi |
| TX | - | RX | | |
| RX | - | TX | | |
| Vin | - | 3V | | |
| GND | - | GND | | |
| | | Serial | - | dev/ttyACM0 |
テスト用にDAISOのリモコン・ライトを用意しました

●赤外線リモコン・ライブラリ
赤外線リモコンライブラリIRremoteには派生ライブラリが多数存在します。
色々と試してみたところ、ESP8266,ESP32用のIRremoteESP8266は割と赤外線送信に成功しました。

crankyoldgit/IRremoteESP8266
●開発環境
ソースコードのビルドには、PlatformIOを使用しています。
Arduino開発環境構築 PlatformIO
●IRreceive.ino
赤外線リモコン受信用のソースコードです
#include <IRrecv.h>
#include <IRremoteESP8266.h>
#include <IRutils.h>
const uint16_t kRecvPin = 16;
const uint16_t kCaptureBufferSize = 1024;
const uint8_t kTimeout = 50;
IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, true);
decode_results results; // Somewhere to store the results
uint32_t value;
void setup() {
Serial.begin(115200);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
Serial.print(resultToHumanReadableBasic(&results));
Serial.print(resultToSourceCode(&results));
value = results.value;
Serial.println(value);
delay(500);
}
delay(50);
}
$ platformio device monitor -p /dev/ttyACM0 -b 115200

赤外線送受信モジュールの受光部に向け、リモコンのONボタンを押して、TeraTermに受信情報を表示します。
Protocol : NEC
Code : 0xFF807F (32 Bits)
uint16_t rawData[71] = {
9414, 4440, 676, 478, 698, 480, 700, 476, 700, 478,
700, 478, 700, 476, 702, 478, 700, 504, 674, 1586,
676, 1562, 698, 1560, 700, 1558, 702, 1560, 700, 1560,
702, 1558, 700, 1558, 702, 1558, 702, 476, 700, 478,
700, 476, 702, 476, 700, 478, 700, 478, 700, 478,
700, 478, 700, 1560, 700, 1560, 700, 1560, 700, 1560,
700, 1560, 700, 1558, 700, 1560, 700, 39492, 9392, 2144,
698}; // NEC FF807F
uint32_t address = 0x0;
uint32_t command = 0x1;
uint64_t data = 0xFF807F;
16744575
Protocol が NEC になっています。
次にリモコンのOFFボタンを押して、TeraTermに受信情報を表示します。
Protocol : NEC
Code : 0xFF00FF (32 Bits)
uint16_t rawData[71] = {
9410, 4402, 710, 468, 710, 468, 708, 468, 708, 468,
710, 468, 708, 470, 708, 468, 708, 468, 710, 1550,
708, 1550, 710, 1550, 708, 1552, 708, 1550, 708, 1552,
706, 1552, 708, 1552, 706, 470, 706, 470, 706, 472,
706, 472, 706, 472, 706, 472, 704, 474, 704, 474,
704, 1556, 704, 1556, 702, 1558, 700, 1560, 700, 1560,
698, 1586, 674, 1586, 672, 1588, 670, 39522, 9366, 2148,
694}; // NEC FF00FF
uint64_t data = 0xFF00FF;
16711935

今度はSHARPシーリングライト・リモコンの【全灯】ボタンを押して受信情報を表示します。
Protocol : UNKNOWN
Code : 0xB4778E8B (66 Bits)
uint16_t rawData[131] = {
3556, 1546, 574, 290, 574, 1128, 574, 290, 574, 1128,
572, 290, 574, 1128, 574, 290, 572, 1128, 574, 290,
572, 1130, 574, 290, 574, 1128, 574, 1128, 576, 288,
574, 1128, 574, 290, 574, 1128, 574, 1128, 574, 1128,
574, 1128, 574, 290, 574, 290, 574, 1128, 574, 1128,
574, 290, 574, 1128, 574, 1128, 574, 290, 574, 1128,
574, 290, 574, 288, 574, 290, 574, 290, 574, 288,
572, 292, 574, 290, 574, 290, 574, 288, 574, 290,
574, 288, 574, 1128, 574, 290, 576, 288, 574, 288,
574, 290, 574, 288, 574, 290, 574, 288, 574, 1128,
574, 288, 576, 288, 574, 288, 574, 290, 574, 1126,
576, 288, 574, 288, 576, 1126, 574, 290, 574, 288,
574, 290, 576, 286, 574, 290, 574, 288, 576, 1124,
576}; // UNKNOWN B4778E8B
3027734155
SHARPのシーリングライトの場合、Protocol が 不明(UNKNOWN)になっています。
それでは、リモコンからの受信情報をもとに送信を行ってみます
●リモコン送信
リモコンの送信には下記のような関数が用意されています
・IrSender.sendNEC(.....);;
・IrSender.sendSony(.....);
...............
・uint16_t rawData[] = {.....};
・char prontoData[] = ".....";
先程のDAISOリモコンライトをみてみます
Protocol : NEC
~~~~~
uint32_t address = 0x0;
uint32_t command = 0x1;
プロトコルとアドレス、コマンドがわかっていればメーカー固有の関数を利用できます
IrSsend.sendNEC(address,command,repeats);
DAISOリモコンライトを点灯させる場合は下記のようになります
IrSsend.sendNEC(0x0,0x1,0);
次に、SHARPのシーリングライトをみてみます
Protocol : UNKNOWN
uint16_t rawData[131] = {
3556, 1546, 574, 290, 574, 1128, 574, 290, 574, 1128,
572, 290, 574, 1128, 574, 290, 572, 1128, 574, 290,
~~~~~
プロトコルが不明(UNKNOWN)の場合や、プロトコルが分かっていてもうまく赤外線送信に受信機器が反応しないときには sendRaw()関数が有用です。
プロトコルがわかっていてもこの関数を汎用的に使えます。
IrSend.sendRaw(rawData, 131, 38);
sendRaw()の2番目の引数はrawDataの配列の数で、3 番目の引数は 38 固定で問題ありません。
実際のコーディングは下記のようになります
●IRsendRaw.ino
#include <IRsend.h>
#include <IRremoteESP8266.h>
#include <IRutils.h>
const uint16_t kIrLed = 5;
const uint16_t kCaptureBufferSize = 1024;
const uint8_t kTimeout = 50;
const uint16_t NecTurnOnRaw[71] = {
9414, 4440, 676, 478, 698, 480, 700, 476, 700, 478,
700, 478, 700, 476, 702, 478, 700, 504, 674, 1586,
676, 1562, 698, 1560, 700, 1558, 702, 1560, 700, 1560,
702, 1558, 700, 1558, 702, 1558, 702, 476, 700, 478,
700, 476, 702, 476, 700, 478, 700, 478, 700, 478,
700, 478, 700, 1560, 700, 1560, 700, 1560, 700, 1560,
700, 1560, 700, 1558, 700, 1560, 700, 39492, 9392, 2144,
698}; // NEC FF807F
const uint16_t NecTurnOffRaw[71] = {
9410, 4402, 710, 468, 710, 468, 708, 468, 708, 468,
710, 468, 708, 470, 708, 468, 708, 468, 710, 1550,
708, 1550, 710, 1550, 708, 1552, 708, 1550, 708, 1552,
706, 1552, 708, 1552, 706, 470, 706, 470, 706, 472,
706, 472, 706, 472, 706, 472, 704, 474, 704, 474,
704, 1556, 704, 1556, 702, 1558, 700, 1560, 700, 1560,
698, 1586, 674, 1586, 672, 1588, 670, 39522, 9366, 2148,
694}; // NEC FF00FF
IRsend irsend(kIrLed);
decode_results results; // Somewhere to store the results
uint32_t value;
void setup() {
irsend.begin();
delay(500);
irsend.sendRaw(NecTurnOn, 71, 38);
delay(2000);
irsend.sendRaw(NecTurnOff, 71, 38);
delay(2000);
}
void loop() {}
赤外線発光部をDAISOリモコンライトに向けて、ライトを点灯させた様子です

上記のモジュールはテスト的に使うにはよいのですが、天井のシーリングライトを点灯させようとすると、照明器具に近づけないと反応しません。
離れたところにある機器を制御するには、赤外線LEDに大電流を流す必要があり、ネット上にMOSFETを使った回路が見つかります。
ここでは、Adafruitの製品を利用しました
●Adafruit High Power Infrared LED Emitter - STEMMA JST PH 2mm
2 つの LED が PCB にあらかじめはんだ付けされており、1 つは上向き、もう 1 つは外向きです。
5V で電源を供給している場合、ボードはパルスオン時に LED ごとに約 200mA (合計 400mA) を消費します。3V で電力を供給する場合、ボードは LED ごとに約 100mA (合計 200mA) を消費します。
10 メートル以上の範囲にわたって照射されます。
人間は赤外線で見ることができないため、赤外線 LED が点灯していることを知らせる赤色 LED があります。
この電流消費で LED を長時間点灯し続けることはお勧めしません。LED は IR 照明よりもリモコン送信用です。
Adafruit High Power Infrared LED Emitter - STEMMA JST PH 2mm
さらに広範囲をカバーしたい場合は、追加で 5mm IR LEDをはんだ付けする箇所があります。
●参考文献
普通の赤外線リモコンをマクロ対応学習リモコンにしてみた
Arduino(ESP32)でエアコンの赤外線リモコンの信号をコピーして発信する
Arduinoを使った赤外線リモコンの作り方~信号解析編
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|