大数据

我的第一个物联网应用 4

有请本章的主角们:玩具小风扇、红外接收器和一个红外遥控器(空调、电视遥控都行)。本章我们的目标是实现用遥控器控制风扇。

红外协议

我们知道,人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm,比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线,红外是一种人的眼眼看不到的光线,利用红外波来传递信息,传递的规则就成为红外协议。红外线的波长较短,对障碍物的衍射能力差,所以更适合应用在需要短距离无线通信场合点对点的直接线数据传输。为了使各种设备能够通过一个红外接口进行通信,红外数据协议(InfraredDataAssociation,简称IRDA)发布了一个关于红外的统一的软硬件规范,也就是红外数据通讯标准。
红外通信是利用950nm近红外波段的红外线作为传递信息的媒体,即通信信道。发送端采用脉时调制(PPM)方式,将二进制数字信号调制成某一频率的脉冲序列,并驱动红外发射管以光脉冲的形式发送出去;接收端将接收到的光脉转换成电信号,再经过放大、滤波等处理后送给解调电路进行解调,还原为二进制数字信号后输出。
简而言之,红外通信的实质就是对二进制数字信号进行调制与解调,以便利用红外信道进行传输;红外通信接口就是针对红外信道的调制解调器

红外信号.png

红外信号录制

利用红外接收设备可以接收到红外波的信号,红外接收器接收到红外线光波,经过解调电路转换成二进制数据。把接收的到数据记录存储下来的过程叫做录制。利用 Ruff 套件中的红外接收器录制空调遥控器的信号,存储下来,然后使用红外发射器发生出去,你就可以实现 Ruff 来控制空调了,想想是不是很有趣?还有更有趣的,Ruff 连接网络,你就可以远程操控你们家空调。你还可以利用温度传感器写一个程序根据温度范围自动调节你们家空调。

控制风扇

说了原理,开始实践吧!
在上一章《我的第一个物联网应用3》 中,我们知道怎么使用继电器控制风扇了,这一章很简单,在上一章的基础上,我们结合红外设备,使用红外设备控制继电器来控制风扇。说了一堆的红外原理,其实我们这里利用的很简单,我们只要接收到红外信号即可,不需去解读信号的意义,收到信号时如果继电器关闭状态就打开,反之就关闭。

  • 添加红外接收器

    rap device add irr

我们把设备 ID 定为 “irr”, 添加成功以后我们去 Ruff 官网软件仓库中查看下红外接收器的驱动提供了什么方法。

 $('#').on('data', function(data) {     
      console.log('received data', data);
  });

只有一个方法:监听数据,我们所以我们写一个监听数据的方法:

 $('#irr').on('data', function(data) {     
        console.log('received data', data);
      //控制继电器
      controlRelay();
  });

再写一个控制控制继电器的方法:

var relayOpen = false;
function controlRelay(){
    relayOpen = !relayOpen;
    if (relayOpen) {
         $('#relay').turnOn(function () { 
               // 打开继电器成功的回调函数
                console.log('turn on');
          });

    } else {
        $('#relay').turnOff(function () { 
                  // 关闭继电器成功的回调函数
                 console.log('turn off');
         });
    }
}

完整代码:index.js

var relayOpen = false;
function controlRelay(){
        relayOpen = !relayOpen;
        if (relayOpen) {
             $('#relay').turnOn(function () { 
                   // 打开继电器成功的回调函数
                    console.log('turn on');
          });
    } else {
        $('#relay').turnOff(function () { 
                  // 关闭继电器成功的回调函数
                 console.log('turn off');
         });
    }
}
$.ready(function (error) {
    if (error) {
        console.log(error);
        return;
    }
    $('#irr').on('data',function(data) {
         //控制继电器
           controlRelay();
    });
});
$.end(function () {
    $('#relay').turnOff(function () { 
                 console.log('turn off');
         });

});

部署看看吧,也许你的风扇噪音会对红外信号造成干扰,一旦干扰你的红外接收器就会不断接收到信号(实际是风扇噪音信号),如果出现这种情况,建议你把风扇和红外接收器的距离离远一些。