基于WiFi的智能温度调节系统设计

2022-10-15 02:07陈广金蓝慕云
现代电子技术 2022年20期
关键词:开发板继电器指令

陈广金,蓝慕云

(1.西安交通大学 电气工程学院,陕西 西安 710049;2.华南理工大学 电力学院,广东 广州 510641;3.华南理工大学 电气信息及控制国家级实验教学示范中心,广东 广州 510006)

0 引 言

随着时代的发展,人们更加重视家居生活的智能化,期望在外出忙碌之后,在家中能够享受更加舒适便捷的生活,免受电器温度需要实地观察和来回调控带来的烦扰。设计智能化的温度控制系统可以很好地解决这一问题。

市场上主要采用ZigBee 来实现智能家居的功能控制,ZigBee 不仅安装复杂、成本高,而且不能连接用户的手机来进行远程控制。在智能手机飞速发展的时代,以WiFi 来远程控制智能家居已经成为研究设计的重要方向。WiFi 技术是一种标准的无线局域网络技术,是重要的远程控制手段,相对其他控制方式优势明显,而且具有成本较低、整合度高、安全性强、开发方便等优点。WiFi 的遥控半径可达100 m,足以在室内甚至室外一定范围内掌控整座建筑的温度情况,只需要放置一个热点即可让用户自行连接,成本较低,己经应用于生活中各种场合。手机、Pad 以及便携式计算机等移动设备与互联网连接,在智能家居的设计之中使用十分普遍。基于WiFi 来控制开关,用户可以实时监控室内温度情况并在手机窗口进行调节控制,让生活更加便捷舒适,克服了传统家居手动调节的机械化与不稳定性。

1 系统总体框架设计

系统由电源模块、以Arduino 为核心的执行模块、显示模块三个主要模块组成,总体设计如图1 所示。系统以Arduino 控制器为核心,WiFi-ESP8266 无线模块和MQTT(Message Queuing Telemetry Transport)服务器协作,进行信息反馈和远程操作。将传感器采集的温度数据上传到物联网云服务器,服务器接收数据之后,用户可以在手机端对温度进行控制。将采集数据与数据阈值作比较,若出现异常,则蜂鸣器会及时报警并关断设备,用户也可以发出指令,随时观察设备的温度情况并确定远程控制设备运行与否。

图1 系统整体框架

2 系统硬件设计

在硬件设计中,要设计各个模块,包括元器件型号的选择、电路原理图的设计、硬件电路正确性的检测。系统硬件有电源模块,为系统供电;继电器模块,产生开关信号;温度采集模块,采集温度物理量;智能移动终端模块,实现智能温度控制。系统硬件结构图如图2所示。

图2 系统硬件结构图

2.1 电源模块

电源模块电路如图3 所示。

图3 电源模块电路图

电源模块将220 V 家用交流电通过变压器降压,再通过电容滤波的全桥整流电路,使用LM7805 芯片将输出电压稳定在5 V。在该电源模块中,为降低损耗,提高输出电压质量,选用合适的滤波电容,并采用LM7805芯片进一步改善输出电压。用LM78 系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜,稳定电压在4.8~5.2 V 之间,适于给控制系统供电。

2.2 继电器模块

继电器分为低压控制电路和高压工作电路,通过Arduino 的I/O 端口输出高低电平来控制继电器开闭,进而可以控制220 V 用电回路,并控制用电设备的运行。继电器内部电路图如图4 所示,其用电设备连线图如图5 所示。

图4 继电器内部电路图

图5 继电器用电设备连线图

2.3 温度采集模块

DS18B20 是常用的数字温度传感器,其输出的是数字信号,具有体积小、测温系统简单、硬件开销低、抗干扰能力强、精度高的特点。DS18B20 数字温度传感器接线方便,在智能家居领域十分适用,可以用于一些室内用电设备的温度检测。同时DS18B20 具有独特的一线接口,只需要一条口线即可实现通信,电压范围为3.0~5.5 V ,无需备用电源,测量温度范围为-55~125 ℃。DS18B20外接电路图如图6 所示。

图6 DS18B20 接线图

关于警报装置,设计简易蜂鸣器电路,接线简易,如图7 所示。

图7 蜂鸣器电路图

2.4 智能移动终端模块

Arduino UNO 板负责控制温度传感器和继电器,ESP8266 MCUNode 模块负责Arduino UNO 板与服务器通信,再通过服务器与手机端进行远程连接。用Arduino 的IDE 分别进行Arduino UNO 和ESP8266 NodeMCU 的开发编程,将程序下载到NodeMCU 板和Arduino UNO 板中,通电即可运行,满足功能需求。

2.4.1 Arduino UNO 开发板

Arduino UNO 是一款基于微控制器ATmega328P 的开发板,有14 个数字输入/输出引脚(这些引脚中有6 个引脚可以作为PWM输出引脚),6个模拟输入引脚,16 MHz石英晶振,USB 接口,电源接口,支持在线串行编程以及复位按键。用户只需要将开发板通过USB 接口连接计算机就可以。

