LoginSignup
0
0

PICAXEで赤外線リモコンを作り、Arduinoと赤外線通信してみる

Last updated at Posted at 2023-04-12

はじめに

前回はPICAXEの書き込み環境を構築し、動作確認まで終わりました。今回は実際にPICAXEを使って赤外線リモコンを作ろうと思います。追加で必要な部品はスイッチと赤外線LED、抵抗のみ。さらには送信された赤外線信号をArduinoで読み取り、簡単な赤外線通信も試してみたいと思います。
picaxe_ir.jpg

開発環境

  • 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まで指定できます。

配線図

前回作った書き込み回路を流用し、スペースが空いていた左半分を今回使いました。
breadboard-2.png

Blockly

入力ピンはプルアップしています。コマンドの値は左スイッチに0、右スイッチに1を割り当てました。入力ピンの状態が変化するまで待機するブロックを使うと簡単にエッジ検出できるので便利です。また、ソニー製のテレビなら操作できると思います。
picaxe_ir_blockly.jpg

Arduino側について

ここからはArduinoを使って赤外線信号を読み取り、PICAXEで作った赤外線リモコンが正常に動作しているか確認してみます。

主に必要な部品

部品名 個数 参考価格
ESP32-DevKitC 1個 1600円
赤外線リモコン受信モジュール 1個 50円
LED 1個 10円
330Ω抵抗 1個 1円

配線図

実際とは異なる部分もあるため、適宜変更してください。
ir_receiver_breadboard.png

スケッチ

LEDはコマンドの値が0なら消灯、1なら点灯します。つまり、PICAXEで作った赤外線リモコンの左スイッチを押したら消灯、右スイッチを押したら点灯します。

ir_receiver.ino
#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方式の赤外線信号に限るものの簡易的な無線通信の手段としては使えそうです。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0