Tengo un sensor de CO2 MH-Z19, según el hoja de datos Puedo obtener valores de PPM a través de UART y PWM. La diferencia entre ambos métodos es el límite en la concentración de CO2, donde UART I debería tener lecturas entre 0-5000ppm, y a través de PWM debería tener lecturas entre 0-2000ppm.
Solo quería saber si puedo tener las mismas lecturas utilizando ambos métodos, pero después de haberlo intentado, me he dado cuenta de que tengo valores diferentes.
Estoy usando el siguiente código para probar:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(A0, A1); // RX, TX
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
char response[9];
#define pwmPin 10
int prevVal = LOW;
long th, tl, h, l, ppm, ppm2 = 0.0;
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(pwmPin, INPUT);
}
void loop(){
mySerial.write(cmd,9);
mySerial.readBytes(response, 9);
int responseHigh = (int) response[2];
int responseLow = (int) response[3];
ppm = (256*responseHigh)+responseLow;
//CO2 via pwm
do {
th = pulseIn(pwmPin, HIGH, 1004000) / 1000.0;
tl = 1004 - th;
ppm2 = 2000 * (th-2)/(th+tl-4);
} while (ppm2 < 0.0);
Serial.println(ppm);
Serial.println(ppm2);
Serial.println("-----------");
delay(5000);
}
Las lecturas que estoy obteniendo son las falsas:
643
356
-----------
643
356
-----------
¿Alguna idea de lo que podría estar pasando aquí? ¿Debo sospechar que el sensor está dañado? O bien, estoy haciendo algo mal?
Gracias y saludos cordiales.
BTW: La prueba se realiza con un Arduino Pro Mini ATMega 328, 3.3v, 8Mhz. El sensor está siendo alimentado por 5v desde un NodeMCU (lolin).