基于STM32的天然气煤气检测报警仿真设计(仿真+程序+讲解)

基于STM32的天然气煤气检测报警仿真设计


仿真图proteus 8.9

程序编译器:keil 5

编程语言:C语言

设计编号:C0081

演示视频

基于STM32的天然气煤气可燃气体检测报警仿真设计

1.主要功能

功能说明:

1、以STM32单片机为控制核心设计可燃气体(天然气 煤气)检测报警设计;

2、通过液晶屏LCD1602显示气体浓度;

3、可以通过拨动开关设置自动或者手动开启风扇,手动模式指示灯亮,自动模式下模式指示灯灭。

4、手动模式通过按键控制风扇开关。自动模式下检测到气体浓度高于2.0mg/L风扇自动启动。

5、监测到气体浓度高于2.0mg/L蜂鸣器报警。

主要硬件设备:STM32F103单片机

以下为本设计资料展示:

2.仿真

整体设计方案

本实验的目的是利用STM32单片机的先进数字模拟转换器(ADC)、通用输入输出(GPIO)和定时器等资源,将软件和硬件有效地结合在一起,以实现对输入模拟天然气煤气传感器的AD值的准确识别,并通过1602液晶显示屏(LCD1602)正确显示相关数据。此外,我们还希望系统能够根据预设的报警值,通过蜂鸣器和风扇等外设进行气体浓度的报警。

在这个实验中,值得注意的是,Proteus软件并没有内置的天然气煤气等有害气体的浓度传感器。因此,为了模拟可燃气体浓度的变化,我们使用了滑动变阻器。虽然这种方式不能直接应用于实际硬件设计,但是对于理解和测试算法的基本行为是非常有用的。对于需要进行实物设计的用户,建议根据实际传感器进行相应的调试和修改。

总的来说,这个实验提供了一个基础的框架,展示了如何利用STM32单片机结合ADC、GPIO和定时器等资源,实现对模拟天然气煤气传感器信号的采集和处理,并通过LCD1602显示和报警装置进行展示和报警。虽然不能直接用于实物设计,但对于理解和掌握相关技术的基本原理和应用,具有很大的价值。

本测试如下所示:

仿真运行情况:

开始仿真后LCD1602实时显示检测到的气体浓度,可以通过滑动变阻器改变测量值。可通过开关选择风扇的运行模式。如果开关闭合,风扇是自动模式工作,气体浓度高于报警值时,风扇启动,低于报警值的时候,风扇不转动。如果风扇是手动模式,通过按键控制风扇的开关。蜂鸣器报警电路在气体浓度高于报警值时启动,有嘟嘟报警声,低于不启动。

下图检测到气体浓度是1.5mg/L,低于报警值2.0mg/L,风扇和蜂鸣器电路不工作。

img

下图检测到气体浓度是2.0mg/L,大于等于报警值,蜂鸣器报警,风扇转动模拟排气通风。

img

3. 程序

程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序是固件库版本编写的,有注释可以结合讲解理解。
mian.c代码

#include "stm32f10x.h"
#include "bsp-lcd1602.h"
#include "delay.h"
#include "sys.h"
#include "adc.h"
#define LED PAout(3)
#define BEEP PAout(4)
#define KEY1 PAin(8)
#define KEY2 PAin(9)
#define KEY3 PAin(10)
void LED_Init(void)
{
    
    
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //使能P端口时钟
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;				 //LED0 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 GPIO_SetBits(GPIOA,GPIO_Pin_3);						 //输出高
 GPIO_SetBits(GPIOA,GPIO_Pin_4);						 //输出高

}
void KEY_Init(void)
{
    
    
	GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;	//上拉输入
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
}
int main(void)
{
    
    
int a,b,c,d;
	float temp;
	int count;
	delay_init();	    	 //延时函数初始化	  	
	LCD1602_Init();
  ADC1_GPIO_Config();		
  ADC_Config();  
	LCD1602_ShowStr(2,0,"Qiti=0.0mg/L",13);
	LED_Init();		//风扇控制引脚
	KEY_Init();		//按键初始化
	while(1)
	{
    
    
		count++;
		if(count>5000){
    
    //用于计数,防止系统执行转换太频繁
			count = 0;
			b=ADC_GetConversionValue(ADC1);//获取ADC的值
			temp=(float)b*(3.4/4096);//换算ADC的值
			a=temp/1;
			c=temp*10;
			d=c%10;
			LCD_ShowNum(7,0,a);
			LCD_ShowNum(9,0,d);//显示检测到的AD值

				if(KEY3==0){
    
    //按键控制
					if(temp>2) LED=1;//LED1是风扇控制引脚,1打开 0关闭
					else LED=0;
				}	else{
    
    
					if(KEY1==0) LED=1;
					if(KEY2==0) LED=0;
				}	
			if(temp>2) BEEP=0;//蜂鸣器报警值判断,BEEP==0蜂鸣器报警 1蜂鸣器关闭
				else BEEP=1;	
				delay_ms(10);
		}



	}
}




img

4. 资料清单&下载链接

0、常见使用问题及解决方法–必读!!!!

1、源程序

2、仿真图

3、功能要求

4、讲解视频

Altium Designer 软件资料

KEIL软件资料

Proteus软件资料

单片机学习资料

答辩技巧

设计报告常用描述

鼠标双击打开查找更多51 STM32单片机课程毕业设计.url

img

资料下载链接(可点击):

猜你喜欢

转载自blog.csdn.net/weixin_52733843/article/details/132503733