Forum >Cant read anything from Winsen ZH03b sensor
Cant read anything from Winsen ZH03b sensor

Im trying to use code found on this website for this sensor, but I keep getting 0 for values for PM1, PM2.5 and PM10. The code I am using is:
https://www.winsen-sensor.com/d/files/a ... e-v2_0.pdf
Ive even tried to change bytes that are read but with no success. Any idea whats wrong?
Code: Select all
I dont have any adapter so I wired 5V, GND, and Tx Rx directly to Arduino mega. Ive tried both hardware and software serial but keep getting 0. The datasheet of used sensor://****************************** //*Abstract: Read value of PM1,PM2.5 and PM10 of air quality //*Product Link: http://www.dfrobot.com.cn/goods-1113.html //* //8 //*The RX pin on the sensor connects to pin 10 on the Arduino //*The TX pin on the sensor connects to pin 11 on the Arduino // //*Version:V3.1 //*Author:Zuyang @ HUST //*Date:March.25.2016 //****************************** #include <Arduino.h> #include <SoftwareSerial.h> #define LENG 31 //0x42 + 31 bytes equal to 32 bytes unsigned char buf[LENG]; int PM01Value=0; //define PM1.0 value of the air detector module int PM2_5Value=0; //define PM2.5 value of the air detector module int PM10Value=0; //define PM10 value of the air detector module SoftwareSerial PMSerial(10, 11); // RX, TX void setup() { PMSerial.begin(9600); PMSerial.setTimeout(1500); Serial.begin(9600); } void loop() { if(PMSerial.find(0x42)){ PMSerial.readBytes(buf,LENG); if(buf[0] == 0x4d){ if(checkValue(buf,LENG)){ PM01Value=transmitPM01(buf); //count PM1.0 value of the air detector module PM2_5Value=transmitPM2_5(buf);//count PM2.5 value of the air detector module PM10Value=transmitPM10(buf); //count PM10 value of the air detector module } } } static unsigned long OledTimer=millis(); if (millis() - OledTimer >=1000) { OledTimer=millis(); Serial.print("PM1.0: "); Serial.print(PM01Value); Serial.println(" ug/m3"); Serial.print("PM2.5: "); Serial.print(PM2_5Value); Serial.println(" ug/m3"); Serial.print("PM1 0: "); Serial.print(PM10Value); Serial.println(" ug/m3"); Serial.println(); } } char checkValue(unsigned char *thebuf, char leng) { char receiveflag=0; int receiveSum=0; for(int i=0; i<(leng-2); i++){ receiveSum=receiveSum+thebuf[i]; } receiveSum=receiveSum + 0x42; if(receiveSum == ((thebuf[leng-2]<<8)+thebuf[leng-1])) //check the serial data { receiveSum = 0; receiveflag = 1; } return receiveflag; } int transmitPM01(unsigned char *thebuf) { int PM01Val; PM01Val=((thebuf[3]<<8) + thebuf[4]); //count PM1.0 value of the air detector module return PM01Val; } //transmit PM Value to PC int transmitPM2_5(unsigned char *thebuf) { int PM2_5Val; PM2_5Val=((thebuf[5]<<8) + thebuf[6]);//count PM2.5 value of the air detector module return PM2_5Val; } //transmit PM Value to PC int transmitPM10(unsigned char *thebuf) { int PM10Val; PM10Val=((thebuf[7]<<8) + thebuf[8]); //count PM10 value of the air detector module return PM10Val; }
https://www.winsen-sensor.com/d/files/a ... e-v2_0.pdf
Ive even tried to change bytes that are read but with no success. Any idea whats wrong?