我有DIY一Android遥控-所有开源

1.试用

记得宋宝华在「设备驱动开发具体解释」提出一个这种理论「软件和硬件互相渗透对方的领地」,这次证明还是确实是这样,使用上层APP软件加上简单的更为简单的硬件设计就能够完毕一个遥控器了。

有开发应用程序网友发E-mail问网上那种DIY的红外遥控器是怎样工作的。查了一下眼下有两种方式,一种是基于USB一种是基于耳机孔。就简单的回复了一信息。

说是将音频信号/USB信号转换为红外信号。

事后自己都认为有点敷衍,还好自己硬件了解一些。软件也会开发。就将他们结合一下。

试用次合,如今开发规律比較清晰了。一般就是先试用进而了解大概功能。试用的次合是在网上买一个 耳机插孔式的遥控发射器 例如以下内部图(不要理会线,线是我測量焊接的)。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

手机上的软件使用提「遥控精灵」(2.9.3版本号),身边的測试电器是创维电视。

软件设计的比較好使用。试用成功,没有其他障碍。

2.DIY硬件

第二步就是DIY了。Google出[DIY]廉价好用-使用耳機孔的IR遙控器(適用可播.WAV的player) 文長圖多手机遥控器,3.5mm耳机接口红外遥控改造解析两篇文章和一篇原理文章遥控器原理.再结合使用示波器測试按键是耳机孔的输出波形,大概理解了其原理以及DIY须要的元件。

DIY所需元件:1. 3.5耳机插头 2. 红外发射管(事实上这个名字也怪,严格意义上它属于发光二极管和一种。可是去电子商城购买时要说前「红外发射管」)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

接下来的硬件相关实验是部分替换,软件上使用「遥控精灵」上适配好的配置,然后将焊接好的「遥控器」连接上。进行试验。第一次依据第一篇引用文章中将两个二极管正负相连再连接到耳机插头的左右声道 例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

实验结果:成功无误。

第二次实验是 依据第二篇引用文章仅仅焊接一个发射管,实验结果:成功无误。

第三次实验是将正负极颠倒再次測试,实验结果相同是:成功无误。

从上述三个次实验中。清晰了非常多概念,可是也带来非常的疑惑,文章一中说要将19kHz转换为38kHz所以要两个发射管正负互接的。可是第二次实验中,不进行互接也是能够发射信号的。第三次实验中正反互换都没有影响信号正常的发射与接收。这也是一个一点。

第三点是没有接三极管进行放大,相同是能够使用的。先将理论讨论临时放到这里。继续新的实验。

软件上的实验是终于实现自己开发一个APP来发射数据。

第一步是将「遥控精灵」输出的音频录音下来。硬件连接是使用一个公公的耳机插头将「遥控精灵」输出的按键波形录制下来。

将其放到手机中进行播放音频来向电视机发送红外信号。验证通过。

2.DIY软件

总体原理理通顺之后就開始大盘计划,使用编写一个「遥控精灵」的开源版本号,即使用代码来实现活的波形。

信号的各个參数能够调整,这样就能够实现控制不同类型的设备了。

依据遥控器原理得知须要38kHz的正弦波信号。先在Playing an arbitrary tone with Android找到怎样生成正弦波的方法。

測试发现并不能输出38kHz,最高仅仅有20KHz。反过来測试「遥控精灵」的输出频率也是20KHz,那就暂且使用20KHz的信号。稍作修改使其输出20KHz的单通道正弦信号。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

相同依据)条要求给忽略了。实现了下面方法:getleaderCode, getUserCodeToWave, getDataCodeToWave, getStopBit分别获取各个阶段的波形。

将其结合后第0.1版本号出炉。源代码位于:https://code.csdn.net/kangear/sinewave。

眼下能够控制測试的一台创维电视。

效果图:

还有非常多缺陷要完好:

1.眼下失误率还比較高,4次成功一次。

2.眼下仅仅实现一个键,能够通过代码改动usercode和datacode。

3.基于单声道的波形,所以仅仅能硬件上连接 左右声道上的一个 和 地。參考软件是能够实现左 右 地之前的随意组合的硬件连接。

