陈雨利,王晓峰
(1.北京信息科技大学 仪器科学与光电工程学院,北京 100192;2.清华大学,北京 100084)
无线传感器网络[1]由大量无线传感器节点组成,是一种可以实时监测、感知和采集环境数据,并通过远距离无线通信方式传输数据的数据信息采集技术,被广泛应用于环境监测、智慧城市、航空航天探测等领域。由于无线传感器节点一般分布在人迹罕至、环境恶劣的地区,或者是处于工作人员不便随时更换电池的场景,所以多采用环境能量收集系统作为传感器节点的主要供能模块[2]。能量收集系统能够将太阳能、风能、温差能、振动能等多种形式的环境能量进行收集并转换成电能,再将其存储到锂电池中等待后续使用。偏远地区主要以太阳能作为重要的能量收集来源,然而在黑夜或者长期阴天等无法采集太阳能的情况下,便只能依靠储存电量的锂电池供电从而维持能量收集系统正常工作。一旦锂电池电量耗尽,便需要维护人员及时更换电池,维持电量收集系统正常工作,否则可能造成电量收集系统所供电的无线传感网络出现不可预估的问题。所以设计一个可以在偏远地区监测电池状态并在远端实时显示电池荷电状态即剩余电量(SOC)的电池状态监测系统是十分重要的。此系统可以在电量耗尽前发出警告,从而提示工作人员及时更换电池,保证无线传感网络正常运行。
传统的电池管理系统存在本地存储电池数据有限和无法远程传输数据等问题,导致无法远程实时监测电池状态[3]。而目前对能量收集系统的状态监测主要是实现电池的充放电过程控制、MPPT控制分析[4],以及通过对光伏电池板的工作电压、电流、温度、光照强度等数据进行分析来检测电池板是否正常工作[5-6],缺乏对电池电量的监测。一般储能锂电池的电量监测系统通常直连上位机,或者利用WiFi、ZigBee等短距离通信技术进行电池数据的传输[7],存在传输距离有限等缺点,无法满足偏远地区电池状态监测的要求。因此,如何实现电池状态的远距离实时监测,从而保证无线传感节点正常工作,成了亟需解决的问题。
随着物联网概念的提出,多种物联网技术得到快速发展,物联网技术的应用也成为了学术界与工业界的热点[8]。窄带物联网(Narrow Band-Internet of Things, NB-IoT)是物联网领域的新兴技术,相比传统物联网技术如WiFi、蓝牙、ZigBee等存在数据通信距离短、通信覆盖能力有限等问题,其具有广域覆盖、海量连接的优点,因而得到更广泛的应用。NB-IoT技术基于蜂窝数据,理论上在有运营商网络信号的地方就可以实现传输,无需自建网络,非常适合远距离数据传输[9]。此外,NB-IoT还具有超低功耗特性,非常适合作为低功耗设备的数据传输手段。结合NB-IoT的技术特性以及目前电池监测系统存在的问题,我们提出了一种基于NBIoT技术的远程实时监测电池状态的方法,将各传感器采集的环境数据以及电池数据通过NB-IoT技术传输到云平台,并利用物联网云平台作为数据库存储海量历史数据,在自设计的手机端程序上实现工作环境数据和电池状态数据的可视化,完成了超远程实时监测电池状态。此设计能够降低能量收集系统的运维成本,保证系统正常工作,具有实际工程意义。
本系统主要由数据采集端、数据传输端、数据存储端及数据可视化端组成。系统总体框架如图1所示。
图1 系统总体框架
数据采集端基于STM32主控芯片,利用温湿度采集模块、锂电池电压数据采集模块、电流转电压信号模块采集能量收集系统中锂电池的电压、电流数据,以及采集设备所处环境中的温湿度数据,在STM32嵌入式系统中设计SOC算法计算得出电池电量数据。
数据传输端设计采用NB-IoT通信模块,通过STM32芯片控制NB-IoT通信模块与阿里云物联网平台建立通信连接,STM32读取采集模块的数据并通过串口传输到NB-IoT模块再将其发送到云平台存储、展示。设计了串口转USB通信模块,可以在电脑串口调试助手打印输出信息,方便系统调试。
数据存储端采用阿里云物联网平台搭建了云端数据库,建立规则引擎将设备上传的数据转发到阿里云数据库进行存储。云数据库可以可靠地存储海量数据,也更便于后续开发的手机端小程序接入。
数据可视化端则是基于阿里云物联网平台存储设备传输的物模型数据接口,设计了微信小程序接入阿里云平台,开发了当前数据展示界面历史数据折线图界面及用户登录系统,实现了远程、实时、在线监测电池状态。
本系统的数据采集模块能够采集电池两端的开路电压,本研究中还需要测量剩余电量SOC,因此需要在系统中设计电池电量的估算方法,这也是电池状态监测系统中最核心的部分[10]。电池剩余电量即SOC,是指电池剩余电量占额定电池容量的比值[11],如式(1)所示:
式中:Qremain为电池剩余可用电量;Qrated为电池额定的电荷容量。
由于无线传感器的能量收集系统电压变化范围相对较小,而且要实现在单片机上实时检测并计算得出电池SOC,故需选择一种相对广泛的SOC计算方法。查阅文献,对比了各种估算方法,由于电池的开路电压(OCV)与SOC存在对应关系[11-14],因此可以选择开路电压法来进行SOC估算。这种方法首先要进行电池开路电压测试实验,通过实验获得电池开路电压和SOC的对应数据,并通过数据拟合得到OCV-SOC曲线及函数关系式。当电池静置足够长的时间后,再次检测电池端电压值,通过对拟合后的OCV-SOC对应关系计算得到电池SOC估算值。
系统需实现采集环境温湿度数据、电池状态数据,再无线传输数据的功能。硬件电路主要由两部分组成:数据采集端、数据传输端。
本系统拟采集环境温湿度数据、电池电压和电流数据并计算出电池SOC,因此设计了一系列数据采集电路。数据采集端电路设计包括STM32主控芯片系统设计、温湿度传感器模块设计、锂电池数据采集电路设计,数据采集端电路原理如图2所示。由于设备应用场景是对无线传感节点能量收集系统的电源状态进行检测,因此需满足低功耗要求。主控芯片采用意法半导体出品的STM32L151RCT6超低功耗MCU,该系列芯片运行频率为32 MHz,具有性能优越的ARM Cortex-M3+32位RISC内核,还有多种I/O及外部接口,以及内存保护单元、高速嵌入式存储器。时钟电路是单片机的心脏,由晶振、电容、电阻组成,可控制单片机的工作时序。电源电路用于提供单片机正常工作的电源电压,由6个去耦电容组成。由电容、开关、电阻组成的复位电路,其低电平为复位有效电平。SWD模式下载电路用于单片机烧录程序,相比JTAG模式接线更简单,且具有在线仿真调试功能。单片机的UART2与CH340连接,实现串口转USB输出功能,可以在电脑串口调试助手打印输出信息,方便系统调试。
图2 数据采集端电路原理
温湿度数据采集模块选择DHT11数字温湿度传感器,这是一款温湿度复合传感器,可以同时测量温湿度数据。并且已经校准了数字信号输出,无需额外经过A/D转换即可被单片机读取。工作电压范围为3.3~5 V,温度测量范围可达0~50 ℃,湿度测量范围为20%RH~95%RH。内部设计采用一个电阻式感湿元件用于测量湿度,温度测量则采用一个NTC测温元件,二者再与一个性能出色的8位单片机相连接,高集成度的系统使用起来更加简易快捷。DHT11的VCC引脚接3.3 V,GND引脚接地,DATA引脚接入STM32芯片的PB8管脚即可直传数据。
由于单片机自身只能采集0~3.3 V的电压,而锂电池最大电压为4.32 V,设计采用飞利浦公司出品的PCF8591芯片采集电池电压数据。PCF8591芯片是一个支持外部4路电压输入采集(电压输入范围0~5 V),由单一电源供电的8位A/D转换低功耗数据获取芯片。被测电池正极接PCF8591的AIN0作为电压输入,芯片的SCL和SDA分别为I2C的时钟引脚和数据引脚,通过I2C总线接口与STM32芯片通信。
系统还需要采集电流数据,但由于单片机只能采集电压信号,因此电路采用由LM358运算放大器和ICL7660芯片组成的电流采集模块。LM358运放实现电流检测放大功能,ICL7660为运放提供负电源,最终将采集的电流信号转为电压信号被单片机读取。设计还利用2A升压板作为稳压电源模块,通过USB或者太阳能电池板为模块供电。
在数据采集端将数据测出来之后还需要通过数据传输端进行传输,数据传输端设计主要是NB-IoT网络通信模块外设电路设计,包括模块串口通信连接、NB-IoT天线座连接、USIM卡座连接、电源开关、复位、网络指示灯等电路设计。
NB-IoT无线通信模块是无线数据采集器与物联网云平台的连接纽带,主要包括NB-IoT模组芯片、UART串口接口、复位、电源、射频天线、USIM卡座、网络指示灯等。为了兼容更多频段,选择移远多模NB-IoT模块BC26,其支持多种主流协议[15],可满足不同的网络需求,本系统的BC26模块与阿里云平台通信选择MQTT协议。
STM32芯片需要通过UART串口控制BC26模块,将BC26的TXD和RXD接口与STM32的主串口相连,即可通过UART主串口通信并传输数据。设计PWRKEY电源开关及RESET复位电路,可以通过按键拉低引脚电平实现开机及复位功能。PSM模式是模块省电模式,当模块处于省电模式时网络处于断连状态,通过拉低PSM_EINT引脚电平可将模块唤醒。为实现网络连接功能,还需设计射频天线及USIM卡座等外设电路。BC26模块原理如图3所示。
图3 BC26模块原理
本系统软件部分首先完成了NB-IoT模块与阿里云平台通信程序的设计,实现了数据传输功能。数据传输完成后,需要对采集的数据进行可视化处理,便于维护人员随时随地监测电池状态。因此,我们还设计了一个手机端微信小程序实现数据的可视化功能。
开发环境使用Keil μVision5,采用C语言编程,使用库函数及模块化方式编写代码。NB-IoT模块与云平台通过AT命令交互,程序控制模块有序发送AT命令进行注册设备、登录并连接到阿里云物联网平台、订阅Topic等,完成模块初始化、设备接入云平台的操作。本系统设计的代码采用字符串匹配方法,确保返回字符串完全匹配才发送下一AT命令。NB-IoT模块连接上云代码流程如图4所示。
图4 NB-IoT模块连接上云代码流程
主程序在完成GPIO、串口、I2C、ADC_DMA等一系列配置后,使能各传感器模块,开启NB-IoT模块初始化连接定时器,循环读取采集数据并存入Buffer缓存数组,通过串口发送到NB-IoT模块。本系统NB-IoT模块设计使用MQTT协议将数据发送到阿里云,在阿里云的物模型数据界面可实时查看上传的数据。主程序流程如图5所示。
图5 主程序流程
本系统采用阿里云物联网平台进行数据的接收、存储及转发。阿里云物联网平台是阿里云面向万物互联时代所搭建的云管理平台,提供云服务器计算服务,用户无需自建网络,利用兼容各种主流网络协议的设备即可接入。本系统选择阿里云物联网平台的主要原因是其具有低代码、性能可靠、运算快、安全性高的优势,可以更好地对设备物理数据进行分析和可视化展示。
在阿里云物联网平台上注册产品及设备,获取设备的三元组(ProductKey、DeviceName、DeviceSecret)并记录。本系统还定义了云平台数据上传Topic和转发接口,使得云平台能正确解析上传的数据,便于后续微信小程序使用阿里云API读取云平台的物模型数据,具体流程如图6所示。
图6 云平台设计流程
在云平台建立规则引擎,设置云产品数据流转,还可以将设备上传的数据存储到阿里云数据库中。云数据库不受硬件容量限制,可存储海量历史数据。
为了更清晰直观地展示阿里云平台存储的物模型数据,本文设计了一个手机端数据可视化小程序。数据可视化小程序的开发环境结合Vscode与微信开发者工具,利用HTML、CSS语言设计系统界面样式,通过JavaScript语言实现客户端与服务器端资源通信、数据可视化、数据业务处理等功能。开发采用B/S架构(Browser/Server),阿里云物联网平台作为服务器端,小程序作为客户端,云平台与小程序通过TCP三次握手建立连接,程序发起HTTP请求获取资源[16]。本系统使用了封装在阿里云SDK包内的请求方法,简化了使用原生Ajax请求的方法,大大提高了开发效率。请求内容具体包括请求参数(请求动作Action、阿里云设备三元组)、请求方法(POST方法)、请求成功或失败的回调函数。云平台响应并返回一个JSON对象数据资源及状态码,状态码为200则表示成功,小程序解析JSON对象并渲染到页面展示。原理如图7所示。
图7 阿里云与小程序连接原理
小程序设计了3个tab界面:第一个界面展示当前时刻的电池数据与环境温湿度数据;第二个界面是历史数据可视化界面,引入了Echarts组件库,用折线图动态表示历史时刻的数据变化;第三个界面是用户登录中心,验证用户身份信息后才将数据展示。总体设计框图如图8所示。
图8 小程序总体设计框图
实验简单模拟了电池状态监测系统的实际使用场景,选取了太阳能作为能量收集系统的单一输入,实验采用18650三元锂离子电池作为能量收集系统的储能锂电池,对锂电池进行电池状态监测,并观测其在数据可视化系统上的显示情况。
将各数据采集模块、NB-IoT通信模块、简单能量收集系统和锂电池按照图9方式正确连接,并将移动物联网卡插入SIM卡槽,系统上电,对系统进行数据传输、数据显示测试。由于本文拟设计一个能够进行超远距离电池状态监测的系统,因此本实验还测试了不同场景的数据传输情况。
图9 系统实物连接
在上位机利用串口调试助手对NB-IoT模块收发数据进行测试,实现NB-IoT物联网通信模块与阿里云的通信连接。串口调试界面如图10所示。
图10 串口调试界面
本系统中阿里云物联网平台作为数据接收并存储数据的平台,经过测试,设备显示在线,可以正常接收并显示上传的物模型数据,阿里云平台可以及时响应接收设备上传的电池数据并存储。阿里云展示界面如图11所示。
图11 阿里云展示界面
本系统设计了微信小程序作为远程即时监测数据可视化端,经过测试,微信小程序可以与阿里云平台实时同步更新物模型数据,当前数据界面如图12(a)所示。历史数据折线图每隔两个小时记录一次数据,历史数据界面如图12(b)所示。
图12 微信小程序数据界面
先将18650三元锂电池充满电,利用放电仪对锂电池进行第一次放电测试实验,利用万用表、库仑计对电池各个电压点的SOC数据进行记录,所得开路电压与SOC值作为标定值,并对数据进行拟合得到OCV-SOC曲线,此后的电池SOC估算值在程序中通过拟合得到的关系进行计算。将电池充满电再次进行放电实验,取20个采样点数据,测试数据与实际值的对比如图13(a)所示,插图为电压范围在4.0~4.2 V区间的放大图。表1所列为实验数据分析。利用美德时工业级温湿度计对环境温湿度进行测量并作为实际温湿度值。本文设计的系统采集所得温湿度数据作为测量值,取10个采样点,测试结果与实际值曲线如图13(b),图13(c)所示。实验结果表明,实际SOC与估算SOC最大误差不超过6%,温度误差最大不超过3.08%,湿度误差最大不超过7.69%,满足系统要求。
图13 实验数据曲线
表1 SOC数据分析%
此外,还测试了不同场景下的电池状态显示情况,实验场景分别为:室内、地下室、户外。实验结果显示,系统在有蜂窝网络的场景下均能正确传输和显示环境和电池数据,不受距离影响。测试结果如图14所示。
图14 不同场景下的测试结果
本文提出了一种基于NB-IoT和STM32的远程实时监测电池状态的系统,并设计了手机端小程序实现数据可视化。实验测试结果表明,设计的系统可以准确采集电池状态数据以及环境温湿度数据,通过NB-IoT模块可以稳定可靠地将数据超远距离传输到阿里云物联网平台存储,手机端的微信小程序也可以远程实时查看采集的数据。该系统弥补了当前能量收集系统缺乏电池电量监测的不足以及传统电池状态监测系统数据传输距离有限的问题,极大降低了对无线传感器能量收集系统的运维成本,确保传感器节点的可持续工作。