基于GSM模块的远程温度监测系统 - 图文

更新时间:2024-05-15 12:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

河北大学工商学院2015届本科生毕业论文(设计)

基于GSM模块的远程温度监测系统

摘 要

本文实现了一个基于GSM模块的远程温度监测系统。本设计以单片机为控制核心,利用DS18B20温度传感器对温度进行监测,通过GSM模块实现远程数据发送及短信报警。此系统具有良好的人机交互界面,可以简单方便的修改报警值。本课题采用了传统的先硬件电路后软件程序的设计思路。硬件电路主要包括供电电路、单片机最小系统电路、GSM模块电路、TFT液晶电路、串口通信电路、独立按键电路、蜂鸣器电路、EEPROM电路。软件程序主要包括主程序、GSM通信程序、上位机程序、按键扫描程序、TFT液晶程序。软硬件有机组合,实现了一套完善的远程温度监测系统。

本设计可以对环境温度进行实时监测短信报警,还可以将环境温度实时发送到服务器和上位机上以便对数据进行分析。本系统具有人机交互性好、成本低、可靠性高等优点,可广泛应用于实际当中。

装 订 线

关键词:GSM模块;服务器;短信;上位机;温度

河北大学工商学院2015届本科生毕业论文(设计)

Remote Temperature Monitoring System Based on GSM Module

ABSTRACT

This article implements a remote temperature monitoring system based on GSM module. This design use of single-chip microcomputer as the control center, using the DS18B20 temperature sensor to monitor the temperature,using the the GSM module for remote real-time data and SMS alerts. This system has a good user interface, you can simply and easily modify the alarm value. This design uses the traditional design ideas that the hardware circuit first and the software program after. Hardware circuit include power supply circuit, a MCU system circuit, GSM module, TFT LCD circuit, serial communication circuit, independent key, buzzer circuit, EEPROM circuits. Software program that includes the main program, GSM communication programs, computer programs, keystroke scanners, TFT LCD program. Organic combination of hardware and software, implements a complete remote temperature measurement system.

This design allows for real-time monitoring of SMS alarm temperature, ambient temperature can also be sent to the server in real time and to analyze your data on the computer as a whole. Remote temperature monitoring system based on GSM module has good human-computer interaction, low cost, high reliability, widely used in practice.

Key words:GSM module;server;SMS;Host computer;temperature

河北大学工商学院2015届本科生毕业论文(设计)

目 录

1 绪论 ................................................... 1 2 远程温度监控系统的总体方案设计 .......................... 2

2.1 总体方案的确定 .............................................. 2 2.2 主要功能模块方案论证 ........................................ 2 2.3 远程温度监测系统的功能介绍 .................................. 3

3 硬件电路设计 ........................................... 4

3.1 电源电路 .................................................... 4 3.2 最小系统电路 ................................................ 5 3.3 GSM通信电路 ................................................ 6 3.4 串口通信电路 ................................................ 7 3.5 DS18B20电路 ................................................ 8 3.6 EEPROM电路 ................................................. 8 3.7 蜂鸣器电路 .................................................. 9 3.8 独立按键电路 ................................................ 9

4 软件设计 .............................................. 10

4.1 主程序设计 ................................................. 10 4.2 GSM通信程序设计 ........................................... 11 4.3 DS18B20温度采集程序 ....................................... 12 4.4 上位机程序设计 ............................................. 13 4.5 按键检测程序设计 ........................................... 14

河北大学工商学院2015届本科生毕业论文(设计)

4.6 TFT液晶程序设计 ........................................... 16 5 开发及调试 ................................................. 18 5.1 硬件制作 ................................................... 18 5.2 硬件开发工具 ............................................... 19 5.4 软件调试过程 ............................................... 19 5.4 软件开发工具 ............................................... 19

6 结论 .................................................. 21 参考文献 ................................................... 22 致 谢 ................................................... 23 附 录1 ................................................. 24 附 录2 ................................................. 27 附 录3 .................................................. 28

河北大学工商学院2015届本科生毕业论文(设计)

1 绪论

随着科学技术的飞速发展,以及超大规模集成电路的广泛应用,远程监控设备正在逐步取代人工现场监测。特别是在环境恶劣的情况下远程监控设备更显的尤为重要。传统的监控设备大多采用有线通信方式,有线通信方式的建立必须架设电缆,因此需要大量的人力和物力,提高了系统成本,最大的缺点是传输距离受限制[1]。GSM无线通信技术解决了有线通信技术存在的弊端。GSM是目前基于时分多址技术的移动通信体制中最成熟完善、覆盖面最广、功能最强、用户最多的移动通信系统,GSM通信系统具有结构简单、可靠性高、成本低等特点[2]。

温度是一项非常重要的参数,无论是农业还是工业都要对温度进行监测。目前大部分温度监测还在使用传统的温度计进行温度测量,这种测量方式即浪费人力和时间还不能对温度进行实时监测。如果采用远程监控设备对温度进行实时监测将会大大减少人工成本,还会降低由温度骤变造成的损失。

