[測試] [DIY]由電腦遙控有線電視(更新 2013-04-11)

本帖最後由 C_Law 於 2013-4-11 17:07 編輯

更新:
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,初步測試算是成功(只是用 Headphone 測試 Test 按鈕能正確發聲,沒真正測試發射紅外線)。不過我發現一個潛在問題,這部電腦的 Audio driver 有點笨,無論 3.5mm 或 SPDIF 的音效輸出端名稱都同樣叫做 HD Audio Output,在 IrTxGUI 選擇 Output Device 時會有點麻煩。

2013-02-25
17# 加入 Command line 版本的 IrTxCMD.exe

2013-02-23
14# 加入示範短片



由電腦遙控有線電視
一向習慣在電腦用電視卡看電視,順理成章地想到用電腦去遙控電視的周邊裝置(例如機頂盒)。以往一直用 WinLIRC 的 Com port transceiver 去發射紅外線遙控訊號,但由於近年的電腦主機版已不再附設 Com port,所以一早已打算另外想辦法,這幾日趁新年放假得閒,終於將心目中的構想做出來。

雖然題目是「由電腦遙控有線電視」,不過只要稍加修改,也可發射出其它電器的紅外線遙控訊號。

硬件
設計來自 LIRC,原理是用電腦 Soundcard 輸出帶有左右反相 19kHz sinewave carrier 的遙控訊號,發射器就好似 Full wave rectifier 一樣把原來的 19kHz 倍增到紅外線遙控器常用的 38kHz carrier。

以下是原本的設計,無需外置電源,只靠 Soundcard 推 IR Led,即使將 R1 短路,發射距離都很短,而且發射器要很準確的指向受控電器的接收器。

1.gif

以上是有電源的發射器,可由電腦的 USB port 取電,發射距離跟一般遙控器差不多。

系統設定
近年的 Desktop 電腦,都可以將機殼背面的音效輸出口同前面的音效輸出口分開獨立使用,我會將後置輸出口用來駁喇叭用作正常音效用途,而前置輸出口就用來駁紅外線遙控發射器。例如 VIA soundchip 的 driver 設定方法如下:
4.gif

同時要把發射器所用的輸出口的播放音量開到最大。
6.gif

如果電腦沒有額外的音效輸出口,也可以另外插個 USB 的外置 Soundcard 用來發射紅外線。

最後到「控制台→聲音及音訊裝置→音訊」選擇預設的輸出口(用來駁喇叭播放正常音效)。
5.gif

一般影音軟件都預設使用 Windows 的預設音效輸出裝置,所以正常來講不需要為個別軟件再做設定。

