仿真圖proteus 8.9
程序編譯器:keil 5
編程語言:C語言
設(shè)計(jì)編號(hào):C0081
演示視頻
基于STM32的天然氣煤氣可燃?xì)怏w檢測(cè)報(bào)警仿真設(shè)計(jì)
1.主要功能
功能說明:
1、以STM32單片機(jī)為控制核心設(shè)計(jì)可燃?xì)怏w(天然氣 煤氣)檢測(cè)報(bào)警設(shè)計(jì);
2、通過液晶屏LCD1602顯示氣體濃度;
3、可以通過撥動(dòng)開關(guān)設(shè)置自動(dòng)或者手動(dòng)開啟風(fēng)扇,手動(dòng)模式指示燈亮,自動(dòng)模式下模式指示燈滅。
4、手動(dòng)模式通過按鍵控制風(fēng)扇開關(guān)。自動(dòng)模式下檢測(cè)到氣體濃度高于2.0mg/L風(fēng)扇自動(dòng)啟動(dòng)。
5、監(jiān)測(cè)到氣體濃度高于2.0mg/L蜂鳴器報(bào)警。
以下為本設(shè)計(jì)資料展示:
2.仿真
整體設(shè)計(jì)方案
本實(shí)驗(yàn)的目的是利用STM32單片機(jī)的先進(jìn)數(shù)字模擬轉(zhuǎn)換器(ADC)、通用輸入輸出(GPIO)和定時(shí)器等資源,將軟件和硬件有效地結(jié)合在一起,以實(shí)現(xiàn)對(duì)輸入模擬天然氣煤氣傳感器的AD值的準(zhǔn)確識(shí)別,并通過1602液晶顯示屏(LCD1602)正確顯示相關(guān)數(shù)據(jù)。此外,我們還希望系統(tǒng)能夠根據(jù)預(yù)設(shè)的報(bào)警值,通過蜂鳴器和風(fēng)扇等外設(shè)進(jìn)行氣體濃度的報(bào)警。
在這個(gè)實(shí)驗(yàn)中,值得注意的是,Proteus軟件并沒有內(nèi)置的天然氣煤氣等有害氣體的濃度傳感器。因此,為了模擬可燃?xì)怏w濃度的變化,我們使用了滑動(dòng)變阻器。雖然這種方式不能直接應(yīng)用于實(shí)際硬件設(shè)計(jì),但是對(duì)于理解和測(cè)試算法的基本行為是非常有用的。對(duì)于需要進(jìn)行實(shí)物設(shè)計(jì)的用戶,建議根據(jù)實(shí)際傳感器進(jìn)行相應(yīng)的調(diào)試和修改。
總的來說,這個(gè)實(shí)驗(yàn)提供了一個(gè)基礎(chǔ)的框架,展示了如何利用STM32單片機(jī)結(jié)合ADC、GPIO和定時(shí)器等資源,實(shí)現(xiàn)對(duì)模擬天然氣煤氣傳感器信號(hào)的采集和處理,并通過LCD1602顯示和報(bào)警裝置進(jìn)行展示和報(bào)警。雖然不能直接用于實(shí)物設(shè)計(jì),但對(duì)于理解和掌握相關(guān)技術(shù)的基本原理和應(yīng)用,具有很大的價(jià)值。
本測(cè)試如下所示:
仿真運(yùn)行情況:
開始仿真后LCD1602實(shí)時(shí)顯示檢測(cè)到的氣體濃度,可以通過滑動(dòng)變阻器改變測(cè)量值。可通過開關(guān)選擇風(fēng)扇的運(yùn)行模式。如果開關(guān)閉合,風(fēng)扇是自動(dòng)模式工作,氣體濃度高于報(bào)警值時(shí),風(fēng)扇啟動(dòng),低于報(bào)警值的時(shí)候,風(fēng)扇不轉(zhuǎn)動(dòng)。如果風(fēng)扇是手動(dòng)模式,通過按鍵控制風(fēng)扇的開關(guān)。蜂鳴器報(bào)警電路在氣體濃度高于報(bào)警值時(shí)啟動(dòng),有嘟嘟報(bào)警聲,低于不啟動(dòng)。
下圖檢測(cè)到氣體濃度是1.5mg/L,低于報(bào)警值2.0mg/L,風(fēng)扇和蜂鳴器電路不工作。
下圖檢測(cè)到氣體濃度是2.0mg/L,大于等于報(bào)警值,蜂鳴器報(bào)警,風(fēng)扇轉(zhuǎn)動(dòng)模擬排氣通風(fēng)。
3. 程序
程序是用keil5 mdk版本打開的,如果打開有問題,核實(shí)下keil的版本。程序是固件庫版本編寫的,有注釋可以結(jié)合講解理解。
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端口時(shí)鐘
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; //定義結(jié)構(gòu)體變量
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(); //延時(shí)函數(shù)初始化
LCD1602_Init();
ADC1_GPIO_Config();
ADC_Config();
LCD1602_ShowStr(2,0,"Qiti=0.0mg/L",13);
LED_Init(); //風(fēng)扇控制引腳
KEY_Init(); //按鍵初始化
while(1)
{
count++;
if(count>5000){//用于計(jì)數(shù),防止系統(tǒng)執(zhí)行轉(zhuǎn)換太頻繁
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);//顯示檢測(cè)到的AD值
if(KEY3==0){//按鍵控制
if(temp>2) LED=1;//LED1是風(fēng)扇控制引腳,1打開 0關(guān)閉
else LED=0;
} else{
if(KEY1==0) LED=1;
if(KEY2==0) LED=0;
}
if(temp>2) BEEP=0;//蜂鳴器報(bào)警值判斷,BEEP==0蜂鳴器報(bào)警 1蜂鳴器關(guān)閉
else BEEP=1;
delay_ms(10);
}
}
}
4. 資料清單&下載鏈接
0、常見使用問題及解決方法–必讀?。。?!
1、源程序
2、仿真圖
3、功能要求
4、講解視頻
Altium Designer 軟件資料
KEIL軟件資料
Proteus軟件資料
單片機(jī)學(xué)習(xí)資料
答辯技巧
設(shè)計(jì)報(bào)告常用描述
鼠標(biāo)雙擊打開查找更多51 STM32單片機(jī)課程畢業(yè)設(shè)計(jì).url
資料下載鏈接(可點(diǎn)擊):