fixed calibration

This commit is contained in:
miguel5612 2019-05-29 20:58:22 -05:00
parent 1924e21e61
commit 6d1229977e
2 changed files with 28 additions and 10 deletions

View File

@ -136,13 +136,26 @@ int MQUnifiedsensor::readPPM(int m, int b) {
return floor(ppm);
}
double MQUnifiedsensor::calibrate() {
float sensor_volt; //Define variable for sensor voltage
float RS_air; //Define variable for sensor resistance
float R0; //Define variable for R0
float sensorValue; //Define variable for analog readings
sensor_volt = this->getVoltage(); //Convert average to voltage
R0 = sensor_volt / _ratioInCleanAir; //Calculate R0
return R0;
//More explained in: https://jayconsystems.com/blog/understanding-a-gas-sensor
/*
V = I x R
VRL = [VC / (RS + RL)] x RL
VRL = (VC x RL) / (RS + RL)
Así que ahora resolvemos para 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
*/
float sensor_volt; //Define variable for sensor voltage
float RS_air; //Define variable for sensor resistance
float R0; //Define variable for R0
float sensorValue; //Define variable for analog readings
sensor_volt = this->getVoltage(); //Convert average to voltage
RS_air = ((VOLT_RESOLUTION*RLValue)/sensor_volt)-RLValue; //Calculate RS in fresh air
R0 = RS_air/_ratioInCleanAir; //Calculate R0
return R0;
}
double MQUnifiedsensor::getVoltage() {
double avg = 0.0;

View File

@ -4,9 +4,16 @@
#include <Arduino.h>
#include <stdint.h>
//Count of posible lectures
#define lecturesAvailable 19
/************************Global vars************************************/
int VOLT_RESOLUTION = 5.0; // if 3.3v use 3.3
int RLValue = 10; //Value in KiloOhms
int _ratioInCleanAir, _PPM;
double RS_air,_R0, _m, _b, _ratio;
/************************Hardware Related Macros************************************/
//Index in the nameLecture vector
@ -82,10 +89,8 @@ class MQUnifiedsensor
private:
int _pin, _type, _PPM, _lecturePosInArray, _ratioInCleanAir;
double RS_air,_R0 = 11.820, _m, _b, _ratio;
int _pin, _type;
String _MQ[19], _nameLectureRequeired;
int VOLT_RESOLUTION = 5.0; // if 3.3v use 3.3
};
#endif //MQUnifiedsensor_H