1. 引言
物联网这一概念最早是在美国的“智慧地球”下提出的一种服务架构 [1]。其包括三个核心:装置的智能化、联机以及通讯技术、设备的云端服务 [2]。随着信息科技的发展,人工智能的开发,便逐渐产生了智能家居,而在物联网技术的发展中,智能家居再次得到了发展 [3]。智能家居是利用计算机技术、控制技术、图像显示技术以及通讯技术将各种家用设施通过家庭网络连接到一起 [4]。能为人们提供更舒适、便捷的网络化、信息化与智能化的生活环境 [5]。最开始的时候,智能家居主要在日本和欧美一带兴起,其主要用于简单的灯光控制,而随着人们生活水平的提高,对生活品质的要求也越来越高,对家居设备的控制的便利性、高效性提出了更高的要求,在这种需求下,智能家居越来越受到人们的关注 [6]。智能家居系统包括主控设备、控制终端、各受控设备,可将所有的控制终端集成到一个系统中,采用电脑端、手机端实施对家居设备的现场或远程控制,实现更加便捷、灵活的管理家居设备的功能 [7]。其以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境 [8]。同时,基于物联网的智能家居,还有着远程控制、场景控制、定时控制、智慧联动以及安全防范等好处 [9]。人们可以通过基于物联网的智能家居打造一个安全、舒适、自动化、智能化的生活氛围 [10]。
从宏观角度看,目前智能家居在自动化的层面已经基本完成技术的积累,下一步的方向是与人工智能技术结合,从Home Automation向Smart Home的迈进,这是目前公认的方向,但是这个方向的发展对智能家居的普及更多的是锦上添花而非雪中送炭,也就是说,目前智能家居已经完全具备普及的条件 [11]。
电磁炉按使用场所分为民用电磁炉和商用电磁炉;按用途分为家用电磁炉、专业火锅电磁炉、自助餐厅保温炉、后厨煲汤炉、后厨炒炉;按功率分为电磁炉小功率电磁炉(800 W以下)、常用功率电磁炉(1000~2500 W)、大功率电磁炉(3~35 KW);按使用或安装方式分为嵌入(沉降)式电磁炉、台式电磁炉、落地式电磁炉 [12]。1972年,美国开始生产电磁炉,20世纪80年代初电磁炉在欧美及日本开始热销。本文的电磁炉采用普通家用电磁炉,使用220 V、50 Hz交流电供电,整体电路主要分为两个部分:控制面板以及主控板。主控板主要功能是控制和监视整个电磁炉的状态,包括锅具温度检测电路、风机驱动电路、电流取样电路、脉宽调整电路等主要电路 [13]。其利用涡流原理进行加热。220 V,50 Hz正弦交流电经过整流滤波转换成直流电,再经过振荡电路转换成上万Hz的交流电,高速变化的电流通过线圈盘,产生无数杂乱无章的小磁场,使得线圈盘上方放置的铁质锅具中的铁分子高速无规则运动,互相碰撞做功,动能转化为热能,从而实现加热 [14]。同时,电磁炉具有加热速度快、节能环保、安全性高、控温精准等优点 [15]。
如今,很多家庭都在使用电磁炉做饭、炒菜,因其无需明火、热转化率高、安全、节能环保等 [16] 优点,早已成为了大多数家庭里必不可少的一员。而智能电磁炉便属于智能家居中的一部分。人们可以通过电脑安装客户端,将电脑接入互联网后,与服务器进行交互,便可以对电磁炉进行远程控制 [17]。通过使用移动终端远程操控电磁炉提前做饭,可以极大的节约人们的时间。同时,当电磁炉工作在不正常的环境或电磁炉工作异常时,客户端能发出警报,防止家庭火灾等事故的出现。
2. 方法
2.1. 系统整体框架设计
本设计使用的开发板使用的是粤嵌科技的Gduino II开发板,该开发板基于Arduino UNO,同时带有ESP8266芯片。
Arduino是的一套开源硬件开发平台,Arduino UNO是其最为基础的开发板,开发极为简单,配合传感器、控制开关、LED屏等外围器件,任何稍有电子电路基础的人都可以基于这个平台快速搭建出具有各种有趣功能的实用电子电路。Arduino UNO是一款基于微控制器ATmega328P的开发板。ATmega328P是8位微处理器,片内包含32 KB Flash (0.5 KB由BootLoader使用),2 KB SRAM,1 KB EEPROM,运行时钟频率为16 MHz。该开发版拥有14个数字输入输出引脚和6个10位模拟输入引脚,并有6个数字输入输出引脚可以作为PWM输出引脚 [18]。
系统以日常生活使用的电磁炉为核心,在其之上添加外围采样电路、控制电路、通信模块,主要分为六个部分。分别是电磁炉、信号采集电路、控制电路、单片机及通信模块(ATemega328p与ESP8266)、服务器和客户端。
系统的设计总体框图如图1所示:
在该系统中,需要通过信号采集电路,采集电磁炉的各项数据,获取其工作状态,并通过单片机ATmega328p及通信模块ESP8266发送到服务器,再经服务器发送到客户端实时显示。在控制电磁炉工作时,可以通过客户端进行操作,客户端将用户操作发送给服务器,再由服务器将指令发送给单片机及通信模块,单片机再将控制信号发送给控制电路,控制电路执行控制操作,从而达到控制电磁炉的目的。
ATmega328p程序框图如图2所示:

