Category: 无线传感器网络

无线传感器网络的应用范围问题

By , July 29, 2009 3:43 pm

前些时间在几个地方做了几次关于Sun SPOT的讲座。经常遇到的一个问题就是无线通讯是否可靠的问题,根据我个人的理解,尝试着解答一下吧。

不管是有线通讯还是无线通讯,其基本原理都是一样的。原始信息在发射机端经过调制之后通过某种信号传递介质发送给接收机,接收机端通过解调得到原始信息。无线通讯和有线通讯的根本区别,就在于其信号传递介质。在有线通讯中,这个信号传递介质通常是某种电传导介质(或者是光传导介质),在这种介质上所传递的信号是电信号(或者是光信号)。在无线通讯中,这个信号传递介质通常是大气,在这种介质上所传递的信号是电磁波。从通讯理论上来讲,只要这两种信号传递介质都是导通的,那么其可靠度水平是相当的。说有线通讯比无线通讯更加可靠,其实是觉得看得见摸得着的线缆比看不见摸不着的空气更加实在。再往远处扯一扯,则是“虚”和“实”的本质问题,是可以做一篇哲学论文的。

任何通讯介质,都有其固有的弱点。有线介质不但怕虫吃鼠咬,更怕民工拿锄头乱挖;无线介质虽然怕障碍物阻挡,但是至少不会被虫子咬断。 所以,无线和有线,是各自有其应用环境的。在合适的应用环境里,就能够充分体现出其优点来。在不合适的应用环境里,理论上说得再好也没用。

无线传感器网络之所以会在未来有广阔的前景,在于它很好地解决了最后一公里,最后一百米,最后十米,或者是最后一米的问题。举个例子说,我国最近几年建设的高速公路,基本上都有光缆覆盖,其带宽足以支撑实时的视频监控应用。但是,高速公路沿途的各种摄像头和传感器是不能够直接接入光缆的,因为每在光缆上接入一个设备,就需要接入一对昂贵的光栅机。通常的做法,是将光缆作为骨干网,每隔一定的距离部署一对光栅机作为主节点,主节点附近的各种设备通过其他方式组成局部子网进行通讯,局部子网上的各种设备将主节点作为数据池(Data Sink),数据池上的数据通过主节点并入骨干网,并最终传输到远程数据采集、分析、控制终端。如上所述之最后N 米问题,用有线的解决方案往往是不太方便的,譬如说在已经通车的高速公路周边部署新的传感器,就不能够频繁地考虑将高速公路挖开铺设新的线缆这种可能性。

无线传感器网络的另外一个应用范围,是不便搭设有线通讯设备的环境。譬如说隧道施工现场和地下矿井矿山,施工现场的复杂性,以及传感器的数量级,使得搭设可靠的有线通讯环境非常困难。尽管无线通讯确实会由于施工现场中的种种障碍受到干扰,但是由于我们能够轻易地将无线传感器节点部署到施工现场的各个角落,从而构建起一个全面覆盖的无线通讯网络。在施工现场发生变化的时候,我们还能够轻易地通过调整无线传感器节点的物理位置来适应施工现场所发生的各种变化。这样的灵活性,是有线网络所远远不能够相比拟的。

无线传感器网络开发教程(基于Sun SPOT)

By , July 15, 2009 4:56 pm

这些教程是我在过去两年中逐步整理出来的。在这里跟大家分享一下,希望能够对也在作无线传感器网络的朋友有用。其中参考了很多其他老师和研究人员的胶片,就不一一致谢了。

由于水平有限,肯定有很多问题和错误,希望各位不要见怪。

下载到的文件是OpenOffice.Org格式的演示文件,建议使用OpenOffice.Org打开浏览(不过据说比较新版本的Microsoft Office也支持OpenOffice.Org的文件格式了 )。

01 无线传感器网络技术介绍

02 Sun SPOT介绍

03 Sun SPOT开发环境

04 Sun SPOT开发初步

05 Sun SPOT数据处理

06 Sun SPOT无线通讯

07 Sun SPOT基站应用

08 Sun SPOT数据存储

09 Sun SPOT外部接口

利用Sun SPOT驱动直流步进电机

By , June 27, 2009 8:23 pm

