[原创] 实现自学习型遥控 [应用于STM32网络收音机]
A.需求的产生实现遥控无疑是一件很酷的事情.
不过对于一件非商业出售的电器,配个遥控器实在是有些累赘.
试想现在谁家不是一堆遥控器呀! TV,VCD,DVD,DVB,电风扇,音响,空调.......
而时常出现的问题有:
1. 遥控器因为太多,要用的时候不知道哪个是哪个.
2. 忘记把没电的电池拿下来,结果要用时发现....#$%^$^%#$%%^&
但如果全部使用高级电池,则全部成本起码需要上百RMB.
在这次STM32-Netradio 项目上面,也很需要一个遥控器.
考虑到以面提及的问题,如果再为这个配一个专用的遥控器,则成本就高了.
而且,家里又多了一个遥控器,我想这是大家都不愿意的事情.
于是,产生了做一个自学习型遥控的需求.
有需要就有动力,开始着手研究.
下图是两个不同的遥控器的不同按键的编码.
./bbs_upload/files_25/ourdev_531877.jpg
./bbs_upload/files_25/ourdev_531878.jpg
B.确定实现方案
我们可以把每个电平跳变的时间戳记录下来,然后下次再次接收到信号时同源数据进行比对.
如果完全符合(根据实际情况需要做允许偏差,一般1%就可以很好的识别了),就认为是同一
按键.
C.如何取得遥控编码数据
在对数据的接收上面,最好是使用"捕获" 功能,这样直接实现了中断和时间戳.
在没有"捕获" 功能的硬件上面,可以使用电平跳变中断和定时器来配合.
D.如何得到样本数据
因为在匹配过程上需要源样本数据,所以,还需要有一个学习程序,把某个键的编码完全记
录下来并保存备用(最好是存储在存储器里面,这样下次启动就可以直接读取出来使用了).
从上面两个图片来看,我们只需要记录并保存100ms 以内的所有编码就可以了.
E.具体实例
在STM32-NETRADIO 上,定义一个全局变量rem_mode 来标示当前的工作状态.
默认为关闭状态,启动后,从文件系统读取样本数据.
如果解读成功,就设置rem_mode 为正常解码状态,
接收到遥控信号后和样本进行比对,完全符合就产生对应的事件.
然后有一个学习程序,执行学习程序后,会先把rem_mode 设置为学习状态,
然后提示你按对应的键盘,程序会记录并保存这100ms 内的数据;
然后在提示接下一个键.......直到所有的键都采集到并保存到文件里面.
同时把新的样本数据更新到样本数据表里面.然后再把rem_mode 设置为正常解码状态,
学习程序到此结束.此时可以用遥控来操作了.
F.局限性和注意事项
1.只适合单帧且单帧长度在100ms 以内的的遥控器.(对于单帧的长度,还有改进的空间)
像下面这个遥控器(结构:起始帧,数据帧,结束帧,数据帧,结束帧,数据帧,结束帧......)
以及空调遥控器(空调遥控一次性发送全部设置数据),目前还没办法兼容.
./bbs_upload/files_25/ourdev_531879.jpg
如果要能兼容上面的遥控器,可以使用更复杂的算法,不过对于空调遥控则是不考虑了.
2.不支持连按.(要实现连按的代价较大,但在需要时也可以实现)
aozima 2010-02-02
点击此处下载 ourdev_531871.pdf(文件大小:263K) (原文件名:实现自学习型遥控.pdf)
DEMO代码,仅做思路参考.ourdev_531872.zip(文件大小:4K) (原文件名:remote.zip) 12 学习了. MARK 好 mark mark mark~好东西~ 嗯,这个很好玩,mark之 TO aozima :有个想法,用STM32的USART的IrDA功能加个红外二极管可以做成遥控发射端吗?这样不就可以把所有遥控器都统一到一个遥控上来了啊!不过忘了在哪看到一句说IrDA和红外遥控不是一码事,不知道这个想法能不能实现? 回复【9楼】dragonwww
-----------------------------------------------------------------------
没听明白你想的是什么方案.
irDA只是一个协议吧,不管硬件好像. 不好意思,没表述清楚:想的是读取几个不同遥控器最常用的几个键(比如:开机,关机),然后存储,再用STM32做遥控发射端,STM32上也做个开机、关机键,但按一下“关机”键时会把对应的几个不同的遥控器的关机键的码都发一遍,这样一个遥控器的同一个关机键就能关不同的设备了。
看来IRDA这样用行不通,那遥控发射应该也能用TIM采用计时功能实现吧? 回复【11楼】dragonwww
那遥控发射应该也能用TIM采用计时功能实现吧?
-----------------------------------------------------------------------
是的,不过,你这个用STM32来关别的,有点绕道太远了吧.用遥控器来操作STM32,再由STM32操作其它的设备..... 呵呵,人生在于折腾嘛!
几个不同遥控器只对STM32操作一次,STM32存下相应的码,以后就只用STM32控了,做个手持的、小巧的就欧了。 这个想法可以,市场有类似的产品,是省了不少的事,否则是太多了遥控吕。 mark.. 建议参考 lirc 很久以前就在linux上用上了 几乎是遥控器都可以用上 多处反应现在的功能还不好用,对部分遥控器并不太好.
正在想办法研究再强大些的,但暂时还没概念.
找了些资料.
点击此处下载 ourdev_542349.pdf(文件大小:603K) (原文件名:IR_control.pdf) 这几天要忙自己的一个板.没空玩RADIO.
昨天晚上抽空改进了一下红外部分,但还没有经过大面积的测试,所以没有提交,有条件的帮忙测试一下.
原来的思路是,捕获一段时间(150ms)内的全部数据并记录,然后和新捕获到的数据进行匹配.
可能发生的问题是在这段时间内出现连按的情况就悲剧了.
现改进为:
在捕获样本时,捕获更长一段时间的(200ms),然后从中分离出前面的有效的一段.并得出数据的个数.
然后在工作中捕获到一定量的数据(由前面的学习和分离程序来确定)就释放信号量交由匹配程序去匹配.
这样做,更好用也反应更快.
缺点:如果某个遥控器不同的按键所发出的数据长度不一就不行了.暂时还没有解决思路.
望众人添砖加瓦.
点击此处下载 ourdev_542575.rar(文件大小:7K) (原文件名:remote_改进_stm32_radio.rar) 红外遥控发射部分我已经调出正确的波形,但外部电路好像有点问题,以前讨论过,见以下链接:
//红外接收头 接收的管脚是PC8:Remap(TIM3:CH3)
//红外发射 发射的管脚是PB9:TIM4:CH4
三极管换用NPN的8050,R9换100欧,R12换24欧,
这样PB9和三极管基极波形都是好的,
但就是红外管波形不好,波形电压才1V多点,接收端也接收不到-_-!
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3945721&bbs_page_no=1&bbs_id=3020
以下是MDK工程源代码,在MDK逻辑仿真里可以看到正确的波形,遥控协议实现的是NEC的,我这也没有带存储的示波器,
有想玩红外发射的可以下载试试看,我甚至怀疑自己买的红外发射头有问题呢,呵呵。
点击此处下载 ourdev_543979.rar(文件大小:1.23M) (原文件名:STM32红外遥控发射 半成品 by dragonwww.rar) mark 这个很不错,支持。家里遥控器确实是多,看个电视都得要俩个遥控器,一个机顶盒,一个电视机的,马上天气要热了,空调的遥控器,还得要一堆。真的很烦呢。
另外提一个不成熟的建议:
可否把波形存储并上传到上位机上来,然后,用分析规整后再下载到CPU内用于匹配呢? 目前的作法是保存在文本文件中的,看那个可以达到分析的效果. 回复【11楼】dragonwww
-----------------------------------------------------------------------
把所有的都发一遍,会不会对不想操作的设备产生干扰呢 回复【23楼】deiwgah
-----------------------------------------------------------------------
呵呵,如果两样电器离太近了肯定会有问题的,所以有个前提:两样遥控对象不能太近:) mark mark mark 结果如何了。
我也是把波形存下来了,可是发射不出去啊。 mark! mark mark mark 回复【28楼】biansf2001 花溅泪
结果如何了。
我也是把波形存下来了,可是发射不出去啊。
-----------------------------------------------------------------------
你发射的时候有没有加38K的载波,要是没有的话,发射距离很短, 结果等于发射不出去 mark MARK 楼主的显示波形,是咋弄出来的?示波器的图? 回复【36楼】reflecter
楼主的显示波形,是咋弄出来的?示波器的图?
-----------------------------------------------------------------------
逻辑分析仪,带逻辑分析仪的示波器也行. 看看! mark~ mark MARK 正在考虑学习型遥控,参考 楼主有新进展吗? mark!! mark 我们这个项目也已经完成了,不过为了压缩成本,是用了stc作为主控的.
另外加了gsm模块,实现短信控制遥控. mark!!!!!!!!!!!!
页:
[1]