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

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

基于STM32的酒精濃度檢測(cè)報(bào)警防酒駕仿真設(shè)計(jì)(仿真+程序+講解視頻)

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

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

虛擬商品不可退

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

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

基于STM32的酒精濃度檢測(cè)報(bào)警防酒駕仿真設(shè)計(jì)(仿真+程序+講解)

仿真圖proteus 8.9

程序編譯器:keil 5

編程語言:C語言

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

講解視頻


基于STM32的酒精濃度檢測(cè)報(bào)警防酒駕proteus仿真設(shè)計(jì)(仿真+程序+講解)

1.主要功能

功能說明:

1、以STM32單片機(jī)和MQ-3為控制核心設(shè)計(jì)酒精濃度檢測(cè)報(bào)警設(shè)計(jì);

2、通過液晶屏LCD1602和串口上位機(jī)顯示酒精濃度;

3、可以通過按鍵設(shè)置酒精濃度報(bào)警值大小。

4、監(jiān)測(cè)酒精濃度大于報(bào)警值時(shí)蜂鳴器報(bào)警電路導(dǎo)通,蜂鳴器報(bào)警。

5、默認(rèn)監(jiān)測(cè)到酒精濃度高于20mg/100ml蜂鳴器報(bào)警。

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

以下為本設(shè)計(jì)資料展示:

2.仿真

整體設(shè)計(jì)方案

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

本實(shí)驗(yàn)旨在利用STM32單片機(jī)的模擬數(shù)字轉(zhuǎn)換器(ADC)、通用輸入/輸出(GPIO)和定時(shí)器等資源,將軟件和硬件有機(jī)地結(jié)合在一起,以實(shí)現(xiàn)對(duì)輸入模擬酒精傳感器的AD值進(jìn)行正確的識(shí)別,并通過LCD1602顯示器顯示出來。此外,系統(tǒng)還配備了蜂鳴器,可以根據(jù)預(yù)設(shè)的氣體濃度報(bào)警值進(jìn)行工作。

在這個(gè)實(shí)驗(yàn)中,需要注意的是,Proteus仿真軟件中并沒有MQ-3等常見的酒精濃度傳感器。因此,為了模擬酒精濃度的變化,我們使用了滑動(dòng)變阻器來代替。這并不意味著這個(gè)設(shè)計(jì)可以直接應(yīng)用于實(shí)際硬件,如果需要進(jìn)行實(shí)物設(shè)計(jì),需要根據(jù)實(shí)際情況進(jìn)行調(diào)試和修改。

在整個(gè)實(shí)驗(yàn)過程中,我們不僅對(duì)STM32單片機(jī)的各種資源進(jìn)行了深入的利用和調(diào)試,同時(shí)也對(duì)軟件編程和硬件電路設(shè)計(jì)進(jìn)行了全面的理解和實(shí)踐。通過這個(gè)實(shí)驗(yàn),我們進(jìn)一步了解了STM32單片機(jī)在物聯(lián)網(wǎng)應(yīng)用中的重要地位,以及如何有效地將軟件和硬件結(jié)合在一起,實(shí)現(xiàn)系統(tǒng)的智能化和自動(dòng)化。

本測(cè)試如下所示:

仿真運(yùn)行情況:

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

下圖檢測(cè)到氣體濃度是3mg/100mL,低于報(bào)警值20mg/100mL,蜂鳴器電路不工作。

img

下圖檢測(cè)到酒精濃度是23mg/100mL,大于等于報(bào)警值,三極管導(dǎo)通,蜂鳴器報(bào)警img

仿真過程中可通過按鍵設(shè)置酒精濃度報(bào)警值。

3. 程序

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

mian函數(shù)

int main(void)
{
  /* USER CODE BEGIN 1 */
	ADC_ChannelConfTypeDef sConfig = {0};  //建立sConfig結(jié)構(gòu)體
	char str[20];  //字符串的存放數(shù)組
	uint32_t adcv; //存放ADC轉(zhuǎn)換結(jié)果
	float temp;
	set_flag = 0;


  /* USER CODE END 1 */

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

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

  /* USER CODE BEGIN Init */
	sConfig.Rank = ADC_REGULAR_RANK_1;
	sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;   //采樣周期為1.5個(gè)周期
  /* 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_ADC1_Init();
  MX_USART1_UART_Init();
  MX_TIM3_Init();
  /* USER CODE BEGIN 2 */
	LCD_Init();  //初始化LCD1602
	HAL_TIM_Base_Start_IT(&htim3);//開啟定時(shí)器3
//	LCD_ShowString(0,0,dis_str);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		sConfig.Channel = ADC_CHANNEL_1;   //選擇通道1
		HAL_ADC_ConfigChannel(&hadc1, &sConfig);  //選擇ADC1的通道道1
		HAL_ADC_Start(&hadc1);										//啟動(dòng)ADC1
		HAL_ADC_PollForConversion(&hadc1, 10);		//等待ADC1轉(zhuǎn)換結(jié)束,超時(shí)設(shè)定為10ms
		adcv = HAL_ADC_GetValue(&hadc1);					//讀取ADC1的轉(zhuǎn)換結(jié)果
		
		
		temp=(float)adcv*(3.3/4095)*100;		
	
		sprintf(str,"%4.0fmg/100ml",temp);
		LCD_ShowString(0,0,"MV:");	
		LCD_ShowString(0,4,str);	
	  HAL_UART_Transmit(&huart1, (uint8_t *)&"MV=", 3, 10);  //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為12,超時(shí)10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 12, 10);		 //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為5,超時(shí)10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"nr", 2, 10); //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為2,超時(shí)10ms	
		
		if(set_flag){//設(shè)置模式
			sprintf(str,"^%3.0fmg/100ml",warming_val);
			LCD_ShowString(1,0,"ALM:");	
			LCD_ShowString(1,4,str);
		}else{
			sprintf(str,"%4.0fmg/100ml",warming_val);
			LCD_ShowString(1,0,"ALM:");	
			LCD_ShowString(1,4,str);			
		}
		
	  HAL_UART_Transmit(&huart1, (uint8_t *)&"ALM=", 4, 10);  //串口1發(fā)送字符串,數(shù)組長(zhǎng)度為12,超時(shí)10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 12, 12);								//串口1發(fā)送字符串,數(shù)組長(zhǎng)度為5,超時(shí)10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"nr", 2, 10);						//串口1發(fā)送字符串,數(shù)組長(zhǎng)度為2,超時(shí)10ms	
		
		if(temp>warming_val){//如果超過報(bào)警值
			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、常見使用問題及解決方法–必讀?。。?!

1、程序代碼

2、Proteus仿真

3、功能要求

4、講解視頻

5、MQ-3傳感器說明

Altium Designer 軟件資料

KEIL軟件資料

Proteus軟件資料

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

答辯技巧

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

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

img

資料下載鏈接

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

相關(guān)推薦

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