(Android, PIC)赤外線リモコンのエミュレーションのための送信回路サンプル

softdown-icon-android.png (Android, PIC)赤外線リモコンのエミュレーションのための送信回路サンプル
(Android, PIC) IR Remote Control Emulation sample Circuit Board



戻る一つ前のメニューに戻る

目次

ソフトウエアのダウンロード

soft-ico-download.gif 各プログラムのソースコードをSubversionからダウンロード
soft-ico-download.gif 各プログラムのソースコードをGitHubからダウンロード(バックアップ サイト)
soft-ico-download.gif 各プログラムのソースコードをGoogle Codesからダウンロード(バックアップ サイト 2015年8月で更新停止)
soft-ico-download.gif プロジェクトディレクトリの全ファイルをGoogle ドライブからダウンロード

リポジトリ内のサブディレクトリには、次のソフトウエアが入っています

  • LIRC の conf 形式RAWデータをデコードし、CSVファイルに変換するPerlスクリプト
  • 送信回路にBluetoothシリアル接続し、CSVデータを送信するAndroidソフトウエア
  • PICマイコンを使った送信回路のPIC 16F1827用のファームウエア

機能の概要

android-ir-sender-matrix.png

図のSVGファイルをダウンロード

送信回路の作成

android-ir-sender-16f1837-circuit.png

BSch3V用回路図ファイルをダウンロードする

回路図には記載していないが、三端子レギュレータ周りにコンデンサが必要。データシートよりCin > 0.1uF、Cout > 47uF 以上のものが必要。

部品表

名称 型番・仕様 個数・価格
PICマイコン 16F1827 1個(208円)
三端子レギュレータ μPC29M33A 1個
NPNトランジスタ 2SC1815 1個(21円)
赤外線LED 940nm, If=100mA, Vf=1.2〜1.4V 1個(20円)
炭素皮膜抵抗 2.2kΩ 1個(5円)
炭素皮膜抵抗 1kΩ 2個(5円)
炭素皮膜抵抗 33Ω 1個(5円)
LED 1個(20円)

別途、モジュールを利用したもの

名称 型番・仕様 個数・価格
Bluetoothシリアル HC-06 (VCC=3.6〜6V, RX,TX=3.3V) 1個(5 USドル)

トランジスタ周りの抵抗値計算

コレクタ抵抗(LED側)
LED電流値 IF = 100mA
LED順方向電圧 VF = 1.2〜1.4V → 1.3V
駆動電圧 Vcc = 5.0V
オームの法則より Rc = (5 - 1.3) / 0.100 = 37 Ω → 33 Ω
ベース抵抗(スイッチング抵抗)
ベース電圧 V = 3.3V
半導体損失 0.6V
コレクタ電流 Ic = 100mA
Hfe = 200 → 安全率3として Hfe = 67
オームの法則より Rb = (3.3 - 0.6) / (0.100/67 ) = 1809 Ω → 1.8 or 2.2 kΩ(E12系列)

完成写真

android-ir-sender-circuit.jpg


搬送波の調整

ルネサスのホームページ「NECフォーマットの赤外線リモコン・フォーマット」に、搬送波のタイミングチャートが掲載されている。標準的な信号パターンは次のようなものだ。

android-ir-sender-nec-encode.png

Hi Lo
リーダ(スタートビット) 16t = 9000us 8t = 4500us
1 t = 560us 3t = 1690us
0 t = 560us t = 560us
トレーラ(ストップビット) t = 560us 108 ミリ秒の残り

信号のHi部分は、38kHzの搬送波で構成され、デューティ比は1/3とされている。PICのPWM出力機能を利用して、設定パラメータはオシロスコープを用いて微調整し、38kHz,1/3デューティ比となるようにする。なお、SONY方式など一部のリモコンは搬送波周波数が40kHzなどと少し違うため、Android機からPICマイコンに送るCSVファイルにPWMコントロール用のパラメータを含められるようにしている。

android-ir-sender-osc-01.jpg
信号フォーマット。横軸1メモリが1ミリ秒

