找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8775|回复: 10
收起左侧

STM32+MQ-2烟雾传感器源程序

  [复制链接]
ID:627907 发表于 2021-5-10 15:26 | 显示全部楼层 |阅读模式
最近在做C8T6的烟雾模块,网上参考有点少,整理一下分享给大家。
STM32F103C8T6自带AD,我买了个MQ-2模块直接接线
烟雾传感器 单片机
VCC 3.3V
GND GND
A0 PB6(可以改)

附上压缩包,自行下载吧

串口调试助手选择 115200-N-8-1
引脚可以改 smog.c void Smog_Init(void)选择自己需要的引脚即可

单片机源程序如下:
  1. #include "smog.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "adc.h"

  5. //初始化烟雾传感器
  6. void Smog_Init(void)
  7. {
  8.         GPIO_InitTypeDef GPIO_InitStructure;
  9.         
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTF时钟        
  11.         
  12.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                        //PA6 anolog输入
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                //模拟输入引脚
  14.         GPIO_Init(GPIOA, &GPIO_InitStructure);        
  15.         Adc2_Init();
  16. }
  17. //读取烟雾传感器的电压值
  18. u16 Smog_Get_Vol(void)
  19. {
  20.         u32 temp_val=0;
  21.         u8 t;
  22.         for(t=0;t<SMOG_READ_TIMES;t++)
  23.         {
  24.                 temp_val+=Get_Adc2(SMOG_ADC_CHX);        //读取ADC值
  25.                 delay_ms(5);
  26.         }
  27.         temp_val/=SMOG_READ_TIMES;//得到平均值
  28.         printf("Smog_ADC_Val:%d\r\n", temp_val);
  29.     return (u16)temp_val;
  30. }
  31. //分析从烟雾传感器获取的电压值,通过公式计算出可燃气体的浓度值
  32. //设Rs为传感器的体电阻,其中气体浓度上升,将导致Rs下降。而Rs的下降则会导致,MQ-2的4脚、6脚对地输出的电压增大。
  33. //所以气体浓度增大,其输出的电压也会增大。因Rs在不同气体中有不同的浓度值,所以该函数仅作为参考.
  34. u16 Smog_Trans_Concentration(void)
  35. {
  36.     u16 ulVal = 0;
  37.     u16 temp_val = Smog_Get_Vol();
  38.         u16 Rs;
  39.         Rs = SMOG_PIN46_R*(4096.0/temp_val - 1);
  40.         printf("Smog_Rs_Val:%d\r\n", Rs);
  41.         
  42.         ulVal = Rs;//这里填写公式根据Rs计算气体浓度
  43.         
  44.     return ulVal;
  45. }
复制代码

  1. #include "delay.h"

  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "smog.h"


  5. int main(void)
  6. {
  7.         delay_init();                     //延时函数初始化         
  8.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  9.          USART1_init();         //串口初始化为115200
  10.          
  11.         Smog_Init();
  12.         while(1)
  13.         {
  14.                 Smog_Trans_Concentration();
  15.         delay_ms(300);
  16.         }
  17. }

复制代码

所有资料51hei提供下载:
smog成功.7z (178.58 KB, 下载次数: 382)
回复

使用道具 举报

ID:130230 发表于 2021-5-12 18:29 | 显示全部楼层
用stm32 浪费了
回复

使用道具 举报

ID:627907 发表于 2021-5-13 16:00 | 显示全部楼层

是设计的其中一个模块,不是只做这个的
回复

使用道具 举报

ID:242753 发表于 2021-5-15 10:02 | 显示全部楼层
现在芯片太贵了,需要根据需求选择芯片了
回复

使用道具 举报

ID:968007 发表于 2021-9-27 08:55 | 显示全部楼层
有没有考虑加个温湿度和水滴
回复

使用道具 举报

ID:985445 发表于 2022-1-20 13:44 | 显示全部楼层
大佬想问一下,使用该程序之后,串口助手波特率115200,停止位1,数据位1,无奇偶位校验,但是却提示没有串口呢?
回复

使用道具 举报

ID:1011004 发表于 2022-3-17 12:07 | 显示全部楼层
为什么串口出现的数据都是0?
回复

使用道具 举报

ID:574338 发表于 2022-3-18 13:26 | 显示全部楼层
这么大一个芯片驱动这么小一个程序
回复

使用道具 举报

ID:1043931 发表于 2023-2-21 18:55 | 显示全部楼层
为啥我用你的源代码oled上显示是的数据特别大,是17000多
回复

使用道具 举报

ID:982617 发表于 2023-4-18 13:42 | 显示全部楼层
刚好用上 谢谢博主 很棒 支持感谢
回复

使用道具 举报

ID:1034097 发表于 2024-4-11 17:06 | 显示全部楼层
你好,博主,是32的PB6直接接AO吗?不需要ADC芯片吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表