The Air Quality Wing

Air Quality Featherwing with temperature, humidity, PM2.5, PM10, TVOC and eC02.

Public Chat
Similar projects worth following
Starting from
jaredwolff has 21 orders / 0reviews
Ships from United States of America
The Air Quality Wing (Previously Particle Squared), designed by Jared Wolff, is an all-in-one air quality sensor for Particle and Feather based development boards. It brings together a trio of sensors to give you as many data points as possible. That way, there won’t be anything missing when you go to measure the air inside your home or workplace.

Particulate Sensing

The Air Quality Wing has support for the Honeywell HPMA115S0 dust sensor. This sensor counts the concentration of potentially harmful particulates in the air. Plus, it does it all using lasers.

It can detect both large particles 10µm in diameter and smaller ones less than 2.5µm in diameter. These are the same readings that are commonly known as PM10 and PM2.5.

Sensing Volatile Compounds

Second to that, is the AMS CCS811. This senses volatile organic compounds (VOCs) and eC02. These types of readings are useful in places where there may be combustion. (Think stoves, furnaces, etc) It can act as an early warning mechanism. That way you stay safe, happy and healthy!

Temperature and Humidity

Finally, the Silicon Labs Si7021 temperature and humidity sensor. These readings can be used on their own. Additionally they’re used by the CCS811 to compute an accurate TVOC and C02.

Flexible Power Sources

No outlet nearby where you want to measure? No problem!

You can easily plug in almost any lithium polymer battery to your Particle or Feather based board and use it immediately. The Air Quality Wing has extra circuitry that allow you to use either USB or battery power. How great is that?

Board format

Labeled Air Quality Wing

Rev 4 Pictured Above

The board has four main parts. Here are the details on each:

  1. This is the connector for the HPMA115S0. It’s a Molex 532610871 and mates nicely with 0510210800
  2. This section is the power supply for the HPMA115. It allows you to use either battery or USB to power your particulate sensor. That way the HPMA115 get’s a clean 5V no matter what it’s connected to. The power supply is only designed to supply the HPMA115.
  3. The Si7021 is situated on a lily pad. If you look closely there is no ground fill on either side. This helps isolate the heater inside from other heat sources on the board. (Primarily the CCS811!) That way you get accurate readings using the standard factory calibration.
  4. Similarly, the CCS811 is on it’s own lily pad. This lily pad also has all ground fill removed for the same reasons as the Si7021. Earlier boards had both parts on the same lily pad which lead to erroneous temperature readings. This has been fixed as of Rev 4.

Note: to see the fully change history scroll to the bottom of this page.

Special Thanks to Tom F. who happened who wrote in with the suggestions to make the Air Quality Wing even better.

Power Supply

There are two ways to power the Air Quality Wing USB and battery. Here are some important points to remember when powering everything up!

Using USB - connect a Micro-B USB cable into a port that can supply at least 500mA. That will ensure that it will power your Particle Mesh Board as well as the Air Quality Wing. If you are using a Boron, make sure that the source can provide at least 1A of current.

Power using USB

Using battery - similarly, you will have to size the battery to how long you want to run the Air Quality Wing for. At the very least, it’s recommended to use a lithium battery larger than 100mAh. This will ensure that the HPMA115 will get enough current to take measurements.

Power using battery


Revision 3 schematic of the Air Quality Wing.

Adobe Portable Document Format - 26.24 kB - 11/16/2019 at 13:59



Revision 4 schematic of the Air Quality Wing.

