うしこlog
公開: 2013/06/10

TVリモコンの送信プログラム

今回の内容

 Japaninoを使って、TVリモコンの命令を赤外線で送信することでTVを動かします。そのための送信回路および送信プログラムを製作していきます。

前回と次回の内容

 前回までで、Japaninoの環境構築やTVリモコンのフォーマットの説明、TVリモコンの受信プログラムを作成してきました。
JananinoでTVリモコンを作成する記事については今回で最後なので、次回はありません。

[追記] JapaninoでTVリモコンを作成するための記事をまとめましたので、ぜひご覧ください。

Japaninoでリモコン作成

  1. Japaninoの環境構築と使い方
  2. Japaninoで簡単プログラミング
  3. リモコンフォーマットについて
  4. TVリモコンの受信プログラム
  5. この記事

送信用回路

送信用回路は、抵抗と赤外線LEDを直列に繋ぎ、抵抗をjapaninoのD2に繋ぎ、赤外線LEDをGNDに繋ぐだけです。もちろんjapaninoに電源をつなぐことを忘れずに。

送信用回路
送信用回路

送信用プログラム

作成したTVリモコン信号送信プログラムは以下の通りです。


#define WRITE_PIN 2

int data[] = {  //ここに受信した信号を記述
  0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
   0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1
};
int dataSize;
int onTime = 480; 
int offTime = 380;
int highTime = 17;
int lowTime = 8;

void setup()
{
  dataSize = sizeof(data) / sizeof(data[0]);
  pinMode(WRITE_PIN, OUTPUT);
  Serial.begin(9600);  // パソコン(ArduinoIDE)とシリアル通信の準備を行う
  Serial.print("dataSize : ");
  Serial.println(dataSize);
}

void loop()
{
  Serial.print("sending data ...");
  sendData();
  Serial.println("finished sending data");
  delay(3000);  //3秒おきに送信
}

void sendData(){
  for(int k=0; k<5; k++){
    //リーダ部 (38kHz変調 : 26us)
   for(int j=0; j < 3480/26; j++){
     digitalWrite(WRITE_PIN,HIGH);
     delayMicroseconds(highTime);  //9[us]
     digitalWrite(WRITE_PIN,LOW);
     delayMicroseconds(lowTime);   //17[us]
  }
  delayMicroseconds(1700);      //1700[us]

    //データ部 (38kHz変調 : 26us)
  for(int i=0; i < dataSize; i++){
    for(int j=0; j < onTime/26; j++){   //38kHz変調 : 26us
      digitalWrite(WRITE_PIN,HIGH); //点灯
      delayMicroseconds(highTime);   //9[us]
      digitalWrite(WRITE_PIN,LOW);  //消灯
      delayMicroseconds(lowTime);    //17[us]
    }
    if(data[i] == 0){ //0なら off : 380[us]
      delayMicroseconds(offTime);
      Serial.print(" 0");
    }
    else{             //1なら off : 1140[us]
      delayMicroseconds(offTime*3);
      Serial.print(" 1");
    }
  }
    //trailer部 (38kHz変調 : 26us)
  for(int j=0; j < onTime/26; j++){
    digitalWrite(WRITE_PIN,HIGH);
    delayMicroseconds(highTime);  //9[us]
    digitalWrite(WRITE_PIN,LOW);
    delayMicroseconds(lowTime);   //17[us]
  }
  delay(10);     //8ms以上のフレームスペース
  }
}

3行目(int data[]={…})の{}内に前回の受信プログラムにより受信したデータをコピーし、Japaninoへ書き込み、実行します。この作業により受信した信号を送信することができます。受信したリモコンデータを配列で保持して、japaninoのポートにスイッチをいくつか繋げて、スイッチごとにリモコンデータを割りふっておけば、Japaninoがリモコンになりますね!!

最後まで読んでいただきありがとうございました。

<< 受信用プログラム 工作top