STM32一氧化碳报警

冬天家里需要生火,难免会有一氧化碳产生,为了安全做一个简单的装置

某宝买了几个探头

在这里插入图片描述

也不知道准确不准确

开始制作

没有电路图自己飞线接的。。。

使用ADC1的通道0、1;采集QM2或QM9的模拟信号 PA0,PA1
模拟I2C显示0.96寸液晶显示PA9,PA10
蜂鸣器使用低电平有效PB8
按键全部是低有效
大按键PB15
小按键PB4、PB5、PB6

在这里插入图片描述
探头供电5V,蜂鸣器供电3.3V

编写程序

main.c

#include "delay.h"
#include "sys.h"
#include "adc.h"
#include "key.h"
#include "oled.h"
#include "beep.h"
#include "rtc.h" 	
#include "bmp.h"
u8 co;
u8 yw;
 u8 moni[2];
u8 k1=0;
u8 k2=0;
u8 k3=0;
u8 k4=0;
u8 y=0;
u8 t=0;
u8 nian,yue,ri,shi,fen,miao;
u16 temp;
u8 timnum=0;
u8 timdat_flang=0;
u16 uu=0;
u8 len=0;
u8 lend=0;
u8 boond=0;
 int main(void)
{ 
	u16 ti=200;
	 delay_init();
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	 key_init();
	 BEEP_Init();
	 ADC1_Init();
	 OLED_Init(); 
	 OLED_Clear();
	while(RTC_Init())		//RTC初始化	,一定要初始化成功
	{ 
		OLED_ShowString(5,7,"RTC ERROR!",8);	
		delay_ms(800);
		OLED_ShowString(6,7,"RTC Trying...",8);	
	}	
	OLED_ShowString(0,1,"Welcome to air !",8);
	delay_ms(1000);
	OLED_Clear();
	OLED_ShowString(0,1,"Loading.  ",8);
	delay_ms(1000);
	OLED_ShowString(0,1,"Loading.. ",8);
	delay_ms(1000);
	OLED_ShowString(0,1,"Loading...",8);
	delay_ms(1000);
	
	OLED_Clear();
	OLED_ShowString(0,0,"MQ-2 Loading...",8);
	delay_ms(1000);
	OLED_ShowString(0,1,"MQ-9 Loading...",8);
	delay_ms(1000);
	OLED_ShowString(0,2,"Key Loading...",8);
	delay_ms(1000);
	OLED_ShowString(0,3,"Loading.  ",8);
	delay_ms(1000);
	OLED_ShowString(0,3,"Loading.. ",8);
	delay_ms(1000);
	OLED_ShowString(0,3,"Loading...",8);
	delay_ms(1000);
	OLED_ShowString(0,4,"Welcome  *_* ",8);
	delay_ms(1000);
	GPIO_ResetBits(GPIOB,GPIO_Pin_9);
	delay_ms(50);
	GPIO_SetBits(GPIOB,GPIO_Pin_9);
	OLED_Clear();
	//shezhishijian();	
		OLED_ShowCHinese(0+11,0,0);//
		OLED_ShowCHinese(18+11,0,1);//
		OLED_ShowCHinese(36+11,0,2);//
		OLED_ShowCHinese(54+11,0,3);//
		OLED_ShowCHinese(72+11,0,4);//
		OLED_ShowCHinese(90+11,0,5);//
	
		OLED_ShowCHinese(0,3,10);//
		OLED_ShowCHinese(18,3,11);//
		OLED_ShowCHinese(36,3,12);//
		OLED_ShowCHinese(54,3,13);//
		OLED_ShowCHinese(72,3,14);//
	
		OLED_ShowCHinese(0,5,6);//
		OLED_ShowCHinese(18,5,7);//
		OLED_ShowCHinese(36,5,8);//
		OLED_ShowCHinese(54,5,9);//
		OLED_ShowCHinese(72,5,14);//
		OLED_ShowString(0,7,"MQ-2:",8);
		OLED_ShowString(68,7,"MQ-9:",8);

			OLED_ShowString(102,3,"PPb",16);
			OLED_ShowString(102,5,"PPb",16);
			
		PWR_BackupAccessCmd(ENABLE);
		temp=BKP_ReadBackupRegister(BKP_DR2);
		if(BKP_ReadBackupRegister(BKP_DR3)!=0x5555)
		{
			BKP_WriteBackupRegister(BKP_DR3,0x5555);
			co=80;
			yw=90;
		}
		else
		{
			co=(temp>>8)&0xff;
			yw=temp&0xff;
		}

	//OLED_DrawBMP(30,2,38,3,BMP2);
		
	 while(1)
	 {
		 Get_ADC_dat();
		 KEY_Scan();
		 shijian();
		 if(t>100)
		 {
		 OLED_ShowNum(77,3,moni[0],3,16);
		 OLED_ShowNum(77,5,moni[1],3,16);
			 t=0;
		 }

		 t++;
		 uu++;
		 
		 if(uu>65534)
		 {
			 y=0;
			 
			 uu=0;
		 }

		 if((moni[0]>co)|(moni[1]>yw))
		 {
			
				 if(y==0)
				 {
					 while(1)
					 {
						 GPIO_ResetBits(GPIOB,GPIO_Pin_9);
						 delay_ms(ti);
						 GPIO_SetBits(GPIOB,GPIO_Pin_9);
						 delay_ms(ti);
						 KEY_Scan();
						 Get_ADC_dat();
						 OLED_ShowNum(37,7,co,3,14);OLED_ShowNum(105,7,yw,3,14);
						 if((moni[0]>(co+20))|(moni[1]>(yw+20)))
							 {
								 ti=100;
							 }
							 else
							 {
								 ti=200;
							 }
						OLED_ShowNum(77,3,moni[0],3,16);
						OLED_ShowNum(77,5,moni[1],3,16);
					  if((moni[0]<co)&(moni[1]<yw))
						 {
							 break;
							 y=0;
						 }
						if(k1==1)
						 {
							 y=1;
							 k1=0;
							 break;
						 }
						}	 
				 }
			 } 
			 
		key_mode();			 
//******************************************
					 if((moni[0]<co)&(moni[1]<yw))
									 {
										 y=0;
									   k1=0;
										  
									 }
	k1=0;
	temp=co;
				temp<<=8;
				temp|=yw;

				PWR_BackupAccessCmd(ENABLE);
											 
				BKP_WriteBackupRegister(BKP_DR2,temp); //BKP_DR1~BKP_DR42

	}
}

