单片机毕设 基于STM32的环境质量监测系统(源码+原理图+论文)

本文介绍了一种基于STM32的毕业设计项目,包括系统架构设计、功能实现、软件流程图和相关代码。项目利用单片机采集温湿度、PM2.5和甲醛值,通过LCD显示并上传至手机,具有报警功能。
摘要由CSDN通过智能技术生成


0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 毕业设计 基于STM32的环境质量监测系统(源码+原理图+论文)

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:3分

🧿 项目分享:见文末!

在这里插入图片描述

1 设计架构

本系统主要由单片机系统、液晶显示、温湿度采集模块、PM2.5采集模块和甲醛模块。采用单片机作为主控芯片,将采集到的温湿度和PM2.5,甲醛浓度显示到LCD1602液晶上,来实现当前环境的采集。

在这里插入图片描述

功能设计

主要功能: 使用STM32为主控制器,可采集当前环境下的温湿度、甲醛、PM2.5值,当采集值超过预设阀值时,蜂鸣器自动报警。采集到的温湿度、甲醛、PM2.5会显示在LCD1602显示屏上,且自动上传至上位机(手机),可以在手机查收采集到的各种参数。可通过三个按键任意设置报警阀值。

  • 1.使用STM32F103C8T6单片机做主控制器。

  • 2.使用LCD1602显示采集到的温湿度、甲醛、PM2.5值。

  • 3.使用ESP8266上次至手机,采集数据实时上传到手机上。

  • 4.使用DHT11采集当前环境温湿度。

  • 5.使用ZE08-CH2O 采集甲醛值。

  • 6.使用GP2Y1014AU粉尘传感器采集当前环境PM2.5值。

  • 7.三个按键可任意设置报警阀值,当采集值超过了报警阀值后,蜂鸣器会自动报警。

2 原理图

在这里插入图片描述

3 软件设计

整体流程框图是描述整个系统运行过程的流程图。通过框图可以看出主程序是如何对各个子程序的调用来实现整个系统功能的。根据系统概述的分析,画出系统软件流程图如图

在这里插入图片描述

温度采集模块是本系统的核心模块之一,根据传感器的通信协议规定,DHT11不会主动采集环境温湿度,只有单片机通过I/O口发出激发信号,主动驱动传感器,传感器才会工作,这时,单片机将数据线的控制权交给传感器,由传感器完成数据采集,模数转换,数据发送的任务,而单片机通过对I/O口高低电平的不断检测,来解析出正确的数字信息[15]。根据以上流程,设计DHT11温湿度采集软件流程图如图

在这里插入图片描述

篇幅有限,其他流程不在这里过度复述。。

4 实现效果

正面

在这里插入图片描述

反面

在这里插入图片描述

5 相关代码

