news 2026/7/1 8:18:49

16.气体传感器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
16.气体传感器

1.气体传感器模块介绍

2.使用方法

有DO和AO输出接口,提供给单片机使用。

电位器可以设置响应阈值。

未达到阈值时,DO输出高电平,达到阈值,输出低电平。

3.STM32驱动

#include "stm32h7xx_hal.h" // 引脚定义 #define MQ_DO_PIN GPIO_PIN_0 #define MQ_DO_GPIO_PORT GPIOG #define MQ_AO_PIN GPIO_PIN_10 #define MQ_AO_GPIO_PORT GPIOF // 全局句柄 ADC_HandleTypeDef hadc3; EXTI_HandleTypeDef hexti0; // 函数声明 void MQ_Init(void); uint8_t MQ_Get_DO_State(void); uint16_t MQ_Get_AO_Voltage(void); void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); // 初始化传感器 void MQ_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // 使能时钟 __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_ADC3_CLK_ENABLE(); // 初始化DO引脚(外部中断模式) GPIO_InitStruct.Pin = MQ_DO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // 气体浓度超过阈值时DO由高变低,触发中断 GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(MQ_DO_GPIO_PORT, &GPIO_InitStruct); // 初始化AO引脚(ADC输入模式) GPIO_InitStruct.Pin = MQ_AO_PIN; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(MQ_AO_GPIO_PORT, &GPIO_InitStruct); // 初始化ADC3 hadc3.Instance = ADC3; hadc3.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc3.Init.Resolution = ADC_RESOLUTION_12B; hadc3.Init.ScanConvMode = DISABLE; hadc3.Init.ContinuousConvMode = ENABLE; hadc3.Init.DiscontinuousConvMode = DISABLE; hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc3.Init.NbrOfConversion = 1; hadc3.Init.DMAContinuousRequests = DISABLE; hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV; HAL_ADC_Init(&hadc3); // 配置ADC规则通道 ADC_ChannelConfTypeDef sConfig = {0}; sConfig.Channel = ADC_CHANNEL_8; // PF10对应ADC3_IN8 sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; HAL_ADC_ConfigChannel(&hadc3, &sConfig); // 使能中断 HAL_NVIC_EnableIRQ(EXTI0_IRQn); HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // 启动ADC HAL_ADC_Start(&hadc3); } // 获取DO引脚状态 uint8_t MQ_Get_DO_State(void) { return HAL_GPIO_ReadPin(MQ_DO_GPIO_PORT, MQ_DO_PIN); } // 获取AO引脚电压值(12位ADC,0-4095对应0-3.3V) uint16_t MQ_Get_AO_Voltage(void) { HAL_ADC_PollForConversion(&hadc3, 10); return HAL_ADC_GetValue(&hadc3); } // DO引脚中断回调函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == MQ_DO_PIN) { // 检测到气体浓度超过阈值 printf("气体浓度超标!\r\n"); } } // 主函数示例 int main(void) { HAL_Init(); SystemClock_Config(); MQ_Init(); printf("MQ气体传感器驱动启动...\r\n"); while(1) { // 每秒读取一次模拟值 uint16_t ao_value = MQ_Get_AO_Voltage(); float voltage = ao_value * 3.3f / 4095.0f; printf("当前模拟电压值:%.2f V\r\n", voltage); HAL_Delay(1000); } } // 外部中断服务函数 void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(MQ_DO_PIN); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/28 20:55:19

套期保值管理系统系统监控工具与应用实践

在期现业务系统的日常运维中,系统监控是保障系统稳定运行、及时发现问题的关键手段。套期保值管理系统提供完善的系统监控工具,通过实时监控、性能分析、告警通知等功能,帮助运维团队全面掌握系统运行状态。本文将详细说明系统监控工具的功能…

作者头像 李华
网站建设 2026/6/30 6:55:54

性能测试工具 - Siege

1、前言 性能测试,作为一个不可或缺的软件质量保证环节,旨在评估和提升产品在各种负载情况下的运行效率、稳定性和响应速度。它不仅仅是发现系统瓶颈,而是通过科学的方法和工具,确保我们的产品在面对大量用户并发访问、大数据处理…

作者头像 李华
网站建设 2026/7/1 15:19:30

大视觉语言模型完全指南:多模态虚假新闻检测技术详解与学习路径

本文系统综述了大视觉语言模型(LVLMs)在多模态虚假新闻检测领域的应用,提出三支路分类体系(参数冻结型、参数微调型、推理范式应用),分析了从传统方法到LVLMs驱动的范式转变。文章回顾了代表性架构,对比了性能基准,探讨了多模态幻…

作者头像 李华
网站建设 2026/7/1 0:42:20

Nodejs+vue志愿者活动报名服务小程序设计与开发

文章目录摘要概述技术架构核心功能创新点应用价值--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要概述 Node.js与Vue结合的志愿者活动报名服务小程序设计,采用前后端分离架构,实现高效、…

作者头像 李华
网站建设 2026/7/1 18:08:32

DDoS攻击:从原理到防御,一篇讲透网络瘫痪之战

什么是DDoS攻击?一篇讲透 DDoS(分布式拒绝服务)攻击是一种恶意通过海量互联网流量淹没目标服务器、服务或网络,使其正常用户无法访问的网络攻击。可以把它理解为: “雇一大群人同时挤爆一家商店,让真正的…

作者头像 李华
网站建设 2026/6/26 12:56:59

一文教你Jenkins整合Jmeter实现自动化接口测试

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快一、安装jmeter下载:http://jmeter.apache.org/download_jmeter.cgi这里我用了一台Windows安装jmeter用来写接口测试的脚本,启动前修改jmete…

作者头像 李华