本设计采用移远公司的M72-D GSM无线通信模块和DS18B20温度传感器对温度进行监测。它可以实现24小时实时监测环境温度,并将数据发送到服务器和上位机上以便对数据进行分析。当环境温度超过设定的上限值或下限值时会以短信的形式发出预警信息。本设计与传统的温度监控设备相比具有人机交互性好、成本低、可靠性高等优点。

1

河北大学工商学院2015届本科生毕业论文(设计)

2 远程温度监控系统的总体方案设计

本设计采用移远公司的M72-D GSM无线通信模块和DS18B20温度传感器对温度进行监测。它可以24小时实时监测环境温度,通过GSM模块将数据实时发送到服务器和上位机上以便对数据进行分析。当环境温度超过设定的上限值和下限值时会已短信的形式发出预警信息。本章详细介绍了方案的确定以及远程温度监控系统的功能。

2.1 总体方案的确定

方案一、微控制器采用传统51单片机,片内集成4K可编程FLASH支持一路串口。温度测量采用热敏电阻。GSM模块选用的西门子公司的TC35模块。

方案二、微控制器采用ST公司的STM32f103VET6单片机,STM32f103VET6单片机处理速到高达72MHZ片内集成512K可编程flash并且可以支持5路串口[3]。温度传感器采用的是DS18B20,允许测量范围为 -55℃到+125℃,测量精度为±0.5℃。GSM模块选用的移远公司的M72-D模块,M72-D提供GPRS数传,GSM短信业务。

方案一中51单片机只有一路串口无法满足本设计的需要。热敏电阻温度的采集还需要一路AD,电路复杂而且精度低。方案二中STM32f103VET6片内集成5路串口完全可以满足本设计的需要,DS18B20电路简单而且精度高,最终从成本和电路复杂程度方面考虑选择方案二。

2.2 主要功能模块方案论证

(1)本次设计中TFT液晶屏幕需要5V供单,单片机需要3.3V供电,GSM模块需要4V供电,GSM模块最大尖峰电流可达2A所以本设计对电源要求比较严格,最终选择大电流适配器供电,适配器输出电压为12V最大电流为5A经DC-DC转为5V然后经LDO转为4V和3.3V。

(2)本次设计选用ST公司的STM32f103VET6单片机作为主控芯片,它采用ARM Cortex-M3内核,主频可以达72MHZ,片内集成5路串口、2路CAN口、2路IIC、2路SPI和传统51单片机相比具有丰富外设更高而且性价比很高。

(3)本次设计GSM模块选用的是移远公司的M72-D。M72-D是一款采用LCC类型封装的贴片式GSM/GPRS双频模块,具有尺寸小、低功耗、温度范围宽、抗干扰能力强的特点。可以实现短信的收发,GPRS数据的发送。

(4)温度传感器采用DS18B20允许测量范围为-55℃到+125℃,测量精度为±0.5℃。传感器供电方式采用外部供电方式。

(5)本设计选用MAX3232芯片进行TTL电平与RS232电平转换,串口一用于单片机与电脑进行通讯。

除上述主要功能模块外,还包括单片机最小系统电路、EEPROM电路、独立按键电路、蜂鸣器电路、以及TFT液晶显示电路。系统设计框图如图2-1所示。

2

河北大学工商学院2015届本科生毕业论文(设计)

系统硬件框图手机服务器微控制器GSM模块温度传感器电源模块

图2-1 系统硬件框图

2.3 远程温度监测系统的功能介绍

本课题的目标是设计一个基于GMS模块的远程温度监测系统。课题控制部分采用的是ST公司的STM32f103VET6单片机。温度传感器采用DS18B20,允许测量范围为-55℃到+125℃,测量精度为±0.5℃。系统上电后TFT液晶屏幕上可以清楚显示实时温度。通过可以PCB板上的独立按键设置温度上限值和温度下限值,当温度超过预先设定的上限值时或低于下限值时会向指定的用户发送报警短信。远程温度监控系统支持GPRS数据发送,可以将环境温度实时发送到指定的服务器上。本设计通过串口可以将实时数据实时发送到串口上位机上,通过上位机可以进行数据的实时监控以及对数据进行分析存储。

3

河北大学工商学院2015届本科生毕业论文(设计)

3 硬件电路设计

远程温度检测系统控制部分采用的STM32F103VET6单片机,外围电路主要包括单片机最小系统电路、温度传感器电路、GSM通信电路、串口通信电路、EEPROM电路、蜂鸣器电路以及独立按键电路。单片机最小系统电路是整个电路的核心,所有的数据处理以及模块之间的通信都由它控制完成。温度传感器电路主要负责对温度进行精确的采集。GSM通信电路是数据传输的核心,它将温度传感器采集的数据发送到指定的服务器上,而且支持短信报警功能。其他外围电路主要起辅助作用。

3.1 电源电路

