搜索
bottom↓
回复: 47

[原创] 实现自学习型遥控 [应用于STM32网络收音机]

[复制链接]

出0入0汤圆

发表于 2010-2-2 17:38:20 | 显示全部楼层 |阅读模式
A.需求的产生
实现遥控无疑是一件很酷的事情.
不过对于一件非商业出售的电器,配个遥控器实在是有些累赘.
试想现在谁家不是一堆遥控器呀! TV,VCD,DVD,DVB,电风扇,音响,空调.......

而时常出现的问题有:
1. 遥控器因为太多,要用的时候不知道哪个是哪个.
2. 忘记把没电的电池拿下来,结果要用时发现....#$%^$^%#$%%^&
但如果全部使用高级电池,则全部成本起码需要上百RMB.

在这次STM32-Netradio 项目上面,也很需要一个遥控器.
考虑到以面提及的问题,如果再为这个配一个专用的遥控器,则成本就高了.
而且,家里又多了一个遥控器,我想这是大家都不愿意的事情.
于是,产生了做一个自学习型遥控的需求.
有需要就有动力,开始着手研究.

下图是两个不同的遥控器的不同按键的编码.



B.确定实现方案
我们可以把每个电平跳变的时间戳记录下来,然后下次再次接收到信号时同源数据进行比对.
如果完全符合(根据实际情况需要做允许偏差,一般1%就可以很好的识别了),就认为是同一
按键.

C.如何取得遥控编码数据
在对数据的接收上面,最好是使用"捕获" 功能,这样直接实现了中断和时间戳.
在没有"捕获" 功能的硬件上面,可以使用电平跳变中断和定时器来配合.

D.如何得到样本数据
因为在匹配过程上需要源样本数据,所以,还需要有一个学习程序,把某个键的编码完全记
录下来并保存备用(最好是存储在存储器里面,这样下次启动就可以直接读取出来使用了).
从上面两个图片来看,我们只需要记录并保存100ms 以内的所有编码就可以了.

E.具体实例
在STM32-NETRADIO 上,定义一个全局变量rem_mode 来标示当前的工作状态.
默认为关闭状态,启动后,从文件系统读取样本数据.
如果解读成功,就设置rem_mode 为正常解码状态,
接收到遥控信号后和样本进行比对,完全符合就产生对应的事件.
然后有一个学习程序,执行学习程序后,会先把rem_mode 设置为学习状态,
然后提示你按对应的键盘,程序会记录并保存这100ms 内的数据;
然后在提示接下一个键.......直到所有的键都采集到并保存到文件里面.
同时把新的样本数据更新到样本数据表里面.然后再把rem_mode 设置为正常解码状态,
学习程序到此结束.此时可以用遥控来操作了.

F.局限性和注意事项
1.只适合单帧且单帧长度在100ms 以内的的遥控器.(对于单帧的长度,还有改进的空间)
像下面这个遥控器(结构:起始帧,数据帧,结束帧,数据帧,结束帧,数据帧,结束帧......)
以及空调遥控器(空调遥控一次性发送全部设置数据),目前还没办法兼容.

如果要能兼容上面的遥控器,可以使用更复杂的算法,不过对于空调遥控则是不考虑了.
2.不支持连按.(要实现连按的代价较大,但在需要时也可以实现)
                                                           aozima 2010-02-02




点击此处下载 ourdev_531871.pdf(文件大小:263K) (原文件名:实现自学习型遥控.pdf)
DEMO代码,仅做思路参考.ourdev_531872.zip(文件大小:4K) (原文件名:remote.zip)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-2-2 17:41:19 | 显示全部楼层
12

出10入10汤圆

发表于 2010-2-2 21:04:51 | 显示全部楼层
学习了.

出0入0汤圆

发表于 2010-2-2 22:25:05 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-2-2 22:30:41 | 显示全部楼层

出0入4汤圆

发表于 2010-2-2 22:46:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-3 08:22:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-3 08:24:38 | 显示全部楼层
mark~好东西~

出0入0汤圆

发表于 2010-2-3 09:05:02 | 显示全部楼层
嗯,这个很好玩,mark之

出0入0汤圆

发表于 2010-2-8 14:15:05 | 显示全部楼层
TO aozima :有个想法,用STM32的USART的IrDA功能加个红外二极管可以做成遥控发射端吗?这样不就可以把所有遥控器都统一到一个遥控上来了啊!不过忘了在哪看到一句说IrDA和红外遥控不是一码事,不知道这个想法能不能实现?

出0入0汤圆

 楼主| 发表于 2010-2-8 14:21:47 | 显示全部楼层
回复【9楼】dragonwww  
-----------------------------------------------------------------------
没听明白你想的是什么方案.

irDA只是一个协议吧,不管硬件好像.

出0入0汤圆

发表于 2010-2-8 14:57:08 | 显示全部楼层
不好意思,没表述清楚:想的是读取几个不同遥控器最常用的几个键(比如:开机,关机),然后存储,再用STM32做遥控发射端,STM32上也做个开机、关机键,但按一下“关机”键时会把对应的几个不同的遥控器的关机键的码都发一遍,这样一个遥控器的同一个关机键就能关不同的设备了。

看来IRDA这样用行不通,那遥控发射应该也能用TIM采用计时功能实现吧?

出0入0汤圆

 楼主| 发表于 2010-2-8 15:18:05 | 显示全部楼层
回复【11楼】dragonwww  
那遥控发射应该也能用TIM采用计时功能实现吧?
-----------------------------------------------------------------------
是的,不过,你这个用STM32来关别的,有点绕道太远了吧.用遥控器来操作STM32,再由STM32操作其它的设备.....

出0入0汤圆

