• 2

[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

更新:
2013-04-11
IrTxGUI.exe version 1.0.0.1
Bug fix:
IrTxGUI 界面最小尺寸
更改 Output device 後,離開 IrTxGUI 時可選擇不儲存 IrTx.ini
啟動 IrTxGUI 時會檢查 Layout.ini 是否存在

2013-04-06
經過圖書館見到有部 Win7 32-bits 的電腦,趁機試試 IrTxGUI,初步測試算是成功(只是用耳機測試 Test 按鈕能正確發聲,沒真正測試發射紅外線)。不過我發現一個潛在問題,這部電腦的音效驅動程式有點笨,無論 3.5mm 或 SPDIF 的音效輸出端名稱都同樣叫做 HD Audio Output,在 IrTxGUI 選擇 Output Device 時會有點麻煩。





我一向習慣在電腦用電視卡看電視,很自然地就想到用電腦遙控電視機的周邊產品(例如錄影機、收費電視的解碼器),而我對這方面的認識是起源於 Jetter 大在這裡發表的一篇教學:[很好DIY] WinLIRC電腦萬用紅外線遙控器,Jetter 大的教學篇雖然只提及讓電腦接收紅外線遙控訊號,但 WinLIRC 其實也可以發射訊號,我這幾年都一直在使用 WinLIRC 的 Com port 接收器及發射器。不過隨著 Com port 被淘汰,近年新出的電腦主機板上已不再附帶 Com port,而一般的 USB→Com port 轉換器又不適合 WinLIRC 使用,所以開始要另謀出路。

接收方面,新版的 WinLIRC 已可以透過很容易 DIY 的音效端接收器從電腦的 Line-in/Mic-in 接收遙控訊號,我心想,反過來是否可行呢?我曾問過 WinLIRC 目前的作者,希望 WinLIRC 能加入以音效輸出端做發射的功能,可惜對方沒這個打算,不過卻給我介紹了這個超簡單的發射器:
http://www.lirc.org/html/audio.html

這發射器的原理很簡單,先用 WinLIRC 的音效端接收器從原裝遙控器錄取訊號,加上遙控器常用的38kHz 載波後存檔成音效 Wav 檔,發射時就把這 Wav 檔播放到發射器。有關接收器、發射器的製作以及錄製遙控 Wav 檔的方法,KaiserChen 大已在這裡的 iPhone 討論區發表過一篇教學:[DIY]便宜好用-使用耳機孔的IR遙控器(適用可播.WAV的player) 文長圖多,我不會再在這裡重複,只會在稍後加上小許補充。


這個製作需要:
1. 自製紅外線接收器
2. 自製紅外線發射器
3. Audacity(或其它可顯示音效檔波形的剪接軟件)
4. 發射軟件IrTx
5. 2003 或之後版本的 Excel(非必要)
6. WinLIRC(非必要)

自製接收器
以下是我用的 WinLIRC Audio receiver:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

由於這接收器會從電腦的 USB 插座取電,而 USB 的 Gnd 和音效輸入端的 Gnd 是互通,因此製作時要小心分清楚 USB 的接腳,萬一誤將 +5V 和 Gnd 掉換,等於直接把電腦的 +5V 與 Gnd 短路,有可能對電腦構成破壞性損害。有關這接收器的詳細製作方法可以參考我在另一個討論區的舊作:WinLIRC - DIY 紅外線遙控電腦

亦可以用 KaiserChen 大製作的接收器。

WinLIRC Com port 接收器的使用者也可以用 WinLIRC 錄取遙控訊號,詳請可以看我放在KaiserChen 大教學篇 #15 的回覆。


自製發射器
以下是來自 LIRC 的簡單發射器,以及我修改的有電源版本發射器:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

原裝設計的發射距離比較短,即使把 R1 短路,發射距離仍然很短,以我自己做的測試,在正常室內環境光線下(無特別強光直接照射受控電器),只要發射器對得準,1m 距離內是很可靠;超過 1m 開始變差,對得越準、室內光線越暗,成功遙控得到的機會就越大,超過 1.5m 就完全不能遙控。

至於有電源的發射器,發射距離跟一般遙控器差不多。同我的 WinLIRC Audio receiver 一樣,這發射器的電源來自電腦 USB 插座,製作時要小心分辨 +5V 和 Gnd,千萬不能駁錯!另外,降低 R4 阻值可以增加 IR Led 的亮度,從而得到更遠的發射距離,但不能完全短路,以免超出 USB 埠可輸出的電流上限。


系統設定
近年的桌上型電腦主機版上的音效晶片,大多附上兩組音效輸出端,一組在機箱背面用來接駁喇叭,另一組是機箱正面的耳機插孔,這兩組音效輸出端是可以透過音效晶片驅動程式設定為分開獨立使用,例如將機箱背面的音效輸出端用來接駁喇叭播放正常音效,而機箱正面的耳機插孔用來駁發射器,發射遙控訊號時是不會影響到正常音效播放。

以下是 VIA 音效晶片的 WinXP 驅動程式設定方式:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)
請把耳機插孔的主音量和 Wave 音量開到最大。

