STM32项目分享:家庭环境监测系统

 目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板打样焊接图

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片: 

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1oi42117dp/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32的家庭环境监测系统。功能如下:

  1. 温湿度采集:使用DHT11温湿度传感器采集环境温湿度
  2. 烟雾浓度采集:通过MQ-2烟雾传感器采集环境烟雾浓度
  3. PM2.5浓度采集:通过粉尘传感器采集环境PM2.5浓度
  4. 二氧化碳浓度采集:通过CO2气敏传感器检测二氧化碳浓度
  5. 风扇控制:可自动模式下根据环境温度触发或手动模式下APP开闭
  6. 加湿器控制:可自动模式下根据环境湿度触发或手动模式下APP开闭
  7. 窗户:可自动模式下根据PM2.5浓度触发或手动模式下APP开闭
  8. OLED显示:将检测到的环境数据显示在oled屏幕上。
  9. 蜂鸣器报警:异常情况下本地蜂鸣器触发报警
  10. APP功能:使用机智云APP,包括功能有自动模式和手动模式切换,控制并显示风扇、加湿器和窗户状态,查看蜂鸣器报警状态,显示当前环境温湿度、烟雾浓度和PM2,5浓度信息

2.主要器件

  • STM32F103C8T6最小系统板
  • DHT11温湿度传感器
  • OLED显示屏(4针I2C协议)
  • WiFi模块(ESP8266-01s)
  • MQ-2烟雾浓度传感器
  • PM2.5模块
  • 28BYJ51步进电机
  • 5V风扇模块
  • 加湿器模块及驱动板
  • 继电器
  • 蜂鸣器
  • LED灯

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板打样焊接图

五、程序设计 

int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);OLED_Init();ADCX_Init();GP2Y_Init();MQ2_Init();DHT11_UserConfig();MOTOR_UserConfig();Key_Init();Relay_Init();Buzzer_Init();Timer2_Init(9,14398);uart2_init(9600);uart1_init(115200);GENERAL_TIM_Init();userInit();		//完成机智云初始赋值gizwitsInit();	//开辟一个环形缓冲区Delay_ms(500);gizwitsSetMode(WIFI_AIRLINK_MODE);IWDG_Init();	//初始化看门狗while (1){IWDG_ReloadCounter(); //重新加载计数值 喂狗		switch(Menu){case 1:	Menu1();//判断步进电机是否需要进行旋转if(Window_Flag_ON == 1){MOTOR_Direction_Angle(1,0,90,1);	//顺时针旋转90度MOTOR_STOP();Window_Flag_ON = 0;}if(Window_Flag_OFF == 1){MOTOR_Direction_Angle(0,0,90,1);	//逆时针旋转90度MOTOR_STOP();Window_Flag_OFF = 0;}break;case 2: OLED_Clear();Menu2();Menu = 3;//用于判断阈值数据有没有被更改old_Temp_value = Temp_value;old_Humi_value = Humi_value;old_Smog_value = Smog_value;old_PM25_value = PM25_value;break;case 3: //显示传感器阈值OLED_ShowNum(1,13,Temp_value,2);OLED_ShowNum(2,13,Humi_value,2);OLED_ShowNum(3,13,Smog_value,4);OLED_ShowNum(4,13,PM25_value,4);//进行阈值选择if(KeyNum == 1){KeyNum = 0;value_Option_Num++;if(value_Option_Num > 4){value_Option_Num = 1;}}//显示选择标识符“>”OLED_Option(value_Option_Num);//检测阈值数值的调节switch(value_Option_Num){case 1: if(KeyNum == 3){KeyNum = 0;Temp_value++;if(Temp_value >= 100){Temp_value = 1;}}if(KeyNum == 4){KeyNum = 0;Temp_value--;if(Temp_value >= 100){Temp_value = 99;}}break;case 2: if(KeyNum == 3){KeyNum = 0;Humi_value++;if(Humi_value >= 100){Humi_value = 1;}}if(KeyNum == 4){KeyNum = 0;Humi_value--;if(Humi_value >= 100){Humi_value = 99;}}break;case 3: if(KeyNum == 3){KeyNum = 0;Smog_value++;if(Smog_value >= 501){Smog_value = 1;}}if(KeyNum == 4){KeyNum = 0;Smog_value--;if(Smog_value >= 5001){Smog_value = 500;}}break;case 4: if(KeyNum == 3){KeyNum = 0;PM25_value++;if(PM25_value >= 501){PM25_value = 1;}}if(KeyNum == 4){KeyNum = 0;PM25_value--;if(PM25_value >= 501){PM25_value = 500;}									}break;}//退出阈值设置界面if(KeyNum == 2){KeyNum = 0;//当阈值数据被更改后,才会写入FLASH中if((old_Temp_value != Temp_value) || (old_Humi_value != Humi_value) || (old_Smog_value != Smog_value) || (old_PM25_value != PM25_value)){//写入传感器阈值数据FLASH_W(FLASH_START_ADDR,Temp_value,Humi_value,Smog_value,PM25_value);				}Menu = 1;	//回到主菜单OLED_Clear();	//清屏}break;			}userHandle();	//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云					}
}