常用的稳压电路有两种,一种是采用开关电源另一种是采用LDO(低压差线性稳压电源)[4]。两种电路各有优缺点,DC-DC电源效率高,但设计不当会引入较严重的开关干扰导致电源纹波比较大;LDO噪音小但是电源效率比较低,而且输入电压与输出电压相差越大电源效率越低[5]。由于本设计适配器输出电压为12V,电源电压较高为了提高电源效率,所以12V转5V采用的是开关电源稳压电路。开关电源电路如图3-1所示。图中U2为开关电源芯片(TPS5430DDA)用于提供5V电压,该芯片静态电流非常小,电源效率可以达到96%输出电压通过外接反馈电阻调节。

图3-1 开关电源电路

本设计中单片机为低功耗型单片机,供电电压为3.3V,所以可以采用低成本的线性稳压芯片(ASM1117)将5V电源(开关电源)转换为3.3V。GSM模块的供电电压为4V,要求输出电流要达到2A,可以采用大电流LDO(MIC29302WU),输入电压为5V输出电压为4V。单片机供电电路和GSM模块供电电路如图3-2所示。

4

河北大学工商学院2015届本科生毕业论文(设计)

图3-2 电源电路

3.2 最小系统电路

STM32F103VET6最小系统电路主要包括复位电路、引导模式选择电路以及下载电路。复位电路包括上电复位和手动复位即单片机上电时会完成一次复位,也可以通过按键复位单片机。STM32F103VET6芯片的BOOT0引脚和BOOT1引脚高低电平决定系统的启动方式,本设计采用用户闪存启动即片内FLASH启动。下载电路中部分引脚需要通过上拉电阻上拉,然后连接到JLINK上即可实现程序的下载。最小系统电路如图3-3所示。

5

河北大学工商学院2015届本科生毕业论文(设计)

图3-3 最小系统电路

3.3 GSM通信电路

本设计采用M72-D模块,该模块是一款工业级的两频段GSM/GPRS无线模块。其工作频段是:EGSM900MHz和DCS1800MHz。M72-D提供GPRS数传,GSM短信业务,并支持GPRS multi-slot class1-12(默认为class12)、GPRS编码格式CS-1、CS-2、CS-3和CS-4[6]。M72-D模块电路主要包含供电电路、SIM卡电路、射频电路、外围控制电路。GSM通信电路供电电路采用了Micrel公司的LDO,型号为MIC29302WU它的输出电压可以通过反馈电阻调节,为确保输出电源的稳定,在输出端预留了一个稳压管。SIM卡接口采用6PIN通用SIM卡插座;SIM卡通过模块内部的电源供电,支持1.8V和3.0V供电;为了确保良好的ESD性能在SIM卡的引脚增加了TVS管(SP0504BAHTG)。对于射频天线接口的外围电路设计,为了能够更好地调节射频性能预留了一个滑动电阻器作为匹配电路。外围控制电路主要包括模块开关机电路、网络状态指示灯电、串口通信电路,由于电路结构比较简单在此不再熬述。GSM通信电路如图3-4所示。

6

河北大学工商学院2015届本科生毕业论文(设计)

图3-4 GSM通信电路

3.4 串口通信电路

STM32F103VET6单片机有5个串口,其中3个USART(通用同步异步收发器)2个UART(通用异步收发器)。本设计中采用USART1用于单片机与电脑进行通信。由于计算机的接口是RS232电平和单片机的TTL电平不兼容,所以采用MAX3232芯片进行电平转换。MAX3232是美信公司生产的低功耗型电平转换芯片是MAX232的替换产品,供电电压可以选择5V或3.3V。串口通信电路如图3-5所示。MAX3232需要外接四个0.1μ的电容,V+对地之间,V-对地之间的电容用于稳定电荷泵输出的电压,C40和C41之间的电容用于产生+2VCC和-2VCC这样就能达到RS232所需要的电平。

图3-5 串口通信电路

7

河北大学工商学院2015届本科生毕业论文(设计)

3.5 DS18B20电路

DS18B20有两种供电方式分别是寄生电源供电方式和外部供电方式,本设计中采用外部供电方式,这样就不存在电源供电不足的问题,简化了电路设计。DS18B20采用单总线方式传输数据,单总线闲置电平为高电平所以需要外接一个4.7k上拉电阻。DS18B20电路如图3-6所示。

图3-6 DS18B20电路

3.6 EEPROM电路

本设计中采用HT24C08芯片作为EEPROM存储芯片。EEPROM具有数据掉电不丢失的特性,本设计中用于存储用户设定的温度上限值和下限值。该芯片存储大小为1K,可以采用3.3V供电。该芯片支持IIC传输协议,通过芯片的A0-A2引脚设计器件的地址,本设计中A0-A2全部接地即地址为0。EEPROM电路如图3-7所示。

图3-7 EEPROM电路

8

河北大学工商学院2015届本科生毕业论文(设计)

3.7 蜂鸣器电路

本设计中采用蜂鸣器报警,当温度高于设计的上限值或低于设计的下限值时蜂鸣器连续发出滴滴的声音。蜂鸣器的发生原理是电流通过电磁线圈使电磁线圈产生磁场来驱动振动膜发声的,因此需要较大电流才能驱动蜂鸣器[8]。本设计中采用一个NPN型三极管驱动蜂鸣器发声。蜂鸣器电路如图3-8所示。