其它音效晶片、其它 Windows 版本的驅動程式,都應該找到相似的選項。如果想保留機箱正面的插孔用來接駁耳機,又或者電腦上只得一個音效輸出端,也可以另外插一個外置的 USB Soundcard 作為發射遙控之用。

之後請進入:控制台→聲音及音訊裝置→音訊,選擇用來駁喇叭播放正常音效的預設裝置。
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

很多影音、遊戲軟件都是預設使用 Windows 的預設音效裝置,所以通常不需要為個別軟件再做設定。

錄製遙控 Wav 檔
做好接收器和發射器後就可以依照 KaiserChen 大的教學篇錄製遙控 Wav 檔。我在 KaiserChen 大的教學篇 #15 放了一個以 Excel VBA 寫成的小程式,可以先一次過從原裝遙控器錄取所有按鈕的訊號,然後用這 Excel VBA 程式分割成每個按鈕一個獨立遙控 Wav 檔。

錄取訊號時有幾點要注意:
盡可能用 Line-in 進行錄音。如果只能用 Mic-in,請先檢查音效晶片驅動程式中有關 Mic-in 的選項,如果有自動音量控制、軟件音量增益、去除迴音、去除環境噪音……等等的額外功能,應該全部停用。

基於不同音效晶片的設計,從原裝遙控器錄取訊號時可能會錄到以下兩種方向的波形,我的 Excel VBA 程式會自動分辨兩種波形的方向。不過,如果人手製作遙控 Wav 檔的話就要注意,如果錄得先向上走的波形,載波應加在向上凸起的位置;相反,如果錄得先向下走的波形就要將載波加在向下凹的位置。
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

錄取訊號時不要將錄音音量開得太大,以先向上走的波形為例,最理想的音量是只有每段訊號的起始部份剛好碰到 1.0。
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

一組遙控訊號的實際時間長度是很短,錄取訊號時難免會錄得超過實際所需的長度,因此有需要作出刪減,而刪減位置要視乎個別遙控器所用的通訊方式。雖然遙控器的通訊協定五花八門,但大致上可分為四種,先講頭三種,以下是三個錄取自不同遙控器,經我的 Excel VBA 程式分割出來的遙控 Wav 檔:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

第一種是長按按鈕時也只會發射出一次訊號。

第二種是先發射一次較長的訊號,之後每隔一段時間再重複發射一段短訊號,直到遙控器按鈕被放開。你可以用 Audacity 的選取工具,由第一段長訊號的結尾開始,用滑鼠拉選到最尾(即是紅線之後),然後用靜音工具將後面的重複訊號變成靜音(但暫時不要刪除,下面第三、四種訊號都一樣)。

第三種是相同的訊號會以固定的間隔時間重複地發射,這種訊號可從第一段訊號結尾開始,把之後的位置變成靜音。

至於第四種訊號,驟眼看起來就好像第三種,同樣是以固定的間隔時間重複地發射,不過,如果將頭兩段訊號放大來看,會發現它們其實是不一樣,整個訊號實際上是 A、B、A、B……的輪流地重複發射,有關的電器需要先後收到 A 和 B 段才能受控,因此要保留頭兩段訊號,由第二段訊號結尾開始,把之後的位置變成靜音。
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

將遙控 Wav 檔的多餘重複訊號靜音後就可以作初步測試,將發射器經延長線接駁到電腦的耳機插孔,並將發射器對準受控電器的接收器(如果用無電源的發射器,不能距離太遠,而且要對得準),用 Audacity 開啟一個遙控 Wav 檔,在 Audacity 選擇相關的播放裝置後就可以播放遙控 Wav 檔,如果一切順利,受控的電器應該會作出相關的反應。如果受控電器無反應,請檢查耳機插孔的播放主音量、Wave 音量,以及 Audacity 的播放音量,全部都應該開到最大,如果仍然是無反應,請再看 KaiserChen 大的教學篇之下的回覆,有些常見的問題應該可在那裡找到解決辦法。

