[arduino|module]用红外遥控类库驱动315M无线通讯模块

使用315M无线通讯模块进行数据传输,其实原理和使用红外遥控本质上没有太大的差别,都是通过单线实现数据的传输。因为只有单线,所以就必须以时间来换空间,通过高低电平的时长比例不同,表示0/1。

关于红外收发,相关的类库很多。个人推荐 IRremote 库,强大而且适用于多种编码方案。

我个人实验用的是常用的38K红外遥控器,是电子制作中常见的红外遥控方案,模块相当好找,在我的TCA1602时钟中就有用到。

作为初级的遥控方案,传输速率有限而且容易受外部干扰,所以并不能实现高速而稳定的数据传输。所以,在典型的应用中,都是发送简单的控制码。在NEC编码格式中。数据段由4个字节构成,其实前2个字节为地址码,互为反码,后2个字节为数据码,同样互为反码。结构非常清晰,地址码表示发送方是谁,数据码表示发送的内容。反码的设计用于进行数据校验。只不过一般买到38k遥控器没有经过定制,所以地址码就是0x00。所以,我按下遥控器左上角的power键(编码为0x45),实际发送的数据为:

“开始码+0x00+0xff+0x45+0xba+结束码”

在红外收发的类库中,就已经包含了这样的编码算法。借助红外类库,在视频中,我把红外遥控的接收器去掉,换成一条导线,连接到另外一块 arduino 主控板。可以看到一样可以实现数据的通讯,证明说 新来的arduino板作为数据的发送端,按照红外传输的编码规则在发送数据。

注意:视频中,因为这两块 arduino 都使用同一台笔记本电脑的USB口进行供电,也就说是,他们在电源端是共地的,所以这样通讯没什么问题,如果没有共地,需要有个共地(相同的电压基准),否则电平比较没有什么意义。

在证实同样能进行通讯以后,我又把这条单线,换成了315M红外收发模块,通过无线电进行通讯。可以看到,依然可以实现数据收发,虽然丢包现象时有发生,但如果我们增加相同数据的发送次数,加强重复校验,相信依然可以接收到可信的数据。而且视频中,硬件电路也没有特别优化,因为一般来说,无线收发是需要通过外接天线来提高收发效果的。

在实验过程中,我也有试着将数据发送频率提高一倍,但是发现基本就接收不到数据了,但使用单线通讯的话,效果却还可以。目前也没有再进一步优化,不再展开。如果有朋友想自己设计无线收发编码解码协议,可以参考我的方法,先用单线实现收发,再改变传输介质,继续实验。

红外遥控的优势在于功耗较小,元件简单,但是指向性比较强,使用无线电进行通讯,传输的数据可以更远,同时不受指向的影响。二者可以使用类似的编码方式,实现简单控制编码的收发。

特别感谢:圣源电子 提供视频中出现的 Arduino UNO315M 无线通讯模块38k 红外遥控套件

PS. 这回视频中的背景音乐没有选择好,还请各位看官见谅。

关于aGuegu

向着更高的逼格
此条目发表在模块分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。
  • ICE

    能提供实例代码吗?

    • 原文中有IRemote的链接呀

  • ICE

    是这样的,我看了下你的帖子,,然后我也尝试着使用IRemote的库来驱动315M,但无法成功。