图3-8 蜂鸣器电路

3.8 独立按键电路

本设计中采用独立按键对温度的上限值和下限值进行调整。当按键按下时对应的IO口变为低电平,程序里通过检测IO口高低电平状态得到具体哪个按键按下。独立按键电路如图3-9所示。

图3-9 独立按键电路

9

河北大学工商学院2015届本科生毕业论文(设计)

4 软件设计

本设计主要用于恶劣环境的温度的远程监测。本设计下位机采用C语言开发,编译器采用的是ARM公司的KEIL MDK4.12,该编译器具有界面友好操作简单等优点[9]。上位机采用的是C#开发,编译器采用的是微软公司推出的VS2010集成开发环境,是目前最流行的Windows平台应用程序开发环境。程序设计思想采用的是模块化设计思想,模块化设计简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系[10]。本设计软件共分为六个模块,分别是主程序、GSM模块程序、温度传感器程序、串口上位机程序、独立按键程序、以及TFT液晶程序。

4.1 主程序设计

主程序主要完成对单片机寄存器以及外设的初始化,之后进入主循环。主循环中一直读取DS18B20采集的温度,当温度高于上限值或低于下限值时,GSM模块以短信发送报警信息到用户上手机上。主程序中同时循环调用串口上位机发送函数、串口屏幕显示函数、GPRS数据包发送函数。本设计中的报警值是可以通过设定,如果按下KEY1则进入设置模式,通过KEY1选择设定哪个值,KEY2用于增加温度,KEY3用于减小温度。主程序流程图如图4-1所示。

开始硬件初始化获取温度屏幕显示判断温度N按键检测N

图4-1 主程序流程图

Y报警Y设定 主程序:

10

河北大学工商学院2015届本科生毕业论文(设计)

int main(void) {

uint8_t KeyValue = 0; // 按键键值 uint8_t temp = 0;

// 温度值

uint8_t StrTemp[10] = {0}; // 字符串型温度值

BSP_Init(); // 硬件初始化 for(;;) {

KeyValue = GetKeyValue(); // 获取键值 printf(\ // 将数据发送上位机

temp = DS18B20_Get_Temp(); // 获取18B20温度 IntToString(temp,StrTemp); // 将十进制数转化为字符串 M72GprsSend((char *)StrTemp); // 将数据发送到服务器 TempAlarm(temp); // 循环调用温度报警函数

if(KeyValue == SETUP_KEY) // 循环检测是否需要进入设置模式 {

SetupAlarmValue(); // 设置报警值子程 } }

}

4.2 GSM通信程序设计

GSM通信程序是本设计中软件的核心部分。GSM通信程序主要包含两个部分,分别是GSM短信发送程序设计和GPRS数据发送程序设计。GSM短信发送和GPRS数据发送都是单片机通过串口向M72-D发送GSM AT指令实现的。GSM AT指令集是由诺基亚、爱立信、摩托罗拉和惠普等公司共同为GSM系统研制的指令集,其中包含了对SMS(short message service)的控制[11]。单片机向M72-D模块发送AT后,当模块接受到后会通过串口向单片机返回一定的字符串。所以该程序设计的难点就是通过串口实现将数据准确发送和准确接受。本设计中采用的是STM32F103单片机的USART3向GSM模块发送AT指令,在USART3的中断服务程序中接受GSM返回的数据。GSM通信程序流程图4-2所示。

11

河北大学工商学院2015届本科生毕业论文(设计)

开始启动M72-D模块初始化M72-D模块NN关闭串口中断初始化成功YY发送短信和GPRS数据返回

图4-2 GSM通信流程图

GSM短信发送程序:

