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

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

基于STM32的甲醛濃度檢測報警仿真設(shè)計(仿真+程序+講解)

09/11 16:38
1606
服務(wù)支持:
技術(shù)交流群

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

虛擬商品不可退

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

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
    • 1.主要功能
    • 2.仿真
    • 3. 程序
    • 4. 資料清單&下載鏈接
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

仿真圖proteus 8.9

程序編譯器:keil 5

編程語言:C語言

設(shè)計編號:C0083

1.主要功能

功能說明:

1、以STM32單片機和控制核心設(shè)計甲醛濃度檢測報警設(shè)計;

2、通過液晶屏LCD1602和串口上位機顯示甲醛濃度,MV表示檢測值,ALM表示報警值;

3、可以通過按鍵設(shè)置甲醛濃度ALM報警值大小。

4、監(jiān)測甲醛濃度大于報警值時蜂鳴器報警電路導通,蜂鳴器報警。

5、默認監(jiān)測到甲醛濃度高于0.100mg/m3蜂鳴器報警。

主要硬件設(shè)備:STM32F103單片機

2.仿真

整體設(shè)計方案

本實驗利用STM32單片機的ADC、GPIO定時器等資源,將軟、硬件有機地結(jié)合起來,使得系統(tǒng)能夠正確地進識別輸入模擬甲醛傳感器的AD值,LCD1602能夠正確地顯示,蜂鳴器根據(jù)氣體濃度報警值工作。需注意的是,proteus是沒有MQ-3等甲醛濃度傳感器的,本設(shè)計使用滑動變阻器模擬甲醛濃度變化,不能直接用于實物設(shè)計,有需要的需跟據(jù)實物調(diào)試。

本測試如下所示:

仿真運行情況:

開始仿真后LCD1602實時顯示檢測到的甲醛濃度,可以通過滑動變阻器改變測量值??赏ㄟ^按鍵設(shè)置報警值濃度,按下設(shè)置鍵進入設(shè)置模式,通過設(shè)置+調(diào)高報警值,通過設(shè)置-調(diào)低報警值。蜂鳴器報警電路在甲醛濃度高于報警值時啟動,有嘟嘟報警聲,低于不啟動。

本設(shè)計采用電磁式蜂鳴器進行。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。因此需要一定的電流才能驅(qū)動它,單片機I/O引腳輸出的電流較小,單片機輸出的TTL電平基本上驅(qū)動不了蜂鳴器,因此需要增加一個電流放大的電路。蜂鳴器的正極接到VCC(+5V)電源上面,蜂鳴器的負極接到三極管的集電極C,三極管的基極B經(jīng)過限流電阻后由單片機的BEEP引腳控制,當BEEP輸出低電平時,三級管QS截止,沒有電流流過線圈,蜂鳴器不發(fā)聲;當BEEP輸出高電平時,三級管導通,這樣蜂鳴器的電流形成回路,發(fā)出聲音。

下圖檢測到氣體濃度是0.090mg/m3,低于報警值0.100mg/m3,蜂鳴器電路不工作。

img

下圖檢測到甲醛濃度是0.110mg/m3,大于等于報警值,三極管導通,蜂鳴器報警

img

3. 程序

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

 while (1)
  {
		sConfig.Channel = ADC_CHANNEL_1;   //選擇通道1
		HAL_ADC_ConfigChannel(&hadc1, &sConfig);  //選擇ADC1的通道道1
		HAL_ADC_Start(&hadc1);										//啟動ADC1
		HAL_ADC_PollForConversion(&hadc1, 10);		//等待ADC1轉(zhuǎn)換結(jié)束,超時設(shè)定為10ms
		adcv = HAL_ADC_GetValue(&hadc1);					//讀取ADC1的轉(zhuǎn)換結(jié)果
		
		
		temp=(float)adcv*(1.0/4095);		
	
		sprintf(str,"%4.3fmg/m3",temp);
		LCD_ShowString(0,0,"MV:");	
		LCD_ShowString(0,4,str);	
	  HAL_UART_Transmit(&huart1, (uint8_t *)&"MV=", 3, 10);  //串口1發(fā)送字符串,數(shù)組長度為12,超時10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 10, 10);		 //串口1發(fā)送字符串,數(shù)組長度為5,超時10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"nr", 2, 10); //串口1發(fā)送字符串,數(shù)組長度為2,超時10ms	
		
		if(set_flag){//設(shè)置模式
			sprintf(str,"%4.3fmg/m3^ ",warming_val);
			LCD_ShowString(1,0,"ALM:");	
			LCD_ShowString(1,4,str);
		}else{
			sprintf(str,"%4.3fmg/m3  ",warming_val);
			LCD_ShowString(1,0,"ALM:");	
			LCD_ShowString(1,4,str);			
		}
		
	  HAL_UART_Transmit(&huart1, (uint8_t *)&"ALM=", 4, 10);  //串口1發(fā)送字符串,數(shù)組長度為12,超時10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 10, 10);								//串口1發(fā)送字符串,數(shù)組長度為5,超時10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"nr", 2, 10);						//串口1發(fā)送字符串,數(shù)組長度為2,超時10ms	
		
		if(temp>warming_val&&!set_flag){//如果超過報警值
			HAL_GPIO_WritePin(GPIOA,BEEP_Pin, GPIO_PIN_RESET);//BEEP引腳拉低
		}else{
			HAL_GPIO_WritePin(GPIOA,BEEP_Pin, GPIO_PIN_SET);
		}

		HAL_ADC_Stop(&hadc1);											//停止ADC1
		HAL_Delay(300);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

img

4. 資料清單&下載鏈接

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

1、程序代碼

2、Proteus仿真

3、功能要求

4、講解視頻

Altium Designer 軟件資料

KEIL軟件資料

MS1100傳感器模塊說明書.doc

Proteus軟件資料

單片機學習資料

答辯技巧

設(shè)計報告常用描述

鼠標雙擊打開查找更多51 STM32單片機課程畢業(yè)設(shè)計.url

img

資料下載鏈接

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

相關(guān)推薦

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