0,1,0,1 … のNECフォーマットの信号。0データのHiが642マイクロ秒、Loが470マイクロ秒というYAMAHAの解析値に近いタイミングにカスタマイズしている。

android-ir-sender-osc-02.jpg
一部分を拡大してみる。横軸が100マイクロ秒

Hiの部分(642マイクロ秒)が、38kHzのキャリア信号で表現されている。今回は、PICで簡単に実現するため、PWMの方形波を用いている。

android-ir-sender-osc-03.jpg
横軸1メモリが10マイクロ秒

デューティ比をだいたい1/3にした

PR2, CCPR1L 周波数 (kHz) Hi : Lo (μsec)
25,6 38.55kHz 6.8 : 19.2
25,7 38.55kHz 8.0 : 18.0
25,8 38.55kHz 8.8 : 17.2
25,9 38.55kHz 10.0 : 16.0
25,10 38.55kHz 10.8 : 15.2
25,11 38.55kHz 12.0 : 14.0
25,12 38.55kHz 12.8 : 13.2
PR2, CCPR1L 周波数 (kHz) Hi : Lo (μsec)
24,8 40.1kHz 8.8 : 16.0
24,7 40.1kHz 8.0 : 17.2
PR2, CCPR1L 周波数 (kHz) Hi : Lo (μsec)
26,8 37.1kHz 8.8 : 18.0

LIRC confをデコードしCSVに変換するスクリプトの作成

soft-ico-download.gif Subversion内のサブディレクトリlirc_conf_to_csvにスクリプトを格納してる。

LIRC confファイル(日立のテレビのコード)
begin remote
  name  tv-hitachi.conf
  flags RAW_CODES|CONST_LENGTH
  eps            30
  aeps          100
  gap          107764
 
      begin raw_codes
 
          name on
             9050    4410     657     489     650     473
              626     472     649     496     626    1623
              622     499     648    1606     614     498
              622    1617     626    1623     673    1542
              651    1628     692     423     621    1624
              621     499     623    1623     621    1621
              621    1622     623    1622     623     499
              621    1623     725     396     621     497
              630     492     623     475     649     473
              649     497     624    1594     650     472
              651    1622     628    1590     647    1625
              620
 
          name d-1
             9049    4416     645     496     625    1619
              625    1626     619     502     619    1618
〜以下省略〜

これをlirc_nec_decode.plスクリプトを用いてデコードすると

CSVファイル(デコード後)
on = 0A,F5,E8,17,
d-1 = 6A,95,8E,71,
d-2 = 6A,95,4E,B1,
d-3 = 6A,95,CE,31,
d-4 = 6A,95,2E,D1,
〜以下省略〜

また、lirc_nec_decode.plスクリプトを用いてRAW形式で整形だけしてやると

CSVファイル(RAW形式デコード後)
on = B5,58,0D,09,0D,09,0C,09,0C,09,0C,20,0C,09,0C,20,0C,09,0C,20,0C,20,0D,1E,0D,20,0D,08,0C,20,0C,09,0C,20,0C,20,0C,20,0C,20,0C,09,0C,20,0E,07,0C,09,0C,09,0C,09,0C,09,0C,09,0C,1F,0D,09,0D,20,0C,1F,0C,20,
d-1 = B4,58,0C,09,0C,20,0C,20,0C,0A,0C,20,0D,08,0D,20,0C,0A,0C,1F,0C,09,0C,09,0D,1F,0E,08,0C,20,0C,09,0C,20,0E,1E,0C,09,0C,09,0D,09,0D,20,0C,20,0C,20,0C,09,0D,09,0D,20,0C,1F,0D,20,0C,09,0C,09,0D,09,0C,20,
d-2 = B4,58,0D,09,0C,20,0C,20,0C,09,0C,1F,0D,09,0D,20,0C,09,0C,1F,0C,0A,0C,09,0C,20,0C,09,0D,1F,0C,09,0C,20,0C,09,0C,20,0C,09,0E,07,0D,20,0C,1F,0C,1F,0C,09,0C,20,0D,09,0C,20,0C,20,0C,09,0D,08,0D,08,0D,20,
d-3 = B5,58,0D,09,0C,20,0C,20,0C,09,0C,1F,0C,09,0C,20,0C,0A,0C,1F,0C,0A,0C,08,0C,20,0C,09,0C,20,0C,09,0C,1F,0C,20,0C,20,0C,09,0C,09,0D,20,0C,20,0C,20,0C,09,0D,09,0C,09,0C,1F,0C,20,0D,08,0C,09,0C,09,0C,1F,

