A library for the MQ2 sensor. Based on https://github.com/labay11 and http://sandboxelectronics.com/?p=165

Dependents:   Detection_incendie

Committer:
emelinegen
Date:
Tue Jun 22 12:34:07 2021 +0000
Revision:
8:6eba34552ceb
Parent:
7:944051b30179
d

Who changed what in which revision?

UserRevisionLine numberNew contents of line
azazeal88 0:a5033edf6975 1 #ifndef MQ2_h
azazeal88 0:a5033edf6975 2 #define MQ2_h
azazeal88 0:a5033edf6975 3
azazeal88 0:a5033edf6975 4 #include "mbed.h"
azazeal88 0:a5033edf6975 5
azazeal88 7:944051b30179 6 #define RL_VALUE 1 //define the load resistance on the board, in kilo ohms
azazeal88 1:323f72b59e99 7 #define RO_DEFAULT 10 //Ro is initialized to 10 kilo ohms
azazeal88 1:323f72b59e99 8 #define RO_CLEAN_AIR_FACTOR 9.83f //RO_CLEAR_AIR_FACTOR=(Sensor resistance in clean air)/RO, which is derived from the chart in datasheet
azazeal88 1:323f72b59e99 9 #define CALIBARAION_SAMPLE_TIMES 5 //define how many samples you are going to take in the calibration phase
azazeal88 1:323f72b59e99 10 #define CALIBRATION_SAMPLE_INTERVAL 50 //define the time interal(in milisecond) between each samples
azazeal88 1:323f72b59e99 11 #define READ_SAMPLE_INTERVAL 50 //define how many samples you are going to take in normal operation
azazeal88 1:323f72b59e99 12 #define READ_SAMPLE_TIMES 5 //define the time interal(in milisecond) between each samples
azazeal88 0:a5033edf6975 13
azazeal88 0:a5033edf6975 14 //The curves
azazeal88 1:323f72b59e99 15 static float LPGCurve[] = {2.3f,0.21f,-0.47f};
azazeal88 0:a5033edf6975 16 static float COCurve[] = {2.3f,0.72f,-0.34f};
azazeal88 0:a5033edf6975 17 static float SmokeCurve[] = {2.3f,0.53f,-0.44f};
azazeal88 0:a5033edf6975 18
azazeal88 0:a5033edf6975 19 typedef struct {
azazeal88 0:a5033edf6975 20 float lpg;
azazeal88 0:a5033edf6975 21 float co;
azazeal88 0:a5033edf6975 22 float smoke;
azazeal88 0:a5033edf6975 23 } MQ2_data_t;
azazeal88 0:a5033edf6975 24
azazeal88 0:a5033edf6975 25 typedef enum {
azazeal88 0:a5033edf6975 26 GAS_LPG = 0,
azazeal88 0:a5033edf6975 27 GAS_CO = 1,
azazeal88 0:a5033edf6975 28 GAS_SMOKE = 2
azazeal88 0:a5033edf6975 29 } GasType;
azazeal88 0:a5033edf6975 30
azazeal88 0:a5033edf6975 31
azazeal88 0:a5033edf6975 32 class MQ2 {
azazeal88 0:a5033edf6975 33 public:
azazeal88 0:a5033edf6975 34 MQ2(PinName pin) : _pin(pin){
azazeal88 0:a5033edf6975 35 Ro = RO_DEFAULT;
azazeal88 0:a5033edf6975 36 };
azazeal88 0:a5033edf6975 37 void read(MQ2_data_t *ptr);
azazeal88 0:a5033edf6975 38 float readLPG();
azazeal88 0:a5033edf6975 39 float readCO();
azazeal88 0:a5033edf6975 40 float readSmoke();
azazeal88 0:a5033edf6975 41 void begin();
azazeal88 0:a5033edf6975 42 private:
azazeal88 0:a5033edf6975 43 AnalogIn _pin;
azazeal88 0:a5033edf6975 44 float MQRead();
azazeal88 0:a5033edf6975 45 float MQGetGasPercentage(float rs_ro_ratio, GasType gas_id);
azazeal88 0:a5033edf6975 46 int MQGetPercentage(float rs_ro_ratio, float *pcurve);
azazeal88 0:a5033edf6975 47 float MQCalibration();
azazeal88 5:8b7ba76a7a76 48 float MQResistanceCalculation(int raw_adc);
azazeal88 0:a5033edf6975 49 float Ro;
azazeal88 0:a5033edf6975 50 };
azazeal88 0:a5033edf6975 51
azazeal88 0:a5033edf6975 52 #endif