基于STM32的学习记录--MQ系列计算公式
/R2-1K.#define SMOG_PIN46_R1000//烟雾传感器管脚4、6接出到地的电阻值#define SMOG_READ_TIMES10//定义烟雾传感器读取次数,读这么多次,然后取平均值#define CAL_PPM 10 // 校准环境中PPM值#define RL10 // RL阻值。
目录
所有的MQ系列传感器都需要一定的预热时间进行一个精度的校准
MQ-2
定义
//R2-1K.
#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;
}
MQ-4
定义
#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;
}
MQ-7
定义
#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;
}
MQ-135
定义
#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;
}
参考
MQ135传感器浓度转换公式https://blog.csdn.net/weixin_38075894/article/details/111589375?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170212750816800185893215%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170212750816800185893215&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduend~default-2-111589375-null-null.nonecase&utm_term=MQ%E7%B3%BB%E5%88%97%E8%AE%A1%E7%AE%97%E5%85%AC%E5%BC%8F&spm=1018.2226.3001.4450MQ7一氧化碳传感器https://blog.csdn.net/qq_41422043/article/details/89095165?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170212750816800213039874%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170212750816800213039874&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-6-89095165-null-null.nonecase&utm_term=MQ%E7%B3%BB%E5%88%97%E8%AE%A1%E7%AE%97%E5%85%AC%E5%BC%8F&spm=1018.2226.3001.4450
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)