【毕业设计】基于单片机的火灾报警系统 -stm32 单片机物联网_Mdc_stdio的博客-程序员秘密

技术标签: stm32  毕业设计  物联网  火灾报警系统  单片机  


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目


大家可用于 课程设计 或 毕业设计


单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


2 设计方案

1、MCU采用stm32;

2、使用MQ2传感器采集烟雾等有害气体,当检测到有害气体时发声报警,并可以邮件通知用户;

3、使用DS18B20传感器检测环境温度和火焰;

4、采用OLED12864显示屏进行数据显示;

5、可设置传感器阈值,修改检测灵敏度;

3 实现效果

正常状态加不触发报警
在这里插入图片描述

当检测烟雾和明火时触发报警

在这里插入图片描述

4 外围器件

4.1 DS18B20

在这里插入图片描述
单片机采集到的数据
在这里插入图片描述

4.2 MQ-2传感器

MQ-2传感器对可燃气、烟雾等气体灵敏度高,基于MQ-2的烟雾传感器模块通过电路设计,提供了两种输出方式:

数字量输出:通过板载电位器设定浓度阈值,当检测到环境气体浓度超过阈值时,通过数字引脚DO输出低电平。
模拟量输出:浓度越高,AO引脚输出的电压值越高,通过ADC采集的模拟值越高。

在这里插入图片描述
单片机采集数据如下:
在这里插入图片描述

5 部分实现代码

#include "stm32f10x_adc.h"
#include "stdlib.h"
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"
#include "usart.h"
#include "LED.h"
#include "KEY.h"
#include "ADC.h"
#include "timer.h"
#include "HUO.h"


extern u16 k1,k2;
extern u8 an;
int main(void)
{
    
	u8 i = 0,t = 0,key_value = 0,fasong = 0,zhuangtai = 0;
	u16 adcx = 0;
	u16 adcx_index = 300;
	u8 huo = 1;
	u8 huo_flag = 0;
	u8 string[10] = {
    0};
	NVIC_Configuration();
	delay_init();
	uart_init(115200);	 	//���ڳ�ʼ��Ϊ115200
	
	LED_Init();
	KEY_Init();
	HUO_Init();
	Adc_Init();
	OLED_Init();
	OLED_Clear();
	OLED_ColorTurn(0);//0������ʾ��1 ��ɫ��ʾ
	OLED_DisplayTurn(0);//0������ʾ 1 ��Ļ��ת��ʾ
	
	for(i = 0;i<8;i++)
	OLED_ShowChinese(i*16,16,i,16);//���ܻ��ֱ���ϵͳ
	OLED_Refresh();//������ʾ��OLED	
	delay_ms(999);delay_ms(999);	
	
	OLED_Clear();	
//0
	for(i = 0;i<6;i++)//����ɼ�ֵ��
	OLED_ShowChinese(i*16,0,i+18,16);
//16
	for(i = 0;i<2;i++)//����
	OLED_ShowChinese(i*16,16,i+18,16);
	OLED_ShowChinese(16*2,16,26,16);//��
	for(i = 0;i<2;i++)//ֵ��
	OLED_ShowChinese(i*16+16*3,16,i+22,16);
	sprintf((char *)string,"%4d",adcx_index);//0300
	OLED_ShowString(88,16,string,16);
//32
	for(i = 0;i<2;i++)//����
	OLED_ShowChinese(i*16,32,i+24,16);
	for(i = 0;i<2;i++)//ֵ��
	OLED_ShowChinese(i*16+16+16,32,i+22,16);
	for(i = 0;i<2;i++)//����
	OLED_ShowChinese(i*16+16*4+8,32,i+27,16);
	OLED_ShowChinese(16*6+8,32,23,16);//��
	OLED_ShowChinese(16*7,32,30,16);//��
//48
	for(i = 0;i<2;i++)//��ȫ
	OLED_ShowChinese(i*16+16*3,48,i+33,16);

	OLED_Refresh();//������ʾ��OLED	
	
	//TIM3_Int_Init(99,7199);//10Khz�ļ���Ƶ�ʣ�������100Ϊ10ms  
	
	while(1)
	{
    
		key_value = KEY_Scan(0);
		switch (key_value)
		{
    
			case KEY0_PRES:
				if(adcx_index>100)adcx_index-=200;else adcx_index=500;
				sprintf((char *)string,"%4d",adcx_index);
				OLED_ShowString(88,16,string,16);
				break;
			case KEY1_PRES:
				huo_flag =! huo_flag;
				OLED_ShowChinese(16*7,32,huo_flag?29:30,16);//��/��
				break;
			case KEY2_PRES:
				fasong = !fasong;
				if(fasong == 1){
    LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(50);}
				else {
    LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(200);LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(50);}
				break;
			default:
				break;
		}
		
		t++;
		if(t==10)
		{
    
			adcx=Get_Adc_Average(ADC_Channel_1,10);
			sprintf((char *)string,"%4d",adcx);
			OLED_ShowString(88,0,string,16);
			huo = HUO_Scan();
			OLED_ShowNum(56,32,huo,1,16);
			
			if(huo_flag == 0)
			{
    
				if(adcx <= adcx_index)
				{
    
					LED0 = 0;
					for(i = 0;i<2;i++)//����
					OLED_ShowChinese(i*16+16*3,48,i+31,16);
					zhuangtai = 1;
				}
				else
				{
    
					LED0 = 1;
					for(i = 0;i<2;i++)//��ȫ
					OLED_ShowChinese(i*16+16*3,48,i+33,16);
					zhuangtai = 0;
				}
			}
			else
			{
    
				if((adcx <= adcx_index)&&huo==1)
				{
    
					LED0 = 0;
					for(i = 0;i<2;i++)//����
					OLED_ShowChinese(i*16+16*3,48,i+31,16);
					zhuangtai = 1;
				}
				else
				{
    
					LED0 = 1;
					for(i = 0;i<2;i++)//��ȫ
					OLED_ShowChinese(i*16+16*3,48,i+33,16);
					zhuangtai = 0;
				}
			}
			if(fasong == 1)zhuangtai?printf("1"):printf("0");//printf("����\r\n"):printf("��ȫ\r\n");
			OLED_Refresh();
			t=0;
		}
		delay_ms(20);	
		
	}
}





