芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
m格格巫
创作者认证
MQ系列传感器计算方法

 

  MQ系列传感器通常用于检测气体浓度,比如MQ-2用于检测可燃气体,MQ-3用于酒精检测,MQ-4用于甲烷检测等。这些传感器的输出通常是一个模拟电压信号,需要通过一定的计算将其转换为气体的浓度。通常使用以下方法来进行计算:

 

1. 线性方程法

如果传感器的输出电压与气体浓度之间存在线性关系,可以使用线性方程来计算气体浓度。

假设传感器的输出电压为 VoutVout​,气体浓度为 CC,则有:

C=a⋅Vout+bC=a⋅Vout​+b

其中 aa 和 bb 是校准系数,可以通过实验数据拟合得到。

2. 对数转换法

在许多情况下,传感器的输出电压与气体浓度之间不是线性关系,而是一种对数关系。此时可以使用对数转换法来计算气体浓度。

假设传感器的输出电压为 VoutVout​,气体浓度为 CC,则有:

log⁡(C)=a⋅log⁡(Vout)+blog(C)=a⋅log(Vout​)+b

其中 aa 和 bb 是校准系数,可以通过实验数据拟合得到。

3. 灵敏度曲线法

有些传感器的数据手册会提供一个灵敏度曲线,显示不同气体浓度下的输出电压。可以通过查找这些曲线来估计气体浓度。

通常,灵敏度曲线是一个对数-对数图,横轴是气体浓度的对数,纵轴是输出电压的对数。可以通过读取图上的数据点来估计气体浓度。

4. 参考传感器法

如果有一个已知浓度的参考气体,可以将传感器的输出电压与参考气体进行比较,从而计算出未知气体的浓度。

假设参考气体的浓度为 CrefCref​,传感器在该浓度下的输出电压为 VrefVref​,未知气体的输出电压为 VoutVout​,则有:

CCref=VoutVrefCref​C​=Vref​Vout​​

通过这个比例关系可以计算出未知气体的浓度 CC。

 

 

(以下代码均为网络搜集,由于没有标准设备参考,无法确认数值的准确性.代码仅供参考)

 

1. MQ2

#define SMOG_PIN46_R 1000 //烟雾传感器管脚4、6接出到地的电阻值
#define SMOG_READ_TIMES 10 //定义烟雾传感器读取次数,读这么多次,然后取平均值
//读取烟雾传感器的电压值
u16 Smog_Get_Vol(void)
{
u32 temp_val=0;
u8 t;
for(t=0;t<SMOG_READ_TIMES;t++)
{
temp_val+=Get_Adc2(SMOG_ADC_CHX); //读取ADC值
delay_ms(5);
}
temp_val/=SMOG_READ_TIMES;//得到平均值
printf("Smog_ADC_Val:%d\r\n", temp_val);
    return (u16)temp_val;
}
//分析从烟雾传感器获取的电压值,通过公式计算出可燃气体的浓度值
//设Rs为传感器的体电阻,其中气体浓度上升,将导致Rs下降。而Rs的下降则会导致,MQ-2的4脚、6脚对地输出的电压增大。
//所以气体浓度增大,其输出的电压也会增大。因Rs在不同气体中有不同的浓度值,所以该函数仅作为参考.
u16 Smog_Trans_Concentration(void)
{
    u16 ulVal = 0;
    u16 temp_val = Smog_Get_Vol();
u16 Rs;
Rs = SMOG_PIN46_R*(4096.0/temp_val - 1);
printf("Smog_Rs_Val:%d\r\n", Rs);

ulVal = Rs;//这里填写公式根据Rs计算气体浓度

    return ulVal;
}

 

2. MQ4

#define MAX_CONVERTED_VALUE   4095    /* Max converted value */
#define VREF                  3300
 
 
 
float MQ4_Get_Vol(void)
{
u32 temp_val=0;
u8 t;
for(t=0;t<SMOG_READ_TIMES;t++)
{
temp_val+=ADC_ConvertedValue[1]; //读取ADC值
Delay_ms(SMOG_READ_TIMES);
}
temp_val/=5;//得到平均值

  return (u16)temp_val;
}
u16 MQ_4_Value(void)
{
    u16 ppm = 0;
u16 temp = MQ4_Get_Vol();
printf("%d\n",temp);
ppm =temp*VREF/MAX_CONVERTED_VALUE ;

    return ppm;
}

 

3. MQ5

float V_clean_air = 2.0; // 清洁空气中的电压值,需要校准
float A = 1012.7; // 校准系数A,需要校准
float B = -2.786; // 校准系数B,需要校准
 
uint32_t adc_value = HAL_ADC_GetValue(&hadc1);
float V_out = 0;
float lpg_concentration = 0;
// 计算输出电压
V_out = (float)adc_value * 3.3 / 4095.0;
 
// 计算LPG浓度
lpg_concentration = A * pow(V_out / V_clean_air, B);

 

4. MQ7

#define CAL_PPM  10  // 校准环境中PPM值
#define RL 10  // RL阻值
 
static float R0;
 // 传感器校准函数
void MQ7_PPM_Calibration(float RS)
{
    R0 = RS / pow(CAL_PPM / 98.322, 1 / -1.458f);
}
 
 // 获取传感器的值
float MQ7_GetPPM(void)
{
    float Vrl = 3.3f * ADC_ConvertedValue[3]/ 4095.f;
    float RS = (3.3f - Vrl) / Vrl * RL;
MQ7_PPM_Calibration(RS);
    float ppm = 98.322f * pow(RS/R0, -1.458f);
    return  ppm;
}

 

5. MQ9

   adc_value = HAL_ADC_GetValue(&hadc1); // 获取原始ADC值
   voltage = (float)adc_value * 3.3f / 4096.0f; // 转换为电压值
   concentration = (float)(2.5f - voltage) / 0.2f; // 根据MQ9传感器曲线计算浓度值
   sprintf(buffer, "Concentration: %.2f %%\r\n", concentration); // 将浓度值转换为字符串

 

6. MQ135

#define MAX_CONVERTED_VALUE   4095    /* Max converted value */
#define VREF                  3300
 
 
//读取MQ-135传感器的电压值
float MQ135_Get_Vol(void)
{
u32 temp_val=0;
u8 t;
for(t=0;t<SMOG_READ_TIMES;t++)
{
temp_val+=ADC_ConvertedValue[2]; //读取ADC值
Delay_ms(SMOG_READ_TIMES);
}
temp_val/=5;//得到平均值

  return (u16)temp_val;
}
u16 MQ_135_Value(void)
{
    u16 ppm = 0;
u16 temp = MQ135_Get_Vol();
printf("%d\n",temp);
ppm =temp*3300/4095 ;

    return ppm;
}
版块: 每日打卡 单片机/MCU论坛
2024/12/03 13:44
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
最新帖子
LDO串联或并联二极管有什么用?电路保护与特殊应用解析缝纫机伺服0.3秒启停稳如磐石:三招驯服“针位漂移”顽疾伺服电机过载预警:从电流纹波揪出轴承暗伤的猎杀方案芯片丝印反查求助树莓派pico 2测评 - 串口
热门版块
查看更多
电子元器件
问型号
问技术
问行情
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目

8

收藏

分享

微信扫码
分享给好友

评论