確定遙控 Wav 檔能正常使用後,就可以把多餘的靜音位置剪掉,不過,當兩個遙控訊號先後發射時,兩個訊號之間必需有少許分隔時間,受控電器才能分辨出這是兩個訊號,因此不能把遙控 Wav 檔裁剪到只剩下實際訊號部份,應該在後面保留一小段靜音作為分隔之用,至於這段靜音的長度,視乎個別受控電器而有所不同,需要嘗試。以香港的有線電視解碼器為例,假設我想轉去 12 台,需要先後按遙控器的 1 和 2 鍵,先用 Audacity 同時開啟 1 和 2 鍵所屬的遙控 Wav 檔,按一下時間移位工具,用滑鼠將 2 鍵的遙控 Wav 檔向右拉至 1 鍵遙控 Wav 檔之後就可以嘗試播放,如果受控電器未能正確接收到 1 和 2 鍵的遙控訊號,可將 2 鍵的遙控 Wav 檔再進一步向右移,重複嘗試直至受控電器能正確接收到 1 和 2 鍵的訊號,這兩個 Wav 檔之間的距離就是需要保留用作分隔的長度,請按一下選取工具,由 1 鍵 Wav 檔的紅線位置開始,用滑鼠一直拉選到最尾,再按剪下工具把多餘的靜音位置剪掉,關閉 2 鍵 Wav 檔後就可以存儲 1 鍵 Wav 檔(檔案→匯出)。
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

之後逐一開啟其它遙控 Wav 檔,在實際訊號之後保留一段相同長度的靜音,把之後的位置剪接後存檔。

不過我發現,如果要連續發射相同的遙控訊號(例如想轉台去 11、22、33……等等,同一個數目字按鈕要連續按兩下),兩個訊號之間需要有較長的分隔。要解決這問題,當然可以在裁剪每個遙控 Wav 檔時保留更多靜音位置,但這樣做會增加檔案體積,而且想要連續發射兩個不同的遙控訊號時也不必要地分隔較長時間,因此我建議仍然用以上方法去決定要保留的靜音長度。至於解決辦法,就是另外做一個一小段靜音的 Wav 檔,在有需要的時候將這靜音 Wav 檔插入兩個遙控 Wav 檔中間。


發射軟件 IrTx
[按這裡]下載 IrTx.rar,解壓到一個新資料夾後可得以下檔案:
IrTxGUI.exe,圖像界面版本程式
IrTxCMD.exe,命令行版本程式
NAudio.dll,NAudio 音效程式庫
IrTx.ini,主要設定檔
Layout.ini,圖像界面按扭設定檔
Silence.wav,靜音音效檔
Test.wav,測試音效檔(可以不要)
Ca-*.wav,香港有線電視遙控器各按鍵的訊號檔(可以不要)

本程式以 Visual Basic.net 2010 Express 寫成,需要配合 .net Framework 4.0 使用。我只在兩部都是 WinXP /SP3 32-bit 以及一部 Win7 32-bit 的電腦上測試過,我不肯定在其它版本的 Windows 上能否正常使用,如果有朋友願意嘗試,不論成功與否,敬請將結果放上來跟大家分享!。

IrTxGUI
首次執行 IrTxGUI.exe 會先出現以下提示:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

按[確定]後請按[Options→Output Device]選擇用來接駁發射器的音效輸出端,然後再按[Options→Save settings]將設定儲存到 IrTx.ini,以後再執行 IrTxGUI 時無需每次都做設定,不過,如果更改過 Windows 的預設音效裝置,又或者新增或移除過音效硬件就需要重新再選擇 Output Device。
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

IrTxGUI 的用法很簡單,我刻意將按鈕排列得同標準鍵盤右邊的數字/方向鍵一樣,無論用滑鼠按按鈕或者按鍵盤,都會播放出相關的遙控 Wav 檔。
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

當中的 Test 按鈕是用作測試之用,按它會播放一個音頻 Wav 檔,即使在製作發射器之前,也可先用耳機測試本程式能否在正確音效輸出端播出 Wav 檔。測試過後,可以透過修改 Layout.ini 把這按鈕刪除或改為其它用途。

當初我寫這程式的目的是為了遙控香港的有線電視解碼器,因此把它的遙控 Wav 檔(Ca-*.wav) 也放入壓縮檔裡,各按鈕的功能也是針對這解碼器而設。這些 Wav 檔以及原本的按鈕設定對台灣人來講應該是無用,可以刪除。只要修改一下 Layout.ini 及重新錄製新的遙控 Wav 檔,就可以將本程式用來遙控其它電器。

