基于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显示和报警装置进行展示和报警。虽然不能直接用于实物设计,但对于理解和掌握相关技术的基本原理和应用,具有很大的价值。

本测试如下所示:

仿真运行情况:

Après avoir démarré la simulation, le LCD1602 affiche la concentration de gaz détectée en temps réel et la valeur mesurée peut être modifiée via le rhéostat coulissant. Le mode de fonctionnement du ventilateur peut être sélectionné via un interrupteur. Si l'interrupteur est fermé, le ventilateur fonctionne en mode automatique. Lorsque la concentration de gaz est supérieure à la valeur d'alarme, le ventilateur démarre. Lorsque la concentration de gaz est inférieure à la valeur d'alarme, le ventilateur ne tourne pas. Si le ventilateur est en mode manuel, contrôlez l'interrupteur du ventilateur en appuyant sur le bouton. Le circuit d'alarme sonore démarre lorsque la concentration de gaz est supérieure à la valeur d'alarme, et il y a un bip d'alarme, et il ne démarre pas lorsque la concentration de gaz est inférieure à la valeur d'alarme.

Dans l'image ci-dessous, la concentration de gaz détectée est de 1,5 mg/L, ce qui est inférieur à la valeur d'alarme de 2,0 mg/L. Le circuit du ventilateur et du buzzer ne fonctionne pas.

img

L'image ci-dessous détecte que la concentration de gaz est de 2,0 mg/L, ce qui est supérieur ou égal à la valeur d'alarme. L'alarme sonore retentit et le ventilateur tourne pour simuler une ventilation par aspiration.

img

3. Procédure

Le programme est ouvert avec la version keil5 mdk. Si vous rencontrez des problèmes pour l'ouvrir, vérifiez la version keil. Le programme est écrit dans la version de la bibliothèque du micrologiciel et certains commentaires peuvent être combinés avec l'explication et la compréhension.
code 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. Liste d'informations et lien de téléchargement

0. Problèmes d'utilisation courants et solutions – à lire absolument ! ! ! !

1. Programme source

2. Diagramme de simulation

3. Exigences fonctionnelles

4. Vidéo explicative

Informations sur le logiciel Altium Designer

Informations sur le logiciel KEIL

Informations sur le logiciel Proteus

Matériel d'apprentissage des microcontrôleurs

Compétences de défense

Descriptions courantes pour les rapports de conception

Double-cliquez sur la souris pour ouvrir et en savoir plus 51 STM32 Microcontroller Course Graduation Project.url

img

Lien de téléchargement des données (cliquable) :

Je suppose que tu aimes

Origine blog.csdn.net/weixin_52733843/article/details/132503733
conseillé
Classement