Skip to content

This library calculates the slopes of a wide variety of gas sensors, popular models such as [MQ-2, MQ-3, MQ-4, MQ-5, MQ-6, MQ-7, MQ-8, MQ-9, MQ131, MQ-135, MQ-136, MQ-137, MQ303A, MQ307A, MQ309A]. It also supports Geiger Counters for Radioactive analysis It integrates with Matplotlib for data visualization, facilitates Data Science apply.

License

Notifications You must be signed in to change notification settings

abcdaaaaaaaaa/MQSpaceData.h

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MQSpaceData

What awaits v4.0.0?

1) Advanced Data Science System for Regression Calculations

MQ-135_gas_curves

2) Formulated Correction Coefficients depending on Temperature and Humidity

MQ-135_correction_coefficient

3) Comparison of theoretical "Ratio" measurements and practical "Sensor" measurements in 3D graphics

MQ135_CO2_3D)

4) Slope Estimation in Time-Dependent 4D Space

4D_Slope_Estimation

Formulla

  1. ppm = a*ratio^b (a: valuea b: valueb)
  2. ppm = 10^[(log10(ratio)-b)/m] (m: logm b: logb)

If R^2 equals 1 :

a*ratio^b = 10^[(log10(ratio)-b)/m]
logm = valueb, logb = log10(valuea)

1]

loghello)

[(1,10), (2,4), (3,3)]

loge(b) = ln(b)

(ln(1),ln(10)) for ≈ (0,2.3026)

(ln(2),ln(4)) ≈ (0.6931,1.3863) and

(ln(3),ln(3)) ≈ (1.0986,1.0986)

b = ∑ i=1 n (x i − x ˉ ) 2 ∑ i=1 n (xi − xˉ)(yi−yˉ)

ln(x):(0,0.6931,1.0986)ln(y):(2.3026,1.3863,1.0986)ln(y)ˉ=(2.3026+1.3863+1.0986)/3≈1.5958

ln(x)ˉ=(0+0.6931+1.0986)/3≈0.5972

b = (0−0.5972)(2.3026−1.5958)+(0.6931−0.5972)(1.3863−1.5958)+(1.0986−0.5972)(1.0986−1.5958)/(0−0.5972)^2+(0.6931−0.5972)^2+(1.0986−0.5972)^2 ≈ -1.2

ln(a) = − ln ˉ (y) - b ln ˉ (x) ≈ 1.5958−(−1.2)⋅0.5972≈2.31244

a=e^2.31244 ≈ 9.947

b ≈ -1.2

a ≈ 9.947

2]

y = mx+ n
n = b
log10(y) = m*log10(x) + b

-b = m*log10(x) - log10(y)

last b = log10(y) - m*log10(x)

m = (y - y0) / (x - x0)

m = (log10(y) - log10(y0)) / (log10(x) - log10(x0))

if y= a*x^b:

last m = log10(y/y0) / log10(x/x0)

m = slope of the line

b = intersection point

m = log10(y/y0) / log10(x/x0)

b = log10(y) - m*log10(x)

    if r_squared >= 0.9995:
        print("R-squared value for {gas name} is above 0.9995, plotting against first and last values.")
        
        x0, y0 = x[0], y[0]
        xn, yn = x[-1], y[-1]
        b = np.log10(yn/y0) / np.log10(xn/x0)
        a = 10**(np.log10(yn) - b * np.log10(xn))
        b2 = np.log10(yn) - b * np.log10(xn)
        b2_rounded = round(b2, 4)
        a_rounded = round(a, 4)
        b_rounded = round(b, 4)

The first formula is determined according to all points (OldCurve.py, OldCurve), while the second formula is determined according to the first and last point. Therefore, in order to collect them all in the same formula and to increase the accuracy rate, we used the method in the second formula and took the logarithm (if R^2 = 1 (%100) always: logm = valueb, logb = log10(valuea)) for slopes greater than 99.95% and collected them all in the first formula, thus we increased the accuracy rate without having to use 2 different formulas (Regression.py, NewCurve).

V = I x R

V = I x R -> VRL = [VC / (RS + RL)] x RL -> VRL = (VC x RL) / (RS + RL)

RS: -> VRL x (RS + RL) = VC x RL -> (VRL x RS) + (VRL x RL) = VC x RL -> (VRL x RS) = (VC x RL) - (VRL x RL)

RS = [(VC x RL) - (VRL x RL)] / VRL -> RS = [(VC x RL) / VRL] – RL

Rs = (voltage * Rload) / (voltage/2^n-1)) - (Rload)

SensorValue / 2^(AdcBitResulation1-1) -> SensorCalibrationValue / 2^(AdcBitResulation2-1)

Rs = 2^(AdcBitResulation1-1) * [Rload / SensorValue - Rload] -> calibrationRs = 2^(AdcBitResulation2-1) * [Rload / SensorCalibrationValue – Rload]

Ro = calibrationRs / Air ||| ratio = Rs / Ro -> ratio = Rs / (calibrationRs / Air) -> ratio = Rs x Air / calibrationRs

Ratio = (2^(AdcBitResulation1-1) * [Rload1 / SensorValue – Rload1]) * RsRoMQAir / (2^(AdcBitResulation2-1) * [Rload2 / SensorCalibrationValue – Rload2]) [Rs / Ro]