Layout.ini 是個 Unicode 編碼的純文字格式檔案,可以用記事本打開,它的第一行是 IrTxGUI 左上角所顯示的名稱,之後每行是一個按鈕的設定參數,最多可加入 100 個按鈕,而 IrTxGUI 的界面大小會因應按鈕的位置而自動調整。
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

每個按鈕最小有 7 個以逗號分隔的參數,依次序如下:
1. 按鈕名稱,例如上圖的「Hello」、「測試」
2. Keycode 鍵盤碼,例如右邊數字鍵盤的「0」鍵的鍵盤碼是 96。以上圖的設定,按右邊數字鍵盤的「0」鍵就等於用滑鼠按「Hello」按鈕。
3. 按鈕闊度
4. 按鈕高度
5. 按鈕與左邊界的距離
6. 按鈕與頂邊界的距離
7. 要播放的遙控 Wav 檔名

每個按鈕可播放超過一個遙控 Wav 檔,其餘的檔名以逗號分隔放在後面。例如 National Geographic Channel 在香港有線電視的台號是 52,轉台時需要按 5、2、OK,用以下的參數做一個[NGC]按鈕,按一下就依次序發出三個遙控訊號:
NGC,109,45,25,331,41,ca-5.wav,ca-2.wav,ca-ok.wav

之前提過,如果想連續發射兩個相同的遙控訊號,例如想轉台到 11、22、33……等等,發射兩個遙控訊號之間需要稍長停頓時間,所以我特別做了一個一小段靜音的音效檔 Silence.wav 用來放在兩個數字的遙控 Wav 檔中間,例如想用[AXN]按鈕轉到 22 台可以把按鈕參數寫成:
AXN,111,45,25,229,41,ca-2.wav,silence.wav,ca-2.wav,ca-ok.wav

修改 Layout.ini 後存檔,關閉再重開 IrTxGUI 就會使用新設定。

IrTxCMD
IrTxCMD 是命令行版本的發射程式,用法如下:
IrTxCMD WaveFileName(s)

遙控 Wav 檔名以空格分開依次序放在 IrTxCMD 後面,例如之前提過轉去 National Geographic Channel 要按 5、2、OK 三個按鈕,可以把命令行寫成:
irtxcmd ca-5.wav ca-2.wav ca-ok.wav

如果個別遙控 Wav 檔的檔名本身有空格,就需要在這檔名前後加上 Double quotation mark(”),例如 File A.wav 的 File 和 A 之間有空格:
irtxcmd File1.wav “File A.wav” File2.wav

我寫這個命令行版本的主要目的是使用 Windows 的[排定的工作],在預設時間遙控有線電視解碼器轉台,例如想在逢星期五晚 21:00 轉台到 Discovery Channel(53台),首先進入控制台→排定的工作,依指示找出 IrTxCMD.exe,喜歡的話可以把這項工作的名稱改為 Discovery Channel,選擇[每周]後按[下一步]:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

設定時間(建議預早小小時間)及日期(可設定多日)後按[下一步]:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

輸入 Windows 的使用者名稱和登入密碼後按[下一步]:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

選擇[按下完成後開啟這項工作的進階內容]後按完成:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

在內容版面的[工作→執行],在 IrTxCMD.exe 後加上要播放的遙控 Wav 檔名,以及選擇[啟用(已排定的工作會在指定時間執行)]:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

有需要的話可以進入[設定]如下圖更改電源管理(不建議 Notebook 電腦使用,因為有可能在關機狀態下仍然耗用電池),即使電腦在待命或休眠狀態下,在指定時間之前也會自動醒來執行這工作:
[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)

完成設定後,IrTxCMD 就會在預定的時間發射有關的遙控訊號。

最後附上 Youtube 的示範短片:
http://youtu.be/z5bT5B4vqkU
請開啟中文字幕,並將字幕背境顏色設定為透明。
2013-03-03 3:33 發佈
版大實在是太厲害囉~版大實在是太厲害囉
這麼專業的文章一定要推一下
只是,小弟非本科系, 實在有點難懂
hauikimo
CLaw 大的新文章耶

小弟的紅外線發射器也是為了遙控電視盒的用途,看到大大的文章倍感親切
我目前仍然使用RS-232介面以WinLIRC來控制
但操作的方式跟大大不同,捨棄了圖形介面,改用鍵盤快速鍵來操作
快速鍵的控制使用Autohotkey來編寫,這樣可以方便連結各個訊號的發射
並與其他程式的功能連結來執行一些複雜的功能(例如轉至指定頻道後開啟錄影)

大大也可以嘗試看看這樣的方式,會比圖形介面方便許多