これらのCSVファイルは、Android用コントロール ソフトウエアで読み込み可能。

Android用コントロール ソフトウエアの作成

android-ir-sender-operate-pic.jpg

lirc_nec_decode.plスクリプトでデコードしたCSVファイルの先頭に、コントロール用パラメータ行を付加すしたものを読み込ませる。なお、コントロール用パラメータの書式は

CSV内のコントロール用パラメータ行書式
@param = mode,pr2,ccpr1l
@timing = start_hi,start_lo,signal_hi,signal_1_lo,signal_0_lo
@title = タイトル行文字列
  • mode : 下位8ビットが 1=NEC/家電協コード, 2=PWMテスト信号連続, 4=テスト信号, 5=RAW。上位8ビットの1ビット目はNEC/家電協コードを2回連続送信する時
  • pr2, ccpr1l : PICマイコンのPWM制御
  • start_hi : スタートビットのHi時間(μsec)
  • start_lo : スタートビットのLo時間(μsec)
  • signal_hi : 通常信号1または0のHi時間(μsec)
  • signal_1_lo : 通常信号1のLo時間(μsec)
  • signal_0_lo : 通常信号0のLo時間(μsec)

何も指定しない時のデフォルト値は

CSV内のコントロール用パラメータのデフォルト値
@param = 1,25,8
@timing = 9000,4500,560,1690,560
@title = [CSVファイル名]

動作中の画面例

android-ir-sender-screen01.jpg
Bluetoothデバイスの選択画面(ペアリング済みのみを一覧表示)

android-ir-sender-screen02.jpg
コード送信画面

サンプルCSV

実際に家電製品のコントロールに成功したサンプルCSVファイルを、soft-ico-download.gif Subversion内のサブディレクトリsample-csvに格納してる。

NECフォーマットの場合の例

@param および @timing はデフォルト値で構わない場合は、省略している

日立製テレビ
@title = 日立 液晶テレビ
電源 = 0A,F5,E8,17,
画面表示 = 0A,F5,08,F7,
音声多重 = 0A,F5,10,EF,
入力切替 = 0A,F5,90,6F,
地デジ 1 = 6A,95,8E,71,
地デジ 2 = 6A,95,4E,B1,
地デジ 3 = 6A,95,CE,31,
〜 以下省略 〜

東芝のDVDレコーダーは、コードを2回送信するために @param を設定している。

東芝製DVDレコーダー
@param = 17,25,8
@timing = 9100,4400,600,1600,500
@title = 東芝DVDレコーダー
電源 = A2,3D,48,B7,
トレイ 開閉 = A2,3D,88,77,
放送切替 = A2,3D,84,7B,
スタートメニュー = A2,3D,62,9D,
入力切替 = A2,3D,F0,0F,
ドライブ切替 = A2,3D,45,BA,
録画切替 TS/RE = A2,3D,C6,39,
〜 以下省略 〜
家電協フォーマットの場合の例

コードを2回送信するために @param を設定している。また、家電協フォーマットは信号のタイミングがNEC方式と違うため @timing も設定している

パナソニック製 天井シーリングライト
@param = 17,25,8
@timing = 3500,1600,540,1200,360
@title = Panasonic室内照明
ch1-点灯・普段 = 34,4A,90,B4,24,
ch1-消灯 = 34,4A,90,F4,64,
ch1-白い色 > = 34,4A,9C,09,95,
ch1-暖かい色 > = 34,4A,9C,89,15,
〜 以下省略 〜

使用許諾条件

GNU GPL フリーソフトウエア

GNU 一般公衆利用許諾書 (GNU General Public License v3)

戻る一つ前のメニューに戻る