解决问题系列(4)——红外编码分析利器使用

续前篇(解决问题系列(3)——红外发射,控制美的空调开 http://www.geek-workshop.com/thread-5001-2-1.html ),偶然从网上搜来美的空调的“开”的编码后,通过程序怎么也dump不出来“关”的编码。



强烈建议没有逻辑分析仪的朋友先尝试下这个帖子:

blueleafxp同学发的《红外线 遥控 空调 测试成功》

http://www.geek-workshop.com/thread-5146-1-1.html



正文开始:



在高人histamine的点拨下,通过一个叫“逻辑分析仪”的设备(网购约¥35~¥。。。。)分析出来空调的“关”编码。



为了给他人以帮助,共享此次分析的过程,理论上说,这个东东可以分析出来所有的红外编码(原始码)。


QQ图片20130624142920.jpg

2013-6-24 14:29 上传
(27.71 KB)



设备是上面的这个样子,也有其他样子,使用起来基本是一样的。



USB接口的,安装驱动、安装配套软件什么的不上图了,没什么悬念。



接线

QQ图片20130624143103.jpg

2013-6-24 14:32 上传
(52.23 KB)





两根线,分析仪上标了“公共地线”的接arduino的GND,“数字通道1”接红外接收头的数字引脚。

注:红外接收头有3个引脚,vcc(3.3v),gnd(地),输出(我接到arduino的引脚2)

上图中,一个接到数字接收头的GND,一个接到输出了。



然后,然后才加电。逻辑分析仪特别指出要断电接线的。所以要小心,不要把¥35烧了。



运行软件,界面如下:

QQ图片20130624143709.jpg

2013-6-24 14:39 上传
(129.28 KB)



图中,

标1处是采样的时间长短(越大越占内存),

2是采样频率,

3是上升沿触发,

4是高电平触发,

5是下降沿触发,

6是低电平触发(分析红外就把它按下,红外是低电平触发)



因为抓红外原始数据就一个通道,我只要把数字通道1的“低电平触发”按下就可以开始捕获数据了。

QQ图片20130624144619.jpg

2013-6-24 14:46 上传
(119.79 KB)





在显示sampling(采样)的时候,对着红外接收头,按下红外遥控器的关,别按错键了。开和关在一个按键上,但是编码不一样。

QQ图片20130624144919.jpg

2013-6-24 14:49 上传
(136.52 KB)



记得用鼠标滚轮把图例缩小到最小,你能看到一团数据在哪里,看不到的话,多试几次。

嗯,如果你有心,会发现,这个数据团会根据你按键的时间点而往前或者往后移动。



放大,放大放大放大

QQ图片20130624145156.jpg

2013-6-24 14:52 上传
(136.08 KB)





------------------------------------------------------------------------------------

下面的这种计算方法,经过论证,不如这个帖子里面的取数方法好用。

http://www.geek-workshop.com/thread-5258-1-1.html

------------------------------------------------------------------------------------



我们需要的是每次变化的时间间隔,导出这个变态的数据到csv,导出的选项里面需要改改,要不然出不来需要的数据。

QQ图片20130624145321.jpg

2013-6-24 14:53 上传
(63.98 KB)





在excel里面看看这些bt的数据,很容易看出这些数据都是时间点,因为他们依次增加

QQ图片20130624145550.jpg

2013-6-24 14:56 上传
(31.17 KB)





有了时间点,很容易算出来每个间隔。

加个函数,往下一拖就出来了。

QQ图片20130624145815.jpg

2013-6-24 14:58 上传
(38.63 KB)





看看“开”空调的原始数据

ARDUINO 代码复制打印

unsigned int rawCodes_ac_open[200] = {4397,4368,561,1578,560,537,557,1581,584,1582,584,486,558,537,584,1554,560,538,558,510,558,1607,557,513,585,511,556,1585,581,.....;
unsigned int rawCodes_ac_open[200] = {4397,4368,561,1578,560,537,557,1581,584,1582,584,486,558,537,584,1554,560,538,558,510,558,1607,557,513,585,511,556,1585,581,.....;



离这个原始数据就差一步之遥了。
这一步必须要做。实际上是对你得到的数据向毫秒转换。
对它们做个缩放,并取整。这个系数跟前面的采样频率有关,具体什么样的关系,可以自行研究。

QQ图片20130624150123.jpg

2013-6-24 15:01 上传
(68.18 KB)





------------------------------------------------------------------------------------

上面的这种计算方法,经过论证,不如这个帖子里面的取数方法好用。

http://www.geek-workshop.com/thread-5258-1-1.html

------------------------------------------------------------------------------------



这么多数字,取哪些呢?

看看原始格式,2个大数字在前,后面跟着一堆小数字,很容易就把头找到了。

转换成arduino的代码

ARDUINO 代码复制打印

unsigned int rawCodes_ac_close[200] ={4193,4096,595,1451,589,432,588,1453,589,1454,587,432,587,434,563,1475,591,433,564,458,586,1453,587,434,587,433,563,1476,590,1454,587,434,565,1475,566,456,563,1476,590,1453,587,1452,564,1477,566,457,585,1453,567,1477,587,1452,564,460,584,434,564,457,562,460,562,1475,587,434,588,433,562,1476,589,1455,563,1476,588,433,586,436,562,459,586,433,563,458,609,410,563,458,586,433,587,1454,587,1453,563,1477,564,1477,565,1476,581,4858,4237,4074,593,1453,562,460,563,1477,563,1477,565,458,587,434,584,1454,590,433,562,458,587,1453,588,436,584,436,562,1476,588,1453,590,434,562,1480,586,435,586,1453,565,1476,589,1453,589,1451,565,461,583,1453,589,1453,588,1454,564,457,587,434,587,433,587,435,561,1479,586,435,562,458,588,1452,590,1452,565,1476,564,458,587,436,584,433,562,458,588,432,562,461,585,434,584,435,589,1451,588,1453,588,1453,590,1453,590,1451,590};
unsigned int rawCodes_ac_close[200] ={4193,4096,595,1451,589,432,588,1453,589,1454,587,432,587,434,563,1475,591,433,564,458,586,1453,587,434,587,433,563,1476,590,1454,587,434,565,1475,566,456,563,1476,590,1453,587,1452,564,1477,566,457,585,1453,567,1477,587,1452,564,460,584,434,564,457,562,460,562,1475,587,434,588,433,562,1476,589,1455,563,1476,588,433,586,436,562,459,586,433,563,458,609,410,563,458,586,433,587,1454,587,1453,563,1477,564,1477,565,1476,581,4858,4237,4074,593,1453,562,460,563,1477,563,1477,565,458,587,434,584,1454,590,433,562,458,587,1453,588,436,584,436,562,1476,588,1453,590,434,562,1480,586,435,586,1453,565,1476,589,1453,589,1451,565,461,583,1453,589,1453,588,1454,564,457,587,434,587,433,587,435,561,1479,586,435,562,458,588,1452,590,1452,565,1476,564,458,587,436,584,433,562,458,588,432,562,461,585,434,584,435,589,1451,588,1453,588,1453,590,1453,590,1451,590};



并在代码里发射之:
ARDUINO 代码复制打印
irsend.sendRaw(rawCodes_ac_close,200, 38);
irsend.sendRaw(rawCodes_ac_close,200, 38);


然后就可以听到空调“哔”得一声就关掉了。

抛砖结束。
Enjoy it~

其实上面的计算、转换过程可以更简单的:
详见下面这个帖子中的数据转换部分。
315Mhz模块传输替代315Mhz遥控器 - Powered by Discuz!
http://www.geek-workshop.com/thread-5258-1-1.html

解决问题系列(3)——红外发射,控制美的空调开
via - 极客工坊

标签: Arduino教程