void M72_sms(char *num,char *smstext) {

char end[2] = {0x1A,0x00}; M72_CLEAN_RX();

// 选择GSM字符集 M72_tx_printf(\ //文本模式

M72_tx_printf(\ //电话号码

M72_tx_printf(\ //短信内容

M72_tx_printf(\ M72_tx_printf(\ }

4.3 DS18B20温度采集程序

DS18B20温度传感器采用单总线方式读取温度,单总线最多挂接8个器件,本设计中挂接了1个DS18B20,即存在一个节点。程序设计时只需要通过IO模拟单总线时序即可。通过分析单总线协议和DS18B20数据手册可知只需要模拟DS18B20的复位时序、读时隙、

12

河北大学工商学院2015届本科生毕业论文(设计)

及写时隙。三种时隙是通过总线低电平占空比开区分的,由于三种时隙的操作方式类似,本文以读时隙分析单总线的操作过程。读时隙时序图如图4-3所示。首先单片机向DS18B20发送读数据指令,然后拉低总线15us,之后进入主机采样时刻。在两次读时隙间最少间隔1us。

图4-3 读时隙时序图

DS18B20读单字节程序:

u8 DS18B20_Read_Byte(void) // read one byte {

u8 i; u8 dat = 0; for(i = 0;i < 8;i++) {

dat >>= 1;

DS18B20_DQ_OUT=0;

delay_us(2);

DS18B20_DQ_OUT=1; delay_us(2);

if(DS18B20_DQ_IN)dat |= 0x80; delay_us(70); } return(dat); }

4.4 上位机程序设计

本设计上位机采用C#开发,编译器采用的是微软的VS2010集成开发环境,采用C#开发上位机快速高效的特点[12]。开发过程主要分为前台界面设计、后台代码的设以及SerialPort组件属性的设置。前台界面共一个窗体,窗体里包含串口波特率设置、温度的实

13

河北大学工商学院2015届本科生毕业论文(设计)

时显示、河北大学工商学院校徽、以及一些说明文本。后台代码和SerialPort组件主要负责串口协议的解析以及温度转换工作。串口上位机界面如图4-4所示。

图4-4 串口上位机界面

4.5 按键检测程序设计

当按键按下时对应的IO口变为低电平,程序里通过检测IO口高低电平状态得到哪个按键被按下。在进行程序设计时还要考虑到机械按键存在抖动的现象。一般操作中按键从按下到弹起大约400ms左右[13]。整个过程可以分为按下抖动阶段、按键闭合状态、按键弹起抖动状态,整个过程如图4-5所示。由图可知,如果在抖动状态下读取IO状态很有可能读取到的状态与实际状态不符,所以按键读取应该确保发生在按键稳定闭合状态。另外由于按键按下的时间相对于处理器来说时间比较长,这样就存在多次读取到同一个键值,这样情况对程序状态是有很大影响的,所以程序中应该设计松手检测函数,即如果按键不松开程序就一直在死循环中等待,直到按键弹起。程序执行过程为读取IO状态如果为低电平稍作延时继续读取IO状态,如果扔为低电平则认为按键稳定闭合,然后等待按键松开退出死循环。

14

河北大学工商学院2015届本科生毕业论文(设计)

图4-5 按键抖动

按键检测函数: uint8_t getkey(void) {

if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_13)) {

DelyaMs(20);

if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_13)) {

while(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_13)); return KEY1; } }

else if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_12)) {

DelyaMs(20);

if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_12)) {

while(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_12)); return KEY2; } }

else return NOKEY; }

15

河北大学工商学院2015届本科生毕业论文(设计)

4.6 TFT液晶程序设计

本设计中显示部分采用的是迪文科技的串口指令屏幕。串口指令屏就是通过串口控制屏幕完成显示。串口指令屏的优点是简化了电路设计而且其本事自带大容量FLASH可以显示24位色图片显示。所以在设计程序时不需要考虑TFT驱动程序的设计,只需要考虑UI(user interfcce)的设计。UI设计完成后通过串口指令屏调试助手将设计好的图片下载到串口指令屏的FLASH中即可。本设计UI界面如图4-6所示。完成UI设计后只需要将要显示的数据通过串口发送给串口指令屏即可。

图4-6 UI界面

部分GUI函数: //置点函数

void LcmPixel(uint16_t x, uint16_t y) {

txword(0xaa551); txxy(x,y); txeof(); }

//画线函数

void LcmLine(uint16_t xs,uint16_t ys,uint16_t xe,uint16_t ye) {

txword(0xaa56);

16

河北大学工商学院2015届本科生毕业论文(设计)

txarea(xs,ys,xe,ye); txeof(); }

//显示字符串函数

void LcmPrints(uint8_t cmd,uint8_t x,uint16_t y,uint8_t* s) {

txbyte(0xaa); txbyte(cmd); txxy(x,y); txstr(s); }

//显示图片函数

void LcmPicDsp(uint16_t p) {

txword(0xaa70); txword(p); txeof(); }

17

河北大学工商学院2015届本科生毕业论文(设计)

5 开发及调试

本设计由于复杂度比较高,从开始的硬件设计到最后的软件设计经理了很长时间。整个开发过程主要分为三个步骤分别是制版、焊接以及调试。制作过程用到了很多的开发工具,可以大致分为两类,软件设计类和硬件设计类。本章对本次设计的制作过程、开发平台以及调试进行简单介绍。

5.1 硬件制作

硬件制作是整个设计中最关键的一步,硬件设计时间大约占整个设计周期的2/3。确定课题之后我先对设计要求进行分析,从中整理出对功能和性能的要求并设计了几个初步方案。有了初步方案之后我对每个方案进行了软件仿真,并选出最佳方案。方案确定后我查阅了很多相关方面的资料,并整理出前人设计相关项目中容易犯的错误,以防自己犯同样的错误。所有准备工作完成后开始进行原理图的设计,在进行原理图设计过程中遇到了很多的问题,比如整个设计中不同器件的供电电压不一样,所以在进行电源设计时就要考虑到这一点,最终我选择开关电源输出5V,然后通过低压差线性电源转为3.3V。完成原理图设计后我开始进行元器件的选型,选择了适合本设计的MCU以及GSM模块。器件选择完成后开始制作元器件封装,并导入到PCB文件中。然后就是本设计中最关键的步骤布局布线,布局布线的好坏是会直接影响到整个电路板的性能,特别是GSM模块接收天线部分涉及到射频布线对布线要求比较严格。PCB布线完成后投板制作,最后完成焊接调试。至此整个硬件设计完成。整体实物图如图5-1所示。

