1、前言
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉小洪学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,小洪学长分享优质毕业设计项目,今天要分享的是基于STM32单片机室内温湿度光强采集检测报警系统
2、简介
基于STM32单片机室内温湿度光强采集检测报警系统
1、oled实时显示采集的温度、湿度、光照强度值
2、通过app设置温度、湿度、光照强度阈值
3、当检测到的温度、湿度、光照强度值大于设置的阈值时声光报警
3、组成
本设计由STM32F103C8T6单片机最小系统+温湿度传感器电路+oled显示电路+光照模块+按键电路+蜂鸣器报警电路+电源电路组成。
4、实现效果
屏幕实时显示当前温湿度和光照值
整体展示
5、设计原理
5.1温湿度传感器模块
DHT11温湿度检测模块是当下嵌入式系统开发中环境温湿度检测的主要测量模块,该模块独特的设计能够直接获取环境中的温度数据,该模块是数字温度数据获取方式,采集到的温湿度输出为电平信号。该检测模块体积较小,硬件的引脚开销低,对于外界的环境抗干扰性强。并且该模块能够封装成各种模块,方便多种工作场合的选择。该模块有三个引脚(电压连接引脚、数据传输引脚、接地引脚),该模块检测到数据后会把模拟数据转换位(8+8)位的数字信号进行传输,对于环境模拟数据能够快速进行获取,通过内置的数据存储单元,然后通过不同需求进行读取。该模块最主要的特点是能够采用单总线的接口,通过单传输引脚和微处理器进行双向通信。该模块的供电方式灵活,能够通过依赖电路的电源,不用独立提供电源。数据传输的分辨率能够进行配置灵活选择(9-12位)。温湿度检测模块也提供掉电保护功能,当系统掉电的时候,可以对测量分辨率、设置标志值进行保存。
实物图
5.2 STM32F103C8T6简介
- STM32系列处理器是意法半导体ST公司生产的一种基于ARM 7架构的32位、支持实时仿真和跟踪的微控制器。选择此款控制芯片是因为本系统设计并非追求成本的最低或更小的功耗,而是在实现本设计功能的前提下能够提供更丰富的接口和功能以便于设计实验系统各实验项目所需的外围扩展电路。此款控制芯片在完成单片机课程的学习后上手较为容易,在医疗器械中应用广泛,具有很好的学习、实验研究价值。
- 一、STM32的主要优点:
- (1)使用ARM最新的、先进架构的Cortex-M3内核
- (2) 优异的实时性能
- (3) 杰出的功耗控制
- (4) 出众及创新的外设
- (5) 最大程度的集成整合
- (6) 易于开发,可使产品快速将进入市场
- 二、STM32——最佳的平台选项
- 对于使用同一平台进行多个项目开发而言,STM32是最
- 佳的选择:
- (1) 从仅需少量的存储空间和管脚应用到需要更多的存储空间和管脚的应用
- (2) 从苛求性能的应用到电池供电的应用
- (3) 从简单而成本敏感的应用到高端应用
- (4) 全系列脚对脚、外设及软件的高度兼容性,给您带来全方位的灵活性。您可以在不必修改您原始框架及软件的条件下,将您的应用升级到需要更多存储空间或精简到使用更少存储空间/ 或改用不同的封装的规格。
- STM32F103C8T6单片机核心板接口电路图如下图所示。
STM32单片机核心板接口原理图
6、部分核心代码
uint8_t mytime=0;
int main(void)
{
delay_init();
uart1_init(115200);
DHT11_Init();//³õʼ»¯DHT11
MAXTEMP = 26; //ÉèÖñ¨¾¯Î¶ÈΪ30¡ã
MAXHUMI = 70;
MAXGY_value = 800;
GY_Init();
Single_Write_BH1750(0x01);
Single_Write_BH1750(0x01); //ʹÄÜ´«¸ÐÆ÷
Single_Write_BH1750(0x10); //H-·Ö±æÂÊģʽ
delay_ms(180);
Beep_Init();
key_Init();
YHGUI_Config();
YHGUI_DispString(0,0,"T:",16,1); //ÏÔʾ
YHGUI_DispString(30,0,"H:",16,1); //ÏÔʾ
YHGUI_DispString(60,0,"L:",16,1); //ÏÔʾ
YHGUI_DispString(100,0,"M:",16,1); //ÏÔʾ
YHGUI_DispString(0 ,16,"Temp:",16,1); //ÏÔʾ
YHGUI_DispString(64,16,"C",16,1); //ÏÔʾ
YHGUI_DispString(0, 32,"Humi:",16,1); //ÏÔʾ
YHGUI_DispString(64,32,"%",16,1); //ÏÔʾ
YHGUI_DispString(0,48,"L:",16,1); //ÏÔʾ
YHGUI_DispString(70,48,"lux",16,1); //ÏÔʾ