标签:android
我也DIY一个Android遥控器-全部开源
1.试用
记得宋宝华在「设备驱动开发详解」提出一个这样的理论「软件和硬件互相渗透对方的领地」,这次证明还是确实是这样,使用上层APP软件加上简单的更为简单的硬件设计就可以完成一个遥控器了。
有开发应用程序网友发E-mail问网上那种DIY的红外遥控器是如何工作的,查了一下目前有两种方式,一种是基于USB一种是基于耳机孔。就简单的回复了一信息。说是将音频信号/USB信号转换为红外信号。事后自己都觉得有点敷衍,还好自己硬件了解一些,软件也会开发。就将他们结合一下。
试用次合,现在开发规律比较清晰了,一般就是先试用进而了解大概功能。试用的次合是在网上买一个 耳机插孔式的遥控发射器 如下内部图(不要理会线,线是我测量焊接的)。
手机上的软件使用提「遥控精灵」(2.9.3版本),身边的测试电器是创维电视。软件设计的比较好使用,试用成功,没有其它障碍。
2.DIY硬件
第二步就是DIY了,Google出[DIY]便宜好用-使用耳機孔的IR遙控器(適用可播.WAV的player) 文長圖多和手机遥控器,3.5mm耳机接口红外遥控改造解析两篇文章和一篇原理文章遥控器原理.再结合使用示波器测试按键是耳机孔的输出波形,大概理解了其原理以及DIY需要的元件。
DIY所需元件:1. 3.5耳机插头 2. 红外发射管(其实这个名字也怪,严格意义上它属于发光二极管和一种,但是去电子商城购买时要说前「红外发射管」)
接下来的硬件相关实验是部分替换,软件上使用「遥控精灵」上适配好的配置,然后将焊接好的「遥控器」连接上,进行试验。第一次根据第一篇引用文章中将两个二极管正负相连再连接到耳机插头的左右声道 如下图:
实验结果:成功无误。
第二次实验是 根据第二篇引用文章只焊接一个发射管,实验结果:成功无误。
第三次实验是将正负极颠倒再次测试,实验结果同样是:成功无误。
从上述三个次实验中,清晰了很多概念,但是也带来很的疑惑,文章一中说要将19kHz转换为38kHz所以要两个发射管正负互接的,但是第二次实验中,不进行互接也是可以发射信号的。第三次实验中正反互换都没有影响信号正常的发射与接收。这也是一个一点。第三点是没有接三极管进行放大,同样是可以使用的。先将理论讨论暂时放到这里。继续新的实验。
软件上的实验是最终实现自己开发一个APP来发射数据。
第一步是将「遥控精灵」输出的音频录音下来。硬件连接是使用一个公公的耳机插头将「遥控精灵」输出的按键波形录制下来。将其放到手机中进行播放音频来向电视机发送红外信号。验证通过。
2.DIY软件
整体原理理通顺之后就开始大盘计划,使用编写一个「遥控精灵」的开源版本,即使用代码来实现活的波形。信号的各个参数可以调整,这样就可以实现控制不同类型的设备了。
根据遥控器原理得知需要38kHz的正弦波信号,先在Playing an arbitrary tone with Android找到如何生成正弦波的方法。测试发现并不能输出38kHz,最高只有20KHz,反过来测试「遥控精灵」的输出频率也是20KHz,那就暂且使用20KHz的信号。稍作改动使其输出20KHz的单通道正弦信号。
同样根据遥控器原理中规定的波形的各个长度,进行编码,不过第(3)条要求给忽略了。实现了以下方法:getleaderCode, getUserCodeToWave, getDataCodeToWave, getStopBit分别获取各个阶段的波形。将其结合后第0.1版本出炉。源码位于:https://code.csdn.net/kangear/sinewave。目前可以控制测试的一台创维电视。效果图:
还有很多缺陷要完善:
1.目前失误率还比较高,4次成功一次。
2.目前只实现一个键,可以通过代码修改usercode和datacode。
3.基于单声道的波形,所以只能硬件上连接 左右声道上的一个 和 地。参考软件是可以实现左 右 地之前的任意组合的硬件连接。
标签:android
原文地址:http://blog.csdn.net/kangear/article/details/39376105