图5-1 整体硬件实物图

18

河北大学工商学院2015届本科生毕业论文(设计)

5.2 硬件开发工具

本设计中在PCB设计软件的选取中也花费了很大精力,首先选取了Candence软件该软件非常强大,但是功能复杂不容易掌握,所以最终选择了Altium Designer软件。该软件把原理图设计、电路仿真、PCB绘制、自动布线、信号完整性分析技术融合在一起,为电路设计者提供了全新的设计解决方案[14]。 Altium Designer主界面如图5-2所示。

图5-2 Altium Designer主界面

5.4 软件调试过程

本设计中软件设计主要分为下位机软件设计和上位机软件设计。下位机采用C语言开发。首先建立MDK工程,然后配置ST公司提供的库,配置完成后将相应软件模块的源文件添加到工程中,这样就完成了整个工程配置。工程配置完成后开始调试各个功能模块,软件调试完成后使用Jlink将调试好的程序下载到stm32单片机中即可。上位机开发采用C#语言开发,C#是面向对象了开发语言,简化了设计过程。编译器采用微软公司的VS2010集成开发环境。开发过程主要分为前台界面设计、后台代码的设、SerialPort组件属性的设置以及接收协议的设计。设计完成后生成可执行文件,即可在运行在安装有windows操作系统pc机上运行。

5.4 软件开发工具

本次设计的上位机开发平台为Keil。使用该开发平台可完成源程序的编写、编译和链接,并最终生成HEX行文件。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合

19

河北大学工商学院2015届本科生毕业论文(设计)

在一起,操作简单、方便[16],操作界面如图5-3所示。

图5-3 Keil操作界面

本次设计的上位机采用C#开发,编译器采用的是微软公司VS2010集成开发环境,该开发环境界面友好使用方便等优点。VS2010界面如图5-4所示。

图5-4 VS2010操作界面

20

河北大学工商学院2015届本科生毕业论文(设计)

6 结论

本文设计了一个基于GSM模块远程温度监测系统,温度测量范围为-55℃-125℃,精度为±0.5℃。数据能够显示在液晶屏幕上还可以通过串口传输到上位机上显示还支持数据发送到服务器上。当温度超过上限值或低于下限值可以向指定用户发送报警短信。本章详细介绍了该系统的设计方案及设计思想,涉及硬件电路的设计与制作,软件的设计与调试等方面。本章将主要介绍本设计的一些特点和设计过程中发现的一些不足之处。

本设计采用移远的GSM无线通信模块和DS18B20温度传感器对温度进行监测。它可以24小时实时监测环境温度,并将数据发送到服务器上以便对数据进行分析。当环境温度超过设定的上限值和下限值时会已短信的形式发出预警信息。与传统温度的监控设备相比具有更强的实时性。

本设计虽然基本功能已经实现,但是由于实验条件有限并没有进行性能测试和电磁兼容性方面的测试。除此之外还有许多需要改进的地方,下面对本设计中的不足与需要改进的地方进行总结,以便将来进行版本升级。

(1)本设计中由于采用了DS18B20传感器,该传感器的测量温度的范围有限,导致一些场合不能使用。解决方法是,采用测量范围宽的温度传感器。同时DS18B20的精度有限,无法在对测量精度有严格要求的环境下使用,同样也可以通过选择其他性能更好的温度传感器解决该问题。

(2)本设计工作状态下,TFT液晶的背光一直处于点亮状态,这样不仅会影响液晶屏幕的寿命,而且会增加系统功耗。解决办法是,当用户无操作一段时间之后,液晶屏幕背光灯自动关闭,当需要操作时液晶屏幕再自动点亮。程序设计时,需要一个定时器就可以实现屏幕的自动节能。

(3)电路上的独立按键是需要人频繁操作的器件,在操作过程中人体带有的静电可能通过按键接口烧毁单片机或其他器件,若在按键接口加上一个钳位电路将电位钳位在一个范围内这样可保护电路,防止电路的烧毁。

21

河北大学工商学院2015届本科生毕业论文(设计)

参考文献

[1] 刘良华,代才莉.GSM基站系统运行与维护[M].北京:科学出版社,2012 [2] 刘鹏飞.GSM网络优化理论与实践[M].北京:人民邮电出版社,2013 [3] 刘火良,杨森.STM32库开发实战指南[M].北京:机械工业出版社,2013 [4] 张志勇.现代传感器原理及应用[M].北京:人民邮电出版社2014 [5] 张志伟.硬件系统工程师宝典[M].北京:人民邮电出版社2015

