我有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. 【译】ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解

    原文:[译]ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解 在本节中,我们继续研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打 ...

  2. [置顶] ※数据结构※→☆线性表结构(list)☆============双向链表结构(list double)(三)

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点. ~~~~~~~~~~~~ ...

  3. C++设计模式之建造者模式(三)

    4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...

  4. GIT分支管理是一门艺术(转)

    英文原文:http://www.nvie.com/posts/a-successful-git-branching-model/ 原文作者:Vincent Driessen 本文经Linux大棚博主总 ...

  5. POJ 1287 Networking(最小生成树)

    题意  给你n个点 m条边  求最小生成树的权 这是最裸的最小生成树了 #include<cstdio> #include<cstring> #include<algor ...

  6. [HTML5游戏开发]简单的《找没有同汉字版〗爆去考考您狄综力吧

    [color=ize:18px]一,筹办工做   本次 游戏开发需求用到lufylegend.js开源游戏引擎,版本我用的是1.5.2(如今最新的版本是1.6.0).    引擎下载的位置:http: ...

  7. HotSpot关联规则算法(2)-- 挖掘连续型和离散型数据

    本篇代码可在 http://download.csdn.net/detail/fansy1990/8502323下载. 前篇<HotSpot关联规则算法(1)-- 挖掘离散型数据>分析了离 ...

  8. 怎么解决 ubuntu 装kde桌面遇到的汉化问题

    正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 现在没有可用的软件包 language-pack-kde-zh,但是它被其它的软件包引用了.这可能意味着这个缺失 ...

  9. 将 Android* x86 NDK 供 Eclipse* 而移植 NDK 演示示例应用程序

    目标 面向 Eclipse (ADT) 的 Android 插件如今支持基于 NDK 的应用开发. 其可自己主动生成项目和构件文件以及代码存根.并可集成到整个 Android 应用开发中(构建原生库. ...

  10. android贴士Toast

    转载请注明出处:http://blog.csdn.net/droyon/article/details/42009015 我们可以用androd提供toast控制,但在使用过程中,给我们发了很多Toa ...