发表于 2010-2-9 08:57:44 | 显示全部楼层
呵呵,人生在于折腾嘛!
几个不同遥控器只对STM32操作一次,STM32存下相应的码,以后就只用STM32控了,做个手持的、小巧的就欧了。

出0入0汤圆

发表于 2010-3-4 16:30:09 | 显示全部楼层
这个想法可以,市场有类似的产品,是省了不少的事,否则是太多了遥控吕。

出0入0汤圆

发表于 2010-3-22 17:59:33 | 显示全部楼层
mark..

出0入0汤圆

发表于 2010-3-22 19:32:11 | 显示全部楼层
建议参考 lirc 很久以前就在linux上用上了 几乎是遥控器都可以用上

出0入0汤圆

 楼主| 发表于 2010-3-30 14:20:41 | 显示全部楼层
多处反应现在的功能还不好用,对部分遥控器并不太好.
正在想办法研究再强大些的,但暂时还没概念.

找了些资料.
点击此处下载 ourdev_542349.pdf(文件大小:603K) (原文件名:IR_control.pdf)

出0入0汤圆

 楼主| 发表于 2010-3-31 13:58:46 | 显示全部楼层
这几天要忙自己的一个板.没空玩RADIO.

昨天晚上抽空改进了一下红外部分,但还没有经过大面积的测试,所以没有提交,有条件的帮忙测试一下.

原来的思路是,捕获一段时间(150ms)内的全部数据并记录,然后和新捕获到的数据进行匹配.
可能发生的问题是在这段时间内出现连按的情况就悲剧了.

现改进为:
在捕获样本时,捕获更长一段时间的(200ms),然后从中分离出前面的有效的一段.并得出数据的个数.
然后在工作中捕获到一定量的数据(由前面的学习和分离程序来确定)就释放信号量交由匹配程序去匹配.
这样做,更好用也反应更快.

缺点:如果某个遥控器不同的按键所发出的数据长度不一就不行了.暂时还没有解决思路.
望众人添砖加瓦.

点击此处下载 ourdev_542575.rar(文件大小:7K) (原文件名:remote_改进_stm32_radio.rar)

出0入0汤圆

发表于 2010-4-6 09:48:47 | 显示全部楼层
红外遥控发射部分我已经调出正确的波形,但外部电路好像有点问题,以前讨论过,见以下链接:
//红外接收头 接收的管脚是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)

出0入0汤圆

发表于 2010-4-6 11:07:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-6 12:08:04 | 显示全部楼层
这个很不错,支持。家里遥控器确实是多,看个电视都得要俩个遥控器,一个机顶盒,一个电视机的,马上天气要热了,空调的遥控器,还得要一堆。真的很烦呢。

另外提一个不成熟的建议:
可否把波形存储并上传到上位机上来,然后,用分析规整后再下载到CPU内用于匹配呢?

出0入0汤圆

 楼主| 发表于 2010-4-6 15:18:39 | 显示全部楼层
目前的作法是保存在文本文件中的,看那个可以达到分析的效果.

出0入0汤圆

发表于 2010-4-6 15:40:43 | 显示全部楼层
回复【11楼】dragonwww  
-----------------------------------------------------------------------

把所有的都发一遍,会不会对不想操作的设备产生干扰呢

出0入0汤圆

发表于 2010-4-6 21:22:56 | 显示全部楼层
回复【23楼】deiwgah  
-----------------------------------------------------------------------

呵呵,如果两样电器离太近了肯定会有问题的,所以有个前提:两样遥控对象不能太近:)

出0入0汤圆

发表于 2010-4-9 22:50:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-3 13:53:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-3 13:56:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-20 09:07:37 | 显示全部楼层
结果如何了。

我也是把波形存下来了,可是发射不出去啊。

出0入0汤圆

发表于 2010-7-21 11:25:25 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-12-6 23:53:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-7 08:56:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-9 17:13:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-9 23:33:40 | 显示全部楼层
回复【28楼】biansf2001 花溅泪
结果如何了。
我也是把波形存下来了,可是发射不出去啊。
-----------------------------------------------------------------------

你发射的时候有没有加38K的载波,要是没有的话,发射距离很短, 结果等于发射不出去

出0入0汤圆

发表于 2010-12-14 17:54:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-9 17:18:43 | 显示全部楼层
MARK

出110入109汤圆

发表于 2011-3-9 19:35:04 | 显示全部楼层
楼主的显示波形,是咋弄出来的?示波器的图?

出0入0汤圆

 楼主| 发表于 2011-3-10 13:06:39 | 显示全部楼层
回复【36楼】reflecter  
楼主的显示波形,是咋弄出来的?示波器的图?
-----------------------------------------------------------------------
逻辑分析仪,带逻辑分析仪的示波器也行.

出0入0汤圆

发表于 2011-3-27 21:40:31 | 显示全部楼层
看看!

出0入0汤圆

发表于 2011-6-28 12:33:58 | 显示全部楼层
mark~

出0入0汤圆

发表于 2011-9-11 08:25:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-11 12:09:25 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-12-6 13:14:58 | 显示全部楼层
正在考虑学习型遥控,参考

出0入0汤圆

发表于 2012-1-6 11:29:24 | 显示全部楼层
楼主有新进展吗?

出0入0汤圆

发表于 2012-2-7 08:09:20 | 显示全部楼层
mark!!

出5入8汤圆

发表于 2012-2-9 12:43:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-9 12:50:36 | 显示全部楼层
我们这个项目也已经完成了,不过为了压缩成本,是用了stc作为主控的.
另外加了gsm模块,实现短信控制遥控.

出0入0汤圆

发表于 2013-11-7 11:13:30 | 显示全部楼层
mark!!!!!!!!!!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 23:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表