[6] 孙宁.基于GSM模块的远程温度监测系统[J].电子世界,2008.229:22~36 [7] Stephen Prata.C Primer Plus中文版[M].北京:人民邮电出版社2005 [8] 陈忠平.单片机原理及接口技术[M].北京:人民邮电出版社,2011 [9] 周立功.ARM嵌入式系统基础教程[M].北京:人民邮电出版社,2011 [10] Perter Van Der Linden.C 专家编程[M].北京:人民邮电出版社,2008 [11] 刘鹏飞.GSM网络优化理论与实践[M].北京:人民邮电出版社,2013 [12] Watson.C#入门经典[M].北京:清华大学出版社,2014

[13] 陈忠平.单片机原理及接口技术[M].北京:人民邮电出版社2011 [14] 高海宾.Altium Designer 10从入门到精通[M].北京:机械工业出版社,2012

22

河北大学工商学院2015届本科生毕业论文(设计)

致 谢

在制作本设计的过程中,我遇到过很多问题,从最初的器件选型与方案确定,到后来的软硬件调试。在解决一个个问题之后,我发现在不断学习知识的同时,我的思想也不断成熟。而在这过程中,离不开学校,老师和同学的帮助与支持。在这里首先要特别感谢我的指导教师孙雪老师一直以来对我的悉心指导,老师渊博的学识、丰富的经验、以及严谨的态度和高尚的人格都深深的影响着我,并将永远激励我在以后的学习生活中不断奋斗。其次,对四年来我有机会聆听教诲的各位老师表示由衷的敬意,是你们的教导使我在知识上,思想上得到了很大的提升与进步。最后感谢四年来一起陪伴我学习生活的同学们,谢谢你们四年来的关照与帮助,在此对他们表示衷心的感谢。本报告参考了大量文献资料,最后,向学术界的各位前辈们致敬!

23

河北大学工商学院2015届本科生毕业论文(设计)

附 录1

原理图:

24

河北大学工商学院2015届本科生毕业论文(设计)

25

河北大学工商学院2015届本科生毕业论文(设计)

26

河北大学工商学院2015届本科生毕业论文(设计)

附 录2

PCB:

27

河北大学工商学院2015届本科生毕业论文(设计)

附 录3

GSM模块驱动程序: /*

***************************************************************************** * @file m72driver.c * @author wming * @version V1.0 * @date 2015-5-1 *@brief m72driver

******************************************************************************/

#include

#include \#include \#include \#include \#include \#include

#define UART_BUFF_SIZE 512 extern uint8_t uart_buff[]; extern volatile uint8_t uart_p; /*

* @brief:M72_D IO配置 POWERKEY:GPIO_Mode_Out_PP STATUS:GPIO_Mode_IPU * @param:无 * @retval:无 */

void GPIO_M72_Configuration(void) {

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); } /*

* @brief:M72_D开关机函数temp=1开机 temp=0关机 * @param:无

28

河北大学工商学院2015届本科生毕业论文(设计)

* @retval:无 */

uint8_t ON_OFF_M72(uint8_t temp) {

if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==1) {

if(temp==1) ; else {

PWRKEY_L; Delay_s(2); PWRKEY_H; Delay_s(2); PWRKEY_L; } } else {

if(temp==0); else {

PWRKEY_L; Delay_s(2); PWRKEY_H; Delay_s(2); PWRKEY_L; } }

//Delay1(1500);

return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8); } /**

* @brief IsASSIC 判断是否纯ASSIC编码 * @param str: 字符串指针

* @retval 纯ASSIC编码返回TRUE,非纯ASSIC编码返回FALSE */

uint8_t IsASSIC(char * str) {

while(*str) {

if(*str>0x7F) {

return M72_FALSE; }

29

河北大学工商学院2015届本科生毕业论文(设计)

str++; }

return M72_TRUE; } /**

* @brief M72a_char2hex 把字符转换成16进制字符 * @param hex: 16进制字符存储的位置指针,ch:字符 * @retval 无 */

void M72_char2hex(char *hex,char ch) {

const char numhex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; *hex++ = numhex[(ch & 0xF0)>>4]; *hex = numhex[ ch & 0x0F]; } /*

* @brief M72a_cmd 发送命令

* @param cmd:命令字符串指针,reply:希望响应,waittime:命令等待的时间 * @retval 命令是否得到正常响应,正常M72A_TRUE,不正常:M72A_FALSE */

uint8_t M72_cmd(char *cmd, char *reply,uint32_t waittime ) {

M72_CLEAN_RX(); M72_TX(cmd); if(reply == 0) {

return M72_TRUE; }

M72_DELAY(waittime); return M72_cmd_check(reply); } /**

* @brief 字符串截取函数 * @param sub必须是数组 * @retval 地址传递没有返回值 */

