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