2.4.2 NodeMCU

NodeMCU 是一个开源的物联网(Internet of Things,IoT)硬件开发板,支持WiFi 功能且使用方法与Arduino开发板十分类似。ESP8266 是一块芯片,NodeMCU 则是以ESP8266 芯片为核心的开发板。NodeMCU 开发板上的两排插针与ESP8266 芯片的引脚相连,可以使用杜邦线将芯片的引脚接到实验电路中。NodeMCU 开发板上还配有USB 接口以及电压转换电路,只需用一根USB 数据线就可以实现为ESP8266 供电以及上传程序的操作。

2.4.3 Arduino UNO 板与ESP8266 MCUNode 通信

NodeMCU 通过IC 接口连接Arduino,IC 是一种总线式结构,它只需要SCL 时钟信号线与SDA 数据线就能与总线上的设备连接,实现数据通信。Arduino 将温度传感器的数据向ESP8266 MCUNode 传输,ESP8266 MCUNode 向服务器传输,而手机端发出的指令通过服务器传输到 ESP8266 MCUNode,再由ESP8266 MCUNode 向Arduino UNO 板传输。

IC 的工作模式分为:主模式(Master Mode)和从模式(Slave Mode),主设备启动与从设备的通信。主设备需要从设备地址来启动与从设备的对话,当主设备寻址时,从设备响应主设备,其接线如图8 所示。

图8 WiFi模块连接Arduino 示意图

2.4.4 MQTT 服务器

MQTT 是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的特点是轻巧、开放、简单、规范,易于实现。在MQTT 协议通信中,有两个最为重要的角色,分别是服务端和客户端。MQTT 服务端通常是一台服务器,它是MQTT 信息传输的枢纽,负责将MQTT 客户端发送的信息传递给MQTT 客户端。MQTT 客户端可以向服务端发布信息,也可以从服务端收取信息。客户端发送信息的行为称为“发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅”信息。MQTT 服务端在管理MQTT 信息通信时,是使用“主题”来控制的。MQTT 服务器和客户端通信示意图如图9所示。

图9 MQTT 服务器和客户端通信示意图

3 系统软件设计

在此将Arduino UNO 板的第6 脚作为控制继电器的管脚,定义管脚为输出模式,该模式下可以通过代码控制管脚的电平高低,并通过电平高低控制继电器的通断。向总线上所有设备发送温度转换请求,获取温度传感器数据;然后注册回调函数,当ESP8266 发来数据请求时,将温度数据发给ESP8266,当收到ESP8266 传来的指令数据,执行相关函数,按照指令控制继电器动作。最后,实现ESP8266 与WiFi 连接,连接MOTT 服务器实现订阅主题,以便接收手机发出的指令,并发布主题,向手机端传输温度数据。

开发手机端APP 的主要工具是Android Studio,利用其新建工程文件目录界面。开发者根据自己的功能需求在Android Studio 的工程文件目录中编辑的文件主要 包 括:AndroidManifest. xml(确 定APP 权 限)、activity_main.xml(APP 界面布局)、MainActivity.Java(定义界面布局各控件的回调函数,决定APP 的功能)。完成APP 界面布局后,还需要给一些按钮控件绑定回调函数,当检测到用户点击按钮,执行相应的回调函数,实现特定的功能。

3.1 工作流程

系统工作流程如图10 所示。

图10 系统工作流程

3.2 手机端APP 开发

根据实际需求,手机端需要实时反映设备温度,当用户打开手机APP,在APP 界面会实时更新温度信息,用户便可以远程监控温度情况。与此同时,用户可以根据自己的实际需求和主观意愿对界面进行操作,随时通过手机发出指令远程中断或开启继电器。可以在手机端远程操作,给人们生活带来了诸多便利。

APP 温度操控界面如图11 所示。

图11 APP 温度操控界面

3.3 各模块程序设计

本文系统的硬件端是基于ArduinoIDE 的程序设计的,Arduino 中均有封装好的各种函数库文件,程序设计相对简单。各模块的程序节选说明如下:

3.3.1 Arduino 板

1)温度数据获取以及发送

#include

//将DallasTemperature.h 文件导入对应子目录

sensors.requestTemperatures();

//向总线上所有设备发送温度转换请求

tempC = sensors.getTempCByIndex(0);

//将传感器摄氏温度数据储存入tempC 变量中

Wire.begin(8); /* join IC bus with address 8 */

Wire.onReceive(receiveEvent);

//主设备接收到信息后调用函数receiveEvent,执行APP 指令Wire.onRequest(requestEvent);

//主设备接收到从设备数据请求后,向从设备发送温度数据

2)继电器的通断设置

要实现继电器的通断,只需设置其所连接的管脚的电平高低即可,如下:

pinMode(relayPin,OUTPUT);

