加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

基于STM32的火災(zāi)煙霧報(bào)警器Proteus仿真設(shè)計(jì)(仿真+程序+設(shè)計(jì)報(bào)告+講解視頻)

12/16 09:31
2672
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
    • 1.主要功能
    • 2.仿真
    • 3. 程序
    • 4. 設(shè)計(jì)報(bào)告
    • 5. 資料清單
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

仿真圖proteus 8.9

程序編譯器:keil 5

編程語言:C語言

設(shè)計(jì)編號(hào):C0097

1.主要功能

基于STM32的火災(zāi)煙霧報(bào)警器Proteus仿真設(shè)計(jì)

1. 煙霧采集傳感器選用MQ-2,由于該傳感器輸出的是模擬信號(hào),STM32內(nèi)部ADC將模擬信號(hào)轉(zhuǎn)為數(shù)字信號(hào)。

2. 溫度采集使用DS18B20數(shù)字傳感器,溫度測(cè)量范圍-55到128℃,測(cè)量精度±0.1℃;

3. 顯示設(shè)備使用1602液晶,可以在屏幕上顯示實(shí)時(shí)煙霧濃度值、溫度值,以及報(bào)警值等信息;

4. 報(bào)警模塊則采用蜂鳴器和LED燈組成,兩個(gè)LED分別代表了煙霧報(bào)警指示和溫度報(bào)警指示,無論哪個(gè)檢測(cè)元素超標(biāo),蜂鳴器都會(huì)鳴叫報(bào)警;

5. 設(shè)計(jì)采用3個(gè)按鍵作為操作輸入設(shè)備,可以用來調(diào)節(jié)報(bào)警閾值的大?。?/p>

6.串口實(shí)時(shí)發(fā)送溫度檢測(cè)值、煙霧濃度測(cè)量值和報(bào)警信息給PC機(jī)。

主要硬件設(shè)備:STM32F103+LCD1602+DS18B20+蜂鳴器

資料下載鏈接:

通過百度網(wǎng)盤分享的文件:KEY_C0097

https://pan.baidu.com/s/1uSK6K6QSeRwRePmlgmFkuQ?pwd=f05a

提取碼:f05a

2.仿真

打開仿真工程,雙擊proteus中的單片機(jī),選擇hex文件路徑,然后開始仿真。

STM32單片機(jī)實(shí)時(shí)檢測(cè)DS18B20溫度測(cè)量及顯示溫度測(cè)量范圍-55℃到128℃,測(cè)量精度±0.1℃,串口實(shí)時(shí)傳輸檢測(cè)溫度給PC機(jī)。圖示溫度閾值100℃,煙霧濃度報(bào)警值40%。

img

下圖煙霧濃度報(bào)警值40%,檢測(cè)煙霧濃度超出范圍,聲光報(bào)警,串口有相應(yīng)提示。

img

溫度和煙霧報(bào)警閾值可以通過按鍵設(shè)置。LCD1602會(huì)有對(duì)應(yīng)的指示。

img

3. 程序

程序是用keil5 mdk版本打開的,如果打開有問題,核實(shí)下keil的版本。程序是HAL版本編寫的,有stm32cubemx配置文件。有注釋可以結(jié)合講解視頻理解。

關(guān)鍵代碼

