0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32模块使用 MQ-3酒精检测传感器

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2024-12-30 11:34 次阅读

MQ-3气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(Sn0)。当传感器所处环境中存在酒精蒸气时,传感器的电导率随空气中酒精蒸气浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号

一、模块来源

模块实物展示:

wKgZPGdyFM2AE7aYAAAWoFoIlVI62.webp



资料下载链接:

https://pan.baidu.com/s/1B8WhPIzTmWwQsFFVayRpAA?pwd=9966
资料提取码:9966

二、规格参数

工作电压:3.3V ~ 5V

工作电流:150MA

输出方式: DO接口为数字量输出 AO接口为模拟量输出

读取方式:ADC

管脚数量:4 Pin(2.54mm间距排针

以上信息见厂家资料文件

三、移植过程

我们的目标是将例程移植至CW32F030C8T6开发板上【能够判断当前环境状况的功能】。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。

3.1查看资料

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

wKgZO2dyFM2AVdkYAABXVHhCnQU11.webp

其对应的原理图,AO输出为MQ传感器直接输出的电压,所以为模拟量;DO为经过LM393进行电压比较后,输出高低电平,所以为数字量。

wKgZPGdyFM6AZ4UfAAAZ3p10KR484.webp

因此DO引脚可以配置为GPIO的输入模式,AO引脚需要配置为ADC模拟输入模式。

3.2引脚选择

想要使用ADC,需要确定使用的引脚是否有ADC外设功能。可以通过手册进行查看。在用户手册439页。

这里选择使用PA5的附加ADC功能。

wKgZO2dyFM6Aeh5TAAA2PNezPFs51.webp

有ADC功能的引脚

wKgZO2dyFNmAAaa4AACDDgU0EMQ37.webp

模块接线图

3.3移植至工程

移植步骤中的导入.c和.h文件与【CW32模块使用】DHT11温湿度传感器相同,只是将.c和.h文件更改为bsp_mq3.c与bsp_mq3.h。这里不再过多讲述,移植完成后面修改相关代码。

在文件bsp_mq3.c中,编写如下代码。

/* * Change Logs: * Date Author Notes * 2024-06-20 LCKFB-LP first version */ #include "bsp_mq3.h" /****************************************************************** * 函 数 名 称:ADC_MQ3_Init * 函 数 说 明:初始化ADC功能 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者:LC * 备 注:无 ******************************************************************/ void ADC_MQ3_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化结构体 RCC_MQ3_GPIO_ENABLE(); // 使能GPIO时钟 RCC_MQ3_ADC_ENABLE(); // 使能ADC时钟 GPIO_InitStruct.Pins = GPIO_MQ3_DO; // GPIO引脚 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式 GPIO_Init(PORT_MQ3, &GPIO_InitStruct); // 初始化 ANALOG_GPIO_ENABLE(); // PA05设定为模拟输入 /* ADC配置 */ ADC_InitTypeDef ADC_InitStructure; // ADC初始化结构体 ADC_WdtTypeDef ADC_WdtStructure; // ADC看门狗结构体 ADC_SingleChTypeDef ADC_SingleChStructure; // ADC单通道转换结构体 // 配置ADC初始化结构体 ADC_InitStructure.ADC_OpMode = ADC_SingleChOneMode; //单通道单次转换模式 ADC_InitStructure.ADC_ClkDiv = ADC_Clk_Div4; // 时钟频率 = PCLK / 4 = 64MHz / 4 = 16MHz ADC_InitStructure.ADC_SampleTime = ADC_SampTime5Clk; //5个ADC时钟周期 ADC_InitStructure.ADC_VrefSel = ADC_Vref_VDDA; //VDDA参考电压 ADC_InitStructure.ADC_InBufEn = ADC_BufDisable; //关闭跟随器 ADC_InitStructure.ADC_TsEn = ADC_TsDisable; //关闭内置温度传感器 ADC_InitStructure.ADC_DMAEn = ADC_DmaDisable; //不触发DMA ADC_InitStructure.ADC_Align = ADC_AlignRight; //ADC转换结果右对齐 ADC_InitStructure.ADC_AccEn = ADC_AccDisable; //转换结果累加不使能 //ADC模拟看门狗通道初始化 ADC_WdtInit(&ADC_WdtStructure); //配置单通道转换模式 ADC_SingleChStructure.ADC_DiscardEn = ADC_DiscardNull; // 单通道ADC转换结果溢出保存 ADC_SingleChStructure.ADC_Chmux = CHANNEL_ADC; // 选择ADC转换通道,AIN5:PA05 ADC_SingleChStructure.ADC_InitStruct = ADC_InitStructure; // ADC初始化结构体 ADC_SingleChStructure.ADC_WdtStruct = ADC_WdtStructure; // ADC看门狗结构体 ADC_SingleChOneModeCfg(&ADC_SingleChStructure); // 初始化配置 ADC_Enable(); //ADC使能 ADC_SoftwareStartConvCmd(ENABLE); //启动ADC转换 } /********************************************************** * 函 数 名 称:ADC_GET * 函 数 功 能:读取一次ADC值 * 传 入 参 数:无 * 函 数 返 回:测量到的值 * 作 者:LCKFB * 备 注: **********************************************************/ uint32_t ADC_GET(void) { ADC_SoftwareStartConvCmd(ENABLE); //启动ADC转换 uint32_t adcValue = ADC_GetConversionValue(); // 获取数据 return adcValue; } /****************************************************************** * 函 数 名 称:Get_Adc_MQ3_Value * 函 数 说 明: * 函 数 形 参: * 函 数 返 回:对应扫描的ADC值 * 作 者:LC * 备 注:无 ******************************************************************/ unsigned int Get_Adc_MQ3_Value(void) { uint32_t Data = 0; for(int i = 0; i < SAMPLES; i++) { Data += ADC_GET(); } Data = Data / SAMPLES; return Data; } /****************************************************************** * 函 数 名 称:Get_MQ3_Percentage_value * 函 数 说 明:读取MQ3值,并且返回百分比 * 函 数 形 参:无 * 函 数 返 回:返回百分比 * 作 者:LC * 备 注:无 ******************************************************************/ unsigned int Get_MQ3_Percentage_value(void) { int adc_max = 4095; int adc_new = 0; int Percentage_value = 0; adc_new = Get_Adc_MQ3_Value(); Percentage_value = ((float)adc_new / (float)adc_max) * 100.f; return Percentage_value; } /****************************************************************** * 函 数 名 称:Get_MQ3_DO_value * 函 数 说 明:获取MQ3DO引脚的电平状态 * 函 数 形 参:无 * 函 数 返 回:0=未检测到高于灵敏度的酒精值 1=检测到高于灵敏度的酒精值 * 作 者:LC * 备 注:调整模块上的滑动电阻即可调整灵敏度 ******************************************************************/ char Get_MQ3_DO_value(void) { if( GPIO_ReadPin(PORT_MQ3, GPIO_MQ3_DO) == GPIO_Pin_RESET ) { return 0; } else { return 1; } }

在文件bsp_mq3.h中,编写如下代码。

/* * Change Logs: * Date Author Notes * 2024-06-20 LCKFB-LP first version */ #ifndef _BSP_MQ3_H_ #define _BSP_MQ3_H_ #include "board.h" #define RCC_MQ3_GPIO_ENABLE() __RCC_GPIOA_CLK_ENABLE() #define RCC_MQ3_ADC_ENABLE() __RCC_ADC_CLK_ENABLE() #define ANALOG_GPIO_ENABLE() PA05_ANALOG_ENABLE() #define CHANNEL_ADC ADC_ExInputCH5 #define PORT_MQ3 CW_GPIOA #define GPIO_MQ3_AO GPIO_PIN_5 #define GPIO_MQ3_DO GPIO_PIN_1 //采样次数 #define SAMPLES 30 void ADC_MQ3_Init(void); unsigned int Get_Adc_MQ3_Value(void); unsigned int Get_MQ3_Percentage_value(void); char Get_MQ3_DO_value(void); #endif 四 移植验证 >>> 在自己工程中的main主函数中,编写如下。 /* * Change Logs: * Date Author Notes * 2024-06-20 LCKFB-LP first version */ #include "board.h" #include "stdio.h" #include "bsp_uart.h" #include "bsp_mq3.h" int32_t main(void) { board_init(); // 开发板初始化 uart1_init(115200); // 串口1波特率115200 ADC_MQ3_Init(); printf("ADC Demo Start...rn"); while(1) { printf("酒精含量 = %d%%rnn", Get_MQ3_Percentage_value() ); delay_ms(1000); } }

四、移植验证

在自己工程中的main主函数中,编写如下。

/* * Change Logs: * Date Author Notes * 2024-06-20 LCKFB-LP first version */ #include "board.h" #include "stdio.h" #include "bsp_uart.h" #include "bsp_mq3.h" int32_t main(void) { board_init(); // 开发板初始化 uart1_init(115200); // 串口1波特率115200 ADC_MQ3_Init(); printf("ADC Demo Start...rn"); while(1) { printf("酒精含量 = %d%%rnn", Get_MQ3_Percentage_value() ); delay_ms(1000); } }

移植现象:输出换算后的酒精浓度百分比。

wKgZPGdyFNmAKN1mAACM2nIY0cY93.webp

模块移植成功案例代码:

链接:https://pan.baidu.com/s/1D85GGqcYUgmFt25i2lqbug?pwd=LCKF

提取码:LCKF

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 检测传感器
    +关注

    关注

    0

    文章

    33

    浏览量

    10682
  • CW32
    +关注

    关注

    1

    文章

    210

    浏览量

    662
收藏 人收藏

    评论

    相关推荐

    MQ-3酒精浓度传感器相关问题咨询

    本帖最后由 majia67 于 2013-12-15 17:14 编辑 最近在做一个MQ-3气体浓度传感器的实验,从下向上看是这样的:这是里面的电路图:技术参数里写道:请问第三列括号里的内容
    发表于 12-15 17:11

    求大神 MQ-2 MQ-3怎么用

    MQ-2烟雾传感器MQ-3酒精传感器怎么用 最好有具体程序说明谢谢啦
    发表于 03-04 17:05

    有没有人用过MQ-3测过酒精浓度啊,

    本帖最后由 一发不可收 于 2015-5-13 21:47 编辑 有没有人用过MQ-3测过酒精浓度啊,出了问题请大神帮忙啊,就是mq-3测的酒精浓度不准吗?能不能测啤酒浓度啊
    发表于 05-13 13:44

    MQ-3酒精传感器怎么处理酒精浓度与电压的关系啊

    基于51单片机的酒精测试仪,MQ-3酒精传感器怎么处理酒精浓度与电压的关系啊,
    发表于 05-16 17:01

    如何采用89C52和MQ-3酒精浓度传感器设计酒精浓度测试仪?

    基于单片机的酒精浓度测试仪的设计本文设计了一款便携式的酒精浓度测试仪,该设计方案采用的是89C52单片机和MQ-3酒精浓度传感器。待
    发表于 11-10 06:44

    如何利用51单片机实现多功能酒精浓度检测仪系统的设计

    、AT89S52/51可任选,默认发STC系列单片机,需要其他型号拍时可留言或和客服联系。1.采用MQ-3酒精传感器采集酒精浓度,AD0832模数转换芯片将
    发表于 11-10 07:50

    酒精检测传感器MQ-3的使用方法

    实验1 酒精传感器实验-V201611221.实验目的学习酒精检测传感器MQ-3的使用方法;2.
    发表于 01-21 06:51

    MQ-303A酒精传感器

    MQ-303A酒精传感器 MQ-303A是一种二氧化锡半导体型酒精气体传感器,对
    发表于 04-13 16:34 109次下载

    MQ-3酒精传感器设计原理图及其程序

    MQ-3酒精传感器设计原理图及其程序 还有大量的实物图
    发表于 05-03 10:48 155次下载

    酒精传感器MQ-3资料

    酒精传感器,是比较常见的传感器之一,型号为 MQ-3
    发表于 06-17 14:59 90次下载

    微雪电子气体传感器MQ-3 Gas Sensor简介

    酒精蒸汽 MQ-3气体传感器 灵敏度可调 信号输出指示 应用于车用酒精气体报警和便携式酒精气体检
    的头像 发表于 01-02 16:26 3062次阅读
    微雪电子气体<b class='flag-5'>传感器</b><b class='flag-5'>MQ-3</b> Gas Sensor简介

    使用MQ3酒精传感器的Arduino Breathalyzer项目

    电子发烧友网站提供《使用MQ3酒精传感器的Arduino Breathalyzer项目.zip》资料免费下载
    发表于 11-02 16:19 2次下载
    使用<b class='flag-5'>MQ3</b><b class='flag-5'>酒精</b><b class='flag-5'>传感器</b>的Arduino Breathalyzer项目

    使用MQ3酒精传感器制作酒精检测器

    电子发烧友网站提供《使用MQ3酒精传感器制作酒精检测器.zip》资料免费下载
    发表于 06-15 14:34 0次下载
    使用<b class='flag-5'>MQ3</b><b class='flag-5'>酒精</b><b class='flag-5'>传感器</b>制作<b class='flag-5'>酒精</b><b class='flag-5'>检测器</b>

    基于STM32单片机的酒精浓度检测系统设计

    本项目使用Proteus8仿真STM32单片机控制,使用LCD1602显示模块、按键模块、LED和蜂鸣器、MQ-3酒精
    发表于 07-24 14:54 1962次阅读
    基于STM32单片机的<b class='flag-5'>酒精</b>浓度<b class='flag-5'>检测</b>系统设计

    CW32模块使用】MQ-4甲烷检测传感器

    转换为与该气体浓度相对应的输出信号。MQ-4气体传感器中对甲烷的灵敏度高,对丙烷,丁烷也有较好的灵敏度。这种传感器检测多种可燃性气体,特别是天然气,是一款适合多种应用的低成本
    的头像 发表于 12-30 11:36 94次阅读
    【<b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用】<b class='flag-5'>MQ</b>-4甲烷<b class='flag-5'>检测</b><b class='flag-5'>传感器</b>