NOTE: this article covers usage of the previous Air Quality Wing library and hardware. Please refer to the docs for the latest version of the Air Quality Wing
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.
What’s on board:
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
Rev 4 Pictured Above
The board has four main parts. Here are the details on each:
- This is the connector for the HPMA115S0. It’s a Molex 532610871 and mates nicely with 0510210800
- 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.
- 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.
- 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.
Where can I get one?
They’re available for purchase directly from the following:
Schematics
A schematic of each design are available for download below:
The hardware up to Revision 3 are also available on Github and BitBucket:
- https://github.com/jaredwolff/air-quality-wing-hardware
- https://bitbucket.org/circuitdojo/air-quality-wing-hardware/
Getting Setup
Headers
Every Air Quality Wing comes with a set of female headers. One is 12 pins and the other is 16. They should always be populated on the rows closest to the sensors. Here’s an illustration:
The best way to solder them is to insert them. Then hold the board and headers upside down and place on the end of table.
Slide the board so it’s the headers are sitting flat. Solder one pin on each header. Check to make sure the headers are perpendicular with the board.
Note: this is the area where things could go wrong. Always check your work before continuing.
Note 2: remember, you’ll always be soldering on the side without components and the Rocket Bulb logo.
Connecting the Particle Sensor
If you purchased an Air Quality Wing with an HPMA115S0, it will come with a 50mm cable. Each cable has 4 wires. When inserting the cable, make sure that the wire orientation matches the position on the Air Quality Wing and HPMA115S0.
First insert the cable into the HPMA115S0 if it hasn’t already. Note that the group of three wires are on the left side and the Honeywell logo is visible.
Then plug the cable into the Air Quality Wing. Notice the group of three are on the right side.
That’s it! You’re ready to start using your HPMA115S0 particle sensor!
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.
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.
Software
Important note: this requires knowledge of how to program Particle Gen 3 boards. More information on how to use Particle’s boards is here.
You can get started immediately by cloning the latest working code from Github:
git clone git@github.com:jaredwolff/air-quality-wing-code.git
Alternatively, if you don’t have SSH setup, you can clone using HTTPS.
git clone https://github.com/jaredwolff/air-quality-wing-code.git
If you are working on your own project, you can also install the library separately using the instructions below. If you want to get started as quickly as possible continue with these steps:
- Open the repo with Visual Code: (code . using the command line, or file->open)
- Open
/src/AirQualityWing.ino
- Select your target device in the lower bar (Options are
xenon
,argon
,boron
) - Hit cmd + shift + p to get the command menu
- Select
Compile application (local)
. You can also chooseCloud flash
. - The application will be loaded to your Particle device.
- Afterwards you can hit cmd + shift + p and select
Particle: Serial monitor
Note: if you’re not using the HPMA115 make sure you disable it. Search the code for AirQualityWingSettings_t
and change true, //Has HPMA115
to false, //Has HPMA115
Have fun!
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 + P and 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.
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()
Wire.setSpeed(I2C_CLK_SPEED);
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.
AirQual.begin();
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.
Integrations
There are many integrations that you can use with the Air Quality Wing. One of the most useful is the Grafana + InfluxDB integration. A full writeup on how to use that is located here.
Enclosure
Official Enclosure
The official enclosure is here!
Download link:
Click here to download all the .STL files and get printing!
The features:
- Detachable lithium battery compartment.
- Maximum battery size:
- Width: ~114 mm
- Length: ~48 mm
- Height: ~31 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
Here are a few photos:
Changelist
5/23/2020: v54
- Reduced the height slightly so the HPMA doesn’t move as much
5/13/2020: v53
- Re-designed top snap
- Increased length to give more room for cables.
- Tweaked height for HPMA sensor (so it doesn’t rattle around)
- Antenna break outs are real!
- USB fit improvements
Customer Designed
Daniel’s Enclosure
Here’s Daniel’s no-battery model he developed.
You can get the goods at his Github here.
Nicholas' Enclosure
Many thanks to the designer, Nicholas, for taking the time to make this amazing 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:
Also you may have to grind away at the area closest to the USB connector.
This is due to the header bits extending beyond the bottom of the board.
Version History
Here is the changes since revision 2 of this board.
Revision 5 (coming soon)
- Reduced the size to match traditional Featherwing footprint.
- Change the CCS811 to the SGP30-2.5K.
- Remove all resistors associated with the CCS811.
Revision 4
- Relocated the Si7021 to a separate “lily pad” for heat isolation
Revision 3
- Fixed bug related supply voltage not being stable to the HPMTA115S0
- Relocated D7 to D5 for CCS811 reset signal
- Changed connector pinout. That way the cable does’t have to be twisted.
Revision 2
- Added ferrite to shunt noise
- Swapped out MCP1624 with MCP1640
Last Modified: 2021.12.8