问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

HAL库编写MQ2烟雾传感器程序

创作时间:
作者:
@小白创作中心

HAL库编写MQ2烟雾传感器程序

引用
CSDN
1.
https://blog.csdn.net/kbqn_138/article/details/137510058

本文将介绍如何使用HAL库编写MQ2烟雾传感器程序。通过Cubemx配置芯片、编写代码以及硬件连接等步骤,实现烟雾浓度的检测。

一、Cubemx配置

  1. 选好自己的芯片,选择外部高速时钟
  2. 打开ADC,任选一个通道(这里我选的是ADC1通道7采集),打开后将continuous conversion使能
  3. 打开串口1,设置异步发送模式,方便将结果通过串口打印在电脑上
  4. 配置时钟树,生成keil文件

二、代码

  1. 将串口重定向代码添加到usart.c文件
#include "stdio.h"  
/* USER CODE BEGIN 0 */  
/* USER CODE END 0 */  
UART_HandleTypeDef huart1;  
//usart.c ??  
int fputc(int ch, FILE *f) //????,????,??????????  
{  
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, sizeof(ch), 0xFFFF);  
return ch;  
}  
/*HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)*/  
int fgetc(FILE *f) //????,????,??????????  
{  
uint8_t ch;  
HAL_UART_Receive(&huart1, (uint8_t *)&ch, sizeof(ch), 0xFFFF);  
return ch;  
}  
  1. main.c文件(将我的主函数复制粘贴即可)
int main(void)  
{  
/* USER CODE BEGIN 1 */  
/* USER CODE END 1 */  
uint32_t ADC_Value;  
/* MCU Configuration--------------------------------------------------------*/  
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */  
HAL_Init();  
/* USER CODE BEGIN Init */  
/* 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();  
HAL_ADC_Start(&hadc1);  
HAL_ADC_PollForConversion(&hadc1,7);  
/* USER CODE BEGIN 2 */  
/* USER CODE END 2 */  
/* Infinite loop */  
/* USER CODE BEGIN WHILE */  
while (1)  
{  
/* USER CODE END WHILE */  
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))  
{  
ADC_Value = HAL_ADC_GetValue(&hadc1);  
}  
printf(" ADC channe7 value = %1.3f%% \r\n", ADC_Value*100.0f/4096);  
HAL_Delay(500);  
//ADC_Value=(float)ADC_Value*3.3f/4096;  
// printf(" smoke = %1.3f%% \r\n", float (ADC_Value/3.3)*100);  
/* USER CODE BEGIN 3 */  
}  
/* USER CODE END 3 */  
}  
  1. 打开魔术棒,选用Use MicroLIB(如果不选用就无法发送到电脑,至于原因请参考https://blog.csdn.net/qq_36098477/article/details/117666808这篇文章解释的很清楚)

三、硬件连接

将MQ2的DO(模拟输出)悬空,只用连接AO(数字输出),GND,VCC(5v)三脚。

四、实现效果

前面是正常环境烟雾浓度,后面是用打火机气体测试的qwq

五、总结

实验原理:MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。处于200~300摄氏度时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的调至而变化,就会引起表面导电率的变化。利用这一点就可以获得这种烟雾存在的信息,烟雾的浓度越大,导电率越大,输出电阻越低,则输出的模拟信号就越大。

实验感悟:对于ADC本次实验只是最基础的单通道采集,还有多通道采集,中断采集等需要继续探寻。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号