我也DIY一個Android遙控器-全部開源
1.試用
記得宋寶華在「設(shè)備驅(qū)動開發(fā)詳解」提出一個這樣的理論「軟件和硬件互相滲透對方的領(lǐng)地」,這次證明還是確實(shí)是這樣,使用上層APP軟件加上簡單的更為簡單的硬件設(shè)計(jì)就可以完成一個遙控器了。
有開發(fā)應(yīng)用程序網(wǎng)友發(fā)E-mail問網(wǎng)上那種DIY的紅外遙控器是如何工作的,查了一下目前有兩種方式,一種是基于USB一種是基于耳機(jī)孔。就簡單的回復(fù)了一信息。說是將音頻信號/USB信號轉(zhuǎn)換為紅外信號。事后自己都覺得有點(diǎn)敷衍,還好自己硬件了解一些,軟件也會開發(fā)。就將他們結(jié)合一下。
試用次合,現(xiàn)在開發(fā)規(guī)律比較清晰了,一般就是先試用進(jìn)而了解大概功能。試用的次合是在網(wǎng)上買一個 耳機(jī)插孔式的遙控發(fā)射器 如下內(nèi)部圖(不要理會線,線是我測量焊接的)。
手機(jī)上的軟件使用提「遙控精靈」(2.9.3版本),身邊的測試電器是創(chuàng)維電視。軟件設(shè)計(jì)的比較好使用,試用成功,沒有其它障礙。
2.DIY硬件
第二步就是DIY了,Google出[DIY]便宜好用-使用耳機(jī)孔的IR遙控器(適用可播.WAV的player) 文長圖多和手機(jī)遙控器,3.5mm耳機(jī)接口紅外遙控改造解析兩篇文章和一篇原理文章遙控器原理.再結(jié)合使用示波器測試按鍵是耳機(jī)孔的輸出波形,大概理解了其原理以及DIY需要的元件。
DIY所需元件:1. 3.5耳機(jī)插頭 2. 紅外發(fā)射管(其實(shí)這個名字也怪,嚴(yán)格意義上它屬于發(fā)光二極管和一種,但是去電子商城購買時(shí)要說前「紅外發(fā)射管」)
接下來的硬件相關(guān)實(shí)驗(yàn)是部分替換,軟件上使用「遙控精靈」上適配好的配置,然后將焊接好的「遙控器」連接上,進(jìn)行試驗(yàn)。第一次根據(jù)第一篇引用文章中將兩個二極管正負(fù)相連再連接到耳機(jī)插頭的左右聲道 如下圖:
實(shí)驗(yàn)結(jié)果:成功無誤。
第二次實(shí)驗(yàn)是 根據(jù)第二篇引用文章只焊接一個發(fā)射管,實(shí)驗(yàn)結(jié)果:成功無誤。
第三次實(shí)驗(yàn)是將正負(fù)極顛倒再次測試,實(shí)驗(yàn)結(jié)果同樣是:成功無誤。
從上述三個次實(shí)驗(yàn)中,清晰了很多概念,但是也帶來很的疑惑,文章一中說要將19kHz轉(zhuǎn)換為38kHz所以要兩個發(fā)射管正負(fù)互接的,但是第二次實(shí)驗(yàn)中,不進(jìn)行互接也是可以發(fā)射信號的。第三次實(shí)驗(yàn)中正反互換都沒有影響信號正常的發(fā)射與接收。這也是一個一點(diǎn)。第三點(diǎn)是沒有接三極管進(jìn)行放大,同樣是可以使用的。先將理論討論暫時(shí)放到這里。繼續(xù)新的實(shí)驗(yàn)。
軟件上的實(shí)驗(yàn)是最終實(shí)現(xiàn)自己開發(fā)一個APP來發(fā)射數(shù)據(jù)。
第一步是將「遙控精靈」輸出的音頻錄音下來。硬件連接是使用一個公公的耳機(jī)插頭將「遙控精靈」輸出的按鍵波形錄制下來。將其放到手機(jī)中進(jìn)行播放音頻來向電視機(jī)發(fā)送紅外信號。驗(yàn)證通過。
2.DIY軟件
整體原理理通順之后就開始大盤計(jì)劃,使用編寫一個「遙控精靈」的開源版本,即使用代碼來實(shí)現(xiàn)活的波形。信號的各個參數(shù)可以調(diào)整,這樣就可以實(shí)現(xiàn)控制不同類型的設(shè)備了。
根據(jù)遙控器原理得知需要38kHz的正弦波信號,先在Playing an arbitrary tone with Android找到如何生成正弦波的方法。測試發(fā)現(xiàn)并不能輸出38kHz,最高只有20KHz,反過來測試「遙控精靈」的輸出頻率也是20KHz,那就暫且使用20KHz的信號。稍作改動使其輸出20KHz的單通道正弦信號。
同樣根據(jù)遙控器原理中規(guī)定的波形的各個長度,進(jìn)行編碼,不過第(3)條要求給忽略了。實(shí)現(xiàn)了以下方法:getleaderCode, getUserCodeToWave, getDataCodeToWave, getStopBit分別獲取各個階段的波形。將其結(jié)合后第0.1版本出爐。源碼位于:https://code.csdn.net/kangear/sinewave。目前可以控制測試的一臺創(chuàng)維電視。效果圖:
還有很多缺陷要完善:
1.目前失誤率還比較高,4次成功一次。
2.目前只實(shí)現(xiàn)一個鍵,可以通過代碼修改usercode和datacode。
3.基于單聲道的波形,所以只能硬件上連接 左右聲道上的一個 和 地。參考軟件是可以實(shí)現(xiàn)左 右 地之前的任意組合的硬件連接。
20140924更:
失誤率高的原因找到了,多次按鍵時(shí)會偶爾造成波形只剩后半部分。由于這個問題比較模糊,不知道是什么原因,觀察了參考軟件的波形,其前后添加了一個過濾波形10(low) + 4*(1.69(high) + 0.56(low)) + 10(low)。這樣的波形有真正的數(shù)據(jù)前后都有三個。在代碼中實(shí)現(xiàn)后,效果明顯好轉(zhuǎn),之前的波形截?cái)嚯m然還是會有,但是截?cái)嗖坏秸嬲男盘柫恕?/span>
代碼進(jìn)一步完善,可以方便的修復(fù)user code和data code。
public void onClick(View v) {
switch (v.getId()) {
case R.id.volume_add_button:
mWaveService.sendSignal((short)0x00ff, (byte)0x28);
break;
case R.id.volume_sub_button:
mWaveService.sendSignal((short)0x00ff, (byte)0x01);
break;
default:
break;
}
}
關(guān)于wav的單聲道還沒有優(yōu)化,目前還只能使用單聲道的硬件連接方式。
另一個影響準(zhǔn)確率的是硬件上,如果直接接到耳機(jī)插口上,電平并沒有達(dá)到 紅外發(fā)射管 的最大,就會造成功率不夠。使用自己開發(fā)的APP結(jié)合網(wǎng)上購買的 紅外發(fā)射器 已經(jīng)可以很好的使用了。
關(guān)于 Repeat Code,真正的遙控器是會在按鍵按下的時(shí)候每隔110ms發(fā)送一個repeat code的。通過這個實(shí)現(xiàn)「按下不松開連接發(fā)射信號的功能」,比如按下聲音+鍵不松開就可以實(shí)現(xiàn)連續(xù)加音量。不過「遙控精靈」也并沒有實(shí)現(xiàn),這樣的意義有多大暫時(shí)還不清楚。
聯(lián)系客服