SCI论文(www.lunwensci.com):
摘要:为解决公共场地照明系统普遍存在的“无人灯”“失修灯”等现象或问题,设计了新型节能且带有故障自诊断和提醒功能的LED控制系统。以NodeMCU为控制核心,通过人体热释电传感器来检测环境中有无人员活动,进而控制灯光开关;通过光敏传感器检测环境光线,结合PID算法来控制LED亮度,实现低耗节能。系统带有LED、光敏电阻故障自诊断电路,并利用巴法云物联网平台,向手机端远程发送故障信息,用户可通过微信API及时接收故障提醒,以便对系统进行检修。用户也可以通过Blinker物联网开发平台,结合安装在手机上的Blinker App来对该LED系统进行开关、控制亮度等操作。样机测试结果表明,整个系统运行平稳,App操作便捷,远程推送故障信息准确及时,满足了使用要求。
关键词:物联网技术;NodeMCU;Arduino;Blinker;巴法云平台
Design and Implementation of LED Remote Control System with Fault Diagnosis Function Based on NodeMCU
Liu Tiansong,Jiang Nan,Shi Jixiang
(Changzhou Liuguojun Vocational Technical College,Changzhou,Jiangsu 213025,China)
Abstract:In order to solve the prevalent phenomena or problems of"some lights are still on with nobody"and“lamps left unrepaired for a long time"in public places,a new energy-saving LED with fault diagnosis function was designed.The system used NodeMCU as the control core,and used human pyroelectric sensors to detect human activity in the environment,and then controlled the light switch.The system detected the ambient light by photosensitive sensor and controlled the LED brightness with PID algorithm,it had self-diagnosis circuit,which could check LED fault,photosensitive resistance fault and other faults.The system could use the Bafa Cloud IOT platform to send fault information to the mobile phone terminal remotely,and users could receive timely fault reminder through Wechat API.Blinker IOT development platform could also be used to switch the LED system on and off,and to control brightness.The prototype test results show that the entire system runs smoothly,the App is easy to operate,and the remote push fault information is accurate and timely,meeting the use requirements.
Key words:Internet of Things;NodeMCU;Arduino;Blinker;Bafa cloud platform
0引言
低功耗、高效的照明控制系统在节能降耗的时代背景要求下越来越受到欢迎。因此研究一种节能的控制系统具有很大的研究意义和商业价值。例如,刘晋等[1]针对目前路灯存在的功耗高、没有有效控制手段等缺点,设计了时控及光控的校园LED节能路灯,在一定程度上实现了节能目标。陈李华[2]结合实例,介绍了光亮工程的节能与智能控制,并对灯具安装实施作了简单说明。周韬等[3]用非成像光学设计方法,设计了一种基于LED光源的新型的均匀照明系统,并以STC89C52RC单片机为核心,设计了由人体红外和自然光照强度控制的LED路灯。
然而,随着人工成本的不断增加,对照明系统的监管和控制越来越倾向于自动化[4]。既能满足节能要求,同时又兼顾自动诊断故障功能,避免因损坏而长久失修现象出现的LED控制系统却较为少见。针对上述问题,本文采用NodeMCU作为核心控制芯片,通过人体热释电传感器和光敏传感器,来控制LED的开关和亮度,以达到节能目的。利用物联网开发平台,来及时接收LED控制系统的故障提醒信息,同时实现对LED的远端控制。本文首先介绍了文章背景;然后,对基于NodeMCU的带故障自诊断功能的LED远程控制系统总体设计方法进行了说明;接着介绍了系统的硬件设计和程序设计;最后介绍了系统调试结果。
1总体方案设计
系统的结构框图如图1所示。LED控制系统以NodeMCU为核心,通过人体热释电模块检测周围环境中是否有人,决定LED的开关;通过光敏模块采集环境光线亮度,进而通过PWM控制LED的亮度。NodeMCU通过WiFi可以与巴法云平台连接,再通过该平台向微信推送故障;同时也可以通过WiFi与Blinker服务器连接,实现手机端Blinker App对设备的控制。
2主要硬件电路设计
2.1 NodeMCU
控制系统的核心采用的是NodeMCU[5-6],一款开源快速硬件原型平台,包括固件和开发板,如图2所示。它使用Lua脚本语言编程,也可使用Arduino IDE进行编程和下载。其具有GPIO、PWM、I2C、1-Wire、ADC等功能,包含了可以运行在ESP8266 WiFi SoC芯片之上的固件,以及基于ESP-12模组的硬件,如图3所示。数据通过TCP协议与物联网云平台连接。主要有3种模式:(1)AP模式,该模式提供无线接入服务,允许其他无线设备接入,提供数据访问;(2)STA模式,该模式类似于无线终端,可以连接到AP,通俗地讲,就像笔记本电脑或者手机一样,搜索到无线网后连接;(3)AP+STA模式,即上述两种方式的结合。
2.2光敏模块电路设计
本文中系统包含了2路光敏模块。其中,第1路光敏模块采集环境光线强度,进而控制LED亮度;第2路光敏模块采集LED光线强度,然后用于LED灯故障诊断。第1路光敏模块电路原理图如图4所示,其包含模拟量输出端口(连接到NodeMCU的模拟量输入端口A0)、数字量输出端口(连接到NodeMCU数字量端口D0)。图中R6为光敏电阻,其阻值可变,A0电压值也发生变化。其电压大小计算如下:
VA0=[VCC/(R2+R6)]·R6(1)
LM393与周边电阻R2、R6、R3组成一个电压比较电路。调整电位器R3阻值后,当光线变化时,引脚2上的电压会产生变化,当LM393引脚2电压低于引脚3时,引脚1输出高电平,反之输出低电平。第2路光敏模块电路原理图和第1路相同。
3软件设计
3.1软件功能
系统可实现手动运行、自动运行两种模式。手动状态下,可以通过Blinker[7]开关LED或者调节LED亮度,也可检测LED、光敏模块等模块是否正常工作。自动运行又包含了LED故障诊断、光敏模块故障诊断、连续长时间运行报警等功能,如图5所示。如有设备故障,系统将通过WIFI推送到微信,及时提醒用户。
3.2采集数据的处理
为避免环境影响对光敏模块输出的干扰,需对NodeMCU
的A0端采样数据进行滤波,本文采用滑动均值滤波方法[8-9]。该方法思路是:新建一个数组,依顺序存放N次采样数据,每新采样一个新的数据,则将数组中最早采集的数据摒弃,然后求数组内N个数据的算术平均值。其基本步骤如下。
把连续取N个采样值看成一个队列,假如第N次采样后,得到该队列中包含以下数据x[1],x[2],…,x[N],对队列中的N个数据进行算术平均运算,得到输出结果:
按照先进先出原则,每次采样到一个新数据放入队尾,并摒弃原来队首的一次数据。假如现在为第j+N次采样,则得到一组新数据x[j],x[j+1],…,x[j+N],再对队列中的N个数据进行算术平均运算,得到新的输出结果:
经过滤波后,A0端采样数据变的更加平稳,如图6所示。显然,点数越大即采样次数N越大,得到的波形越平滑,但是系统的滤波延迟也越大。根据实际项目测试,本文中N取值为6。
3.3 LED的亮度控制
LED调光器的原理有多种,例如,波宽控制调光(简称PWM),恒流电源调控和分组调控等方式。本文采用PWM调光方式,对LED灯组进行控制。PWM[10-11]是一种对模拟信号电平进行数字编码的方法,通常用于电机调速、LED亮度调节。通过改变NodeMCU的I/O口输出的方波的占空比从而获得使用数字信号模拟成的模拟电压信号。本文使用的PWM模块如图7所示。
PID[12]控制算法是工业控制领域使用最广泛的算法之一,PID控制分为模拟PID和数字PID,前者处理的是连续信号,后者处理的是离散信号。本文使用该算法对LED亮度的精确控制。PID是比例(P)、积分(I)、微分(D)控制算法。
LED的亮度PID控制系统框图,如图8所示。
首先计算误差e(t)如下:
e(t)=r(t)-y(t)(4)
然后对误差e(t)分别进行比例、积分和微分运算,最后将这3种运算的结果叠加在一起,得到PID控制器的控制输出值u(t),在连续的时间域里,PID控制器的表达式如下:
式中:Kp为比例系数;Td为微分时间常数;Ti为积分时间常数;u(t)为PID控制输出值;e(t)为采样时刻输入偏差值。
3.4设备与服务器的连接
3.4.1与巴法云的连接
巴法云服务器[13]采用TCP创客云作为中转渠道,利用HTTP协议将云服务器与手机APP联系起来。本文通过下述方法创建NodeMCU与巴法云的连接,并将消息发布到手机。
(1)注册巴法云账号后,在巴法云控制台创建主题。
(2)编写程序,使NodeMCU可以订阅和发布主题,并下载。主要代码如下:
#define DEFAULT_ STASSID"xxxx"//xxxx为WIFI名称#define DEFAULT_ STAPSW"xxxxx"//xxxxx为WIFI密码String uid="xxxxxx";//xxxxxx为用户私钥,巴法云控制台获取
String type="2";//1表示是预警消息,2表示设备提醒消息String device="灯光2控制手机客户端";//设备名称
int delaytime=10;//设置闲置时间,单位是秒
String ApiUrl="http://api.bemfa.com/api/wechat/v1/";//微信api网址
NodeMCU采集数据,上传到服务器,发布消息。手机微信订阅主题,即可实时接收数据。
3.4.2与Blinker的连接
Blinker是一套专业且易用物联网解决方案,提供了服务器、应用、设备端sdk支持。支持多蓝牙、WiFi等方式通信。当注册Blinker与设备后,可以通过Arduino IDE编写程序并下载到NodeMCU中,实现NodeMCU、手机APP和Blinker服务器端的相互连接。其核心代码如下:
#define BLINKER_ WIFI//选择连接方式
#include<Blinker.h>
char auth[]="Your Device Secret Key";//设备密匙char ssid[]="Your WiFi network SSID or name";//WIFI名称
char pswd[]="Your WiFi network WPA password or WEP key";//WIFI密码
BlinkerButton Button1("btn-abc");//新建组件对象。根据需求,可以创建多个。
void button1_ callback(const String&state)//回调函数{
}
void setup()//初始化Blinker
{
Blinker.begin(auth,ssid,pswd);
Blinker.attachData(dataRead);//绑定回调函数Button1.attach(button1_ callback);
}
3.5诊断功能实现
3.5.1 LED故障诊断功能
设备上电初始化后,首先判断运行模式,手动模式下,开启灯组后,PWM输出最大值255,灯组以最大强度发光。自动模式下,如检测到周围有人移动,则根据环境光线强弱控制灯组的灯光强弱。若灯组出现故障不发光,电阻R6阻值发生变化,NodeMCU的端口D0将由高电平变为低电平,NodeMCU发送信号到巴法云服务器,然后推送设备故障消息到微信客户端。该功能流程如图9所示。
推送程序主要代码如下:
void doHttpStick(){//微信消息推送函数
String pData;
pData="uid="+uid+"&type="+type+"&time="+delaytime+"&device="+device+"&msg="+msg;
http.begin(client2,ApiUrl);
http.addHeader("Content-Type","application/x-www-form-urlencoded");
int httpCode=http.POST(postData);
String payload=http.getString();
http.end();}
3.5.2光敏电阻故障诊断
设备通过记录一天不同时间光敏电阻的阻值变化,来对光敏电阻是否损坏进行判断。定义一个数组A={a0,a1,a2,a3,a4,a5},数组中各个元素ai代表每小时内间隔10 min读取到的NodeMCU的模拟量输入端口A0的值。对于每个正整数i(0≤i≤4),数组的一阶差分可以表示为:
显然,当Δai等于0或者趋向于0时,可以认为间隔10 min读取到的A0的值无变化:
进一步的,通过式(7)计算一阶差分的方差,来观察NodeMCU的模拟量输入端口A0的值变化情况。方差越大,数据的波动越大,认为光敏电阻工作处于正常状态;方差越小,数据的波动就越小,则认为光敏电阻可能出现了故障。
4试验测试
在手机上安装Blinker App后,注册设备,对设备在手动状态下和自动状态下分别进行测试。通过串口监测窗口,观测到系统网络连接正常,获取到了IP地址为192.168.43.107。通过遮挡LED,模拟灯泡损坏故障,观察到系统发送了“灯2的灯泡可能损坏,请检修”信息,微信在同一时间接收到了该故障信息。串口监测窗口和微信界面分别如图10和图11所示。
图12所示为Blinker App的操作界面。通过点击该界面按钮,验证了设备可以实现自动、手动模式切换,开、关灯和亮度调节等功能。
5结束语
本文基于开源的NodeMCU设计了节能、带故障自诊断功能的LED远程控制系统。该系统可以工作在手动、自动两种模式下。手动模式下,可以远程遥控开灯、关灯和检测LED是否出现损坏。自动状态下,可以根据环境变化调节开灯、关灯,调节灯光亮度,达到节能目标,避免了无人灯现象的出现。该系统具有自动诊断系统中部分模块是否存在故障的功能,并通过微信提醒用户。通过对样机进行测试,结果表明,整个系统运行平稳;通过App操作LED开、关,自动、手动模式切换指令准确,响应迅速。当系统中部分模块存在故障时,微信API接收到的远程推送的故障信息准确及时,满足了使用要求。
参考文献:
[1]刘晋,贺利朋,陈小玉,等.时控及光控的校园LED节能路灯设计[J].电子世界,2021(8):150-151.
[2]陈李华.光亮工程的节能与智能控制[J].现代建筑电气,2016,7(6):44-47.
[3]周韬,刘晋,杨朋,等.一种基于非成像光学的校园LED节能路灯设计[J].科技视界,2018(5):181-184.
[4]张兴启.太阳能路灯无线控制系统的设计与研究[D].武汉:武汉理工大学,2013.
[5]陆承佳.基于NodeMCU与OneNET的物联网应用技术研究[J].单片机与嵌入式系统应用,2020(5):18-21.
[6]肖杨,林钊浩.基于NodeMCU的双向通信系统[J].工业技术创新,2020(4):80-84.
[7]聂晗,王军民.基于Blinker的远程温度控制系统的设计[J].电子技术与软件工程,2019(20):247-248.
[8]吴涛,李里亚.基于移动互联网的心电脉搏信号动态监控系统[J].沈阳工业大学学报,2020,42(5):573-577.
[9]刘天宋,高学群,虞益龙,等.使用弯曲传感器的机器人手势控制系统设计[J].单片机与嵌入式系统应用,2018,18(9):39-41.
[10]石赛兰.太阳能LED路灯节能控制系统设计[J].机电工程技术,2010,39(12):61-62.
[11]王苏.直流电机PWM调速研究及单片机控制实现[J].机电工程技术,2008(11):82-84.
[12]韩京清.从PID技术到“自抗扰控制”技术[J].控制工程,2002(3):13-18.
[13]王春武,陆欣月,张信芝,等.基于ESP8266的智能云环境监控系统[J].吉林师范大学学报(自然科学版),2021,42(4):74-79.
关注SCI论文创作发表,寻求SCI论文修改润色、SCI论文代发表等服务支撑,请锁定SCI论文网!
文章出自SCI论文网转载请注明出处:https://www.lunwensci.com/ligonglunwen/49663.html