我有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.基于单声道的波形,所以仅仅能硬件上连接 左右声道上的一个 和 地。參考软件是能够实现左 右 地之前的随意组合的硬件连接。

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打开看到的貌似也是正弦波

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

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


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

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

转载于:https://www.cnblogs.com/lcchuguo/p/4776848.html

我有DIY一Android遥控-所有开源相关推荐

  1. [开源][130522]DIY简易红外遥控信号发射器

    一.背景 二.硬件 三.软件 四.效果 五.参考 六.源代码 一.背景 上回说到:   [130120]DIY简易红外遥控信号解码器( http://bbs.eyuyan.com/read.php?t ...

  2. Android 优秀的开源库

    前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 TextView HTextView 一 ...

  3. Google手机操作系统Android将100%开源

    Google 最近宣称,他们未来的手机 操作系统"Android ",包含核心平台组件和开发设备所需的库,都将采用常用的开源协议来授权. 换句话说,Google Android将1 ...

  4. GitHub Android 最火开源项目Top20

    GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上.基于不要重复造轮子的原则,了解当下比较流行的Android与i ...

  5. 针对Android设备的开源手机银行木马BankBot / Mazain分析

    本文讲的是针对Android设备的开源手机银行木马BankBot / Mazain分析,在最近几年,我们开始对那些针对土耳其银行以及其他各种类型的金融机构应用的恶意软件产生了兴趣.据我们观察,在过去两 ...

  6. Android常用热门开源库汇总(持续更新)

    原文转载:https://www.yundashi168.com/344.html 请及时关注原文网站,因为后续持续更新都在原网站更新.请多多点赞和关注. 前言 收集了一些比较常见的开源库,特此记录( ...

  7. Android 组件化开源 app -开眼短视频(OpenEyes)

    Android-MvvmComponent-App 项目地址:darryrzhong/Android-MvvmComponent-App  简介: Android 组件化开源 app -开眼短视频(O ...

  8. Android的一些开源项目集锦 以备以后研究

    转自:http://blog.csdn.net/wanglong0537/article/details/6438958 FBReaderJ FBReaderJ用于Android平台的电子书阅读器,它 ...

  9. Android开发常用开源库

    Android 开发常用开源库 一.网络请求 二.图片加载 三.数据库 四.通讯 五.注解 六.JSON解析 七.性能优化 八.性能优化之布局分析 九.工具类 十.状态栏 十一.扫码库 十二.播放器 ...

  10. Android专用Log开源项目——KLog - 泡在网上的日子

    Android专用Log开源项目--KLog 泡在网上的日子 / 文 发表于2015-11-15 13:55 第4427次阅读 log 1 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以 ...

最新文章

  1. 精密单电源虚拟地芯片 TLE2426
  2. Memcached 1.5.13 发布,支持 TLS
  3. 【华为云技术分享】当我们在谈论卡片时,我们到底在谈论什么?
  4. java从入门到精通_Java---开发从入门到精通,分享视频学习教程
  5. mount error 12 = Cannot allocate memory
  6. 信息安全系统设计基础实验二:固件设计
  7. 正点原子 潘多拉stlink驱动_「正点原子Linux连载」第五十六章Linux自带的LED灯驱动实验...
  8. pdf加水印方法,快速给pdf加水印
  9. VMware虚拟机安装Ubuntu 2022最新版详细图文安装教程(VMware虚拟机安装+Ubuntu下载+VMware虚拟机配置运行)
  10. 在Ubuntu里配置slim
  11. 基线检查工具Python代码
  12. 安卓游戏广告加速插件_【安卓】玩LOL手游吗?这有教程
  13. linux服务器防御ddos,linux如何防御ddos
  14. STL string迭代器
  15. 2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解
  16. python调整图片亮度_python调整图片亮度的示例
  17. ASCII码直接16进制转换(16转换为0x16)
  18. 行列式求值Java语言实现———线性代数
  19. 自动驾驶中雷达感知:时域关系的充分利用
  20. Error (176310): Can't place multiple pins assigned to pin location Pin_F16

热门文章

  1. 服务器显示配额不足什么原因,win7系统显示配额不足导致无法访问的解决方法...
  2. Linux系统变慢原因?
  3. 留一份名单,以供研究:2009中国企业500强全名单
  4. Tkinter 学习笔记
  5. 虚拟服务器防病毒,windows 2008 Hyper-v虚拟化防病毒
  6. POJ - Video Surveillance(半平面交)
  7. phpstudy 报错Error while setting value ‘NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO‘ to ‘sql_mode‘
  8. 原创分享 计算机毕业设计PySpark+LSTM+Hadoop招聘推荐系统 招聘大数据 招聘数据分析 协同过滤算法(基于物品+基于用户) 招聘可视化大屏 就业推荐系统 就业数据分析
  9. Calibre Web 中阅读 epub 电子书时的夜间模式解决方案
  10. 基于vue的 表单设计器(拖拽生成表单)