軟件
按這裡下載 IrTx.rar,內有以下檔案:
IrTxGUI.exe,主程式
IrTxCMD.exe,Command line 版本(17#)
NAudio.dll,NAudio音效程式庫
IrTx.ini,設定檔
Layout.ini,按鈕排列設定檔
Test.wav,測試音效檔(可以不要)
Silence.wav,靜音音效檔
Ca-*.wav,有線電視遙控器各按鍵的訊號檔
所有檔案需解壓到同一個資料夾內。

IrTxGUI 以 VB.net Express 2010 寫成,需配合 .Net Framework 4.0 使用。我只在兩部 XP 32-bits 以及一部 Win7 32-bits 的電腦試過,不清楚能否在其它版本的 Windows 內執行,如有師兄夠膽在其它版本的 Windows 內測試,無論成功與否,請把測試結果放上來!

本程式無需安裝,解壓後就可以執行 IrTxGUI.exe。首次執行時會出現以下 Massage box。
2.gif

按「確定」後請按「Options→Output Device」選擇正確的輸出口,再按「Options→Save settings」儲存設定到 IrTx.ini。
3.gif

IrTxGUI 的介面很簡單,我故意將所有按鈕排列得同標準鍵盤的右邊數字/方向鍵盤一樣,使用時可以用滑鼠去按,或者按鍵盤。
7.gif

當中的「Test」按鈕是個 Test tone,就算無製作發射器,也可以用 Headphone 去試,按它後聽聽個 Test tone 是否從正確的輸出口發聲。如果不需要做測試,可以修改 Layout.ini 把這按鈕刪除或改為其它用途。

如果 IrTxGUI 運行期間修改過 Windows 的預設音效輸出裝置,或者新增/移除外置音效裝置(eg. USB sound card、USB headphone……),需要按「Options→Rescan」重新掃描及選擇音效輸出裝置。

修改 Layout.ini
Layout.ini 是使用介面的設定檔,可以用記事本打開來修改,不過記得要用 Unicode 存檔。存檔後需要關閉再重開 IrTxGUI.exe。

Layout.ini 的第一行是程式視窗左上角的名稱,之後每一行是一個按鈕的設定,IrTxGUI 最多可加入 100 個按鈕,而程式視窗的大小會因應按鈕的位置而自動作出調整。
8.gif

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

每個按鈕可播放超過一個 Wav 檔,其餘的 Wav 檔名依次序以逗號分隔放在後面,例如 NGC 按鈕:
NGC,109,45,25,331,41,ca-5.wav,ca-2.wav,ca-ok.wav
有線電視的 National Geographic Channel 頻道的台號是 52,用以上參數,無論用滑鼠按一下「NGC」按鈕,或是按數字鍵盤的「-」鍵,都會依次播出 5、2 和 OK 的遙控訊號,只要按一下就可以轉去 52 台。(其實可以省去最尾的 OK,但有線解碼器要先等到一會才轉台,在後面加入 OK 就可以立刻轉台)。

不過我發現,如果兩個相同數字雙連的台號(eg. 11、22、33……),需要在兩個數字之間加長分隔時間,所以我特別做多個靜音的 Silence.wav,例如用「AXN」按鈕轉去 22 台:
AXN,111,45,25,229,41,ca-2.wav,silence.wav,ca-2.wav,ca-ok.wav
在兩個 ca-2.wav 之間加入 silence.wav 才能正常轉台。

之前提過 Test 按鈕純綷方便用 Headphone 做測試,如果無需再做測試,建議把它改為 Black(ca-black.wav),將原本的 Test,45,45,25,12,41,test.wav 改為 Black,45,45,25,12,41,ca-black.wav。因為有線偶爾會發出訊息(畫面上出現一個信封 Icon),入 Menu 刪除訊息時需要用到遙控器的黑色按鈕;除此之外,如果想取消用有線解碼器 EPG 預校的節目,也要用黑色按鈕。


將其它電器的遙控訊號錄製成 Wav 檔
如果想遙控其它電器,就要先錄取其它電器的遙控訊號。你可用 WinLIRC 的 Audio receiver 將遙控訊號經電腦的 Line-in/Mic-in 錄入電腦,有關接收器的製作方法可以看這個舊 Post 的 1#

至於錄音及人手製作帶有 19kHz carrier 的 Wav 檔方法可以看另一個討論區的這個 Post 的 #1。你亦可以先一次過將所有遙控鍵的訊號錄成一個大 Wav 檔,然後用我放在同一個 Post #15 的 Excel 檔將這個大 Wav 檔分割成每個鍵都加上左右反相 19kHz sinewave carrier 的獨立 Wav 檔。

一般遙控器訊號的時間長度都很短,從原裝遙控器錄取訊號時難免會按鍵長過實際所需的時間,所以由我個 Excel 檔分割出來的 Wav 檔仍然有需要再用 Audacity(或其它可顯示波形的 Wave Editor)作出刪減。

遙控器的 Protocol 五花八門,不過大致上可分為四種。先講頭三種,下圖是來自三個不同遙控器,經我個 Excel 檔產生出來的 Wav 檔:
9.gif
1.無論短按或長按遙控器,遙控訊號都只會發送一次;
2.長按遙控器時,初頭會發送一段較長的訊號,然後每隔一段短時間再發送一段短訊號;
3.長按遙控器時,相同的訊號會以固定間隔重複又重複地發送。

第一種遙控訊號可在訊號完結後,再預留小小空位,然後把之後的位置刪除(即是紅線之後)。第二和三種訊號,可把第二段訊號及之後的位置刪除,但要保留第一和二段之間的空白位置,有需要的話,甚至將把空白位置加長小小。

至於第四種,長按遙控時所發送的訊號驟眼看起來就好似第三種,也是每隔固定時間就發送一次訊號,不過如果將訊號放大來看會發現第一段訊號(A)和第二訊號(B)是不一樣,整個訊號實際上是 A、B、A、B……梅花間竹的輪流發送,受控的電器要先後收到 A、B 兩段訊號才會有反應(B、A 也可以),所以應該保留頭兩段訊,由第三段訊號起(紅線之後),將之後的位置刪除。
10.gif

製作好各遙控鍵的 Wav 檔後就可以修改 Layout.ini 把 IrTxGUI 改為其它電器的遙控器。

回復 1# C_Law

好詳細, 好有趣的製作. Like x 1000.

TOP

一向習慣在電腦用電視卡看電視,順理成章地想到用電腦去遙控電視的周邊裝置(例如機頂盒)。以往一直用 WinLI ...
C_Law 發表於 2013-2-16 23:50



    這個方法實在很好..

不過俺有個想法, 如果RS232的 BAUD RATE 到了 33KHZ 左右, 是不是可以用類似的方法維持原來數據的可靠性呢. 一直都想不通, 所以作不出來.

TOP

本帖最後由 GbE 於 2013-2-19 02:17 編輯

師兄犀利, Excel 個 part 真係成個 diy 重頭戲, 偑服
之前在這見人介紹 Audio -> IR, 心唸掂唔掂呀, sampling rate 咁低, 可唔可靠 ...... 錄完再播死得 ....
不過, 粗咯看後, 不得了
- Solution 似乎齊整, 有圖有文, 跟住做應 O.K.
- 我睇都覺得長, 何況寫果個, 幸苦師兄
- 2011 係 遙控部PC .....  2012 係 PC扮遙控,

有d問題想問問, 請原諒小弟 lazy
1. 個 Excel 可以適合 2 個 唔同版本 hardware, 因為頭 1 個 為單聲道, 但第 2 個為 雙聲道 ? 用唔同 sheet
2. 據了解, 發射距離 3m, 如 2m 內穩定可靠嗎 ?

學到嘅嘢, 要多謝聲

利申, 多年前 ( 起碼 6,7年前), 用 Winlirc 想 遙控部PC (thr COM) , 結果失敗, 錄 waveform 出問題解決唔到, 放棄, 又試過用 SE 電話裝個 JAR 再經 Bluetooth 去控制 PC ....
隋後都係比 $ 買成品, i.e. Soundgraph remote, Logitech remote 等等

TOP

回復 1# C_Law

非常好的製作. Like x 2000 

TOP

GREAT DIY!!!! thanks for share!!

(I am lazy using a USBIRToy from http://dangerousprototypes.com/docs/USB_Infrared_Toy)

TOP

回復 4# GbE

1.其實無電源的版本也是兩聲道,只不過無駁 Sleeve(Gnd)。有/無電源的版本都是用相同的 Wav 檔。

2.我在兩部電腦試過無電源版本,在正常家居環境光線下(無特別強光直接照射到有線電視解碼器),1m 內是很可靠(一定要直接對準,不能撞牆反射),1~1.5m 就一半一半,對得越準、環境光線越暗,成功遙控到的機會就越大;超過 1.5m 就遙控不到(即使晚上關了燈)。至於有電源版本,暫時試過 3m 直線距離都遙控得到(由於我家個解碼器的擺放位置,3m 已是我可試到的最遠距離,懶得搬個解碼器出來試更遠距離),而且不用對得太準,我試過同樣的直接 3m 距離,將個發射器斜角指向牆再反射向解碼器都得。

TOP

回復 6# domeso

請問 USBIRToy 可否用 WinLIRC 的 Transmit.exe 做發射?

我都有考慮過買 USBIRToy,不過我上網見到有播 Wav 的方法,手頭上又有零件,於是先試一試,好彩地一試就成功了。

其實大半年前已成功試到這個 Wav 發射器,只是不懂寫程式用指定的 Audio output device 去播 Wav ,所以就放低了大半年。直到新年假有時間上 Google 做下功課,才做出這個 IrTxGUI。

TOP

回復  domeso

請問 USBIRToy 可否用 WinLIRC 的 Transmit.exe 做發射?

我都有考慮過買 USBIRToy,不過 ...
C_Law 發表於 2013-2-19 18:13


USBIrToy comes with full utils to capture and transmit signal, I uses their utils with node.js for a easy quick dirty JSON base remote server.

And AFAIK it does fully support in WinLIRC

for more info:
http://dangerousprototypes.com/docs/USB_IR_Toy:_Configure_WinLIRC

:)

TOP

Anyway, I like your approach more, I am lazy, should have done it myself...

TOP