20140924更:

失误率高的原因找到了,多次按键时会偶尔造成波形仅仅剩后半部分。因为这个问题比較模糊,不知道是什么原因,观察了參考软件的波形。其前后加入了一个过滤波形10(low) + 4*(1.69(high) + 0.56(low)) + 10(low)。

这种波形有真正的数据前后都有三个。

在代码中实现后,效果明显好转,之前的波形截断尽管还是会有,可是截断不到真正的信号了。

代码进一步完好,能够方便的修复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;

}

}

关于wav的单声道还没有优化。眼下还仅仅能使用单声道的硬件连接方式。

还有一个影响准确率的是硬件上,假设直接接到耳机插口上。电平并没有达到 红外发射管 的最大。就会造成功率不够。

使用自己开发的APP结合网上购买的 红外发射器 已经能够非常好的使用了。

关于 Repeat Code,真正的遥控器是会在按键按下的时候每隔110ms发送一个repeat code的。

通过这个实现「按下不松开连接发射信号的功能」,比方按下声音+键不松开就能够实现连续加音量。

只是「遥控精灵」也并没有实现,这种意义有多大临时还不清楚。

问与答

(20150127)近期关注这一篇文章的人開始多了起来,我也开启这篇文章的「问与答」吧。

1.c语言生成一个wava文件而你使用正弦波转化。放到数组中怎样生成WAVE文件?

答:是先有了需求才去实现的,了解了红外发射管须要的波形:38kHz的方波。

再来看手机的能力,因为手机的属性,一般将音频限制为人耳听力范围20~20kHz,这明显不够呢,怎样办?不怎么办,仅仅管试试。就播放最高的20KHZ看怎样?測试结果是可行。(这说明不能全然信手冊上,还是要自己动手做一下)

    目的是播放20KHZ音乐,产生波形,可是API默认生成的是正弦波,假设要用软件实现那么须要再经过傅立叶变化为方波。显得相当麻烦。那么别人是怎样实现的呢?查看了一个成品软件,測量了一下输出波形果真也是只正弦波,那么我就放心地使用了正弦波。

    关于怎样播放,假设你了解Android开发。你会明确不须要生成WAV文件。直接在内存中生成并播放也是一种播放音频的方式。当然音频文件的方式我是尝试过的。也是可行的。不相信权威勇敢尝试,一切要比书本上要明确的更深。



2.假设要自己改动发射的码是否是仅仅要更改 usercode和datacode呢,我在看红外线遥控原理的时候看到的是 用户反码+用户码+数据码+数据反码?

答:这个就更简单了,是我封装了一下。当提供用户码的时候 怎么转换其反码,数据同理。假设你看代码了的话。就不会有这个疑问了。。)

(20150426)

3.44.1Khz是什么的频率?

答:44.1kHz是音频信号的採样频率,详见:http://en.wikipedia.org/wiki/44,100_Hz

