1. 引言
在全球工业化的浪潮与科研实验中,温度的精确控制是许多工艺流程和实验成功的关键。例如在化工、制药、食品加工等行业中,特定的化学反应、材料合成或产品品质检测往往需要在特定的温度条件下进行,其重要性不言而喻[1]-[3]。然而,伴随着全球工业规模不断扩张、科研实验不断地精益求精,对生产实验的效率也提出了更高的要求,这也让传统温度控制方式的问题逐渐暴露。首先,传统温度的控制方式比较落后,主要采用简单的温控开关,在其精度调节与响应速度方面有着一定程序的限制,难以适应日益复杂的工业和实验环境,尤其是在精密制造、高速自动化生产线等领域,从而引发出能耗增加、效率低下、产品不良等衍生问题;其次,由于传统的温度控制方式存在弊端,导致其在运行的时候产生的能耗较高,且缺乏有效的能源管理策略,无法充分利用,造成能耗浪费,不仅增加了工业生产和科研的运营成本,还加剧了环境的污染;最后,传统的温度控制设备在作业的时候通常会产生较大的机械振动与噪音,且会出现较大的波动。这不仅会干扰到周围其余设备的正常运行,还会导致工业或者科研产品的品质下降[4] [5]。与此同时,信息化和智能化高速发展,物联网技术的出现,让人们的生活得到快速改变。物联网(Internet of Things)旨在构建一种网络,以各种终端平台为媒介,将任何物品与互联网连接,让物品与物品之间能够进行信息交换与通信,从而实现对物品的各种监控与管理。因此,物联网被广泛应用于各个行业,包括但不限于工业、物流、教育、家居、交通、医疗、电力等,这让工业设备的智能化、网络化成为趋势[6] [7]。在这样的背景下,合理地将物联网运用在温度控制中已经刻不容缓,本文提出一种低成本、高效率的基于NB-IoT的远程温度控制系统。通过改进控制方式的设计,引入了先进的控制算法和传感器技术,实现了温度的实时监测与调控,为工业生产、科研实验以及家庭的运作提供了有效的数据支撑,有助于能源节约,推动全球的绿色发展。
2. 控制系统总体设计
本文所设计系统包括单片机模块、温度采集模块、显示模块、按键模块、执行模块以及通信模块,各个模块之间的关系如图1所示。在整个系统中,单片机模块作为核心,可以对温度采集模块中获取的数据以及用户输入指令(按键输入指令)进行接收、计算处理、存储、判断,且根据数据的变化,结合控制策略,当实时温度低于目标温度时,通过PID控制器输出PWM信号进行温度调节,实时温度越低,输出的PWM信号占空比越大,MOS管加热速度;当实时温度高于目标温度时,驱动继电器进行模拟降温,从而实现温度的恒温调控。
此外,系统将数据通过通信模块上发至云平台进行监控,相关人员能够通过手持终端或者电脑PC端对温度的实时情况与历史检测记录进行查询。
Figure 1. Overall block diagram of control system
图1. 控制系统总体框图
3. 硬件模块设计
3.1. 单片机模块电路设计
本文单片机模块选择STM32单片机,具体型号为STM32F103C8T6。STM32F103C8T6单片机在外形结构上小巧简单,集成了各式各样的电路与芯片,包括CPU、RAM、ROM、GPIO以及中断系统等,其电气原理图电路如图2所示[8]。
Figure 2. Single chip microcontroller module
图2. 单片机模块
3.2. 温度采集模块电路设计
选择DS18B20传感器来监测实时温度[9] [10],其电路设计如图3所示,引脚3为传感器的电源正极,接入5 V的供电电压,引脚1为传感器的电源负极,而引脚2为数字引脚,支持数据的双向传输,单片机的PB9口通过读取该引脚的数据得到具体的温度。
Figure 3. DS18B20 sensor circuit design
图3. DS18B20传感器电路设计
3.3. 显示模块电路设计
本文的显示模块选择了型号为0.96寸的OLED显示屏[11],可以将实时的温度数据、目标温度等信息清晰、动态地显示出来,其电路设计如图4所示。该模块由4个引脚构成,除了电源的正负极引脚之外,还包括了时钟引脚和数据引脚,分别与单片机的PA5、PA4口连接,实现交互,以I2C的通信方式,可以控制数据的传输速率,让数据按照一定的时序进行显示。
Figure 4. LCD circuit design
图4. 显示模块电路设计
3.4. 按键模块电路设计
按键通常作为一种外部输入设备,可以为硬件应用的操作人员提供一个输入渠道,能够设置温度的阈值,其电路设计如图5所示。
Figure 5. Button module
图5. 按键模块
3.5. 执行模块电路设计
本文为实现温度的控制,所设计的加热设备与制冷设备分别由一个MOS管和一个继电器进行模拟,其电路设计如图6所示。引脚3是MOS管的控制电极,当实时温度低于目标温度时,微控制器的PA6口向MOS管的栅极引脚输入PWM信号,导电通道打开,从而改变通道中的电子浓度,允许电流从源极(S)流向漏极(D),而MOS管的引脚1为漏极,可以输出特定的功率给加热继电器,从而实现升温任务,在这个过程中,如果实时温度越低,则输出的PWM占空比越高,MOS管输出功率越大,加热速度越快。同理,当实时温度高于目标温度时候,微控制器的PB13口向MOS管的栅极引脚输入PWM信号,导电通道打开,从而改变通道中的电子浓度,允许电流从源极(S)流向漏极(D),从而实现降温任务。
Figure 6. Execution module
图6. 执行模块
3.6. 通信模块电路设计
本文通信模块使用NB-IoT通信技术[12],通过基站接入核心网,支持独立部署或与LTE网络共存,复用现有基站资源,可以将监测的数据实时地发送给服务器,通过手机终端或者PC端进行显示,远程获取温度的监控数据,以UART进行通信,其电路设计如图7所示。通过该通信模块,所有环境数据包括实时温度、温度状态、目标温度会上发给云平台,以手机终端或者PC端的形式进行可视化展示。
Figure 7. Communication module
图7. 通信模块
4. 软件设计
本文的主程序设计流程为:在main.c文件中去运行整个程序,不仅可以对所有模块进行初始化,以及初始化所有I/O口,还可以启动各个模块处于工作状态,NB-IoT模块连接至云平台,DS18B20传感器开始采集环境温度,由单片机的GPIO口读取DS18B20传感器中的数据,且将数据进行处理、运算,将所监测得到的数据与设定的目标温度进行比较。如果异常,结合PID控制算法,会由单片机向执行程序发送控制信号,进行温度恒温调控。此外,在传感器的监测过程中,操作人员可以通过按键模块执行中断,能够改变温度阈值,单片机会读取且识别按键的状态,再执行对应的操作。在设置阈值的时候,会将该参数的阈值存储在变量中,让监测数据与该变量进行判断比较。因此,主程序流程设计如图8所示。
Figure 8. System programming process
图8. 系统程序设计流程
4.1. 初始化程序
系统初始化程序主要包括delay_init()、OLED_Init()、uart1_init(9600)、LED_Init()、KEY_Init()、DS18B20_Init()、M5310A_Init()、network_init()、PWM_TIM3_Init()等初始化函数。其中delay_init()实现延时的初始化;OLED_Init()实现显示模块的初始化;uart1_init(9600)实现串口1初始化为9600波特率;LED_Init()实现LED控制的初始化;KEY_Init()实现按键电路的初始化;DS18B20_Init()实现温度传感器模块的初始化;M5310A_Init()实现NB-IOT模块的初始化;network_init()用于实现网络服务器的初始化;PWM_TIM3_Init()实现定时器TIM3的初始化。
4.2. 温度信息采集处理
在温度信息采集处理DS18B20_Get_Temp()的过程中,控制器STM32先对DS18B20发送复位命令;发送“跳过ROM”(0xCC)命令;选择传感器后,发送功能命令,如“开始转换”(0x44),命令DS18B20开始温度转换;转换完成后,发送“读取存储器”(0xBE)命令;控制器接收到温度数据后,进行CRC校验。校验正确后将读取数据移入温度暂存器,根据数据的符号位,可以确定温度是正数还是负数。正温度直接转换为十进制值,负温度需要进行补码转换后再处理。至此,温度信息采集处理过程完成,流程如图9所示。
Figure 9. DS18B20 program flowchart
图9. DS18B20程序流程图
4.3. 信息显示
本文采用OLED_ShowCH完成信息的显示。如,OLED_ShowCH(16,0,“远程温控系统设计”)用于在OLED屏幕上显示中文字符串“基于单片机的远程温控系统设计”即本课题题目;OLED_ShowCH(0,2,“温度:”)用于在OLED屏幕上中文字符串“温度:”;sprintf(display_string,“%.1f℃”,CurrentTemp)用于完成CurrentTemp实测温度以“%.1f℃”格式完成实测温度转为字符串display_string;OLED_ShowCH(40,2,(u8*)display_string)用于完成将CurrentTemp实测温度转变的字符串display_string在“温度:”显示。从而,信息显示程序完成课题题目、实测温度以“温度:X℃”的实时显示。
4.4. 信息的分析与控制
在信息的分析与控制过程中,采用Temp_Filter()进行温度的滑动平均滤波从而降低温度瞬时波动或者误测对测量结果的影响,具体代码如下所示。
void Temp_Filter(void) {
float sum;
int i;
static uint8_t index = 0;
// 更新缓冲区
temp_buffer[index] = DS18B20_Get_Temp()/10.0;
index = (index + 1) % FILTER_LEN;
// 计算平均值
sum = 0.0f;
for( i=0; i<FILTER_LEN; i++) {
sum += temp_buffer[i];
}
CurrentTemp = sum / FILTER_LEN;
}
在Temp_Filter()中temp_buffer[index]用于存储DS18B20_Get_Temp()获得的温度数据;FILTER_LEN决定着平均滤波的长度,通过设置FILTER_LEN的数值更新缓冲器的temp_buffer的数据串内容及长度;进而通过平均取值的方式获取系统实测温度CurrentTemp,并完成信息显示的OLED_ShowCH中CurrentTemp数值的更新。
按键电路主要用于控制温控阈值加减的操作,其程序具体如下:
if(KEY1_add==0) //加
{
if(set_temp<200)
set_temp++;
SET_TEMP=(float)set_temp+0.6f;
display_Set_parameters();
delay_ms(100);
}
if(KEY1_del==0) //减
{
if(set_temp>0)
set_temp--;
SET_TEMP=(float)set_temp+0.6f;
display_Set_parameters();
delay_ms(100);
}
上述程序中参数KEY1_add对应按键电路中的SW1,参数KEY1_del对应按键电路中的SW2。当SW1按下时,参数KEY1_add取值为0完成设定温度的加1操作;当SW2按下时,参数KEY1_del取值为0完成设定温度的减1操作。
在控制模块STM32对制冷模块及加热模块控制过程中,采用PID控制的方式对温度的增加、降低进行快速稳定的控制。以PID比例参数Kp的选择为例讲述PID在本课题中的应用。
error = SET_TEMP - CurrentTemp;
if(error > 5.0)
{
pid.Kp = 6.0; // 大偏差时增强响应
} else {
pid.Kp = 3.5; // 小偏差时保持稳定
}
在上述程序中error用户获取设定温度SET_TEMP与实测温度CurrentTemp之间的误差。当误差大于一定数值时,在本课题中取值5.0,Kp的取值为6.0从而增强PID控制作用;否则,Kp的取值为3.5从而PID实现较为稳定的控制。
4.5. 信息的远传
本文中M5310A_Init()、network_init()完成实现NB-IOT模块及网络服务器的初始化。代码strx=strstr((const char*)RxBuffer,(const char*)“+CGATT:1”),返还1时表明注网成功。此时,信息显示OLED_ShowCH(0,6,“M5310A联网OK”),从而完成NB-IOT模块联网成功。进而network_init()完成网络初始化及网络服务器等待连接成功。ing_record()完成发送数据给WIFI模块进而转发到云平台,至此完成信息的远传,如图10所示。在完成信息的远传中,通过参数alarm1完成温度远程的预警设置。当参数alarm1取值0时,显示“正常”;当参数alarm1取值1时,显示“过低”;当参数alarm1取值2时,显示“过高”。
Figure 10. Cloud platform
图10. 云平台
5. 实物测试及分析
一种基于NB-IoT的远程温度控制系统设计完成后成品如图11所示。其中包括STM32F103C8T6单片机,NB-IoT信号传输模块,核辐射检测模块,蜂鸣器报警模块和OLED显示模块。
使用电源充电板给系统供电,供电后对程序进行复位处理,NB-IoT模块自动连接到云平台服务器中,用户在云平台选择客户端(单片机硬件平台)进行配置连接即可创建系统与云平台之间的通信,实现消息传送。
此时,单片机向DS18B20传感器发送控制指令,开始采集环境温度,此时OLED屏幕显示出实时变化的温度数据,当温度异常的时候,调用PID控制算法,并驱动对应的继电器进行温度调控,对应的继电器状态指示灯亮起,OLED屏幕会显示出温度的实时调控情况。实物运行效果如图12所示。
Figure 11. Physical picture of the system
图11. 系统实物图
Figure 12. System operation effect diagram
图12. 系统运行效果图
同时,通过TLINK软件打开云平台,选择设备,可以查看到当前的实时温度,温度状态以及设置的目标温度,如图13。
Figure 13. Remote data interface
图13. 远程端数据界面
由上述系统实物测试结果可得:本文所设计系统选用了功能强大且丰富的STM32系列单片机作为主控单元,采用了型号为DS18B20的传感器来监测实时温度,通过OLED屏幕进行显示,通过按键设定目标温度,当温度低于目标值时,结合PID算法控制MOS管,以驱动继电器1进行加热升温;当温度高于目标值时,直接控制继电器2进行模拟制冷,从而达到恒温效果。同时,系统利用NB-IoT无线通信技术,实现数据的上发,提供可视化的终端显示界面,实现温度的远程控制与显示。
6. 结论
通过改进控制方式的设计,引入了先进的控制算法和传感器技术,实现温度的实时监测与调控,可为工业生产、科研实验以及家庭的运作提供了有效的数据支撑。为实现上述目的,本文提出一种低成本、高效率的基于NB-IoT的远程温度控制系统,包括单片机模块、温度采集模块、显示模块、按键模块、执行模块以及通信模块。此外,系统将数据通过通信模块上发至云平台进行监控,相关人员能够通过手持终端或者电脑PC端对温度的实时情况与历史检测记录进行查询。软硬件设计完成后通过统一调试,若有故障则需修改后继续调试,并通过实物测试后得出:本文基于NB-IoT的远程温度控制系统功能正常方案可行性较高。
基金项目
江苏省市场监督管理局科技计划项目(KJ2025083)。