赤外線リモコンリピーター(中継器)(3)

ESP32のリピーターですが,難航してます。とりあえず,信号を送ることはできるようですが,まず取り組ん
だのは,38kHzの変調をすることです。下記のようなスケッチで,波長を探りました。

 startTime = millis();
  for(unsigned long k=0;k<38000;k++){
    digitalWrite(IR_TRANS_PIN, HIGH);
    delayMicroseconds(11);   // キャリア周波数38kHzでON/OFFするよう時間調整
    digitalWrite(IR_TRANS_PIN, LOW);
    delayMicroseconds(14);   // キャリア周波数38kHzでON/OFFするよう時間調整
  }
  endTime=millis();


  Serial.println(endTime-startTime);

出力をハイにするための  delayMicroseconds(**); の括弧のなかの数値を調整して,計測時間が
1000msに近くなるように調整しました。その際,ピンの出力をHIGHにしたときと,LOWにしたときの
時間が,1:3(デュティ比1/3)になるようにしました。その後,実際に動かしてみて,リモコンで
機器が反応するように調整をしました。結果,デュティ比1/3では,反応せす,11:14 ぐらいで反応
しました。
リピーターとして動かすスケッチは至ってシンプルで,受光部からの信号が-の出力があるときだけ赤外
線をだせばいいので,

void loop() {
  while(digitalRead(IR_RECIVE_PIN) == 0 ) {   // 赤外線を検知=0, 検知していない=1
      digitalWrite(IR_TRANS_PIN, HIGH);
      delayMicroseconds(11);   // キャリア周波数38kHzでON/OFFするよう時間調整
      digitalWrite(IR_TRANS_PIN, LOW);
      delayMicroseconds(14);   // キャリア周波数38kHzでON/OFFするよう時間調整
  }
}

初期設定を除いたLOOPはこれだけです。
下記のようなPWMを発生するコマンドもあって,

ledcWriteTone(LEDC_CHANNEL,CARRIER_FREQ);

簡単に38Khzの信号がだせるのですが,このコマンドの後に何かをすると,うまく動かなくなります。
間に,delay(5) ぐらいの間をとらないとだめみたいなので,あまり好きではないのですが,使うのを
やめて

delayMicroseconds(**);

を使って,38kHzの信号を作成しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA