mirror of
				https://github.com/miguel5612/MQSensorsLib.git
				synced 2025-10-30 14:44:04 +03:00 
			
		
		
		
	fixed calibration
This commit is contained in:
		| @@ -136,12 +136,25 @@ int MQUnifiedsensor::readPPM(int m, int b) { | |||||||
|   return floor(ppm); |   return floor(ppm); | ||||||
| } | } | ||||||
| double MQUnifiedsensor::calibrate() { | double MQUnifiedsensor::calibrate() { | ||||||
|  |   //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 sensor_volt; //Define variable for sensor voltage | ||||||
|   float RS_air; //Define variable for sensor resistance |   float RS_air; //Define variable for sensor resistance | ||||||
|   float R0; //Define variable for R0 |   float R0; //Define variable for R0 | ||||||
|   float sensorValue; //Define variable for analog readings |   float sensorValue; //Define variable for analog readings | ||||||
|   sensor_volt = this->getVoltage(); //Convert average to voltage |   sensor_volt = this->getVoltage(); //Convert average to voltage | ||||||
|     R0 = sensor_volt / _ratioInCleanAir; //Calculate R0 |   RS_air = ((VOLT_RESOLUTION*RLValue)/sensor_volt)-RLValue; //Calculate RS in fresh air  | ||||||
|  |   R0 = RS_air/_ratioInCleanAir; //Calculate R0  | ||||||
|   return R0; |   return R0; | ||||||
| } | } | ||||||
| double MQUnifiedsensor::getVoltage() { | double MQUnifiedsensor::getVoltage() { | ||||||
|   | |||||||
| @@ -4,9 +4,16 @@ | |||||||
| #include <Arduino.h> | #include <Arduino.h> | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
|  |  | ||||||
|  |  | ||||||
| //Count of posible lectures | //Count of posible lectures | ||||||
| #define lecturesAvailable 19 | #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************************************/ | /************************Hardware Related Macros************************************/ | ||||||
|  |  | ||||||
| //Index in the nameLecture vector | //Index in the nameLecture vector | ||||||
| @@ -82,10 +89,8 @@ class MQUnifiedsensor | |||||||
|      |      | ||||||
|  |  | ||||||
|   private: |   private: | ||||||
|     int _pin, _type, _PPM, _lecturePosInArray, _ratioInCleanAir; |     int _pin, _type;  | ||||||
|     double RS_air,_R0 = 11.820, _m, _b, _ratio; |  | ||||||
|     String _MQ[19], _nameLectureRequeired;    |     String _MQ[19], _nameLectureRequeired;    | ||||||
|     int VOLT_RESOLUTION  = 5.0; // if 3.3v use 3.3 |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif //MQUnifiedsensor_H | #endif //MQUnifiedsensor_H | ||||||
		Reference in New Issue
	
	Block a user
	 miguel5612
					miguel5612