If Sensor Calibration and Sensor Measurement are Under the Same Conditions:

Rload1 = Rload2 && 2^(AdcBitResulation1-1) = 2^(AdcBitResulation2-1)

SensorRange = [0 - 2^(AdcBitResulation-1)]

if MinSensorValue == 0 && MaxSensorValue == 1: SensorRange [0 - 1]

if SensorRange [0 - 1]: 0 <= (SensorValue) <= 1 && 0 <= SensorCalibrationValue <= 1

Ratio = (MaxSensorValue * [Rload / SensorValue – Rload]) * RsRoMQAir / (MaxSensorValue * [Rload / SensorCalibrationValue – Rload]) [Rs / Ro]

Ratio = [Rload / SensorValue – Rload] * RsRoMQAir / [Rload / SensorCalibrationValue – Rload] [Rs / Ro]

Ratio = f(R) * RsRoMQAir

f(R) = [R / S - R] / [R / C - R] -> [(R - RS) / S] / [(R - RC) / C] -> [(R - RS) / S] * [C / (R - RC)]

f(R) = [(R - RS) / S] * [C / (R - RC)] = [C * (R - RS) / S (R - RC)]

g(x) = (R - Rx1) / (R - Rx2) -> g(x) = (1 - x1) / (1 - x2)

f(R) = [(R - RS) / S] * [C / (R - RC)] = [C * (1 - S) / S (1 - C)]

Ratio = [SensorCalibrationValue * (1 - SensorValue)] * RsRoMQAir / [SensorValue * (1 - SensorCalibrationValue)] [Rs / Ro]

Calculate Ratio

(1) if ratio = Rs / Ro:

ratio = [SensorCalibrationValue * (1 - SensorValue)] * RsRoMQAir / [SensorValue * (1 - SensorCalibrationValue)]

(2) if ratio = Rs / Rs:

ratio = [SensorCalibrationValue * (1 - SensorValue)] / [SensorValue * (1 - SensorCalibrationValue)] [No RsRoMQAir]

(3) if ratio = Ro / Rs:

ratio = [SensorCalibrationValue * (1 - SensorValue)] / [SensorValue * (1 - SensorCalibrationValue)] * RsRoMQAir

Ratio for Sensors

STATUS 1: MQ-2, MQ-3, MQ-4, MQ-5, MQ-6, MQ-7, MQ-8, MQ-9, MQ-135, MQ-136, MQ-137 [Almost All & Standart]

STATUS 2: MQ303A, MQ307A, MQ309A [A models]

STATUS 3: MQ131 [MQ131 only]

MQDataScience

"The first and only Arduino library where Geiger Counter and MQ Sensors combine with Data Science"

3D Surface Diagram for MQ-135 Gases

MQ135_CO2_3D)

4D Slope Estimation

4D_Slope_Estimation

MQ-135 NewCurve & MQ-135 OldCurve

MQ-135_gas_curves

MQ-2 NewCurve & MQ-2 OldCurve

MQ-2_gas_curves

MQ-3 NewCurve & MQ-3 OldCurve

MQ-3_gas_curves

MQ-4 NewCurve & MQ-4 OldCurve

MQ-4_gas_curves

MQ-5 NewCurve & MQ-5 OldCurve

MQ-5_gas_curves

MQ-6 NewCurve & MQ-6 OldCurve

MQ-6_gas_curves

MQ-7 NewCurve & MQ-7 OldCurve

MQ-7_gas_curves

MQ-8 NewCurve & MQ-8 OldCurve

MQ-8_gas_curves

MQ-9 NewCurve & MQ-9 OldCurve

MQ-9_gas_curves

MQ131 NewCurve & MQ131 OldCurve

MQ-131_gas_curves

MQ-136 NewCurve & MQ-136 OldCurve

MQ-136_gas_curves

MQ-137 NewCurve & MQ-137 OldCurve

MQ-137_gas_curves

MQ303A NewCurve & MQ303A OldCurve

MQ-303A_gas_curves

MQ307A NewCurve & MQ207A OldCurve

MQ-307A_gas_curves

MQ309A NewCurve & MQ309A OldCurve

MQ-309A_gas_curves

NOTE: [For detailed explanation, You can also check out the github wiki page] https://github.com/abcdaaaaaaaaa/MQSpaceData.h/wiki

MQSpaceData MQ Sensor List

MQ Sensor List: [MQ-2, MQ-3, MQ-4, MQ-5, MQ-6, MQ-7, MQ-8, MQ-9, MQ131, MQ-135, MQ-136, MQ-137, MQ303A, MQ307A, MQ309A] MQSensorList

MQSpaceData Geiger Counter

GeigerCounter

You can access the library's article here

About

This library calculates the slopes of a wide variety of gas sensors, popular models such as [MQ-2, MQ-3, MQ-4, MQ-5, MQ-6, MQ-7, MQ-8, MQ-9, MQ131, MQ-135, MQ-136, MQ-137, MQ303A, MQ307A, MQ309A]. It also supports Geiger Counters for Radioactive analysis It integrates with Matplotlib for data visualization, facilitates Data Science apply.

Topics

Resources

License

Stars

Watchers

Forks