一顿瞎写,想提意见的下载附件源码

运行效果:
在这里插入图片描述

源码下载地址:STM32的一氧化碳检测报警装置

基于STM32一氧化碳报警器的设计可以参考以下步骤和方法: 1. 硬件设计: 基于STM32一氧化碳报警器需要使用ADC通道来采集一氧化碳的模拟信号。可以使用PA0或PA1来连接传感器模块,通过模拟输入的方式获取一氧化碳浓度的数据。同时,可以使用PA9和PA10来连接0.96寸液晶显示屏,用于显示报警信息。另外,可以使用PB8来控制蜂鸣器,当一氧化碳浓度超过设定阈值时触发蜂鸣器报警。按键部分可以使用PB15作为大按键,PB4、PB5、PB6作为小按键,用于设置报警阈值等参数。 2. 软件设计: 在STM32的开发环境中,可以使用CubeMX进行初始化配置和代码生成。根据硬件设计的要求,选择对应的引脚并配置为模拟输入、GPIO输出等功能。编写代码来初始化ADC、GPIO和中断等功能,并编写相应的中断处理函数来处理按键操作。在主循环中,采集一氧化碳浓度的模拟信号,并进行阈值比较,当超过设定的阈值时触发报警逻辑,控制蜂鸣器发出警报声,并在液晶显示屏上显示相应的报警信息。 3. 测试与调试: 完成软硬件的设计后,需要进行测试与调试。首先,可以使用示波器或万用表等工具来验证ADC的采集数据是否正确。然后,通过按下按键来测试报警逻辑是否正常工作。在测试过程中,可以先设置较低的一氧化碳浓度阈值,然后用一氧化碳气体模块产生一定浓度的气体,观察蜂鸣器是否正常响起,并且液晶显示屏上是否显示相应的报警信息。根据测试结果进行调试和优化,确保一氧化碳报警器的稳定性和可靠性。 总结:基于STM32一氧化碳报警器的设计需要考虑硬件和软件两个方面。硬件设计包括选择合适的引脚和元件,并连接传感器、液晶显示屏和蜂鸣器等模块。软件设计则需要初始化和配置相关外设,并编写相应的逻辑代码来实现一氧化碳浓度的采集和报警逻辑。完成设计后,进行测试和调试,确保一氧化碳报警器能够正常工作。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [毕设项目:基于zigbee和stm32的智能家居系统,上位机使用Qt编写.zip](https://download.csdn.net/download/qq_35831906/88258947)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [STM32一氧化碳报警](https://blog.csdn.net/u014229687/article/details/87873502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未标题系列之单片机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值