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


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 最后

资料分享,包含内容

在这里插入图片描述

🧿 项目分享:见文末!

**项目分享: ** https://blog.csdn.net/m0_984093

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于STM32的智能蓝牙电子秤设计源码原理图等是一个将传统电子秤与蓝牙技术相结合的项目。该项目主要包括硬件设计和软件开发两个方面。 在硬件设计方面,项目采用STM32微控制器作为主控芯片,配合其它硬件模块,如称重传感器、LCD屏幕、蓝牙模块等,构成了完整的电子秤设备。在原理图设计上,需要根据硬件模块的特性和接口要求进行布线和连接,同时考虑到电源管理和保护等关键问题。在PCB设计中,需要根据原理图进行布板,使得各个模块可以良好地连接并协同工作。 在软件开发方面,项目主要涉及到嵌入式软件的编写和调试。首先,需要根据硬件设计的接口要求,编写STM32的驱动代码,使得其可以正确地控制和处理各个硬件模块。其次,需要编写相应的算法和逻辑,将传感器采集到的数据转化为实际的重量值,并通过LCD屏幕进行显示。最后,需要编写蓝牙通信的相关代码,将电子秤的数据通过蓝牙无线传输给其他设备。 总结起来,基于STM32的智能蓝牙电子秤设计涉及到硬件设计和软件开发两个方面。在硬件设计中,需要考虑模块的连接和布线,保证各个硬件模块的正常工作。在软件开发中,需要编写嵌入式软件的驱动代码、算法以及蓝牙通信代码。这样才能实现电子秤的功能,使其能够通过蓝牙无线传输数据给其他设备,实现智能化的功能。 ### 回答2: 基于STM32的智能蓝牙电子秤是一种集蓝牙功能和电子称功能于一体的智能设备。该设备基于STM32单片机进行设计和开发,结合了电子秤的重量测量功能和蓝牙通信功能,能够通过蓝牙将测得的重量数据传输到智能手机、平板电脑等移动设备上进行显示和存储。 在硬件设计方面,智能蓝牙电子秤采用了STM32系列单片机作为主控芯片,并使用AD模数转换器来进行重量数据的采集。设计中需要考虑到秤台的材质和结构,选用合适的传感器来实现重量的测量,同时还需要一个合适的显示模块来显示测量结果。蓝牙模块负责与外部设备进行无线通信,并传输测量数据。 在软件开发方面,首先需要编写固件程序来控制STM32的各个模块和进行重量数据的采集和处理。可以利用STM32提供的开发工具和库函数进行开发,编写相应的驱动程序和算法。同时,需要编写蓝牙通信相关的代码,实现与移动设备的连接和数据传输。在移动设备上,可以开发相应的应用程序,接收和解析蓝牙传输的数据,并进行显示和存储。 整个设计过程中,需要进行电路设计、PCB布局及焊接、固件编程、调试等多个环节。同时,也需要进行严格的测试和验证,确保设备的准确和可靠性。最终,设计完成后,还可以根据需求进行功能扩展,如添加温湿度传感器、数据存储等功能模块,实现更加智能化的应用。 总的来说,基于STM32的智能蓝牙电子秤设计需要一定的硬件和软件开发能力,同时需要充分考虑到电子秤和蓝牙通信的特性和要求,以确保设计的稳定性和可用性。 ### 回答3: 基于STM32的智能蓝牙电子秤设计是一种使用STM32微控制器开发的电子秤产品。该设计通过集成蓝牙模块,可以方便地将测量结果传输到移动设备,实现了智能化的功能。 在这个设计中,首先需要进行硬件的设计和连接。设计采用STM32微控制器作为处理器,利用其丰富的接口和功能,可以实现测量传感器的数据采集、数据处理和控制功能。除此之外,还需要添加蓝牙模块以实现与移动设备的通信。根据具体需求,还可以添加LCD显示屏、按键、背光等外设。 其次,需要编写嵌入式软件程序。在程序中,需要使用相应的编程语言,如C语言,来编写各种功能的代码。核心代码包括测量传感器的数据采集和处理、蓝牙模块的通信和数据传输等等。此外,还需要为用户提供界面友好的操作界面,使用户可以方便地操作和查看测量结果。 最后,整个设计需要进行测试和调试。测试应包括硬件和软件的功能测试,确保电子秤的测量结果准确可靠,并且蓝牙通信功能正常。同时,还需要进行性能测试,以确保电子秤在长时间使用和不同环境下的稳定性和可靠性。 总结而言,基于STM32的智能蓝牙电子秤设计是一种通过利用STM32微控制器和蓝牙模块实现的电子秤产品。通过硬件设计、嵌入式软件编程和测试调试等过程,可以实现测量结果的即时传输和智能化操作,为用户提供更加便捷和智能的使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值