MH-Z19 with Arduino R3 0 outputValue
-
Hi,
I am using this code to get C02 value. But always I get this result (CRC 0/0) even after waiting more than 3 min for the healing process.#include <SoftwareSerial.h>; SoftwareSerial mySerial(A0, A1); // A0 - к TX сенсора, A1 - к RX byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; unsigned char response[9]; void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { mySerial.write(cmd, 9); memset(response, 0, 9); mySerial.readBytes(response, 9); int i; byte crc = 0; for (i = 1; i < 8; i++) crc+=response[i]; crc = 255 - crc; crc++; if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) { Serial.println("CRC error: " + String(crc) + " / "+ String(response[8])); } else { unsigned int responseHigh = (unsigned int) response[2]; unsigned int responseLow = (unsigned int) response[3]; unsigned int ppm = (256*responseHigh) + responseLow; Serial.println(ppm); } delay(10000); }I used the sensor directly without any calibration. Another note, why I can only use 3.3V, the 5v make my Arduino card shutdown
-
Hi,
I am using this code to get C02 value. But always I get this result (CRC 0/0) even after waiting more than 3 min for the healing process.#include <SoftwareSerial.h>; SoftwareSerial mySerial(A0, A1); // A0 - к TX сенсора, A1 - к RX byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; unsigned char response[9]; void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { mySerial.write(cmd, 9); memset(response, 0, 9); mySerial.readBytes(response, 9); int i; byte crc = 0; for (i = 1; i < 8; i++) crc+=response[i]; crc = 255 - crc; crc++; if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) { Serial.println("CRC error: " + String(crc) + " / "+ String(response[8])); } else { unsigned int responseHigh = (unsigned int) response[2]; unsigned int responseLow = (unsigned int) response[3]; unsigned int ppm = (256*responseHigh) + responseLow; Serial.println(ppm); } delay(10000); }I used the sensor directly without any calibration. Another note, why I can only use 3.3V, the 5v make my Arduino card shutdown
@douma-rahma
I am using a simpeler code:
Your calculation seems a bit complex.
I do it as follows:
The CO2 concentration = 2000 x (TH-2ms)/(TH+TL-4ms)As the total cycle is always 1004 ms, only need to read TH and can simplify the formula to Cppm=2x(TH-2ms).
{
int ppm = pulseIn(CO2Pin, HIGH);
ppm = (2 * (ppm - 2));
return ppm;
}There might be many reasons why you want to do it by reading the registers, but at least could use the code above to see if your sensor is OK.
Are you giving it enough power (minimally 150mA) -
@douma-rahma
I am using a simpeler code:
Your calculation seems a bit complex.
I do it as follows:
The CO2 concentration = 2000 x (TH-2ms)/(TH+TL-4ms)As the total cycle is always 1004 ms, only need to read TH and can simplify the formula to Cppm=2x(TH-2ms).
{
int ppm = pulseIn(CO2Pin, HIGH);
ppm = (2 * (ppm - 2));
return ppm;
}There might be many reasons why you want to do it by reading the registers, but at least could use the code above to see if your sensor is OK.
Are you giving it enough power (minimally 150mA)@Ed1500 Thank you for your response I will try it. Are you using PWM or not?
-
@douma-rahma
I am using a simpeler code:
Your calculation seems a bit complex.
I do it as follows:
The CO2 concentration = 2000 x (TH-2ms)/(TH+TL-4ms)As the total cycle is always 1004 ms, only need to read TH and can simplify the formula to Cppm=2x(TH-2ms).
{
int ppm = pulseIn(CO2Pin, HIGH);
ppm = (2 * (ppm - 2));
return ppm;
}There might be many reasons why you want to do it by reading the registers, but at least could use the code above to see if your sensor is OK.
Are you giving it enough power (minimally 150mA)@Ed1500 I am connecting the Arduino via USB port
-
@Ed1500 Thank you for your response I will try it. Are you using PWM or not?
@douma-rahma yes, I am using determining the Pulsewidth.
can use TTLUART (like you) and analog I think but I found measuring pulsewidth easiest
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login