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가 이를 올바르게 표시할 수 있으며 가스농도 경보값 작동에 따라 부저가 울릴 수 있습니다. Proteus에는 MQ-3과 같은 알코올 농도 센서가 없다는 점에 유의해야 합니다. 이 설계는 슬라이딩 가변 저항을 사용하여 알코올 농도의 변화를 시뮬레이션하므로 물리적 설계에 직접 사용할 수 없습니다. 필요한 경우 물리적인 방법에 따라 디버깅해야 합니다. 물체.

이 실험의 목표는 STM32 마이크로 컨트롤러의 아날로그-디지털 변환기(ADC), 범용 입출력(GPIO) 및 타이머 리소스를 사용하여 소프트웨어와 하드웨어를 유기적으로 결합하여 아날로그 알코올 센서에 입력되는 AD 값을 구현하는 것입니다. LCD1602 디스플레이를 통해 올바르게 식별되고 표시됩니다. 또한, 시스템에는 미리 설정된 가스 농도 경보 값에 따라 작동할 수 있는 부저도 장착되어 있습니다.

이 실험에서 Proteus 시뮬레이션 소프트웨어에는 MQ-3와 같은 일반적인 알코올 농도 센서가 포함되어 있지 않다는 점에 유의해야 합니다. 따라서 알코올 농도의 변화를 시뮬레이션하기 위해 슬라이딩 가변 저항을 대신 사용했습니다. 이는 이 설계를 실제 하드웨어에 직접 적용할 수 있다는 의미는 아니며, 물리적인 설계가 필요한 경우 실제 상황에 맞게 디버깅 및 수정이 필요하다.

전체 실험 동안 우리는 STM32 마이크로 컨트롤러의 다양한 리소스를 심층적으로 사용하고 디버깅했을 뿐만 아니라 소프트웨어 프로그래밍 및 하드웨어 회로 설계를 포괄적으로 이해하고 연습했습니다. 이 실험을 통해 우리는 IoT 애플리케이션에서 STM32 마이크로컨트롤러의 중요한 위치와 소프트웨어와 하드웨어를 효과적으로 결합하여 시스템 인텔리전스와 자동화를 달성하는 방법을 더욱 이해했습니다.

이 테스트는 다음과 같습니다.

시뮬레이션 실행 상태:

시뮬레이션이 시작된 후 LCD1602는 감지된 알코올 농도를 실시간으로 표시하며, 슬라이딩 가변저항기를 통해 측정값을 변경할 수 있습니다. 알람 값 농도는 버튼을 눌러 설정할 수 있으며, 설정 버튼을 눌러 설정 모드로 들어가고 + 설정을 통해 알람 값을 높이고 - 설정을 통해 알람 값을 감소시킬 수 있습니다. 알코올 농도가 경보 값보다 높을 때 부저 경보 회로가 시작되고, 경고음이 울리고, 알코올 농도가 경보 값보다 낮을 때는 부저 경보 회로가 시작되지 않습니다.

아래 사진에서는 검출된 가스 농도가 3mg/100mL로 경보값인 20mg/100mL보다 낮아 부저 회로가 작동하지 않습니다.

img

다음 그림에서는 알코올 농도가 23mg/100mL로 경보값 이상임을 감지하고 트랜지스터가 켜지며 부저음이 울립니다.img

시뮬레이션 과정에서 알코올 농도 경보 값은 버튼을 통해 설정할 수 있습니다.

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 */
}

img

4. 정보 목록 및 다운로드 링크

0. 일반적인 사용 문제 및 해결 방법 - 꼭 읽어보세요! ! ! !

1. 프로그램 코드

2. 프로테우스 시뮬레이션

3. 기능적 요구사항

4. 설명 영상

5. MQ-3 센서 설명

Altium Designer 소프트웨어 정보

KEIL 소프트웨어 정보

프로테우스 소프트웨어 정보

마이크로컨트롤러 학습 자료

방어 기술

설계 보고서에 대한 일반적인 설명

마우스를 두 번 클릭하여 열고 더 많은 51 STM32 마이크로컨트롤러 과정 졸업 프로젝트.url을 찾아보세요.

img

데이터 다운로드 링크

추천

출처blog.csdn.net/weixin_52733843/article/details/132550823