Adobe Portable Document Format - 26.01 kB - 11/16/2019 at 13:59


  • 1 × HPMA115S0 PM2.5 and PM10 Particulate Sensor
  • 1 × Si7021 Temperature and Humidity Sensor
  • 1 × CCS811 TVOC and eC02 Sensor

  • When things go wrong.

    Jared04/26/2020 at 20:10 0 comments

    Everything works until it doesn't!

    One of the main things to worry about when building any board is your supply chain. In my case, some of the parts for the AQW are no longer available. 😬

    Unfortunately, it was one of the main sensors, the CCS811 and a ferrite bead. The latter is an easy fix but the former is troublesome. I originally did a comparison between the BME680, CCS811 and the SGP30-2.5K. At the time, the CCS811 was easiest to integrate with and with some firmware updates the CCS811 I had seemed to be working ok. Other folks have not had the same success though.

    So, I took a step back and reevaluated the two other choices. After fixing some serious bugs related to the SGP30 in my code, it seems to be much more stable.

    I'm going to continue my testing over the next few days. In the meantime I've sent a SGP variant of the AQW to fab. Here's the 3D render:

    I'm looking forward to kicking the tires a bit more. 😎

  • Official Case is LIVE!

    Jared04/06/2020 at 22:34 0 comments

    You read it right. The Air Quality Wing has an official case. Here's a preview of what it looks like out in the wild thanks to Jim:

    Here are some renders with some of the main features pulled out:


    If you don't like pictures here's a list:

    • Detachable lithium battery compartment.
      • Maximum battery size:
      • Width: ~81 mm
      • Length: ~41.9 mm
      • Height: ~10.35 mm (includes battery expansion wiggle room)
      • Secures with M2.5 screws
    • Precision openings for the Honeywell HPMA115S0
    • Dual purpose top opening for Particle RGB LED and Ventilation
    • No fastener clip top
    • Enough room for the original AQW and Reduced Size Version (v5 and newer)
    • Knock outs for antenna connection and battery connection
    • USB port cutout to run off USB power

    Don't care much about features and want to print the dang thing? 

    Click here to download all the .STL files!

    Thanks to everyone that made this possible. It's been a fun ride working on this project. For more information on the case and the Air Quality Wing check out the official documentation.

  • More updates

    Jared12/06/2019 at 19:55 0 comments

    It's been awesome to see what people are doing with their Air Quality Wings! David designed his own enclosure which looks great! 

    Here's the  full tweet:

    Also, thanks to some awesome feedback from the community, V5 will be coming soon! Here's a picture of things to come:

    It's the same size as other Featherwings! That means you can solder male or female headers on!  Can't wait to test it some more and get it into everyone's hands! :)

  • Getting All The Data

    Jared11/20/2019 at 16:35 0 comments

    I've been big fan of my Grafana + InfluxDB setup. It's been running strong for months. It gives me great insights on the sensors scattered throughout my apartment.

    Here's a screenshot of testing a V2 of the Air Quality Wing and a V4.

    Not many differences but the V4 seems more responsive and it's running much cooler. (Notice the spike in TVOC? That's from cooking in the kitchen as I write this!)

    I just updated the guide on Grafana to include some steps on adding alerts. You can use Grafana with almost any service. Plus, with web hooks, you can connect to services that aren't built in. 👍

  • Enclosure

    Jared11/16/2019 at 14:02 0 comments

    If you’re wondering, yes there’s an enclosure! Many thanks to the designer, Nicholas, for taking the time to make this amazing enclosure.

    Air Quality Wing Enclosure

    Provided courtesy of Nicholas.

    You can print your own by downloading the STL files in this Github repository.

    Side note: as of this writing, there are some issues with holes lining up with the holes on the board. Only the stand-offs should be used:

    Installation tip 1

    Also you may have to grind away at the area closest to the USB connector.

    Installation tip 2

    This is due to the header bits extending beyond the bottom of the board.

View all 5 project logs

  • 1
    Installing the library

    The Air Quality Wing has it’s own library! You can install it to your project using Particle Workbench’s library functionally.

    Search for and install AirQualityWing. As of this writing 1.0.2 is the latest version.

    Need more details on how to get it all working?

    Here’s a step by step:

    Open Workbench and the project you’d like to add the library to. Then, hit CMD + Shift + Pand type Install Library

    Type in AirQualityWing and press enter. Particle Workbench should install the library to your project. Watch the bottom right hand corner for status updates:

    You can also use the CLI to accomplish the same task. Remember, for this command you’ll need to be in your root firmware directory for the library to be installed correctly!

    particle library install AirQualityWing

    Remember: this library only supports Particle Mesh. Photon, E-Series, etc are not supported.

  • 2
    Using the library

    The library has been designed to be as easy as possible to use. Here are some important points if you want to add it to your own projects.

    First make sure that you create an AirQualityWing object.

    // AirQualityWing object
    AirQualityWing AirQual = AirQualityWing();

    Setting up I2C must be done before setting up the library. This is as simple as invoking Wire.begin()


    Then, to initialize you’ll have to create an AirQualityWingSettings_t structure.

        // Default settings  AirQualityWingSettings_t defaultSettings =  { MEASUREMENT_DELAY_MS, //Measurement Interval    false,                //Has HPMA115    true,                 //Has CCS811    true,                 //Has Si7021    CCS811_ADDRESS,       //CCS811 address    CCS811_INT_PIN,       //CCS811 intpin    CCS811_RST_PIN,       //CCS811 rst pin    CCS811_WAKE_PIN,      //CCS811 wake pin    HPMA1150_EN_PIN       //HPMA int pin  };

    This is where you can customize the board to match your needs. Some of the most important functionality is the default measurement interval along with enabling and disabling a certain sensor. For the Air Quality Wing all devices should be enabled. The definitions for the pin assignments will be in board.h located in the example code repository.

    AirQual.setup() will configure the drivers for all the different sensors. You also use it to configure a callback that fires after data collection.

    AirQual.setup(AirQualityWingEvent, defaultSettings);

    Data collection begins once you call the begin() function.


    In the main loop() run the .process() function

    uint32_t err_code = AirQual.process();
    if( err_code != success ) {
        switch(err_code) {      case si7021_error:         Particle.publish("err", "si7021" , PRIVATE, NO_ACK);          Log.error("Error si7021");      case ccs811_error:         Particle.publish("err", "ccs811" , PRIVATE, NO_ACK);          Log.error("Error ccs811");      case hpma115_error:         Particle.publish("err", "hpma115" , PRIVATE, NO_ACK);          Log.error("Error hpma115");      default:        break;    }

    As you can see above, you can also check for errors and report them if they happen.

    Most importantly, you can use the .toString() method to create a JSON string representation of the data. This can be used with Particle.publish() like the example below:

    // Handler is called in main loop.
    // Ok to run Particle.Publish
    void AirQualityWingEvent() {
      // Publish event  Particle.publish("blob", AirQual.toString(), PRIVATE, WITH_ACK);

    Once you’re publishing data, it’s time to collect and view it all. Check out the next section on integrations for more info.

View all instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates