STM32に基づいたアルコール濃度検知アラームと飲酒運転防止シミュレーション設計(シミュレーション+プログラム+解説ビデオ)

STM32に基づくアルコール濃度検知アラームと飲酒運転防止シミュレーション設計

STM32に基づくアルコール濃度検知警報と飲酒運転防止シミュレーション設計(シミュレーション+プログラム+説明)

シミュレーション図 proteus 8.9

プログラムコンパイラ: keil 5

プログラミング言語:C言語

デザイン番号:C0082

解説ビデオ

STM32に基づくアルコール濃度検知アラームと飲酒運転防止プロテウスシミュレーション設計(シミュレーション+プログラム+解説)

1. 主な機能

機能の説明:

1. STM32 マイクロコントローラーと MQ-3 を制御コアとして使用して、アルコール濃度の検出とアラームの設計を設計します。

2. LCD スクリーン LCD1602 およびシリアルポートホストコンピュータを通じてアルコール濃度を表示します。

3. ボタンを押すことでアルコール濃度警報値を設定できます。

4. 監視したアルコール濃度が警報値を超えるとブザー警報回路がオンになり、ブザーが鳴ります。

5. デフォルトでは、アルコール濃度が 20mg/100ml を超えるとブザーアラームが鳴ります。

主なハードウェア機器: STM32F103 マイクロコントローラー

以下は、この設計情報の表示です。

2. シミュレーション

全体的な設計計画

この実験では、STM32 マイクロコントローラーの ADC、GPIO、タイマー、その他のリソースを使用してソフトウェアとハ​​ードウェアを有機的に組み合わせることで、システムが模擬アルコール センサーに入力された AD 値を正確に識別し、LCD1602 がそれを正しく表示し、ガス濃度警報値の動作に応じてブザーを表示することができます。プロテウスには MQ-3 のようなアルコール濃度センサーがないことに注意してください。この設計では、アルコール濃度の変化をシミュレートするためにスライディング レオスタットを使用しており、物理設計に直接使用することはできません。必要に応じて、物理設計に従ってデバッグする必要があります。物体。

この実験は、STM32マイコンのアナログデジタルコンバータ(ADC)、汎用入出力(GPIO)、タイマーリソースを利用し、ソフトウェアとハ​​ードウェアを有機的に組み合わせて、アナログアルコールセンサーへのAD値入力を実現することを目的としています。正しく識別され、LCD1602 ディスプレイに表示されます。また、ガス濃度警報設定値に応じたブザーも装備しています。

この実験では、Proteus シミュレーション ソフトウェアには MQ-3 などの一般的なアルコール濃度センサーが含まれていないことに注意してください。したがって、アルコール濃度の変化をシミュレートするために、代わりにスライド式レオスタットを使用しました。ただし、この設計がそのまま実際のハードウェアに適用できるわけではなく、物理設計が必要な場合には、実際の状況に応じてデバッグや修正が必要となります。

実験全体を通じて、STM32 マイクロコントローラーのさまざまなリソースを徹底的に使用してデバッグしただけでなく、ソフトウェア プログラミングとハードウェア回路設計を包括的に理解し、実践しました。この実験を通じて、IoT アプリケーションにおける STM32 マイクロコントローラーの重要な位置と、ソフトウェアとハ​​ードウェアを効果的に組み合わせてシステム インテリジェンスと自動化を実現する方法をさらに理解しました。

このテストは次のようになります。

シミュレーション実行ステータス:

シミュレーションを開始すると、LCD1602 は検出されたアルコール濃度をリアルタイムに表示し、測定値はスライド式可変抵抗器によって変更できます。警報値の濃度は ボタンを押して設定でき、設定ボタンを押して設定モードに入り、+ を設定すると警報値が増加し、- を設定すると警報値が減少します。ブザー警報回路は、アルコール濃度が警報値より高い場合に作動し、「ピー」という警報音が鳴り、アルコール濃度が警報値より低い場合にはブザー警報回路は作動しません。

下の写真では、検知ガス濃度が 3mg/100mL で警報値 20mg/100mL より低く、ブザー回路が動作していません。

画像

次の図は、アルコール濃度が 23mg/100mL で警報値以上であることを検出し、トランジスタがオンし、ブザーが鳴ります。画像

シミュレーションプロセス中に、ボタンを使用してアルコール濃度アラーム値を設定できます。

3. 手順

プログラムは keil5 mdk バージョンで開かれます。開く際に問題がある場合は、keil のバージョンを確認してください。プログラムはHALライブラリ版で書かれており、解説動画と合わせて理解できるコメントも付いています。

メイン機能

int main(void)
{
    
    
  /* USER CODE BEGIN 1 */
	ADC_ChannelConfTypeDef sConfig = {
    
    0};  //建立sConfig结构体
	char str[20];  //字符串的存放数组
	uint32_t adcv; //存放ADC转换结果
	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个周期
  /* 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);//开启定时器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);										//启动ADC1
		HAL_ADC_PollForConversion(&hadc1, 10);		//等待ADC1转换结束,超时设定为10ms
		adcv = HAL_ADC_GetValue(&hadc1);					//读取ADC1的转换结果
		
		
		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发送字符串,数组长度为12,超时10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 12, 10);		 //串口1发送字符串,数组长度为5,超时10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"\n\r", 2, 10); //串口1发送字符串,数组长度为2,超时10ms	
		
		if(set_flag){
    
    //设置模式
			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发送字符串,数组长度为12,超时10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)str, 12, 12);								//串口1发送字符串,数组长度为5,超时10ms
		HAL_UART_Transmit(&huart1, (uint8_t *)&"\n\r", 2, 10);						//串口1发送字符串,数组长度为2,超时10ms	
		
		if(temp>warming_val){
    
    //如果超过报警值
			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 */
}

画像

4. 情報一覧とダウンロードリンク

0. 使用上の一般的な問題と解決策 - 必読!

1. プログラムコード

2. プロテウスシミュレーション

3. 機能要件

4. 解説動画

5. MQ-3センサーの説明

Altium Designer ソフトウェア情報

KEIL ソフトウェア情報

プロテウス ソフトウェア情報

マイコン学習教材

防御スキル

設計レポートの共通説明

マウスをダブルクリックして開くと、詳細が表示されます。 51 STM32 マイクロコントローラー コース卒業プロジェクト.url

画像

データダウンロードリンク

おすすめ

転載: blog.csdn.net/weixin_52733843/article/details/132550823