From ce1a6273eed3f28b77bae26c0c1666dad6c8cb4d Mon Sep 17 00:00:00 2001 From: GrafZeppelin Date: Sat, 3 Apr 2021 23:40:27 +0200 Subject: [PATCH] optimizations --- lib/MQ135New/MQ135New.cpp | 29 +++++++++++++++++++---------- lib/MQ135New/MQ135New.h | 15 ++++++++++----- src/main.cpp | 13 +++++++++---- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/lib/MQ135New/MQ135New.cpp b/lib/MQ135New/MQ135New.cpp index 9e6adf0..b81301d 100644 --- a/lib/MQ135New/MQ135New.cpp +++ b/lib/MQ135New/MQ135New.cpp @@ -4,21 +4,25 @@ MQ135::MQ135(uint8_t pin) { _pin = pin; } -double MQ135::getRS() { - double voltage = getVoltage(); - double RS = (double)((double)(VIn * RL) / voltage) - RL; - return RS; +double MQ135::getVoltage() { + return (double)analogRead(_pin) * VStep; } -double MQ135::getVoltage() { - int value = analogRead(_pin); - double voltage = (double)(value * VIn) / (double)(Resolution - 1); - return voltage; +double MQ135::getResistance() { + double voltage = getVoltage(); + double rs = ((VIn * RL) / voltage) - RL; + if (rs < 0) { + rs = 0; + } + return rs; } double MQ135::getPPM(float a, float b) { - double ratio = getRS() / R0; + double ratio = getResistance() / R0; double ppm = a * pow(ratio, b); + if (ppm < 0) { + ppm = 0; + } return ppm; } @@ -47,10 +51,15 @@ double MQ135::getTolueno() { } float MQ135::getR0() { - double r0 = getRS() / 3.6; + double r0 = getResistance() / 3.6; return r0; } +double MQ135::getR0By(float ppm, float a, float b) { + double tmp = (log10(ppm / a) / b) - log10(RL); + return pow(10, tmp); +} + void MQ135::setR0(float r0) { R0 = r0; } diff --git a/lib/MQ135New/MQ135New.h b/lib/MQ135New/MQ135New.h index 4e1f247..46da745 100644 --- a/lib/MQ135New/MQ135New.h +++ b/lib/MQ135New/MQ135New.h @@ -9,23 +9,28 @@ #define ATMOCO2 397.13 +const double VStep = (double)VIn / (Resolution - 1); + class MQ135 { private: uint8_t _pin; float R0; - double getPPM(float a, float b); public: MQ135(uint8_t pin); + float getR0(); + double getR0By(float ppm, float a, float b); + void setR0(float r0); + + double getVoltage(); + double getResistance(); + double getPPM(float a, float b); + double getAcetona(); double getAlcohol(); double getCO(); double getCO2(); double getNH4(); double getTolueno(); - float getR0(); - void setR0(float r0); - double getRS(); - double getVoltage(); }; #endif diff --git a/src/main.cpp b/src/main.cpp index 1b622b4..b3067b1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,5 @@ #include -#include +#include "MQ135New.h" #define PIN_MQ135 A0 #define PIN_LED_GREEN DD2 @@ -22,12 +22,17 @@ void printValues(float ppm, float temp, float humidity); void loop() { float value = co2_sensor.getCO2(); + Serial.print("co2: "); Serial.println(value); - Serial.print("rs: "); - Serial.println(co2_sensor.getRS()); + Serial.print("resistance: "); + Serial.println(co2_sensor.getResistance()); Serial.print("voltage: "); Serial.println(co2_sensor.getVoltage()); - delay(500); + Serial.print("r01: "); + Serial.println(co2_sensor.getR0()); + Serial.print("r02: "); + Serial.println(co2_sensor.getR0By(1, 110.47, -2.862)); + delay(2000); // if (count >= maxCount || count < 0) { // float temp = bme.readTemperature(); // float humidity = bme.readHumidity();