这两天在做一个无线传感器网络方面的培训,顺便贴一下如何利用Sun SPOT来驱动一个简单的直流步进电机。我所使用的步进电机型号为HS-85MG,市面上很容易买到的。接线图如上所示,关键是电机电源的负极要和Sun SPOT的GND相连接,不然的话会有一些小小的问题。

程序也很简单,稍微解说一下:

// 获得传感器板的实例
EDemoBoard db = EDemoBoard.getInstance();
// 获得传感器板上的各个引针
IOutputPin[] pin = db.getOutputPins();
// 创建一个伺服电机驱动,指定H0为脉冲信号输出
Servo myServo = new Servo(pin[EDemoBoard.H0]);
// HS-85MG的脉冲长度为1500微秒
myServo.setValue(1500);
// 驱动电机转动到指定位置,这个位置是一个0 到1 之间的浮点数。
// 0 表示电机转动的起始点,1 表示电机能够转动的最大范围
float position = (float) 0.5
myServo.setPosition(position);

下载源代码ServoDemo.zip

利用Sun SPOT驱动一个简单的直流马达

By , November 12, 2008 4:36 pm

这是一个最简单的直流马达,从废旧电脑上拆下来的,原来是处理器上的散热风扇。 只有两条引线,红的是电源正极,黑的是电源负极,正常工作电压为12伏。在这个简单的示范程序中,我们将使用Sun SPOT上面的5 伏电源为它供电。这虽然有点勉强,但是还可以工作。

接线说明:

(1)将Sun SPOT上面的5 伏引脚连接到Sun SPOT上面的VH引脚
(2)将Sun SPOT上面的地线引脚与马达的电源负极相连接
(3)将Sun SPOT上面的H0引脚与马达的电源正极相连接

程序片段:

IOutputPin[] pin = EDemoBoard.getInstance().getOutputPins();
ITriColorLED [] leds = EDemoBoard.getInstance().getLEDs();
leds[0].setRGB(100,0,0);                // set color to moderate red

boolean running = true;
while (running) {
    leds[0].setOn();                    // Blink LED
    pin[EDemoBoard.H0].setLow();
    Utils.sleep(5000);                   // wait 5 seconds
    leds[0].setOff();
    pin[EDemoBoard.H0].setHigh();
    Utils.sleep(5000);                  // wait 5 seconds
}

如上程序片断控制LED 0和直流马达交替运转5 秒钟。由于电压比较低的原因,马达的运转有点慢,有些时候需要晃动一下才能够转起来,不过程序是可以正确运行的。由此可见,利用Sun SPOT去控制一个简单的直流马达是多么的简单。

如果要解决马达工作不畅的问题,可以考虑采用一个工作电压为5 伏左右的直流马达,接线和程序都不需要做任何改动。也可以考虑用一个12伏的外部直流电源, 程序不需要做任何改动,但是接线需要修改如下:

(1)将直流电源的正极与Sun SPOT上面的VH引脚相连接
(2)将直流电源的负极与马达的电源负极相连接
(3)将Sun SPOT上面的H0引脚与马达的电源正极相连接

过几天再写一个稍微复杂一点的马达的驱动。

在OpenSolaris 2008.05上安装SunSPOT开发工具

By , October 7, 2008 11:05 am

在OpenSolaris 2008.05上安装SunSPOT SDK的关键是要使用JDK 5.0,而不要使用最新版本的JDK例如6.0甚至是7.0。我按照下面的步骤进行安装,经过测试可行。

1 下载JDK 5.0。下载地址是http://java.sun.com/javase/downloads/index_jdk5.jsp, 选择JDK 5.0 Update 16的Solaris x86版本下载,得到的文件是jdk-1_5_0_16-solaris-i586.sh(假设文件下载在您的home目录)。

2 安装JDK 5.0。

# chmod 0777 jdk-1_5_0_16-solaris-i586.sh
# ./jdk-1_5_0_16-solaris-i586.sh
# export PATH=~/jdk1.5.0_16/bin:$PATH

3 安装ant并将其放入PATH中。

4 安装Sun SPOT SDK,只需要安装SDK部分和Demo部分即可。NetBeans及其插件可以选择安装或者不安装。JDK无需再次安装。

就这么简单。

Panorama Theme by Themocracy