digitalWrite(relayPin,LOW); //接通继电器

digitalWrite(relayPin,HIGH); //断开继电器

可以利用判断语句,将接受到的APP 指令作为判断条件,满足条件便将管脚电平设置成所需要的水平,以及实现特定的功能。

3.3.2 ESP8266WiFi模块程序设计

1)初始化设置

const char* ssid = "zz10"; //WiFi 名称

const char* password = "66666666"; //WiFi 密码

const char* mqttServer = "test.mosquitto.org";//MQTT 服务器地址

float Command=65.00; //指令参数,取值不同代表不同指

令,初始化取值65,表示暂不执行任何操作

WiFiClient WiFiClient;

PubSubClient mqttClient(WiFiClient);//建立MQTT 服务器对象

Serial.begin(9600);

//初始化串口通信,便于在计算机打印调试信息

Wire.begin(D1,D2);

//join i2c bus with SDA=D1 and SCL=D2 of NodeMCU

WiFi.mode(WiFi_STA);

//设置ESP8266 工作模式为无线终端模式

connectWiFi(); //连接WiFi

mqttClient.setCallback(receiveCallback);//设置MQTT 订阅回调函数,收到服务器的消息后调用此函数,用于向Arduino 板发送APP 端的指令

mqttClient.setServer(mqttServer,1883);//设置MQTT 服务器和端口号

connectMQTTServer();

//连接MQTT 服务器,并且订阅特定主题以便接受APP 指令

2)循环执行主程序

Wire.beginTransmission(8);//启动IC 通信,8 代表从设备地址

char *p1 = float2char(Command);//Command 的不同数值代表不同指令

Wire.write(p1,sizeof(float)); //发送指令给Arduino

free(p1);

delay(1 000);

Wire.endTransmission(); //发送结束

Command=65.00; //每次发送完毕后赋予其初始值,下次接收到新的指令后重新赋值,发送给Arduino 板执行

Wire.requestFrom(8,sizeof(float)); //向主机请求数据

while(!Wire.available()) //如果没有获取数据

{

Serial.println("waiting!");

}

while(Wire.available()){ //如果成功获取了数据

char c;

int j;

char *p1 =(char *)malloc(sizeo(ffloat));

fo(rj = 0;j

{

*(p1 + j)= Wire.read();

}

float x = char2float(p1);//从Arduino 获取了数据,储存于变量x 中

tempC=x;

if(x==-999||x==-998||x==-997)

{ if(x==-999)

{Serial.println("自动切断");}

if(x==-998)

{

Serial.println("操作切断");

}

if(x==-997)

{

Serial.println("重启继电器");

}

}

else{

Serial.println("正常工作,汇报温度为:");

Serial.println(x);

}

free(p1);

delay(1 000);

}

if(mqttClient.connected()){ //如果开发板成功连接服务器//每隔3 s 钟发布一次信息

if(count >= 3){

pubMQTTmsg();//向服务器发布消息,报告当前硬件端的情况

count = 0;

}//保持心跳

mqttClient.loop();

} else { //如果开发板未能成功连接服务器

connectMQTTServer(); //则尝试连接服务器

}

}

4 系统模拟测试

系统模拟测试时,分别使用手机和Arduino UNO 开发板显示温度采集数据并对温度进行控制。系统实物图如图12 所示,其中手机APP 端显示温度数值与LCD测量温度数值一致,WiFi 工作状态良好,且继电器可以正常断开,调压器用于调节LCD 液晶显示屏的亮度。

图12 系统实物图

为进一步检验系统结果,给出温度控制曲线如图13 所示。

图13 温度控制曲线

以22~28 ℃为例,当温度达到设置下限时,继电器自动闭合,可以让升温系统进行工作;当温度达到上限时,继电器断开,与之关联的电气加热系统停止加热。模拟测试结果表明,本文系统不仅可以通过Ardino UNO 板对电器温度显示与控制,还可通过手机端进行实时监控,且系统功耗小。

5 结 论

基于WiFi 控制的温度调节系统实现了远程监测设备或环境温度,满足了用户的需求,能够通过手机APP远程操纵开关,实现非接触式开关控制。该系统可以根据不同的应用环境设置不同的温度阈值,超出该阈值,系统会自动关断,由用户排查故障并通过手机重启设备。将所设计系统引入智能家居体系中,可以便利人们生活,提高生活质量,让日常的生产生活更加智能化。

猜你喜欢
开发板继电器指令
听我指令:大催眠术
便携式继电器测试台的研制和应用
电气工程及其自动化控制系统中继电器的应用
ARINC661显控指令快速验证方法
LED照明产品欧盟ErP指令要求解读
Microchip最新推出两款PIC32 Curiosity开发板
浅析单片机开发板的设计与制作
继电器在电气工程及其自动化低压电器中的作用
Mouser为您呈上开发关键之STMicroelectronics Nucleo开发板
Arduino和Atmel发布Arduino Zero开发板