单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


6 最后

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_71572576/article/details/125691450

智能推荐

java resource ClassPathResource_classpathresource java_xiaoliuliu2050的博客-程序员秘密

spring 中定义了资源接口,部分类关系如下:这个类包含加载的path 和类加载器classloader  还有class&amp;lt;?&amp;gt;  用来加载path 的类对象  三个属性1 构造函数:初始化 path 和classloader public ClassPathResource(String path, ClassLoader classLoader) { As...

kubeadm 安装1.18.3 和1.17.2版本k8s_安装 kubeadm 哪个版本好_开开136的博客-程序员秘密

一、系统初始化cat &gt; init.sh &lt;&lt; EOF#!/bin/bash# 配置主机名解析init_hosts(){cat &gt;&gt; /etc/hosts &lt;&lt; EOF192.168.99.34 master192.168.99.35 node1192.168.99.36 node2EOFecho -e "\033[32m [主机解析] ==&gt; OK \033[0m"}init_base(){ yum install -y

Java中各种引用(Reference)解析_ywb201314的博客-程序员秘密

目录1,引用类型 2, FinalReference 2.1, Finalizer 3, SoftReference 4, WeakReference 5, PhantomReference 6, ReferenceQueue 7,Cleaner 8, Reference 引用实例的几个状态 重点源码解析 总结1,引用类型java.lang.ref整体包结构类型 对应类 特征 强引用 强引用的对象绝对不会被gc回收 软引

mysql5.7安装与配置_mysql 5.7 用安装依赖环境吗_笨小葱的博客-程序员秘密

Step1: 检测系统是否自带安装mysql# yum list installed | grep mysqlStep2: 删除系统自带的mysql及其依赖命令:# yum -y remove mysql-libs.x86_64    1 查看Linux发行版本[[email protected] ~]# cat /etc/redhat-releaseCentOS Linux

用kodexplorer可道云在本地搭建私有云_kodexplorer安卓本地搭_数据拾光者的博客-程序员秘密

https://jingyan.baidu.com/article/bea41d43b5d9ffb4c41be65a.htmlPort 80 in use by "Unable to open process" with PID 4!net stop was /y   即可搞定

win10别人ping不通我的电脑解决方案_win10电脑ping不通_couragehope的博客-程序员秘密

两种方法:1、关掉自带防火墙;(不建议,毕竟防火墙最后一道屏障)2、如图 ICMPv4 两个都点启用。 疑问:文件和打印机共享是什么?启用这个是否有什么风险呢?https://blog.csdn.net/lubin100/article/details/81233539...

随便推点

供应商主数据中定义的合伙人角色无法自动带出(Partner Role that defined in vendor master can’t be found out automatically)_Welbin的博客-程序员秘密

问题:在供应商主数据中定义好Partner Role之后,在创建采购订单的过程中,无法自动带出来。 现象:创建采购订单时输入基本的表头数据(供应商,采购组织,采购组,公司代码)之后按回车,可以自动带出供应商主数据中定义好的Partner Role。但如果输入ITEM数据之后再按回车,则只能带出VN。 原因:供应商主数据种的Partner Role除了VN之外其余均定义在Prucha

hdu 1466计算直线的交点数 (简单dp)_Even的博客-程序员秘密

http://acm.hdu.edu.cn/showproblem.php?pid=1466 题意不难解,第一道dp题。来自hdu的pptn条直线互不平行且无三线共点的最多交点数max=1+2+……(n-1)=n(n-1)/2,所以n=20的话,最大的交点数是190本题是求有多少种交点数:容易列举出N=1,2,3的情况:00,10,2,3如果已知的情况,我们来分

如何用CXF方式搭建webService接口以及用SoapUI进行测试_codeFamerZhang的博客-程序员秘密

这是我的第一篇博客,话说好久以前就想写博客了,但是之前由于种种原因一直没有开始写,现在终于要开始了٩(๑❛ᴗ❛๑)۶今年3月底离职从北京回到了老家,在经过10天的休息和找工作后,找到了新的东家,继续在自己的家乡踏上了JAVA程序猿之路。到了新公司,我接到的第一个项目是SpringMVC+Spring+Hibernate开发的,在熟悉了两天这个项目后,头儿直接让我写一个供外部调用的webSe...

javascript输出换行_js中输出换行_浪里狼的博客-程序员秘密

document.write(&quot;内容&quot;+&quot;&amp;lt;br&amp;gt;&quot;) 使用“&amp;lt;br&amp;gt;”来实现换行

Android开发笔记-JDK与adb/android环境变量配置完整教程_心态决定状态的博客-程序员秘密

在这篇文章中,主要解决一个在Java或者Android开发中第一步需要解决的问题,那就是环境变量的配置。由于这部分在网上有很多教程,参差不齐。我这里主要是对JDK与adb/android两者的环境变量进行汇总,并且针对每一类配置提供几种不同的实现方式。【1】JDK环境变量配置       JDK的安装目录为:C:\Program Files (x86)\Java\jdk1.7.0_

vm虚拟机自动适配窗口大小_vmware虚拟机适配客户机大小__伍六七_的博客-程序员秘密

vm自动适配窗口大小选项无效时,可以尝试一下这样做:在VMware 的官方文档和社区的支持当中,VMware 都明确的指出了建议使用Open VM Tools.前提是你的Linux 发行版支持 Open VM Tools,可以去vm的官方文档看看.安装步骤安装开源的 open-vm-toolssudo apt-get install open-vm-tools然后再安装sudo apt-get install open-vm*然后reboot重启或者关机重启就好了,此时拖拽窗口就能

推荐文章

热门文章

相关标签