智能安全辅助驾驶系统 STM32——MQ3酒精传感器的应用(HAL库)

智能安全辅助驾驶系统 STM32——MQ3酒精传感器的应用(HAL库)

准备:
MQ3酒精传感器一个、STM32开发板(本实验采用F103RCT6,其他型号可参考本文同理设置)

一、MQ3酒精传感器的介绍
MQ3酒精传感器主要用于酒精检测,其原理是 使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在酒精蒸汽时,传感器的电导率随空气中酒精气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。

MQ-3气体传感器对酒精的灵敏度高,可以抵抗汽油、烟雾、水蒸气的干扰。这种传感器可检测多种浓度酒精气氛,是一款适合多种应用的低成本传感器。
该模块主要特点如下:

具有信号输出指示。
输出的双通道信号(模拟量输出与 TTL 输出)。
TTL 输出有效信号为低电平。
模拟输出电压为 0~5V, 浓度高则电压高。
对乙醇蒸汽拥有很高的灵敏度和不错的选择性。
它具有较长的使用寿命和可靠的稳定性。
快速的响应恢复特性。
MQ3模块实物图:
在这里插入图片描述
在这里插入图片描述

二、STM32
本文主要利用ADC采集MQ3酒精传感器的AO口的模拟数据,利用的是ADC中DMA采集形式获取电压数据。
同时利用外部中断EXTI来判断DO口是否酒精浓度达到一定的值,当检测到酒精时,DO口会由输出高电平变为输出低电平,因此将STM32的PA4口设置为下降沿模式的外部中断模式检测是否有酒精(也可以通过设置输入模式一直循环检测DO口是否为低电平来判断是否有酒精,但此方法占用CPU时间,没有硬件中断合适)。为判断存在酒精,在中断回调函数里设置点亮LED灯(即PB9)。

CubeMX图文设置:
基本的时钟选择等省略,可参考蓝桥杯物联网基础图文教程——GPIO输出控制LD5亮灭
设置ADC DMA模式,选择的ADC1通道1
在这里插入图片描述
设置PA4为外部中断模式,用于监测DO口的电平跳变
在这里插入图片描述
ADC 的DMA模式设置,其他都为默认即可
在这里插入图片描述
在这里插入图片描述
选择串口用于输出数据到串口助手显示数据
在这里插入图片描述
生成项目

补充代码:

main.c


/* USER CODE BEGIN PV */

uint32_t adc_value=0;
uint32_t Alcohol=0;
uint8_t a=1;
/* USER CODE END PV */



/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  
  

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

    /* USER CODE BEGIN 3 */
		HAL_ADC_Start_DMA(&hadc1,&adc_value,1);	
		Alcohol=((float)adc_value*3.3/4096*0.36-1.08)*10000;//电压数据转换(此处由于还未找到相关公式,暂时这样代替,如有了解的大佬可以在评论区补充一下)
		printf("Alcohol=%d\r\n",Alcohol);		
		HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

//中断回调函数,当有酒精时,DO口电平由高电平边低电平,PA4触发外部中断,进入中断函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
	if(GPIO_Pin==Alcohol_DO_Pin){
	 HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,1);
	}
	//设置一个按键中断,为了把酒精触发的LED点亮之后熄灭(实际项目中可改为关闭蜂鸣器等)
	if(GPIO_Pin==KEY1_Pin){
	 HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,0);
	}
}
	
/* USER CODE END 4 */

重定向代码:


int fputc(int ch, FILE *f)
{  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}

int fgetc(FILE * f)
{  uint8_t ch = 0;
  HAL_UART_Receive(&huart1,&ch, 1, 0xffff);
  return ch;}

在这里插入图片描述

硬件连接

  MQ-3 							STM32
  
  AO口 			接  			PA1  (ADC_IN1)
  DO口				接			PA4	(外部中断)
  GND  			接  			GND
  VCC  			接  			VCC5V	
  										PB9 连接LED灯
  										PA9/10   UART TX/RX

项目代码可关注回复评论领取

嵌入式系统设计是指将计算机系统集成到其他设备或系统中,以实现特定功能。而基于STM32CubeMX与HAL库的嵌入式系统设计是指利用ST公司的STM32系列微控制器,结合STM32CubeMX工具和HAL库(Hardware Abstraction Layer),进行软硬件设计和开发的过程。 STM32CubeMX是ST公司推出的一款嵌入式系统设计工具,它提供了图形化的界面,可以帮助开发者快速配置STM32微控制器的引脚、时钟、外设等参数,生成初始化代码和项目文件,使整个开发过程更加简化和快捷。 HAL库STM32系列微控制器的硬件抽象层库,提供了一组封装了底层硬件操作的API接口,使开发者能够更加方便地进行外设控制和数据处理等操作。开发者可以根据具体的需求,选择需要的API接口,编写相应的代码,完成对硬件的控制和操作。 在使用STM32CubeMX和HAL库进行嵌入式系统设计时,可以通过STM32CubeMX工具进行硬件的初始化和配置,生成相应的代码和项目文件。然后,在IDE(集成开发环境)中使用HAL库提供的API接口,编写代码进行软件的开发和应用程序的编写。通过这种方式,开发者可以在短时间内快速完成嵌入式系统设计,提高开发效率和产品质量。 总而言之,基于STM32CubeMX和HAL库的嵌入式系统设计提供了一种快速、简化的嵌入式软硬件开发方法,使开发者能够更加高效地进行嵌入式应用的设计与开发。
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值