Saturday, November 30, 2019

Air quality PM sensors comparison for arduino

Best accuracy sensor:
( note that it works under 70% humidity depending on what weather conditions you have where you life)


The Nova SDS011 - also recommenced by the https://luftdaten.info/ project


Price: 17$
Official website: http://www.inovafitness.com/en/a/chanpinzhongxin/95.html
Buy from aliexpress: http://s.click.aliexpress.com/e/Nz5SXZBE

Connections for code:
-connect pin TXD on SDS011 to pin 2 in section (Digital PWM) on arduino (it will act as RX on arduino)
-connect pin RXD on SDS011 to pin 3 in section (Digital PWM) on arduino (it will act as TX on arduino)
-5v and gnd - same

Arduino Code: - it will print both to a i2c lcd display and serial console

#include "LiquidCrystal_I2C.h"
#include "SoftwareSerial.h"
SoftwareSerial mySerial(2, 3); 

// Global Variables
static unsigned char buf[7], buffSDS[25];
unsigned int PM2_5,PM10=0;

LiquidCrystal_I2C lcd(0x27,20,4); 

void setup() {
  // put your setup code here, to run once:
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  lcd.clear();

  
  // Read SDS011 on Serial 
  mySerial.begin(9600);  // 
  mySerial.setTimeout(200);
  //mySerial.readBytesUntil(0xAB,buffSDS,20); // read serial until 0xAB Char received

  // Serial Monitor
  Serial.begin(115200);  


}

void loop() {
  // put your main code here, to run repeatedly:
  // Read SDS011
  mySerial.readBytesUntil(0xAB,buffSDS,20);

  // Serial monitor, print the HEX bytes received in buffSDS
//Serial.write(buffSDS,10);

for ( int8_t i=0; i<10 ; i=i+1 )
  {
  Serial.print( buffSDS[i],HEX);
  Serial.print(" ");

  }
Serial.println("");

  
PM2_5 = ((buffSDS[3]*256)+buffSDS[2])/10; // extract PM2.5 value
Serial.print("PM2.5: ");
Serial.println(PM2_5);

lcd.setCursor(0,0);
lcd.print("PM2.5: ");
lcd.print(PM2_5);


PM10 = ((buffSDS[5]*256)+buffSDS[4])/10; // extract PM10 value
Serial.print("PM10: ");
Serial.println(PM10);
lcd.print((char)228);
lcd.print("g/m3");

lcd.setCursor(0,1);
lcd.print("PM10: ");
lcd.print(PM10);
lcd.print((char)228);
lcd.print("g/m3");


delay(500);
}

The sensor has 8000 hours of usage and outputs data every second. In order to use it for longer time you have to use the sleep and wake up vis serial.

Use this library : https://github.com/ricki-z/SDS011
It also has support for hardware serial connection for the esp32 which does not have software serial.

Check example in the library.


Plantower
Official website: http://www.plantower.com/en/content/?108.html

https://airly.eu/en/ - a project by Philips in witch they use the Plantower PMS5003
You can see the sensor and the insides of their sensor here:
https://www.youtube.com/watch?v=FREADCgdq2M

Plantower PMS5003

Buy the Plantower PMS5003 from aliexpress: http://s.click.aliexpress.com/e/tb2qOLXK
Price: 12-13$


Popular Pm monitors on the market and what sensors they use:

Laser Egg - uses Plantower PMS3003


AirVisual Node : proprietary PM sensorSenseAir S8 - for CO2




Additional resources:

http://aqicn.org/sensor/

https://www.mysensors.org/build/dust

No comments:

Post a Comment