int main(void)
{
  /* USER CODE BEGIN 1 */

	char data_str1[20]; 
//	char data_str2[20]; 
	char data_str2[]="L:000C   H:000C ";
	float temp;
	char str[20];  //溫度值轉(zhuǎn)換為字符串的存放數(shù)組	
	
	float adc_temp;
	uint32_t adcv;  //存放ADC轉(zhuǎn)換結(jié)果
	ADC_ChannelConfTypeDef sConfig = {0};  //建立sConfig結(jié)構(gòu)體

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_TIM2_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
//  printf("DS18B20測(cè)溫實(shí)驗(yàn)nr");
	HAL_UART_Transmit(&huart1, (uint8_t *)&"DS18B20_MQ-2rn", 13, 10);						//串口1發(fā)送字符串,數(shù)組長度為10,
	
	LCD_Init();																																//LCD1602初始化

	temp_H=100;smoke_H=10;		//默認(rèn)報(bào)警值																									//默認(rèn)溫度閾值20-40
//	DS18B20_Get_Temp();
//	HAL_TIM_Base_Start_IT(&htim2);  //初始化定時(shí)器

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(500);
		sConfig.Channel = ADC_CHANNEL_8;  //選擇通道1
		HAL_ADCEx_Calibration_Start(&hadc1);   //開啟adc前校準(zhǔn)一下ADC
		HAL_ADC_ConfigChannel(&hadc1, &sConfig);  //選擇ADC1的通道1
		HAL_ADC_Start(&hadc1);										//啟動(dòng)ADC1
		HAL_ADC_PollForConversion(&hadc1, 30);		//等待ADC1轉(zhuǎn)換結(jié)束,超時(shí)設(shè)定為10ms
		adcv = HAL_ADC_GetValue(&hadc1);					//讀取ADC1的轉(zhuǎn)換結(jié)果
		sprintf(str,"adc_value=%drn",adcv);
//		HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 20);//串口1發(fā)送字符串,數(shù)組長度為strlen(str),超時(shí)20ms
		memset(str,0,strlen(str));
		
//		adc_temp=(float)adcv*(3.3/4095);	
//		adc_temp= pow(11.5428*35.904*adc_temp/(25.5-5.1*adc_temp),(1/0.6549));//計(jì)算公式源自https://blog.csdn.net/qq_35952136/article/details/95589074
		adc_temp=(float)adcv*(100.0/4095);	

#if 0		
		sprintf(str,"%0.2f",adc_temp);
	  HAL_UART_Transmit(&huart1, (uint8_t *)&"vote=", 5, 10);  //串口1發(fā)送字符串,數(shù)組長度為12,超時(shí)10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 6, 10);								//串口1發(fā)送字符串,數(shù)組長度為5,超時(shí)10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"Vrn", 3, 10);						//串口1發(fā)送字符串,數(shù)組長度為2,超時(shí)10ms		
#else
		sprintf(str,"smoke=%0.1f%%rn",adc_temp);
		HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 10);//串口1發(fā)送字符串,數(shù)組長度為strlen(str),超時(shí)20ms
	    memset(str,0,strlen(str));
#endif		
		
		HAL_ADC_Stop(&hadc1);											//停止ADC1	
		
		temp=DS18B20_Get_Temp();//獲取溫度值
  	    sprintf(str,"temp=%0.1fCrn",temp);

		HAL_UART_Transmit(&huart1, (uint8_t *)str,  strlen(str), 10);								//串口1發(fā)送字符串,數(shù)組長度為6,超時(shí)10ms
		memset(str,0,strlen(str));	
		
		if(setnum==0){//正常模式
//			sprintf(data_str1,"temp=%0.1fC    n",temp);					//寫字符到data_str1
			sprintf(data_str1,"T=%0.1fC G=%0.1f%%  n",temp,adc_temp);
			sprintf(data_str2,"TH:%d C GH:%d %% n",temp_H,smoke_H);//寫字符到data_str2
			if(adc_temp>(float)smoke_H){
				LED2=LED_ON;
				HAL_UART_Transmit(&huart1, (uint8_t *)&"SMOKE!!rn", 10, 10);						//串口1發(fā)送字符串,數(shù)組長度為10,超時(shí)10ms				
			}else{
				LED2=LED_OFF;	
			}
			 if(temp>(float)temp_H){
				LED1=LED_ON;	
				HAL_UART_Transmit(&huart1, (uint8_t *)&"TEMP!!rn", 10, 10);						//串口1發(fā)送字符串,數(shù)組長度為10,超時(shí)10ms						 
			}else{
				LED1=LED_OFF;	
			}
			if (LED1==LED_ON||LED2==LED_ON){
				BEEP=1;
			}else{
				BEEP=0;
			}

		}else if(setnum==1){																			//設(shè)置高溫閾值
			BEEP=0;LED1=LED2=LED_OFF;
		    sprintf(data_str1,"T=%0.1fC G=%0.1f%%  n",temp,adc_temp);
			sprintf(data_str2,"TH:%dC< GH:%d %% n",temp_H,smoke_H);	
		}else if(setnum==2){																			//設(shè)置低溫閾值
			sprintf(data_str1,"T=%0.1fC G=%0.1f%%  n",temp,adc_temp);
			sprintf(data_str2,"L:%d C  H:%d%%< n",temp_H,smoke_H);		
		}

		LCD_ShowString(0,0,data_str1);	//LCD1602顯示第一行
		LCD_ShowString(1,0,data_str2);	//LCD1602顯示第二行
		memset(str,0,strlen(data_str1)); 


  }
  /* USER CODE END 3 */
}

程序流程圖

img

4. 設(shè)計(jì)報(bào)告

10000+字設(shè)計(jì)報(bào)告,內(nèi)容包括硬件設(shè)計(jì)、軟件設(shè)計(jì)、結(jié)論等。

