PR 記事には広告が含まれています
スポンサーリンク
Translate

赤外線リモコンのコピーを作ろうと思います

スポンサーリンク

シーリングライトのリモコンをコピーして、リモコンを2つにしたいと思います。

スポンサーリンク

リモコンは1台に1つ

リモコンはシーリングライト1台に対して1つしか付いてきません。

例えば、枕元にリモコンを置いておくと、部屋に入る時に照明をONしたい場合、リモコンを枕元まで取りに行って点灯させないといけません。

また、壁のスイッチでOFFしてしまうと、リモコンでONすることができません。

どうも不便なので、これらの不便を解消するためには、壁のスイッチのところにもう一台リモコンを設置すればいいのではないかと考えました。

そこで、リモコンのコピーを作ろうと思います。

スポンサーリンク

赤外線リモコンの信号を受信

ブロック図

赤外線リモコン信号の受信回路ブロック図

リモコンの信号は、赤外線リモコン受信機を使って受信します。赤外線リモコン受信機には、秋月電子で売っているGP1UXC41QSを使いました。

ESP32-C3は、ブレッドボードで使いやすいこれ👇を使いました。

ESP32-C3開発ボード
ESP32-C3を搭載した開発ボードです。DIPパッケージの幅の基板で、ブレッドボードを有効利用できます。

赤外線リモコンの信号を受信すると、赤外線リモコン受信機からは上の黄色の波形が出力されます。この波形をコピーして赤外線で送信すれば、リモコンが完成します。

黄色の波形がLowの時に赤外線が38kHzで発光し、Hiの時に発光が停止ししています。

波形を調べてみると、430us単位でONしたりOFFしたりしています。このため、430us周期で受信機の波形をキャプチャします。

プログラム

#define LED_PIN 10
#define IR_PIN 9
#define T_TIME 427  //us

void setup() {
  Serial.begin(115200);
  delay(100);
  Serial.printf("Hello");
  
  pinMode(LED_PIN, OUTPUT);
  pinMode(IR_PIN, INPUT);
}

bool IRstatus = HIGH;
char payload[40];
int payloadIndex = 0;
int payloadMax = sizeof(payload)-1;
void loop() {
  int totalBitCount = 0;
  int bitCount = 0;
  int lowCount = 0;
  char payloadTemp = 0;
  for( int i=0 ; i<payloadMax ; i++)
    payload[i]=0;
    while( digitalRead(IR_PIN) == HIGH );  //Waiting start data
    digitalWrite(LED_PIN,LOW); 
    {
      delayMicroseconds(T_TIME/2);
      payloadIndex = 0;
      totalBitCount = 0;
      while(1)
      {
        totalBitCount++;
        if(digitalRead(IR_PIN) == LOW)
        {
          lowCount = 0;
          payloadTemp |= 1;
        }else{
          lowCount++;
        if( totalBitCount > 24 && lowCount > 8)
        {
          Serial.println("LOW count over 8 times");
          for( int i=0 ; i=0 ; j--)
          {
            if( ( payload[i] & 1< payloadMax)
            {
              Serial.println("Payload size is over");
              break;
            }
          }else{
            bitCount++;
          }
        payloadTemp = payloadTemp << 1;
        digitalWrite(LED_PIN,bitCount&1);
        delayMicroseconds(T_TIME);
      }
   }
}

赤外線リモコンの信号がHiからLowに切り替わったら、430us周期にキャプチャして、結果をシリアルに出力するプログラムです。

水色の波形がキャプチャのタイミングになっています。

コピーしたリモコンのデータは66msもある、とても長いものでした。最後までデータとキャプチャのタイミングが合っているかオシロスコープで確認します。これがピッタリ合うように、プログラムの3行目のディレイ時間を設定する必要があります。

スポンサーリンク

キャプチャ結果

リモコンのボタンを押すと、シリアル出力にキャプチャした情報が出力されます。

「6畳」という最大の明るさで点灯するボタンのキャプチャ結果は以下のようになりました。

char payload[] = { 0xff, 0x08, 0xa2, 0x88, 0x8a, 0x8a, 0x8a, 0xa2, 0xaa, 0xa8, 0x88, 0x8a, 0x28, 0xaa, 0x2a, 0xa2, 0x22, 0x88, 0x88, 0x80 };

「常夜灯」のボタンのキャプチャ結果です。

char payload[] = { 0xff, 0x08, 0xa2, 0x88, 0x8a, 0x8a, 0x8a, 0xa2, 0xaa, 0xa8, 0x88, 0x8a, 0x28, 0xa2, 0xaa, 0xa2, 0x88, 0x88, 0x88, 0x80 };

「電源」ボタンのキャプチャ結果です。

char payload[] = { 0xff, 0x08, 0xa2, 0x88, 0x8a, 0x8a, 0x8a, 0xa2, 0xaa, 0xa8, 0x88, 0x8a, 0x28, 0x8a, 0xaa, 0xa8, 0x88, 0x88, 0x88, 0x80 };

これで、ON、常夜灯、OFFという一通りの操作が可能となります。

さて次回は、Padaukマイコンを使って、キャプチャしたリモコンの信号を再生し、シーリングライトがON,OFFできるか確認したいと思います。

今回のシーリングライトは、以前高演色LED化したアウトレット品です。

2025.4.16 追加

続きの記事はこちらです。