六、实验效果 

七、资料内容

项目分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/32202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集群初始配置

假设已经有三台或多台 Linux,可以是虚拟机或真实设备。如果希望使用这些 Linux 组成一个集群,并在上面运行一些分布式系统,可能需要如下操作。 1 设置静态IP 输入命令route -n打印路由表,可以查看网关地址。图形界面操作&#x…

跌倒识别:守护公共安全的AI技术应用场景-免费API调用

随着科技的不断进步,人工智能在各个领域的应用日益广泛,其中在公共安全领域,智能跌倒识别系统正逐渐成为守护人们安全的重要工具。本文将分享智能跌倒识别系统在不同场景下的应用及其重要性。 产品在线体验地址-API调用或本地化部署 AI算法模…

【Golang - 90天从新手到大师】Day02 - 基本语法

系列文章合集 Golang - 90天从新手到大师 变量和常量 变量声明 标准声明 var name type批量声明 var (name1 type1name2 type2... )声明时初始化 var name type value类型推导 var name value短变量声明 name : value匿名声明 在使用多重赋值时,如果想要…

【第一性原理】邓巴数字

这里写自定义目录标题 什么是邓巴数字邓巴数背后的科学历史上各个组织的人数与邓巴数字的关系在人类进化中的意义现代社会中邓巴数字的体现邓巴数字的意义其他与沟通相关的数据注意事项结论参考 罗宾邓巴教授生于1947年,进化心理学家,牛津大学教授&#…

[信号与系统]关于LTI系统的转换方程、拉普拉斯变换和z变换

前言 本文还是作为前置知识。 LTI系统的传递函数 LTI系统的传递函数 H ( z ) H(z) H(z) 是输出信号的z变换 Y ( z ) Y(z) Y(z) 与输入信号的z变换 X ( z ) X(z) X(z) 的比值: H ( z ) Y ( z ) X ( z ) H(z) \frac{Y(z)}{X(z)} H(z)X(z)Y(z)​ 多项式比值表…

C++之提高篇

1.标准输入输出流 cin与cout的使用,就不多说了,说一个有关保留小数位数的操作,使用ostream对象的precision()方法,表达的意思是数字总共有几位,注意,此时是包括整数部分的&#xff…

OpenAI策略:指令层级系统让大模型免于恶意攻击

现代的大模型(LLMs)不再仅仅是简单的自动完成系统,它们有潜力赋能各种代理应用,如网页代理、电子邮件秘书、虚拟助手等。然而,这些应用广泛部署的一个主要风险是敌手可能诱使模型执行不安全或灾难性的行动,…

使用 Python 进行测试(7)...until you make it