img
隨著現(xiàn)代城市化步伐的迅猛推進(jìn),人口密集度與建筑物復(fù)雜性的雙重增加,使得火災(zāi)安全問題愈發(fā)成為城市公共安全領(lǐng)域中的重大挑戰(zhàn)。在這個(gè)背景下,火災(zāi)的早期預(yù)警機(jī)制顯得尤為重要,它不僅關(guān)乎到人們的生命安全,還直接影響到社會(huì)經(jīng)濟(jì)活動(dòng)的平穩(wěn)運(yùn)行與財(cái)產(chǎn)安全的有效保障。然而,傳統(tǒng)的火災(zāi)報(bào)警系統(tǒng)大多僅依賴煙霧或溫度的單一參數(shù)進(jìn)行監(jiān)測(cè),這種設(shè)計(jì)方式在實(shí)際應(yīng)用中暴露出了諸多局限性,如誤報(bào)頻率較高、響應(yīng)不夠迅速、對(duì)環(huán)境變化的適應(yīng)性差等,這些問題在很大程度上限制了傳統(tǒng)報(bào)警系統(tǒng)在實(shí)際應(yīng)用中的效能。

鑒于此,開發(fā)一種集成了煙霧濃度監(jiān)測(cè)、溫度監(jiān)控以及實(shí)時(shí)報(bào)警功能于一體的新型智能火災(zāi)煙霧報(bào)警器,成為了提升火災(zāi)預(yù)防能力的關(guān)鍵所在。這種新型報(bào)警器不僅能夠有效克服傳統(tǒng)系統(tǒng)的不足,還能通過多參數(shù)綜合判斷,實(shí)現(xiàn)對(duì)火災(zāi)風(fēng)險(xiǎn)的更為精準(zhǔn)、及時(shí)的預(yù)警。本項(xiàng)目正是基于這一迫切需求而提出,旨在利用STM32微控制器這一高性能、低功耗嵌入式系統(tǒng)核心,結(jié)合MQ-2煙霧傳感器的高靈敏度與穩(wěn)定性、DS18B20溫度傳感器的精確測(cè)量能力、1602液晶顯示屏的直觀信息顯示、蜂鳴器與LED指示燈的即時(shí)報(bào)警反饋,以及按鍵模塊的用戶交互功能,共同構(gòu)建一個(gè)功能全面、性能優(yōu)越的智能火災(zāi)預(yù)警系統(tǒng)。

在項(xiàng)目實(shí)施過程中,我們將充分利用Proteus這一先進(jìn)的電子設(shè)計(jì)自動(dòng)化(EDA)軟件,進(jìn)行系統(tǒng)的電路設(shè)計(jì)與仿真驗(yàn)證。通過Proteus的虛擬實(shí)驗(yàn)平臺(tái),我們可以對(duì)電路布局、信號(hào)傳輸、元件性能等進(jìn)行全面而深入的測(cè)試,從而確保系統(tǒng)設(shè)計(jì)的合理性、可行性與可靠性。最終,我們的目標(biāo)是實(shí)現(xiàn)一個(gè)能夠高效、準(zhǔn)確地監(jiān)測(cè)火災(zāi)隱患,及時(shí)發(fā)出預(yù)警信號(hào),并為用戶提供清晰直觀的報(bào)警信息的智能火災(zāi)煙霧報(bào)警器,為現(xiàn)代城市的安全防護(hù)貢獻(xiàn)一份力量。通過本次設(shè)計(jì),我們希望能夠提高對(duì)單片機(jī)的理解和應(yīng)用能力。通過實(shí)踐和探索,我們希望能夠掌握相關(guān)的硬件和軟件設(shè)計(jì)方法,為今后的學(xué)習(xí)和工作打下堅(jiān)實(shí)的基礎(chǔ)。同時(shí),我們也希望能夠通過這次設(shè)計(jì),培養(yǎng)我們的團(tuán)隊(duì)協(xié)作能力和創(chuàng)新精神。

5. 資料清單

img

0、常見使用問題及解決方法–必讀?。。?!

1、程序代碼

2、Proteus仿真

3、功能要求

4、開題報(bào)告

5、設(shè)計(jì)報(bào)告

6、框圖

7、講解視頻

Altium Designer 安裝破解

KEIL+proteus 單片機(jī)仿真設(shè)計(jì)教程

KEIL安裝破解

Proteus元器件查找

Proteus安裝

Proteus簡易使用教程

單片機(jī)學(xué)習(xí)資料

相關(guān)數(shù)據(jù)手冊(cè)

答辯技巧

設(shè)計(jì)報(bào)告常用描述

鼠標(biāo)雙擊打開查找嘉盛單片機(jī)51 STM32單片機(jī)課程畢業(yè)設(shè)計(jì).url

  • 設(shè)計(jì)資料獲取聯(lián)系方式.doc

相關(guān)推薦

電子產(chǎn)業(yè)圖譜