Figure 2. Atmega328p program block diagram
图2. ATmega328p程序框图
ESP8266程序框图如图3所示:

Figure 3. ESP8266 program block diagram
图3. ESP8266程序框图
2.2. 电磁炉控制面板分析
本文使用的电磁炉的电路结构,分为主控板与控制面板部分,本文对控制面板进行分析与控制,达到控制电磁炉的目的,控制面板电路图4所示:
图4所示的电路中的P1接口处:1号线为GND,2号线为Vcc,5V供电,3、4、5号线均为复用信号线,开关S1按下后,5号线的电平被拉低,控制电磁炉的开机与关机;开关S2按下后,4号线的电平被拉低,控制电磁炉的档位选择。当S1或者S2被按下后,3、4、5号线均由主控板上的单片机输出不同频率的PWM波控制LED灯的亮灭与否。电路中的电阻阻值均为非实测,仅仅起到代表作用;1、2、3、4、5号线均与主控板上的单片机相连。
2.3. 电磁炉控制方案
保留电磁炉主控板控制芯片,额外增加外围电路使用单片机进行采样、通信和模拟控制信号。该方案的优点在于,无需分析整个电磁炉的每一个电路功能和信号,只需要将任务所需的信号找出,并分析信号所代表的状态或功能,即可用单片机进行采样分析,并通过模仿控制信号,间接控制电磁炉。
该部分主要是模拟按键的控制信号,通过单片机控制电磁继电器,开关机或者进行档位调节时,单片机控制继电器的常开端与公共端相连,而常开端、公共端分别于按键两端相连,其闭合时可以产生一个与按键信号一致的低电平信号,进而达到控制效果。
2.4. 电磁炉状态信号与温度检测
检测电磁炉状态时,直接采样按键信号,按键的控制信号的持续一小段时间的低电平信号,通过检测低电平信号全程监控按键状态,分析按键信号进而判断电磁炉所处的工作状态。单片机通过记录检测到的按键信号,通过开机之后的低电平信号出现次数与电磁炉档位之间的对应关系即可判断电磁炉当前的工作状态。
检测锅底温度,利用电磁炉原有的温度传感器,测量温度传感器两端对地电压与锅底温度关系,将对应关系线性化,使用函数表示。在单片机中使用AD采样温度传感器电压,通过关系函数计算当前状态对应的锅底温度。
2.5. 锅具检测方案
通过采集电磁炉主控板中的锅具检测电路输出,判断锅具的有无。电磁炉主控板中的锅具检测电路,是使用一个匝数较少的次级线圈,感应加热线圈中的电流,在通过转换电路,转化成电压信号,输送给MCU。该电路基本原理和功能与霍尔电流传感器 [19] 类似,而且无锅状态与有锅状态之间电压范围差别较大,可以使用单片机的模拟采样功能采样锅具检测电路输出,以设定阈值的方式比较判断锅具有无。
2.6. 电磁炉与服务器的通信
电磁炉和服务器的通信程序主要分为两部分:一是Arduino UNO部分,该部分主要用于电磁炉状态的检测和控制;二是ESP8266部分,该部分主要用于Arduino UNO和服务器之间的通信,即将来自Arduino UNO的数据转发给服务器,将服务器的数据转发给Arduino UNO。Arduino UNO和ESP8266之间使用串口进行通信,ESP8266和服务器之间使用TCP/IP协议进行通信。两个部分均使用Arduino环境进行开发。
Arduino UNO部分的主要工作是电磁炉状态的检测和控制。电磁炉原本有开关机和火力调节两个功能按键,经过检测发现电磁炉的按键面板完全由不规则波形的模拟信号控制,但是按键按下的时候对应信号线的会变成低电平,因此用模拟输入引脚对信号线进行信号检测,若出现超过一定时间的低电平即可判断按键按下,通过记录按键即可进一步记录电磁炉状态。同时为了控制电磁炉的开关机和档位,需要使用两个GPIO来控制继电器,来模拟按键的功能。电磁炉有锅无锅可以从主控电路中获取信号,经过测量,我们获取到一个可用信号,当电磁炉无锅时该信号会降到一定电平以下,使用模拟输入口测量该信号即可判断电磁炉有锅无锅。电磁炉的温度需要使用一个模拟输入口来测量温度传感器的电压,通过对应曲线来将电压转换为温度。计时可以通过Arduino开发环境自带的计时函数完成。Arduino UNO将当前状态数据记录后使用串口发送给ESP8266,同时接受ESP8266的目标状态数据,若当前状态和目标状态不一样则改变当前状态并对电磁炉进行对应操作,使用GPIO来控制继电器模拟按键的功能。
ESP8266部分的主要工作是Arduino UNO和服务器之间数据的转发。该部分的主要工作大致分为四步:从串口接收电磁炉当前状态数据、通过WiFi使用TCP/IP协议将电磁炉当前状态的数据发给服务器、从服务器接收电磁炉目标状态的数据、将电磁炉目标状态的数据通过串口发送给Arduino UNO。
2.7. 服务器与客户端设计
使用Qt搭建服务器与编写客户端程序。Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架,其使用的语言为python或C++。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程 [20]。使用Qt开发的桌面程序,可在Windows10、Windows7、WindowsXP系统上运行,使用的编译器为MingW32,只需要将编译好后存储的文件夹拷贝至电脑上即可运行。
其服务器界面如图5所示:
该程序能够建立起esp8266的tcp通信,相应的通信套接字为tcpsocket,还可以与web客户端建立起tcp通信,相应的通信套接字为websocket。其主要功能为监视客户端的连接状态,以及保证电磁炉与客户之间顺利地进行通信。
客户端程序使用Qt for Webassembly开发web程序,该程序可在Windows10、Windows7、WindowsXP、linux系统上运行,但不能在Android系统上运行,使用的编译器为Webassembly。
其界面如图6所示:
用户可通过此网站建立起与服务器之间的通信,获取电磁炉的状态,如power、level、state、timing、temperature、timingOn、userAgent等状态,其代表的含义如表1所示:

Table 1. Description of state quantity of induction cooker
表1. 电磁炉状态量说明
当服务器发送来这些信息后,客户端程序将会将这些信息显示在右边状态栏以及左边的文本框,并根据温度变化,绘制出温度曲线。客户端还能够自行设置开、关机,以及调整level、timing、timingON等参数,将这些控制信息发送给服务器,服务器再发送给电磁炉端,使电磁炉做出相应的状态转换,达到控制电磁炉的目的。Start按钮为开机按钮、close按钮为关机按钮、send按钮为发送相应的控制信息按钮。
3. 实验结果
使用杜邦线将电磁炉与Arduino UNO连接好,在ESP8266与电脑连接同一个WiFi的环境下分别进行电脑客户端控制电磁炉、按键控制电磁炉、检锅以及温度显示的测试。
3.1. 开关机控制
图7与图8分别表示电磁炉开机前后,电磁炉的状态变化与客户端显示的状态变量的变化。电脑客户端点击开机键(start)前,电磁炉处于待机状态,五个指示灯均以同样的频率闪烁,power显示为0,表示关机状态;点击start后,power的值变为1,电磁炉开启,且初始档位为第四当,四盏指示灯常亮。再点击一次start,电磁炉再次关机。开关机功能运行正常。
3.2. 档位调节测试与定时测试
图9为档位测试结果。在客户端level处可选择电磁炉的档位,按照1,2,3,4,5,1的顺序选择,每次只能跳变一级档位,接着点击send,电磁炉的档位便被改变,相应的指示灯也会亮起;图10中,timing处设置定时时间,单位为秒,测试中设置5秒定时,再将timingOn选择为1,点击send可设置电磁炉的加热定时。经过测试,电磁炉的档位选择功能,定时功能均能正常使用。
3.3. 按键控制
在图11中,将自己焊接的电磁炉开关按键按下后,电磁炉便可以正常开关机,档位键被按下后,也能改变电磁炉的加热功率,同时,电脑客户端上显示电磁炉状态的power的值、显示档位的level的值也会发生相应的改变。经测试后,此功能可以正常工作。
3.4. 锅具检测
如图12与图13所示,有锅时,state的值为1,无锅时,电磁炉停止加热,state的值变为0。此功能运行正常。

Figure 11. Key control switch and gear adjustment
图11. 按键控制开关与档位调节
3.5. 温度显示
图14为客户端显示的电磁炉锅底温度曲线。在电磁炉加热的过程中,客户端实时显示锅底的温度为temperature,同时生成相应的温度变化曲线。经过测试,温度与曲线均能正常显示。
4. 结论
本文设计的利用互联网控制电磁炉的方案,其优点在于:1) 可以远程实时操控电磁炉,实时监测电磁炉的状态;2) 使用网页的方式控制电磁炉,使得不同的操作系统均可以对电磁炉进行远程操控。
经过最终测试,本实验的成品可以很好的完成最初设计的各项功能。在使用按键对电磁炉进行开关机,调节档位测试时,客户端能够及时的反应电磁炉的状态变化。使用客户端对电磁炉进行开关机和调节档位控制,电磁炉也可迅速反应;同时,在电磁炉加热过程中,客户端能实时显示电磁炉锅底的温度,并生成温度曲线。此外,当电磁炉上无锅具时,打开电磁炉开关,客户端能检查当前电磁炉上是否存在锅具,同时,客户端拓展了原电磁炉没有的定时功能,通过客户端定时加热,防止加热时间过长而烧坏电磁炉与锅具。
基金项目
本研究受到广西创新驱动发展专项基金项目“基于人工智能的交互式智能云音箱研发与产业化”(项目编号:桂科AA21077007)的资助。
NOTES
*通讯作者。