总结 我很懒,我想用最少的行动实现目标,例如生成测试数据。我们可以: 使用随机种子保证数据的一致性。 >>> random.seed(769876987698698) >>> [random.randint(0, 10) for _ in range(10)] [10, 9, 1, 9, 10, 6, 5, 10…

计算机组成原理 | 硬件电路整理

计算机组成原理 | 硬件电路整理 桶形移位器原理图 全加器逻辑框图 多位可控加减法电路逻辑框图 可级联的4位先行进位电路 4位快速加法器 16位组内并行、组间并行加法器 实现原码一位乘法的逻辑框图 补码一位乘法的逻辑框图 无符号数阵列乘法器 原码不恢复余数法硬件逻辑框图 基…

vue第一次页面加载会触发那几个钩子函数?

在 Vue.js 中,当页面或组件第一次加载时,会触发一系列的生命周期钩子。特别是关于首次加载的,主要的几个钩子函数是 beforeCreate、created、beforeMount、mounted。 以下是一个简单的 Vue 组件示例,其中包含了这些钩子函数&…

Matlab 单目相机标定(内置函数,棋盘格)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 具体的标定原理可以参阅之前的博客Matlab 单目相机标定(内置函数),这里实现对棋盘格数据的标定过程。 二、实现代码 getCameraCorners.m function [camCorners, usedImIdx, imCheckerboard] = getCameraCorners(…

规模弹性: 管理谷歌的TPUv4机器学习超级计算机(二)

本文为翻译文章,原文为: Resiliency at Scale: Managing Google’sTPUv4 Machine Learning Supercomputer。 由于字数过长,文章分为两期发布,本片涵盖原文后半部分4~9节,前三章节请参考文章:规…

Mybatis plus:IService接口

一、介绍 在MybatisPlus框架中,IService接口扮演着重要的角色。作为一个通用的服务接口,IService定义了一系列方法,包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。 IService 接口是一个泛型接…

Springboot应用的信创适配-补充

Springboot应用的信创适配-CSDN博客 因为篇幅限制,这里补全Spring信创适配、数据库信创适配、Redis信创适配、消息队列信创适配等四个章节。 Springboot应用的信创适配 Springboot应用的信创适配,如上图所示需要适配的很多,从硬件、操作系统、…

Linux中文件常用的压缩与解压

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

大模型Transformer讲解

文章目录 1. Transformer 原理1.1 注意力机制 (Attention Mechanism)1.2 多头注意力 (Multi-Head Attention) 2. Transformer 设计2.1 编码器 (Encoder)2.2 解码器 (Decoder) 3. Transformer 应用3.1 自然语言处理 (NLP)3.2 计算机视觉 (Computer Vision) 4. Transformer 优点和…

Android 判断手机桌面是否已经存在App的快捷方式

我们需要在桌面添加快捷方式的时候,为了优化体验,有时候需要判断桌面上是否已经存在快捷方式。 经过自己探索整理,代码如下: /*** 判断桌面是否已添加快捷方式*/fun hasShortcut(context: Context): Boolean {try {var result f…

基于AT89C52单片机的温度报警系统

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89456321?spm=1001.2014.3001.5503 仿真构造:AT89C52+DS18B20温度模块+三按键+蜂鸣器+四位数码管显示+电源模块。 压缩包构造:源码+仿真图+设计文档+原理图+开题文档+元件…

Java宝藏实验资源库(3)类

一、实验目的 理解面向对象程序的基本概念。掌握类的继承的实现机制。熟悉类中成员的访问控制方法。熟悉ArrayList类的使用。 二、实验内容、过程及结果 *9.5Programming Exerc ise the GregorianCal endar class) Java API has the GregorianCalendar class in the java. uti…

民生银行北京分行金融科技校招面试记录

本文介绍2024届春招中,中国民生银行下属北京分行的金融科技岗位1场面试的基本情况、提问问题等。 2024年04月投递了中国民生银行下属北京分行的金融科技岗位,暂时不清楚所在部门。目前完成了一面与终面,在这里记录一下面试的相关经历。 首先&…