diff --git a/applications/sensor.c b/applications/sensor.c index 9f575bc..c2f38c8 100644 --- a/applications/sensor.c +++ b/applications/sensor.c @@ -8,6 +8,7 @@ #include #include #include "status.h" +#include "math.h" rt_thread_t Sensor_Thread = RT_NULL; @@ -35,6 +36,7 @@ float ADC_air; float ADC_PM25; float ADC_pressure; +#define MQ2_READ_TIMES 10 float Air_Read() { rt_adc_device_t adc_dev; /* ADC 设备句柄 */ @@ -48,6 +50,28 @@ float Air_Read() return value; } +float MQ2_GetData_PPM(void) +{ + + float tempData = 0; + + + for (uint8_t i = 0; i < MQ2_READ_TIMES; i++) + { + tempData += Air_Read();; + rt_thread_mdelay(5);; + } + tempData /= MQ2_READ_TIMES; + + float Vol = (tempData*5/4096); + float RS = (5-Vol)/(Vol*0.5); + float R0=6.64; + + float ppm = pow(11.5428*R0/RS, 0.6549f); + + return ppm; + +} float PM25_Read() { rt_adc_device_t adc_dev; /* ADC 设备句柄 */ @@ -138,7 +162,7 @@ static void sensor_thread(void *parameter) { while (1) { - ADC_air = Air_Read(); // 空气质量传感器数值 0-4095 表示从差到优秀 + ADC_air = MQ2_GetData_PPM(); // 空气质量传感器数值 0-4095 表示从差到优秀 ADC_PM25 = Get_PM25_Average_Data(); // PM2.5传感器数值0-500 表示从优秀到查差 ADC_pressure = Pressure_Read(); // 压力传感器数值 0-4095 表示从差到优秀 LOG5("ADC_air:%f,ADC_PM25:%f,ADC_pressure:%f", ADC_air, ADC_PM25, ADC_pressure);