另外有點好奇
如果遙控的聲音輸出跟電視播放時的聲音輸出重疊,是否會互相干擾?
還是需要切換播放裝置來區隔?這樣不就麻煩了?
mav0905 wrote:
CLaw 大的新文章...(恕刪)


我寫命令行版本的 IrTxCMD 是使用了 WinLIRC 的 Transmit.exe 的概念,用法也差不多,分別只是我的 IrTxCMD 可以把多個遙控訊號依次放入同一行指令,而 Transmit 只是每行一個訊號。

IrTxCMD 可配合 AutoHotkey 做出快捷鍵,假設 IrTxCMD.exe 及其它遙控 Wav 檔是存放在 C:\IrTx 資料夾裡,如果想用快捷鍵 Alt-1 轉去香港有線電視的 53 台(需要按遙控器的 5、3 和 OK),可以在 AutoHotkey.ahk 加入以下三行:
!1::
run c:\irtx\irtxcmd ca-5.wav ca-3.wav ca-ok.wav, c:\irtx
return

當然,也可以更進一步控制錄影機進行錄影,例如我的 Sharp 錄影機的第 5 台是有線電視,5 和錄影的遙控 Wav 檔分別是 sv-5.wav 和 sv-rec.wav,可以寫成:
!1::
run c:\irtx\irtxcmd sv-5.wav ca-5.wav ca-3.wav ca-ok.wav sv-rec.wav, c:\irtx
return
(先讓錄影機轉去 5 台,再讓有線電視解碼器轉去 53 台,最後才進行錄影,是因為要確保錄影機已完成轉去 5 台的程序才開始錄影,有必要的話可再加入 Silence.wav)

如果想在自已寫的程式加入播放遙控 Wav 檔的功能也應該很容易,例如 VB.net、Word/Excel 的 VBA 可用 Shell 指令呼叫外部程式(我未正式試過)。


目前的桌面電腦已可以將機箱背面的音效輸出端跟機箱正面的耳機插孔分開獨立使用,以我的設定,我用機箱背面的音效輸出端接駁喇叭播放正常音效,機箱正面的耳機插孔用來接駁遙控發射器,發射遙控訊號時是不會影響到正常音效播放。如果想保留使用耳機,也可以另外插一個外置的 USB Soundcard 用來發射遙控訊號。
原來如此

忘了C大對Autohotkey也是很熟悉,使用圖形介面想必有其考量
是小弟班門弄斧了

mav0905 wrote:
原來如此忘了C大對A...(恕刪)


其實我本來完全不懂寫程式操控 Windows 的音效系統,我之前在 KaiserChen 大的教學篇留言時也只懂得借用 Media Play Classic-Home Cinema 播放遙控 Wav 檔,直到農曆新年有幾天假期,有時間上 Google 找找資料,粗略地學到一些操控音效系統的方法,才邊學邊試的寫出這程式。由於我是新手學習,難免處處碰壁,所以先寫圖形界面程式,萬一程式有什麼錯漏,也能將錯誤訊息以 Lable.text 方式顯示在程式畫面,其實目前的 IrTxGUI 程式中還保留了 Label,只不過被我隱藏了(因為懶得再改)。直到後來算是初步懂得操控音效系統,才開始寫命令行版本的 IrTxCMD,這命令行版本才是我真正想要的程式,不過,既然已把 IrTxGUI 寫出來,就一起放進壓縮檔裡,任由用家自行決定用那一個版本。況且,IrTxCMD 也需要先選擇用來接駁發射器的音效輸出端,這工作就交由 IrTxGUI 去做(也是因為懶,否則要為 IrTxCMD 另外寫選擇音效輸出端的界面)。

CLaw wrote:
我一向習慣在電腦用電...(恕刪)

多謝分享

CLaw wrote:
更新:2013-04...(恕刪)


您好,不好意思,因為非電子科出身,想參閱您在 HKEPC 上的詳細製作

不過因為該論壇需要登入後才可瀏覽圖片,且目前已經不提供無邀請碼註冊

不知道您是否可以發送邀請碼,或者方便有其他方式讓我拜讀您的大作呢?

感謝!
ckmarkhsu wrote:
您好,不好意思,因為...(恕刪)


我也不知 HKEPC 現在要有邀請碼才能加入做新會員,我要先看看那邊發送邀請碼的方法才能回覆。

HKEPC 的電子 DIY 區,非會員也能看圖,我估計你是想看我在 DIY 區有關 WinLIRC 的舊文。你可先看看其他教學,以下是一篇製作 WinLIRC 音效接收器的教學,雖然接收器的線路跟我的略有分別,但基本原理是一樣的。

IR audio receiver DIY(自製紅外線音頻接收器)及電腦遙控器

  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?