大家好,本文带来的是单片机课设-基于Zigee的温度数据采集系统。
一、设计内容和要求
基于Zigbee的数据采集系统
1.1设计内容
(1)分析对比Bluetooth、Zigbee、Lora方式组网的基本原理和性能差异,撰写分析报告;
(2)系统为主从结构,主机负责显示和操作设置,从机负责采集温度,主从之间通过串口(无线模块)连接。从机可以有1台或多台;
(3)主机设有键盘和液晶显示(汉字点阵12864);
(4)从机设有传感器(LM20)和AD转换器(MCP3004);
(5)一种系统拓扑示意如下,仅供参考,可根据实际情况调整。
1.2设计要求
基本功能:
(1)从机采集温度数据,数据发送到主机。主机在屏幕上显示从机编号、从机温度、是否报警;
(2)从机显示温度范围为00°C~50°C,不需显示小数位;
(3)主机可以用键盘设定高低温报警值(如温度低于05°C或者高于40°C报警),且上下报警门限可调;
(4)当从机传感器温度发生变化后,主机显示端可在10秒内刷新正确的温度值。
扩展功能:
(5) 通过主机可以设置波特率(高中低)和采样时间(5-60秒),从机自动适配;
(6) 通信过程中使用数据校验来保证通信的可靠性;
(7) 实现多路温度采集和多机通信;
(8) 在仿真的基础上,使用立创EDA制版,并完成硬件电路
实习任务及工作量
(1)在Proteus中仿真实现。编程语言可以用C或者汇编,皆可。
(2)在Proteus中的硬件电路设计图一份。
(3)C或者汇编软件一份。
(4)录制1~2分钟的截屏,非常简短的展示下效果。
(5)设计报告一份。包括硬件、软件设计思路和实现过程,心得体会等。
4 参考文献
[1] 胡汉才主编:《单片机原理及其接口技术》,清华大学出版社,2010年出版。
[2] 孙力娟主编:《微型计算机原理与接口技术》,清华大学出版社,2013年出版。
[3] 高洪志主编:《MCS51单片机原理及应用技术教程》,人民邮电出版社,2009年出版。
[4] 顾海洲,马双武:《PCB电磁兼容技术(设计实践)》,清华大学出版社,2004年出版。
以上就是本次设计任务要求,下面带来具体实现的内容!!!
二、基本原理
2.1什么是Zigee?
- 介绍:Zigbee技术是一种应用于短距离和低速率下的无线通信技术 主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输以及典型的有周期性数据、间歇性数据和低反应时间数据传输的应用。
- 特点:自组织网络与高容量
(1)支持星型、树型和网状(Mesh)拓扑,具备自愈功能。Mesh网络通过多跳传输扩展覆盖范围(可达几百米至几公里)。
(2)单网络最多支持65,535个节点,区域内容纳1000个网络,满足大规模物联网需求。
2.2技术调研
在无线通信技术中,Bluetooth、Zigbee、Lora 是三种常见的组网方式,它们在基本原理和性能上存在显著差异,以下是具体分析:
Bluetooth:基于无线个人区域网(WPAN)技术,采用跳频扩频技术,工作在 2.4GHz ISM 频段。其通信建立在主从架构之上,主设备可同时与多个从设备进行通信,通过配对过程实现设备间的连接和数据传输。
Zigbee:基于 IEEE 802.15.4 标准,同样工作在 2.4GHz ISM 频段(部分地区也支持其他频段),采用直接序列扩频技术。它支持自组织网络,包括星型、树型和网状(Mesh)拓扑结构,具备自愈功能,网络中的节点可自动寻找路径进行数据传输。
Lora:基于扩频调制技术,工作在非授权频段(如 433MHz、868MHz、915MHz 等),采用 Chirp 扩频技术。其通信主要通过网关与终端节点之间的星形网络架构实现,终端节点将数据发送给网关,再由网关进行数据的汇总和处理。
2.3设计方案
(1)系统功能
本系统为基于 Zigbee 的数据采集系统,采用主从结构。主机负责显示和操作设置,设有键盘和液晶显示(汉字点阵 12864),可通过键盘设定高低温报警值,还能显示从机编号、从机温度以及是否报警等信息;从机负责采集温度,设有传感器(LM20)和 AD 转换器(MCP3004),从机可以有 1 台或多台。主从之间通过串口(无线模块)连接,实现数据的传输。
(2)系统工作框图
(3)模块工作原理
主机模块:主机的核心是 MCS51 单片机,通过键盘接收用户的操作指令,如设定高低温报警值等。液晶显示模块(汉字点阵 12864)用于显示从机编号、温度数据以及报警信息等。主机通过串口与无线模块连接,实现与从机之间的数据收发。
从机模块:从机同样以 MCS51 单片机为核心,传感器(LM20)负责采集温度信号,采集到的模拟信号传输给 AD 转换器(MCP3004),AD 转换器将模拟信号转换为数字信号后传输给从机的单片机,单片机再通过无线模块将数据发送给主机。
无线模块:采用 2.4G 无线串口透传模块,支持即插即用,通过 Uart 通信方式实现主从机之间的数据无线传输,波特率可根据需要进行设置。
三、电路设计
3.1主机电路
主机电路主要由 MCS51 单片机、键盘、液晶显示(汉字点阵 12864)和无线模块组成。
MCS51 单片机作为主机的核心控制单元,负责接收键盘输入的指令、处理从机发送的数据以及控制液晶显示。
键盘采用矩阵键盘设计,通过按键与单片机的 I/O 口连接,实现指令的输入。当按键按下时,相应的 I/O 口电平发生变化,单片机通过扫描识别按键信息。
液晶显示(汉字点阵 12864)通过并行或串行方式与单片机连接,接收单片机发送的显示数据并进行显示。
无线模块通过 TX、RX 引脚与单片机的串口连接,实现数据的无线收发,GND 引脚接地,保证电路的共地。
3.2从机电路
从机电路主要由 MCS51 单片机、传感器(LM20)、AD 转换器(MCP3004)和无线模块组成。
MCS51 单片机作为从机的核心控制单元,负责控制传感器采集温度、接收 AD 转换器转换后的数字信号以及通过无线模块发送数据。
传感器(LM20)的输出端与 AD 转换器(MCP3004)的输入端连接,将采集到的温度模拟信号传输给 AD 转换器。LM20 是一种高精度温度传感器,其输出电压与温度呈线性关系,在 0°C~50°C 范围内具有良好的精度。
AD 转换器(MCP3004)通过 SPI 接口与单片机连接,将模拟信号转换为数字信号后传输给单片机。MCP3004 是一款 10 位 AD 转换器,具有 4 个输入通道,满足温度信号转换的需求。
无线模块同样通过 TX、RX 引脚与单片机的串口连接,实现与主机的数据传输。
3.3参数计算过程
以 LM20 温度传感器和 MCP3004 AD 转换器为例进行参数计算:
LM20 在 0°C 时输出电压为 2.5V,温度系数为 - 6.2mV/°C(在 0°C 至 50°C 范围内)。MCP3004 的参考电压设为 5V,其分辨率为 10 位,即总共有 1024 个量化等级。
则 1 个量化等级对应的电压值为:5V / 1024 ≈ 4.88mV。
当温度为 t°C 时,LM20 的输出电压 U = 2.5V - 6.2mV/°C × t。
AD 转换器输出的数字量 N = U / 4.88mV ≈ (2500mV - 6.2mV × t) / 4.88mV。
通过该式可由 AD 转换器输出的数字量计算得到对应的温度值。
四、软件设计
4.1仿真电路设计图
4.2主机程序流程图
4.3从机程序流程图
五、测试与分析
5.1实际数据
在测试过程中,对系统的基本功能和部分扩展功能进行了验证,得到以下实际数据:
- 温度采集准确性:在 0°C~50°C 范围内,从机采集的温度与实际环境温度的误差在 ±1°C 以内,满足设计要求。
- 数据刷新时间:当从机传感器温度发生变化后,主机显示端能在 5 秒内刷新正确的温度值,小于要求的 10 秒。
- 报警功能:当设置高温报警值为 40°C,低温报警值为 5°C 时,当温度高于 40°C 或低于 5°C,主机能准确发出报警提示。
- 多机通信:测试了 3 台从机与主机的通信情况,主机能准确识别各从机编号并显示对应的温度数据,通信稳定。
5.2分析
-
总结分析:
从测试数据来看,系统的基本功能均能正常实现,且性能指标符合设计要求。在温度采集准确性方面,误差较小,能满足一般温度监测的需求;数据刷新及时,保证了温度数据的实时性;报警功能准确可靠,可及时提醒用户温度异常;多机通信稳定,说明系统的组网能力较好。 -
分析改进:
在测试过程中也发现一些问题,如在距离较远时(超过 500 米),无线通信的稳定性有所下降,数据传输偶尔会出现延迟或丢失的情况,这可能与无线模块的传输距离限制有关。在后续优化中,可考虑更换传输距离更远的无线模块或采用中继节点来增强通信效果。
六、基础问答
基本功能:
(1)问:从机采集温度数据,数据发送到主机。主机在屏幕上显示从机编号、从机温度、是否报警?
答:可以
(2)问:从机显示温度范围为00°C~50°C,不需显示小数位?
答:可以
(3)问:主机可以用键盘设定高低温报警值(如温度低于05°C或者高于40°C报警),且上下报警门限可调吗?
答:可以
(4)问:当从机传感器温度发生变化后,主机显示端可在10秒内刷新正确的温度值吗?
答:可以
扩展功能:
(5) 问: 通过主机可以设置波特率(高中低)和采样时间(5-60秒),从机自动 适配吗?
答:未实现
(6) 问:通信过程中使用数据校验来保证通信的可靠性了吗?
答:未实现
(7) 问:实现多路温度采集和多机通信了吗?
答:已实现,一主机两从机
(8) 问:在仿真的基础上,使用立创EDA制版,并完成硬件电路?
答:未实现
(9)问:给显示屏上温度显示加上单位符号?
答:已实现,如图:
(10)问:能修改波特率吗?
答:可以。按以下步骤具体实现:
1.定义常用波特率初值宏
#include “uart.h” // 晶振频率11.0592MHz,SMOD=0(PCON=0x00)时的波特率初值 #define BAUD_2400 0xF3 // 2400bps(低) #define BAUD_9600 0xFD // 9600bps(中,默认) #define BAUD_19200 0xFE // 19200bps(高) unsigned char rx_data_addr_temperature[3] = {0}; // 新增:存储当前波特率状态(0=低,1=中,2=高),用于主机设置后从机适配 unsigned char current_baud = 1; // 默认9600bps
2.重构初始化函数,支持动态修改波特率
// 初始化串口框架(不包含波特率设置) void Uart_Init_Frame(void) { SCON = 0x50; // UART方式1:8位UART,允许接收(REN=1) PCON = 0x00; // SMOD=0,波特率不加倍 TMOD = 0x20; // T1工作在方式2(自动重装载) TR1 = 1; // 启动定时器T1 ES = 1; // 允许串口中断 EA = 1; // 开总中断 } // 设置波特率(通过主机键盘指令传入参数baud:0=低,1=中,2=高) void Uart_SetBaudRate(unsigned char baud) { current_baud = baud; // 更新当前波特率状态 switch(baud) { case 0: // 低波特率:2400bps TH1 = BAUD_2400; TL1 = BAUD_2400; break; case 1: // 中波特率:9600bps(默认) TH1 = BAUD_9600; TL1 = BAUD_9600; break; case 2: // 高波特率:19200bps TH1 = BAUD_19200; TL1 = BAUD_19200; break; default: // 默认保持9600bps TH1 = BAUD_9600; TL1 = BAUD_9600; break; } } // 初始化时调用(默认9600bps) void Uart_Init(void) { Uart_Init_Frame(); Uart_SetBaudRate(1); // 初始化为中波特率 }
3.配合主机指令实现“从机自动适配”
void UART_Routine() interrupt 4 { static unsigned char i = 0; unsigned char cmd; // 指令缓存 if(RI == 1) { RI = 0; cmd = SBUF; // 接收主机发送的指令 // 若接收到波特率设置指令(示例:0x01=低,0x02=中,0x03=高) if(cmd == 0x01) { Uart_SetBaudRate(0); // 切换到2400bps } else if(cmd == 0x02) { Uart_SetBaudRate(1); // 切换到9600bps } else if(cmd == 0x03) { Uart_SetBaudRate(2); // 切换到19200bps } // 否则按原逻辑接收温度数据 else { if(i < 3) { rx_data_addr_temperature[i] = cmd; // 原数据接收逻辑 i++; } if(i >= 3) { i = 0; } } } }
以上就是全部内容了,如有帮助,还请一键三连!!!