static void strcut(char *s, char *sub,int m, int n) {

int i;

for (i=0;i

30

河北大学工商学院2015届本科生毕业论文(设计)

* @brief M72a_cmd_check 检测命令的响应 * @param reply命令响应的字符串指针

* @retval 检测到匹配的响应M72A_TRUE,没检测到匹配的响应M72A_FALSE */

uint8_t M72_cmd_check(char *reply) {

uint8_t len; char buff[512]; char *redata;

redata = M72_RX(len);

//注意截取字符串时从1开始而不是0 strcut(redata, buff,1,len); if(strstr(buff,reply) != NULL) {

return M72_TRUE; } else {

return M72_FALSE; } } /*

* @brief M72_gprs_init 初始化M72网络 * @param 无 * @retval 无 */

void M72_gprs_init(void) {

uint8_t i = 0;

if(M72_cmd(\ {

for(i=0;i

printf(\ }

printf(\

printf(\同步正常\\n\ } else {

Delay_ms(500);

if(M72_cmd(\ {

printf(\同步正常\\r\\n\

31

河北大学工商学院2015届本科生毕业论文(设计)

} else {

Delay_ms(500);

if(M72_cmd(\ {

printf(\同步正常\\r\\n\ } else {

printf(\同步不正常\\r\\n\ } } }

if(M72_cmd(\ {

for(i=0;i

printf(\ }

printf(\

printf(\波特率设置为115200并且保存成功\\n\ } else {

printf(\波特率设置失败\\n\ }

if(M72_cmd(\ {

for(i=0;i

printf(\ }

printf(\

printf(\设置以域名方式链接成功\\n\ } else {

printf(\设置以域名方式链接失败\\n\ }

if(M72_cmd(\ {

for(i=0;i

32

河北大学工商学院2015届本科生毕业论文(设计)

printf(\ }

printf(\

printf(\检测到SIM卡\\r\\n\ } else {

printf(\未检测到SIM卡\\r\\n\ }

if(M72_cmd(\ {

for(i=0;i

printf(\ }

printf(\

printf(\检测到网络\\r\\n\ } else {

printf(\未检测到网络\\r\\n\ }

if(M72_cmd(\ {

for(i=0;i

printf(\ }

printf(\

printf(\发起GPRS/CSD无线连接成功\\n\ } else {

printf(\发起GPRS/CSD无线连接失败\\n\ }

if(M72_cmd(\ {

for(i=0;i

printf(\ }

printf(\

printf(\获取本地IP成功\\n\ }

33

河北大学工商学院2015届本科生毕业论文(设计)

else {

printf(\获取本地IP失败\\n\ } } /*

* @brief M72_gprs_init 初始化M72网络 * @param 无 * @retval 无 */

void M72_Message_init(void) {

uint8_t i = 0;

if(M72_cmd(\ {

for(i=0;i

printf(\ }

printf(\

printf(\同步正常\\n\ } else {

M72_cmd(\ M72_cmd(\

if(M72_cmd(\ {

printf(\同步正常\\r\\n\ } else {

Delay_ms(500);

ON_OFF_M72(OFF); Delay_s(10);

ON_OFF_M72(ON);

if(M72_cmd(\ {

printf(\同步正常\\r\\n\ } else {

printf(\同步不正常\\r\\n\ }

34

河北大学工商学院2015届本科生毕业论文(设计)

} }

if(M72_cmd(\ {

for(i=0;i

printf(\ }

printf(\

printf(\波特率设置为115200并且保存成功\\n\ } else {

printf(\波特率设置失败\\n\ } } /*

* @brief M72a_gprs_tcp_link 建立TCP连接 * @param 无 * @retval 无 */

uint8_t M72_gprs_tcp_link(char * serverip,char * serverport) {

uint8_t state_ctok = 0,state_ready = 0; M72_CLEAN_RX(); //设置服务器IP和端口

M72_tx_printf(\ M72_DELAY(1000); state_ctok = M72_cmd_check(\ state_ready = M72_cmd_check(\ return (state_ctok||state_ready); } /*

* @brief M72_gprs_send 通过GPRS发送数据 * @param str:数据指针 * @retval 无 */

uint8_t M72_gprs_send(char * str) {

uint8_t i=0;

M72_cmd(\ M72_cmd(str,\

USART_SendData(USART3,0X1A); for(i=0;i

35

河北大学工商学院2015届本科生毕业论文(设计)

{

printf(\ }

printf(\

return M72_cmd_check(str); } /*

* @brief M72_gprs_link_close 断开网络连接 * @param 无 * @retval 无 */

void M72_gprs_link_close(void) {

M72_tx_printf(\} /**

* @brief M72a_sms 发送短信(支持中英文,中文为GBK码) * @param num: 电话号码,smstext:短信内容 * @retval 无 */

void M72_sms(char *num,char *smstext) {

//char ucsbuff[160];

char end[2] = {0x1A,0x00};

M72_CLEAN_RX(); if(IsASSIC(smstext)==M72_TRUE) {

//英文

M72_tx_printf(\ M72_DELAY(100);

M72_tx_printf(\ M72_DELAY(100);

M72_tx_printf(\ M72_DELAY(100);//短信内容 //M72A_DELAY(100); } else { ; }

M72_tx_printf(\}

36

本文来源:https://www.bwwdw.com/article/mcs7.html

Top