#include<stm32.h>   //头文件
#include<intrins.h>
#include<stdio.h>
#include<math.h>    //Keil library
sbit DATA=P2^4;     //数据
sbit SCK=P2^3;     //时钟
#define TEMP_ML   0x03     //000   0001   1 温度命令
#define HUMI_ML   0x05     //000   0010   1 湿度命令
unsigned char error;    //全局错误变量
unsigned char ack;     //全局错误变量
//float temp_zi;       //全局应答变量
//float humi_zi;       //全局应答变量
unsigned char temp_h; //全局应答变量
unsigned char temp_LL; //全局应答变量
unsigned char humi_h; 
unsigned char temp_LL
#define uchar unsigned char //定义一下方便使用
#define unit unsigned int
#define ulong unsigned long
unsigned int recs=0;//接收次数
uchar TempBuffer[5];uchar humibuffer[4];
const unsigned char SHUO[15]=0123456789.%RH”;
int xts_zi=0;//温度值
int xtg_zi=0;//温度个位值
int xtd_zi=0;//温度点值
int xss_zi=0;//湿度值
int xsg_zi=0;//湿度个位值
int xsd_zi=0;//湿度点值
sbit soud=P1^4;//声音
//基本驱动程序
//系统初始化
Void start(void)     //启动
{
DATA=1; SCK=0;          //数据为1,SCK=0
_nop_();
SCK=1;                 //第一个脉冲
DATA=0;               //数据跌落
_nop_();
SCK=0;               //完成一个脉冲
_nop_(); _nop_();   _nop_();
SCK=1;              //再一个脉冲
_nop_();
 DATA=1;           //数据变为1
_nop_();
SCK=0;             //变为该脉冲
}
Void sht_rest(void)    //复位
{
unsigned char I;
DATA=1;SCK=0;               //数据为1时钟为0
for(i=0;i<9;i++//9个脉冲为复位
{SCK=1;
SCK=0;
}
Start();                  //启动
}
char write(unsigned char value)//写一个字节  返回应答信号
{ 
Unsigned char I;
ack=0;
for(i=0x80;i>0;i/=2)           //释放数据总线
{if(i&value)DATA=1;           //写入值
Else DATA=0;
SCK=1;                     //上升沿写入
_nop_(); _nop_();   _nop_();   //延时
SCK=0;
}DATA=1;                  //释放数据总线
SCK=1;
return ack;                 //error=1表示没有应答
}
char read()//读一个字节返回应答信号
{
Unsigned char I,val=0;
temp_LL=0;
temp_h=0;
DATA=1;                //释放数据总线
for(i=0x80;i>0;i/=2//位移8位
{SCK=1;                 //上升沿读入
if(DATA)val=(val|i)        //确定值
SCK=0;
}
DATA=0;                //读应答信号应答为1,应答为0通过CPU下拉为应答
SCK=1;9个脉冲
_nop_(); _nop_();   _nop_();   //pulswith approx.5us
SCK=0;
DATA=1;                 //释放数据总线
temp_h=val;
val=0;
//低8位
DATA=1;                 //释放数据总线
for(i=0x80;i>0;i/=2)        //位移8位
{SCK=1;                   //上升沿读入
if(DATA)val=(val|i)        //确定值
SCK=0;
}
DATA=1;//0;              //不需要应答 通过CPU下拉为应答
SCK=1;9个脉冲
_nop_(); _nop_();   _nop_();   //pulswith approx.5us
SCK=0;
DATA=1;                   //释放数据总线
temp_LL=val
return val;
}
//测量温度或者是湿度,返回校验值
text_a(unsigned char ml)
{
unsigned int I;
start();                     //启动
write(ml);                  //写入测温度
if(ack==1{
sht_rest();                 //复位
write(ml);                  //写入测温度
}
//DATA=1;// 释放数据总线
For(i=0;i<65535;i++)if(DATA==0)break;
read();//度温度
}
text_jishuan_temp()
{
float aa=0,bb=0,temp zi;
int abcd=0;
aa=(float)temp_h*256+(float)temp_LL;
temp_zi=0.01*aa-40;
if  (temp_zi<0)
{
temp_zi= -temp_zi;
}
temp_zi= temp_zi*10;
abcd=(int) temp_zi;
xts_zi=abcd/100;
abcd=abcd%100;
xtg_zi=abcd/10;
abcd=abcd%10;
xtd_zi=abcd/1;
}
text_jishuan_humi()
{
float aa=0,bb=0,humi_zi;
int abcd=0;
aa=(float)temp_h*256+(float)temp_LL;
baa*aa*2.8/1000000;
aa=0.0405*aa;
aa=aa-4-bb;
humi_zi= humi_zi*10;
abcd=(int)humi_zi;
xss_zi=abcd/100;
abcd=abcd%100;
xsg_zi=abcd/10;
abcd=abcd%10;
xsd_zi=abcd/1;
}
text_jishuan_temp11()
{
error=0;
ack=0;
sht_rest();          //复位
text_a(TEMP_ML);
text_jishuan_temp();
text_a(HUMI_ML);
text_jishuan_humi();
}
unsigned int wendu,shidu;
void delay_n10us(unit n)      //延时n个10us@12M晶振
{
uint i;
for(i=n;i>0;i--)
{
_nop_(); _nop_();   _nop_();  _nop_(); _nop_();   _nop_();
}

6 最后

资料分享,包含内容

在这里插入图片描述

🧿 项目分享:见文末!

  • 34
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言: 是德科技(NYSE:KEYS)是全球领先的电子测量公司,通过在无线、模块化和软件解决方案等领域的不断创新,为您提供全新的测量体验。是德科技专注于测量技术,旨在帮助科学家、研究人员和工程师精准和充满信心地应对最严苛的测量挑战。 越来越多的工程师开始选择是德科技示波器,因为它们能够帮助您: 利用屡获殊荣的示波器执行测试,从而加速将您的产品推向市场。这些示波器可以提供最快的更新速率、最深的存储器、独特的电容触摸屏,以及最广泛的示波器软件选件 利用可以信赖的测量生产出性能最高的产品。这些测量由具有业界领先信号完整性的示波器和最广泛的示波器探头提供 通过在一台主机中集成多种仪器以及轻松进行升级,实现最低的拥有成本 同时本文重点介绍了基于单片机STM32控制、Android显示的便携式数字示波器的毕业设计 数字示波器毕业设计概述: 基于单片机STM32控制的、并在Android上进行显示的便携式数字示波器。STM32单片机是一款性价比非常之高的处理器,最高时钟可达72M,完全能满足本设计的要求。采用Android设备作为显示平台,是本设计最大的一个特点。本设计的基本思路是,由单片机对ADC采样到的数据进行处理,再通过蓝牙把波形数据发送到Android设备上进行显示。同时由于Android设备都采用触摸屏,因此示波器的参数可以很方便的通过触摸屏进行设置。本设计采用Android设备取代液晶屏,并使用蓝牙进行数据传输,充分利用了Android设备的硬件资源。 由于A/D转换器的输入范围一般都比较小(低于2Vpp),不可能直接测量几十伏甚至是几百伏的信号。而且由于A/D转换器的分辨率有限,对于幅值很低的信号测量误差将会很大甚至是无法测量。所以在输入级必须要设计一个程控放大电路,以现实对信号进行不失真的处理,而后再送至A/D数模转换器,以达到A/D数模转换器的输入要求。基于本设计便携小巧的宗旨,和电路复杂度的考虑,本设计使用专用PGA芯片AD603,可以通过MCU来控制AD603的基准,进而实现不同放大倍数的调节。该电路优点是控制比较简单,且增益调节范围大,外围电路简单。缺点是成本稍微偏高。 AD603它是美国ADI公司的专利产品,是一个低噪、90MHz带宽增益可调的集成运放,如增益用分贝表示,则增益与控制电压成线性关系,压摆率为275V/μs。管脚间的连接方式决定了可编程的增益范围,增益在-11~+30dB时的带宽为90Mhz,增益在+9~+41dB时具有9MHz带宽,改变管脚间的连接电阻,可使增益处在上述范围内。该集成电路可应用于射频自动增益放大器、视频增益控制、A/D转换量程扩展和信号测量系统。 AD603封装引脚图: Android示波器电路原理图 电路城语:此资料为卖家免费分享,不提供技术支持,请大家使用前验证资料的正确性!如涉及版权问题,请联系管理员删除! 附件包含以下资料:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值