[STM32F1] stm32读取mq2烟雾

[复制链接]
941|11
 楼主| 51xlf 发表于 2023-3-30 20:27 | 显示全部楼层 |阅读模式

要在STM32上读取MQ2烟雾传感器的值,您需要连接传感器到STM32的模拟输入引脚,并使用STM32的模拟输入功能来读取传感器输出。

  1. #include "stm32f1xx_hal.h"

  2. ADC_HandleTypeDef hadc;

  3. void SystemClock_Config(void);
  4. static void MX_GPIO_Init(void);
  5. static void MX_ADC1_Init(void);

  6. int main(void)
  7. {
  8.   HAL_Init();
  9.   SystemClock_Config();
  10.   MX_GPIO_Init();
  11.   MX_ADC1_Init();

  12.   HAL_ADC_Start(&hadc);

  13.   while (1)
  14.   {
  15.     HAL_ADC_PollForConversion(&hadc, 1000);
  16.     uint16_t rawValue = HAL_ADC_GetValue(&hadc);
  17.     float voltage = (float)rawValue / 4096.0 * 3.3; // 12-bit ADC, 3.3V reference voltage
  18.     float ppm = 100.0 * voltage; // ppm = voltage * 100

  19.     // ppm即为烟雾浓度,可根据需要进行进一步处理

  20.     HAL_Delay(1000);
  21.   }
  22. }

  23. void SystemClock_Config(void)
  24. {
  25.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  26.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  27.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  28.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  29.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  30.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  31.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  32.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  33.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  34.   {
  35.     Error_Handler();
  36.   }

  37.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  38.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  39.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  40.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  41.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  42.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  43.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  44.   {
  45.     Error_Handler();
  46.   }
  47. }

  48. static void MX_ADC1_Init(void)
  49. {
  50.   ADC_ChannelConfTypeDef sConfig = {0};

  51.   hadc.Instance = ADC1;
  52.   had



以下是一些基本的步骤:

将MQ2传感器的VCC引脚连接到STM32的+3.3V电源引脚,将GND引脚连接到STM32的地引脚,将AOUT引脚连接到STM32的一个模拟输入引脚。

在STM32的代码中,使用模拟输入功能来读取传感器输出。您可以使用STM32的ADC模块来完成此操作。在CubeMX中进行配置时,请确保将模拟输入引脚与ADC模块进行关联,并选择正确的ADC通道。

在代码中编写读取ADC值的代码,并将其转换为与传感器输出的电压值相关的烟雾浓度。MQ2传感器的输出电压与烟雾浓度成正比。

为了获取更加准确的浓度读数,您可能需要对传感器进行校准。这可以通过暴露传感器到已知浓度的烟雾或气体来完成,并调整您的代码以反映出读数的准确性。

需要注意的是,MQ2传感器还可以检测到一些其他的气体类型,如甲烷和丙烷。如果您只需要检测烟雾,则需要将您的代码进行修改,以仅仅关注烟雾读数。


要在STM32上读取MQ2烟雾传感器的值,您需要连接传感器到STM32的模拟输入引脚,并使用STM32的模拟输入功能来读取传感器输出。

以下是一些基本的步骤:

将MQ2传感器的VCC引脚连接到STM32的+3.3V电源引脚,将GND引脚连接到STM32的地引脚,将AOUT引脚连接到STM32的一个模拟输入引脚。

在STM32的代码中,使用模拟输入功能来读取传感器输出。您可以使用STM32的ADC模块来完成此操作。在CubeMX中进行配置时,请确保将模拟输入引脚与ADC模块进行关联,并选择正确的ADC通道。

在代码中编写读取ADC值的代码,并将其转换为与传感器输出的电压值相关的烟雾浓度。MQ2传感器的输出电压与烟雾浓度成正比。

为了获取更加准确的浓度读数,您可能需要对传感器进行校准。这可以通过暴露传感器到已知浓度的烟雾或气体来完成,并调整您的代码以反映出读数的准确性。

需要注意的是,MQ2传感器还可以检测到一些其他的气体类型,如甲烷和丙烷。如果您只需要检测烟雾,则需要将您的代码进行修改,以仅仅关注烟雾读数。

Wordsworth 发表于 2024-2-5 07:21 | 显示全部楼层

改变测试负载的值,再次测试输出的电流和电压
Clyde011 发表于 2024-2-5 08:24 | 显示全部楼层

表征负载能力的指标是负载能力和负载能力上升时间
公羊子丹 发表于 2024-2-5 09:17 | 显示全部楼层

环氧树脂由于硬度的原因不能用于应力敏感和含有贴片元件的模块灌封,在模块电源中基本被淘汰
万图 发表于 2024-2-5 10:20 | 显示全部楼层

直至电感器饱和,使开关器件烧毁。好的元器件就到唯样商城。图中的D3与N3构成的磁通复位电路,提供了泄放多余磁能的渠道
Uriah 发表于 2024-2-5 11:23 | 显示全部楼层

一些静态测试参数还包括波浪、纹波、起伏和静态输出电压精度。
帛灿灿 发表于 2024-2-5 13:19 | 显示全部楼层

测试参数包括电源的输出电压、输出电流、负载能力、压降、效率和输出波形
帛灿灿 发表于 2024-2-5 13:19 | 显示全部楼层

测试参数包括电源的输出电压、输出电流、负载能力、压降、效率和输出波形
Bblythe 发表于 2024-2-5 14:22 | 显示全部楼层

逐渐变细的孔(也称为邮票孔)变得越来越普遍
Pulitzer 发表于 2024-2-5 17:21 | 显示全部楼层

是两根线分别对地的噪声
童雨竹 发表于 2024-2-5 19:17 | 显示全部楼层

大于1的定义为极高导热的性能,而对于模块电源此水平的导热系数是无法达到其散热功能的需求
您需要登录后才可以回帖 登录 | 注册

本版积分规则

551

主题

9971

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部