4.sin函数里面传的參数是什么意思呀,(sampleRate/freqOfTone)是什么意思。为什么那两个要相除,(private final double freqOfTone = 200000; // hz 200000=>20khz(50us) 最高这里面20KHz是不是多打了一个零)。

答:原本的代码写的不是那么easy上人理解,已经更新且加上了代码凝视。

事实上是一个求值的过程。公式是已有的:y(t) = A * sin (2πft + φ),当中:

* A: 振幅,这里为1;

       * f: 频率。这里为freqOfTone;

       * t: 时间,这里为(i/sampleRate);

       * φ: 初相位,这里为0;

那句代码事实上就是依据这个公式写的,这个公式的介绍见:http://en.wikipedia.org/wiki/Sine_wave

所以好理解的写法是这种:sample[i] = Math.sin(2 * Math.PI * freqOfTone * (i / sampleRate));

关于是否多打一个零,我想应该是的。

5.载波频率38KHz(也就是楼主用的20KHz)指的是什么,不是指每次跳变是1/38KHz嘛。

按楼主写的好像是数组中的每一位是1/44.1KHz

答:载波频率就是正弦波的频率,周期就是1/38Khz。详细的公式介绍已经在上一个问题中进行了解说。

6.(20150616)问:我如今想做一个控制空调的功能,从网上查到我的空调的红外信号是依照下面规定来的:

0的电平宽度为:600μs低电平+600μs高电平

1的电平宽度为:600μs低电平+1600μs高电平

起始码 S电平宽度 为:9000us低电平+4500us高电平

连接码C电平宽度为:600us低电平+20000us高电平

请问假设我要实现01sc这四个的话,在您封装的函数是能够直接调用的么?还是须要改动什么參数。

另外我用两个公头的线录下了其它成品软件控制我空调的录音,用cooledit打开看到的貌似也是正弦波

答:从信号宽度上来看和我文章中的那个时序图差点儿相同,应该是一个标准。我再次整理代码,将这个几个时序參数整理成常量到一起,这样想自己改一些參数也能够非常好的更改。也加上了凝视方便理解。

你须要自行结合图上的时序图和下图凝视来找到你信号宽度相应:(事实上你搜索这些參数和文中的參考文档中有都提到。红外信号协议一般不会区分设备类型:电视,空调,投影仪。至于怎么改适合你你得自己搞清楚了)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

关于正弦波。暂还找到能输出正弦波的APP,手机的能力来解释这些,但不影响使用。

版权声明:本文博主原创文章,博客,未经同意不得转载。

我有DIY一Android遥控-所有开源的更多相关文章

  1. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  3. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  4. Android热更新开源项目Tinker集成实践总结

    前言 最近项目集成了Tinker,开始认为集成会比较简单,但是在实际操作的过程中还是遇到了一些问题,本文就会介绍在集成过程大家基本会遇到的主要问题. 考虑一:后台的选取 目前后台功能可以通过三种方式实 ...

  5. GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

    1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...

  6. Android UI相关开源项目库汇总

    最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个st ...

  7. 凡信(超仿微信Android版)开源了,内有源码下载 -

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 凡信(超仿微信Android版)开源了,内有源码下载 - IM Geek开发者社区-移动 ...

  8. Android 上传开源项目到 jcenter 实战踩坑之路

    本文微信公众号「AndroidTraveler」首发. 背景 其实 Android 上传开源项目到 jcenter 并不是一件新鲜事,网上也有很多文章. 包括我本人在将开源项目上传到 jcenter ...

  9. Android开发常用开源框架:图片处理

    https://blog.csdn.net/SGQ_CSDN/article/details/79910709 Android开发常用开源框架:图片处理 框架名称 功能描述 Android Unive ...

随机推荐

  1. SE 2014年5月27日

    R1模拟总部,R2 与R3模拟分部 如图配置 要求使用 GRE over IPSec VPN 主模式,启用动态路由协议rip使得总部与两分部内网可相互通讯,但要求分部用户数据流不允许互通! 步骤: 1 ...

  2. Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant

    Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant

  3. Android中的动画具体解释系列【1】——逐帧动画

    逐帧动画事实上非常easy,以下我们来看一个样例: <?xml version="1.0" encoding="utf-8"?> <anima ...

  4. linux管理员

    sudo password 添加管理员用户,设置其密码. exit 退出管理员.

  5. windows接口被占用

    netsh winsock reset 重启winsock服务

  6. 王立平--Failed to push selection: Read-only file system

    往android模拟器导入资源,失败. 提示:仅仅读文件. mnt是仅仅读文件.应点击sdcard.,在导入

  7. 理解RESTful架构(转)

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  8. 怎么样MyEclipse配置Tomcat?

    1.下载tomcat免安装版.tomcat路径不包含空格 http://download.csdn.net/detail/u014112584/7549191 2.windows -preferenc ...

  9. URAL 1934 Black Spot --- 最短的简单修改

    右侧是1.维护的同时保持最短路p值至少,我有直接存款(1-p).该概率不满足,为了使这个值极大. #include <iostream> #include <cstdlib> ...

  10. petshop4.0 其中详细解释(系统架构)

    前言:PetShop它是一个例子.微软用它来展示.Net容量企业系统开发.业界有很多.Net与J2EE争议.微软许多数据PetShop和Sun的PetStore从.这样的争论是不可避免的带有强烈的商业 ...