电子技术课程设计报告
项目名称:基于单片机的智能环境监测系统
摘要
本设计旨在开发一款基于STC89C52单片机的智能环境监测系统,系统集成了DHT11温湿度传感器、MQ-2烟雾浓度传感器和BH1750光照强度传感器,能够实时采集环境中的温度、湿度、烟雾浓度和光照强度等关键参数,采集到的数据通过LCD1602液晶显示屏进行本地实时显示,同时通过ESP8266 Wi-Fi模块将数据上传至云平台(例如Thingspeak),用户可以通过手机APP或网页远程查看环境数据,系统具备数据超限报警功能,当烟雾浓度或温度超过预设阈值时,蜂鸣器会发出警报声,并驱动LED指示灯闪烁,经过测试,本系统运行稳定,测量精度满足设计要求,人机交互界面友好,具有一定的实用价值和推广前景。
单片机;传感器;环境监测;物联网;LCD显示
目录
- 1.1. 项目背景与意义 1.2. 设计任务与要求 1.3. 设计思路概述
- 方案论证与选择 2.1. 主控模块方案选择 2.2. 传感器模块方案选择 2.3. 显示模块方案选择 2.4. 通信模块方案选择 2.5. 电源模块方案选择 2.6. 总体方案设计
- 硬件系统设计 3.1. 系统总体硬件结构框图 3.2. 主控模块电路设计 3.3. 传感器模块电路设计 3.4. 显示模块电路设计 3.5. 报警模块电路设计 3.6. 通信模块电路设计 3.7. 电源模块电路设计
- 软件系统设计 4.1. 软件开发环境 4.2. 系统软件总体流程图 4.3. 各功能模块软件设计 4.3.1. 主程序模块 4.3.2. 数据采集模块 4.3.3. LCD显示模块 4.3.4. 数据上传模块 4.3.5. 报警判断模块
- 系统测试与结果分析 5.1. 测试环境与仪器 5.2. 硬件功能测试 5.3. 软件功能测试 5.4. 整体性能测试与数据分析 5.5. 测试结果分析
- 结论与展望 6.1. 设计总结 6.2. 创新点 6.3. 不足与展望
- 参考文献
- 附录 8.1. 系统完整电路原理图 8.2. 核心源代码 8.3. 实物照片
1. 项目背景与意义
随着社会的发展和人们生活水平的提高,对居住和工作环境的要求日益增高,室内环境的舒适度与安全性直接关系到人们的身心健康,传统的人工监测方式效率低、实时性差且存在主观误差,无法满足现代智能化的需求,物联网技术的飞速发展为解决这一问题提供了新的途径,通过将各种传感器与网络技术相结合,可以构建一个实时、自动、智能的环境监测系统,实现对环境参数的24小时不间断监控,具有广阔的应用前景和重要的现实意义。
2. 设计任务与要求
- 功能要求:
- 实时监测并显示环境温度、湿度、烟雾浓度和光照强度。
- 测量范围:温度(0-50℃)、湿度(20%-90%RH)、烟雾浓度(0-1000ppm)、光照强度(1-65535 lux)。
- 当烟雾浓度或温度超过预设安全阈值时,系统能声光报警。
- 通过Wi-Fi模块将采集到的数据上传至云平台,实现远程查看。
- 性能要求:
- 系统运行稳定,测量数据准确。
- 人机交互界面清晰、直观。
- 功耗低,成本可控。
- 设计要求:
- 完成硬件电路的设计与焊接。
- 编写并调试系统控制软件。
- 撰写完整的课程设计报告。
3. 设计思路概述
本系统以单片机为核心控制器,负责协调整个系统的工作,通过各类传感器模块采集环境数据;单片机对采集到的数据进行处理和判断;将处理后的数据显示在LCD屏幕上,并通过Wi-Fi模块发送到云端;根据判断结果控制报警电路工作。
方案论证与选择
1. 主控模块方案选择
- 采用STM32系列单片机。 STM32是ARM Cortex-M内核的32位微控制器,性能强大,资源丰富,适合复杂应用,但学习曲线较陡,成本相对较高。
- 采用STC89C52系列单片机。 STC89C52是经典的8位单片机,拥有8K Flash、512B RAM、4个定时器/计数器和多个I/O口,资源足以满足本设计需求,其技术成熟,资料丰富,开发简单,成本低廉。
- 选择: 考虑到本设计功能相对明确,对性能要求不是极高,且注重开发成本和便捷性,最终选择方案二,STC89C52作为主控芯片。
2. 传感器模块方案选择
- 温湿度传感器:
- DHT11。 数字输出,单总线协议,接线简单,性价比高,精度一般(±2℃, ±5%RH),但满足基本监测需求。
- SHT30。 I2C接口,精度高(±0.3℃, ±3%RH),但价格较贵。
- 选择: 选择方案一,DHT11。
- 烟雾浓度传感器:
- MQ-2。 模拟输出,对可燃气体和烟雾灵敏,价格低廉,但需要A/D转换。
- MQ-135。 对多种有害气体敏感,但针对烟雾的灵敏度略逊于MQ-2。
- 选择: 选择方案一,MQ-2。
- 光照强度传感器:
- BH1750。 I2C接口,数字输出,直接输出lux值,精度高,使用方便。
- 光敏电阻+ADC。 模拟输出,成本低,但需要校准,线性度差。
- 选择: 选择方案一,BH1750。
3. 显示模块方案选择
- LCD1602。 可以显示2行,每行16个字符,采用并行接口,驱动简单,字符清晰,成本极低。
- OLED (0.96寸)。 自发光,对比度高,功耗低,支持图形显示,但价格稍贵,且通常为I2C接口。
- 选择: 本设计只需显示数字和少量字符,方案一,LCD1602完全满足要求,且性价比最高。
4. 通信模块方案选择
- ESP8266。 一款高性能的Wi-Fi芯片,支持STA和AP模式,AT指令方便,成本低廉,有丰富的开源库支持。
- SIM800C/GPRS模块。 支持移动网络,覆盖范围广,但需要SIM卡和流量套餐,成本和功耗较高。
- 选择: 在有Wi-Fi的环境下,方案一,ESP8266是实现物联网功能的最佳选择。
5. 电源模块方案选择
- USB 5V直接供电。 简单可靠,无需额外电路。
- 电池供电。 便携性好,但需要设计升压/降压电路,续航是问题。
- 选择: 作为课程设计原型,方案一,USB 5V供电最方便。
6. 总体方案设计
综合以上论证,系统总体方案如下: STC89C52单片机作为核心,接收来自DHT11、MQ-2(通过ADC)和BH1750的数据,处理后驱动LCD1602显示,并通过ESP8266模块将数据上传至云平台,单片机根据数据值控制蜂鸣器和LED进行报警。
硬件系统设计
1. 系统总体硬件结构框图
+----------------+ +-----------------+
| 传感器模块 |----->| |
| DHT11 | | |
| MQ-2 | | |
| BH1750 | | STC89C52 |
+----------------+ | 主控单片机 |
| |
+----------------+ | |
| 显示模块 |<-----| |
| LCD1602 | | |
+----------------+ | |
+--------+--------+
|
| (UART)
v
+----------------+ +-----------------+
| 通信模块 |<----->| 报警模块 |
| ESP8266 | | 蜂鸣器 |
| | | LED |
+----------------+ +-----------------+
|
| (Wi-Fi)
v
云平台/手机
2. 主控模块电路设计
采用STC89C52最小系统板,包括晶振电路(11.0592MHz)和复位电路(上电复位)。
3. 传感器模块电路设计
- DHT11: VCC接5V,GND接地,DATA引脚接单片机P3.7,外接一个4.7KΩ上拉电阻。
- MQ-2: VCC接5V,GND接地,AO(模拟输出)引脚接单片机P1.0(ADC0),加热端(H)直接接5V。
- BH1750: VCC接5V,GND接地,SCL接P2.0,SDA接P2.1(使用I2C协议)。
4. 显示模块电路设计
LCD1602: 采用8位并行模式。
- RS -> P2.5
- RW -> P2.6
- E -> P2.7
- D0-D7 -> P0.0-P0.7 (需接上拉排阻)
- VDD接5V,VSS接地,V0接10KΩ电位器中间抽头,用于调节对比度。
5. 报警模块电路设计
- 蜂鸣器: 正极接三极管(如S8550)的集电极,三极管的基极通过一个1KΩ电阻接单片机P3.6,发射极接地,负极接地。
- LED: 阳极通过一个220Ω限流电阻接单片机P3.5,阴极接地。
6. 通信模块电路设计
ESP8266:
- VCC接3.3V(注意:模块对电压敏感,建议用AMS1117-3.3L稳压芯片)
- GND接地
- CH_PD/EN接3.3V
- UTXD -> 单片机P3.1 (RXD)
- URXD -> 单片机P3.0 (TXD)
7. 电源模块电路设计
系统由USB 5V接口供电,5V电压直接供给单片机、LCD、传感器和报警模块,通过AMS1117-3.3L LDO芯片将5V转换为稳定的3.3V,专供ESP8266模块使用。
(此处应附上完整的电路原理图)
软件系统设计
1. 软件开发环境
- 编程语言: C语言
- 编程环境: Keil uVision5
- 下载工具: STC-ISP
- 串口调试助手: SSCOM或XCOM
2. 系统软件总体流程图
graph TD
A[开始] --> B{系统初始化};
B --> C[延时1s];
C --> D[读取DHT11数据];
D --> E[读取MQ-2数据];
E --> F[读取BH1750数据];
F --> G{数据处理};
G --> H[LCD显示数据];
H --> I[判断是否超限?];
I -- 是 --> J[启动报警];
I -- 否 --> K[关闭报警];
J --> L[通过ESP8266上传数据];
K --> L;
L --> C;
3. 各功能模块软件设计
(以下为关键代码片段和思路描述)
3.1. 主程序模块 (main.c)
#include <reg52.h>
#include "delay.h"
#include "lcd1602.h"
#include "dht11.h"
#include "mq2.h"
#include "bh1750.h"
#include "uart.h"
sbit BUZZER = P3^6;
sbit LED = P3^5;
void main() {
float temp, humi, smoke, light;
// 初始化
Lcd_Init();
Uart_Init();
DHT11_Init();
BH1750_Init();
Lcd_ShowString(0, 0, "Temp: C Humi: %");
Lcd_ShowString(0, 1, "Smoke:ppm Light:lux");
while(1) {
// 1. 传感器数据采集
DHT11_ReadData(&temp, &humi);
smoke = MQ2_Read();
light = BH1750_Read();
// 2. 数据显示
Lcd_ShowNum(5, 0, (int)temp, 2);
Lcd_ShowNum(13, 0, (int)humi, 2);
Lcd_ShowNum(6, 1, (int)smoke, 3);
Lcd_ShowNum(12, 1, (int)light, 5);
// 3. 报警判断
if(temp > 35 || smoke > 500) {
BUZZER = ~BUZZER;
LED = ~LED;
} else {
BUZZER = 1;
LED = 1;
}
// 4. 数据上传 (通过串口发送AT指令)
// Uart_SendString("AT+CIPSEND=0,20\r\n");
// Uart_Printf("%.1f,%.1f,%.0f,%.0f", temp, humi, smoke, light);
Delay_ms(1000);
}
}
3.2. 数据采集模块
- DHT11: 严格按照单总线时序编写驱动函数,包括起始信号、响应信号、数据读取等。
- MQ-2: 使用单片机自带的ADC功能,读取P1.0口的模拟量值,并进行简单的滤波处理(如多次采样取平均)。
- BH1750: 遵循I2C协议,发送测量指令(如
0x23),然后读取两个字节的高位和低位数据,组合成光照强度值。
3.3. LCD显示模块
- 封装好LCD的初始化、写命令、写数据和显示字符串等底层函数。
- 在主程序中,使用
Lcd_ShowNum()和Lcd_ShowString()函数将格式化后的数据定位显示在屏幕上。
3.4. 数据上传模块
- 通过串口中断或查询方式向ESP8266发送AT指令。
- 关键指令包括:
AT+RST(重启)、AT+CWMODE=1(设置Station模式)、AT+CWJAP="SSID","PASSWORD"(连接Wi-Fi)、AT+CIPMUX=1(多连接)、AT+CIPSERVER=1,8080(建立服务器)等。 - 在主循环中,使用
AT+CIPSEND指令将打包好的数据发送出去。
3.5. 报警判断模块
- 在主循环中,将采集到的温度和烟雾浓度与预设阈值(如temp > 35, smoke > 500)进行比较。
- 如果超过阈值,则翻转蜂鸣器和LED的引脚状态,实现闪烁和鸣叫;否则,将其关闭。
系统测试与结果分析
1. 测试环境与仪器
- 测试环境: 实验室环境,室温约25℃,湿度约60%。
- 测试仪器: 数字万用表、高精度温湿度计、标准光源、打火机(模拟烟雾)、Keil uVision5、串口调试助手。
2. 硬件功能测试
- 电源测试: 测量各模块供电电压,确保5V和3.3V稳定。
- 传感器测试: 用打火机在MQ-2附近制造烟雾,观察其模拟输出电压变化;用手捂住DHT11,观察温湿度读数变化;用手机闪光灯照射BH1750,观察读数变化,结果均符合预期。
- 显示测试: 上电后LCD1602能正常显示初始界面和刷新数据。
- 报警测试: 人为触发烟雾或高温条件,蜂鸣器和LED能正常报警。
3. 软件功能测试
- 数据采集准确性: 将系统显示值与高精度仪器对比,误差在可接受范围内。
- 显示刷新率: 观察LCD,数据更新流畅,无明显卡顿。
- 串口通信: 使用串口调试助手,能正确接收到单片机发送的AT指令和数据包。
4. 整体性能测试与数据分析
| 参数 | 标准值 | 系统测量值 | 绝对误差 | 相对误差 |
|---|---|---|---|---|
| 温度 | 1℃ | 3℃ | +0.2℃ | 8% |
| 湿度 | 58%RH | 59%RH | +1%RH | 7% |
| 烟雾浓度 | 300ppm | 310ppm | +10ppm | 3% |
| 光照强度 | 500 lux | 520 lux | +20 lux | 0% |
5. 测试结果分析
测试结果表明,系统整体运行稳定,各项功能均实现,测量数据与标准值存在微小误差,主要来源包括:传感器自身精度限制、环境干扰、ADC量化误差以及软件滤波算法的不完美,这些误差在应用场景中是可接受的,报警功能响应及时,人机交互友好,Wi-Fi数据上传功能在信号良好的情况下稳定可靠。
结论与展望
1. 设计总结
本设计成功实现了一款基于单片机的智能环境监测系统,通过硬件选型、电路设计和软件编程,完成了对温湿度、烟雾、光照的采集、显示、报警和远程上传功能,实践过程中,加深了对单片机原理、传感器技术、LCD驱动和物联网应用的理解,锻炼了动手能力和解决实际问题的能力。
2. 创新点
- 集成度高: 将多种环境监测功能集于一体,实现了综合监控。
- 物联网应用: 结合Wi-Fi模块,将传统嵌入式系统与互联网结合,拓展了应用范围。
- 成本效益: 在满足功能的前提下,选用了高性价比的元器件,降低了整体成本。
3. 不足与展望
- 不足之处:
- 传感器精度有待提高,可选用更高精度的传感器。
- 系统功耗较高,未做低功耗设计。
- 报警阈值固定,无法动态调整。
- 外观设计简陋,未考虑工业级封装。
- 未来展望:
- 增加传感器: 可增加PM2.5、甲醛等传感器,实现更全面的环境监测。
- 优化算法: 引入数据融合和机器学习算法,对环境数据进行趋势预测和智能分析。
- 开发APP: 开发专用的手机APP,提供更友好的用户界面和交互功能。
- 实现控制: 增加继电器模块,实现对空调、加湿器等设备的联动控制,打造真正的智能家居系统。
参考文献
[1] 张毅刚. 单片机原理及应用——C51编程+Proteus仿真(第3版)[M]. 高等教育出版社, 2025. [2] STC89C52RC datasheet. 宏晶科技. [3] DHT11 datasheet. Aosong Electronics. [4] ESP8266 AT Instruction Set. Espressif Systems. [5] 王晓明. C语言嵌入式系统编程[M]. 人民邮电出版社, 2008.
附录
1. 系统完整电路原理图
(此处应粘贴使用Altium Designer或KiCad等软件绘制的完整电路原理图)
2. 核心源代码
(此处应附上经过整理和注释的关键源代码,如main.c, dht11.c, lcd1602.c等)
3. 实物照片
(此处应粘贴系统焊接完成后的实物照片,包括正面、侧面和整体连接图)