はじめに
前回はPICAXEの書き込み環境を構築し、動作確認まで終わりました。今回は実際にPICAXEを使って赤外線リモコンを作ろうと思います。追加で必要な部品はスイッチと赤外線LED、抵抗のみ。さらには送信された赤外線信号をArduinoで読み取り、簡単な赤外線通信も試してみたいと思います。
開発環境
- Windows 11 Home 22H2 (22621.1265)
- PICAXE Editor 6.1.0.0
- Arduino IDE 1.8.13
- IRremoteESP8266 2.8.2
PICAXE側について
追加で必要な部品
部品名 | 個数 | 参考価格 |
---|---|---|
赤外線LED | 1個 | 10円 |
タクトスイッチ | 2個 | 20円 |
10kΩ抵抗 | 2個 | 2円 |
100Ω抵抗 | 1個 | 1円 |
赤外線信号のフォーマット
マニュアルによるとPICAXEが出力できる赤外線信号はSIRC方式のようです。これはソニー製品で使われているフォーマットです。送信データは12ビット、15ビット、または20ビットと大きさの異なる3タイプが定義されていますが、PICAXEの場合は12ビットです。7ビットがコマンド、5ビットがアドレスに割り当てられており、アドレスの値は操作対象となるデバイスの種類を表します。ただし、ビジュアルプログラミング言語で開発する場合はアドレスの値がテレビを表す1で固定されており、コマンドの値のみ0から127まで指定できるようです。BASIC言語で開発する場合はアドレスの値も1から31まで指定できます。
配線図
前回作った書き込み回路を流用し、スペースが空いていた左半分を今回使いました。
Blockly
入力ピンはプルアップしています。コマンドの値は左スイッチに0、右スイッチに1を割り当てました。入力ピンの状態が変化するまで待機するブロックを使うと簡単にエッジ検出できるので便利です。また、ソニー製のテレビなら操作できると思います。
Arduino側について
ここからはArduinoを使って赤外線信号を読み取り、PICAXEで作った赤外線リモコンが正常に動作しているか確認してみます。
主に必要な部品
部品名 | 個数 | 参考価格 |
---|---|---|
ESP32-DevKitC | 1個 | 1600円 |
赤外線リモコン受信モジュール | 1個 | 50円 |
LED | 1個 | 10円 |
330Ω抵抗 | 1個 | 1円 |
配線図
スケッチ
LEDはコマンドの値が0なら消灯、1なら点灯します。つまり、PICAXEで作った赤外線リモコンの左スイッチを押したら消灯、右スイッチを押したら点灯します。
#include <IRremoteESP8266.h>
#include <IRrecv.h>
const uint16_t RECEIVE_PIN = 21;
const uint16_t INDICATOR_PIN = 23;
IRrecv receiver(RECEIVE_PIN);
void setup() {
Serial.begin(115200);
Serial.println("Started");
pinMode(INDICATOR_PIN, OUTPUT);
digitalWrite(INDICATOR_PIN, LOW);
receiver.enableIRIn();
}
void loop() {
static decode_results results;
if (receiver.decode(&results)) {
if (results.decode_type == SONY) {
uint32_t address = results.address;
uint32_t command = results.command;
if (address == 1) {
if (command == 0) {
digitalWrite(INDICATOR_PIN, LOW);
} else if (command == 1) {
digitalWrite(INDICATOR_PIN, HIGH);
}
}
Serial.printf("Address: %x, Command: %x\n", address, command);
yield();
}
receiver.resume();
}
}
おわりに
今回はPICAXEで送信側、Arduinoで受信側を作り、赤外線通信を試してみました。SIRC方式の赤外線信号に限るものの簡易的な無線通信の手段としては使えそうです。
参考文献