MODULAIR
Product manual for the 2025 generation of MODULAIR (i.e., MODULAIR-X).
Last updated
Was this helpful?
Product manual for the 2025 generation of MODULAIR (i.e., MODULAIR-X).
Last updated
Was this helpful?
Product Name
MODULAIR
SKU(s)
MOD-X-015-NORAM
For use in North America
MOD-X-015-GLOBAL
For use outside North America
Datasheet
MODULAIR™ provides real-time estimates of particulate matter concentrations (PM1, PM2.5, and PM10), the particle size distribution, and four gas-phase pollutants (CO, NO, NO2, O3). MODULAIR™ uses the same patented particle measurement technology found in the MODULAIR-PM, which combines nephelometry with single-particle scattering to accurately measure aerosol loadings across a variety of environments.
MODULAIR™ is designed as an internet-connected device and does not work as intended without an internet connection. All MODULAIR™ devices are multi-radio and come equipped with an LTE modem and Wi-Fi, and can seamlessly transition between the two radios.
MODULAIR™ is designed to work with QuantAQ's add-on systems, including the and .
MODULAIR™ is protected by US Patent No. US 12,265,007 as well as multiple pending patents.
PM1, PM2.5, PM10
0 to 2,000 µg/m3
Please refer to spec sheet.
Particle Size Distribution
0.35 to 40.0 µm (24 size bins)
Not yet determined.
Ozone (O3)
0 to 250 ppb
5 ppb or 20%
Carbon Monoxide (CO)
0 to 13,000 ppb
70 ppb or 20%
Nitrogen Oxide (NO)
0 to 2,500 ppb
5 ppb or 35%
Nitrogen Dioxide (NO2)
0 to 2,500 ppb
5 ppb or 35%
For more information on the operating principle and performance of the MODULAIR, please refer to the following technical notes:
🔋 Power
12V 1.25W average consumption
🗼 Communication
North America LTE Cat M1 with 2G fallback Wi-Fi (2.4 GHz or 5 GHz) Global LTE Cat 1 with 2G/3G fallback Wi-Fi (2.4 GHz or 5 GHz)
📈 Data
Web interface (quant-aq.com) Programmatic access (QuantAQ API) Local storage (µSD Card)
Weatherproof rating
IP67
Operating temperature
-20º to 45ºC
Operating humidity
5 to 95%, non-condensing
Dimensions
11.04" x 9.04" x 5.72"
Weight
6 lbs (2.72 kg)
The MODULAIR™ air quality sensor complies with part 15 of the FCC rules for class A devices. Operation is subject to the following two conditions: (1) this device may not cause harmful interference; (2) this device must accept any interference received, including interference that may cause undesired operation. The MODULAIR™ contains a pre-certified multi-radio modem (2AEMI-M404).
Below is a top-down view of the MODULAIR. Air flows in through the port on the sensor base (Figure 2.2) and flows out the upper-right side of the sensor.
The base of the MODULAIR highlights the air inlet port (center) and the three connection ports:
M8 4P Solar Comms. The upper-left port is for connecting the M8 RS-485 communication cable between the Smart Solar Power System (if purchased) and the MODULAIR. If not in use, ensure the M8 dust cap is in place to prevent damage to the instrument.
M12 4P Power. The lower-left port is for connecting the M12 power cable from either the Smart Solar Power System or the provided 12V power cable.
M12 5P Weather Station. The port on the right side is for connecting a supported Gill Weather Station. If not in use, ensure the M12 dust cap is in place to prevent damage to the instrument.
The front panel of the MODULAIR can be accessed by opening the lid of the enclosure. The panel provides access to the power switch, SD card, and Status LED, all of which are shown in Figure 2.3.
To access the Core Board, open the front panel after unscrewing the screw located just above the µSD card. Once open, you can access the mode and reset buttons and the USB debugging port for streaming logs. When closing the lid, make sure it is aligned such that you do not break off the µSD card slot.
When unpacking your MODULAIR, you should expect to find the following:
MODULAIR Air Quality Sensor
12V, 2A USB-C Power Brick
USB-C to M12 Power Cable
Device Registration Card
MODULAIR Pole Mount Kit
If any of these components are missing, please contact QuantAQ Support via the in-app chat.
Each device ships with a Registration Card containing a QR code and a short confirmation code. Follow the instructions below to register your device:
The MODULAIR should be mounted using the provided Pole Mount Kit. The Pole Mount Kit is designed to be installed using either the provided back plates and carriage bolts for smaller posts or hose clamps for larger posts. If an existing pole or post is not available in the location where you will be installing your sensor, we recommend acquiring a tripod or similar.
Pole Mount Kit with Back Plates
1.25" - 2"
Pole Mount Kit with Hose Clamps or Straps
2" - 6"
To physically install your sensor, follow these instructions:
Plug in the M12 to USB-C power cable, open the front panel of the MODULAIR, and turn the device on by pushing the power switch into the on position.
At this point, the Status LED on your MODULAIR will begin to blink, and within a few minutes, should begin breathing cyan, which indicates everything is working.
There are three ways in which you can access data for the MODULAIR:
Raw, 5-second data is stored locally on the µSD card
Data can be downloaded as a CSV via the QuantAQ Cloud console
Data can be downloaded via the QuantAQ Cloud API
The data formats are slightly different, though largely consistent. Each approach is documented below.
Table 4.1 below documents the columns available in the downloaded data and what they mean.
timestamp
The sample timestamp in ISO format
fw
The current firmware version
flag
The status flag corresponding to this record
soc
%
The state of charge of the onboard LiPo battery
sample_temp
ºC
The in-box temperature
sample_rh
%
The in-box relative humidity
bin0
p/cm3
Number of particles per cubic cm in the OPC's bin0 (0.35 - 0.46 µm)
bin1
p/cm3
Number of particles per cubic cm in the OPC's bin1 (0.46 - 0.66 µm)
bin2
p/cm3
Number of particles per cubic cm in the OPC's bin2 (0.66 - 1.0 µm)
bin3
p/cm3
Number of particles per cubic cm in the OPC's bin3 (1.0 - 1.3 µm)
bin4
p/cm3
Number of particles per cubic cm in the OPC's bin4 (1.3 - 1.7 µm)
bin5
p/cm3
Number of particles per cubic cm in the OPC's bin5 (1.7 - 2.3 µm)
bin6
p/cm3
Number of particles per cubic cm in the OPC's bin6 (2.3 - 3.0 µm)
bin7
p/cm3
Number of particles per cubic cm in the OPC's bin7 (3.0 - 4.0 µm)
bin8
p/cm3
Number of particles per cubic cm in the OPC's bin8 (4.0 - 5.2 µm)
bin9
p/cm3
Number of particles per cubic cm in the OPC's bin9 (5.2 - 6.5 µm)
bin10
p/cm3
Number of particles per cubic cm in the OPC's bin10 (6.5 - 8.0 µm)
bin11
p/cm3
Number of particles per cubic cm in the OPC's bin11 (8.0 - 10.0 µm)
bin12
p/cm3
Number of particles per cubic cm in the OPC's bin12 (10.0 - 12.0 µm)
bin13
p/cm3
Number of particles per cubic cm in the OPC's bin13 (12.0 - 14.0 µm)
bin14
p/cm3
Number of particles per cubic cm in the OPC's bin14 (14.0 - 16.0 µm)
bin15
p/cm3
Number of particles per cubic cm in the OPC's bin15 (16.0 - 18.0 µm)
bin16
p/cm3
Number of particles per cubic cm in the OPC's bin16 (18.0 - 20.0 µm)
bin17
p/cm3
Number of particles per cubic cm in the OPC's bin17 (20.0 - 22.0 µm)
bin18
p/cm3
Number of particles per cubic cm in the OPC's bin18 (22.0 - 25.0 µm)
bin19
p/cm3
Number of particles per cubic cm in the OPC's bin19 (25.0 - 28.0 µm)
bin20
p/cm3
Number of particles per cubic cm in the OPC's bin20 (28.0 - 31.0 µm)
bin21
p/cm3
Number of particles per cubic cm in the OPC's bin21 (31.0 - 34.0 µm)
bin22
p/cm3
Number of particles per cubic cm in the OPC's bin22 (34.0 - 37.0 µm)
bin23
p/cm3
Number of particles per cubic cm in the OPC's bin23 (37.0 - 40.0 µm)
bin1MToF
ml/s
Time of flight for particles in OPC bin1
bin3MToF
ml/s
Time of flight for particles in OPC bin3
bin5MToF
ml/s
Time of flight for particles in OPC bin5
bin7MToF
ml/s
Time of flight for particles in OPC bin7
opc_sample_flow
ml/s
OPC sample flow rate
opc_temp
ºC
The internal temperature of the OPC
opc_rh
%
The internal relative humidity of the OPC
opc_pm1
µg/m3
The factory-computed PM1 value for the OPC
opc_pm25
µg/m3
The factory-computed PM2.5 value for the OPC
opc_pm10
µg/m3
The factory-computed PM10 value for the OPC
opc_laser_status
The laser power of the OPC
neph_bin0
p
Number of particles in bin0 of the nephelometer
neph_bin1
p
Number of particles in bin1 of the nephelometer
neph_bin2
p
Number of particles in bin2 of the nephelometer
neph_bin3
p
Number of particles in bin3 of the nephelometer
neph_bin4
p
Number of particles in bin4 of the nephelometer
neph_bin5
p
Number of particles in bin5 of the nephelometer
neph_pm1_std
µg/m3
The factory computed value for PM1 from the Nephelometer
neph_pm25_std
µg/m3
The factory computed value for PM2.5 from the Nephelometer
neph_pm10_std
µg/m3
The factory computed value for PM10 from the Nephelometer
neph_pm1_env
µg/m3
The factory computed value for PM1 from the Nephelometer
neph_pm25_env
µg/m3
The factory computed value for PM2.5 from the Nephelometer
neph_pm10_env
µg/m3
The factory computed value for PM10 from the Nephelometer
dd_operating_state
The operating state of the DualDetector
dd_measurement_state
The measurement state of the DualDetector
wx_ws
m/s
Vector wind speed measured by the Gill weather station, if equipped
wx_wd
deg
Wind direction measured by the Gill weather station, if equipped
wx_ws_scalar
m/s
Scalar wind speed measured by the Gill weather station, if equipped
wx_u
u component of the wind speed and direction measured by the Gill weather station, if equipped
wx_v
v component of the wind speed and direction measured by the Gill weather station, if equipped
wx_pressure
hPa
Ambient pressure measured by the Gill weather station, if equipped
wx_temp
ºC
Ambient temperature measured by the Gill weather station, if equipped
wx_rh
%
Ambient relative humidity measured by the Gill weather station, if equipped
wx_dew_point
ºC
Dew point measured by the Gill weather station, if equipped
co_we
mV
Working electrode signal for the CO sensor
co_ae
mV
Auxiliary electrode signal for the CO sensor
no_we
mV
Working electrode signal for the NO sensor
no_ae
mV
Auxiliary electrode signal for the NO sensor
no2_we
mV
Working electrode signal for the NO2 sensor
no2_ae
mV
Auxiliary electrode signal for the NO2 sensor
o3_we
mV
Working electrode signal for the O3 sensor
o3_ae
mV
Auxiliary electrode signal for the O3 sensor
Data are pushed to the QuantAQ Cloud with 1-minute time resolution and can be downloaded via the API or via the web app as a CSV. When downloading data, you can select whether you would like to download the raw data, final data, or raw+final data. Generally, the final data is what is desired, as it contains the final, cleaned data that is ready for analysis. The raw data is well-suited for researchers trying to investigate specific questions. When downloaded, the data is exported as a CSV and contains the following columns:
timestamp
The sample timestamp in ISO format
timestamp_local
The local sample timestamp in ISO format
id
The record ID
sn
The device serial number
device_state
The device state
lat
The device location, latitude
lon
The device location, longitude
sample_rh
%
The in-box relative humidity
sample_temp
ºC
The in-box temperature
wx_ws
m/s
Vector wind speed measured by the Gill weather station, if equipped
wx_wd
deg
Wind direction measured by the Gill weather station, if equipped
wx_ws_scalar
m/s
Scalar wind speed measured by the Gill weather station, if equipped
wx_u
u component of the wind speed and direction measured by the Gill weather station, if equipped
wx_v
v component of the wind speed and direction measured by the Gill weather station, if equipped
wx_pressure
hPa
Ambient pressure measured by the Gill weather station, if equipped
wx_temp
ºC
Ambient temperature measured by the Gill weather station, if equipped
wx_rh
%
Ambient relative humidity measured by the Gill weather station, if equipped
wx_dew_point
ºC
Dew point measured by the Gill weather station, if equipped
bin0
p/cc
Number of particles per cubic cm in the OPC's bin0 (0.35 - 0.46 µm)
bin1
p/cc
Number of particles per cubic cm in the OPC's bin1 (0.46 - 0.66 µm)
bin2
p/cc
Number of particles per cubic cm in the OPC's bin2 (0.66 - 1.0 µm)
bin3
p/cc
Number of particles per cubic cm in the OPC's bin3 (1.0 - 1.3 µm)
bin4
p/cc
Number of particles per cubic cm in the OPC's bin4 (1.3 - 1.7 µm)
bin5
p/cc
Number of particles per cubic cm in the OPC's bin5 (1.7 - 2.3 µm)
bin6
p/cc
Number of particles per cubic cm in the OPC's bin6 (2.3 - 3.0 µm)
bin7
p/cc
Number of particles per cubic cm in the OPC's bin7 (3.0 - 4.0 µm)
bin8
p/cc
Number of particles per cubic cm in the OPC's bin8 (4.0 - 5.2 µm)
bin9
p/cc
Number of particles per cubic cm in the OPC's bin9 (5.2 - 6.5 µm)
bin10
p/cc
Number of particles per cubic cm in the OPC's bin10 (6.5 - 8.0 µm)
bin11
p/cc
Number of particles per cubic cm in the OPC's bin11 (8.0 - 10.0 µm)
bin12
p/cc
Number of particles per cubic cm in the OPC's bin12 (10.0 - 12.0 µm)
bin13
p/cc
Number of particles per cubic cm in the OPC's bin13 (12.0 - 14.0 µm)
bin14
p/cc
Number of particles per cubic cm in the OPC's bin14 (14.0 - 16.0 µm)
bin15
p/cc
Number of particles per cubic cm in the OPC's bin15 (16.0 - 18.0 µm)
bin16
p/cc
Number of particles per cubic cm in the OPC's bin16 (18.0 - 20.0 µm)
bin17
p/cc
Number of particles per cubic cm in the OPC's bin17 (20.0 - 22.0 µm)
bin18
p/cc
Number of particles per cubic cm in the OPC's bin18 (22.0 - 25.0 µm)
bin19
p/cc
Number of particles per cubic cm in the OPC's bin19 (25.0 - 28.0 µm)
bin20
p/cc
Number of particles per cubic cm in the OPC's bin20 (28.0 - 31.0 µm)
bin21
p/cc
Number of particles per cubic cm in the OPC's bin21 (31.0 - 34.0 µm)
bin22
p/cc
Number of particles per cubic cm in the OPC's bin22 (34.0 - 37.0 µm)
bin23
p/cc
Number of particles per cubic cm in the OPC's bin23 (37.0 - 40.0 µm)
opc_pm1
µgm-3
The factory-computed PM1 value for the OPC
opc_pm25
µgm-3
The factory-computed PM2.5 value for the OPC
opc_pm10
µµgm-3
The factory-computed PM10 value for the OPC
pm1_env
µgm-3
The factory computed value for PM1 from the Nephelometer
pm25_env
µgm-3
The factory computed value for PM2.5 from the Nephelometer
pm10_env
µgm-3
The factory computed value for PM10 from the Nephelometer
neph_bin0
p
Number of particles in bin0 of the nephelometer
dd_operating_state
The operating state of the DualDetector
co_we
mV
Working electrode signal for the CO sensor
co_ae
mV
Auxiliary electrode signal for the CO sensor
co_diff
mV
Difference between working and auxiliary electrodes for the CO sensor
no_we
mV
Working electrode signal for the NO sensor
no_ae
mV
Auxiliary electrode signal for the NO sensor
no_diff
mV
Difference between working and auxiliary electrodes for the NO sensor
no2_we
mV
Working electrode signal for the NO2 sensor
no2_ae
mV
Auxiliary electrode signal for the NO2 sensor
no2_diff
mV
Difference between working and auxiliary electrodes for the NO2 sensor
o3_we
mV
Working electrode signal for the O3 sensor
o3_ae
mV
Auxiliary electrode signal for the O3 sensor
ox_diff
mV
Difference between working and auxiliary electrodes for the O3 sensor
pm1
µgm-3
Final PM1 value
pm25
µgm-3
Final PM2.5 value
pm10
µgm-3
Final PM10 value
co
ppb
Final CO value
no
ppb
Final NO value
no2
ppb
Final NO2 value
o3
ppb
Final O3 value
There are no consumable or user-replaceable components to the MODULAIR. If you believe a component is broken or not functioning correctly, please contact Customer Support via the in-app chat.
Additional maintenance and service recommendations are coming soon.
QAN-003:
QAN-004:
Please see our for a full history of all firmware changes.
The Status LED on the front panel is used to communicate the status of the internet connection. The LED changes color and pattern, each of which indicates a different state as outlined below. The rate at which the LED blinks comes in two flavors: blinking and breathing, where breathing implies a slow pulse where the color of the LED fades in and out.
Green
Blinking
Looking for Internet
If your device is blinking green, it is trying to connect to the cellular network. There is no need to take any action.
Breathing
Cloud not Connected
If your device is breathing green, it has a cellular connection but has not been able to connect to the cloud.
Cyan
Blinking
Connecting to the Cloud
Blinking cyan indicates the device has a cellular connection and is attempting to connect to the cloud. There is no need to take any action. This will happen each time on device startup.
Breathing
Connected
When your device is breathing cyan, everything is good and you are happily connected to the internet and the QuantAQ Cloud.
Magenta
Blinking
Firmware Update
When your device is blinking magenta, it is undergoing an over-the-air firmware update. DO NOT power off when this is happening.
White
Breathing
Internet Off
If the LED is breathing white, the cellular connection has been turned off. If you did not explicitly turn off the cellular connection via the onboard switch, please notify QuantAQ.
Red
Blinking
System Failure
A system failure has occurred. This is likely caused by faulty on-board firmware or corrupted memory. Please contact QuantAQ for next steps.
Each record contains a status flag, stored as an unsigned integer, that describes the state of the device for that exact record. Flags contain encoded information about each of the sub-components onboard the device. They are generated via a bitmask and can be decoded by reversing the procedure. To determine whether a specific flag is set, you can use the bitwise AND operator. If the value of the flag is returned, then the flag is set. If a zero is returned, the flag is not set.
To make this a bit clearer, let's follow this example. Let's assume the value of the flag is set to "4". We can perform a bitwise AND operation to check the result to see if FLAG_STARTUP is set.
The table below describes the available flags, flag values, and a description of what they mean and what action should be taken when they are set.
FLAG_STARTUP
1
This flag is set when the device powers on.
Remove any rows where this flag is set.
FLAG_OPC
2
This flag is set when the OPC has indicated the data failed to transfer correctly. This can be caused by the fan being off, the laser being off, or the checksum not validating properly.
Remove any rows where this flag is set.
FLAG_NEPH
4
This flag is set when the nephelometer has indicated the data failed to transfer correctly.
Remove any rows where this flag is set.
FLAG_RHTP
8
This flag is set when the relative humidity and temperature sensor has failed.
Remove any rows where this flag is set.
FLAG_CO
16
This flag is set when the CO sensor has failed or data does not meet initial on-board QA/QC.
Remove any rows where this flag is set.
FLAG_NO
32
This flag is set when the NO sensor has failed or data does not meet initial on-board QA/QC.
Remove any rows where this flag is set.
FLAG_NO2
64
This flag is set when the NO2 sensor has failed or data does not meet initial on-board QA/QC.
Remove any rows where this flag is set.
FLAG_O3
128
This flag is set when the O3 sensor has failed or data does not meet initial on-board QA/QC.
Remove any rows where this flag is set.
FLAG_CO2
256
This flag is set when the CO2 sensor has failed or data does not meet initial on-board QA/QC.
Remove any rows where this flag is set.
FLAG_SO2
512
This flag is set when the SO2 sensor has failed or data does not meet initial on-board QA/QC.
Remove any rows where this flag is set.
FLAG_H2S
1024
This flag is set when the H2S sensor has failed or data does not meet initial on-board QA/QC.
Remove any rows where this flag is set.
FLAG_BAT
2048
This flag is set when the internal LiPo battery is low or dead.
None.
FLAG_OVERHEAT
4096
This flag is set when the OPC has overheated.
Contact QuantAQ.
FLAG_SD
8192
This flag is set when the SD card has failed.
Replace the SD card.
Data is collected and saved to an onboard µSD card every 5- 10 seconds (depending on product SKU). Each minute, these values are averaged and pushed to the QuantAQ Cloud, where they are available for you to view, interact with, and download. It is unlikely you will ever need the locally stored data, but it is available to you if you would like to use it.
On the µSD card, you will find data files with file names like DATA_{YYYYMMDD}@FW{VERSION}.csv where YYYYMMDD represents the UTC date and VERSION represents the firmware version of the device. In the event a firmware update happens, a new file for that date will be created.
Data files are written each day and can be read or analyzed using any programming language or spreadsheet program (e.g., Microsoft Excel). Each file begins with three metadata rows describing the device model (row 1), device ID (row 2), and device serial number (row 3). Row 4 contains the data column headers, and rows 5 and higher contain data. Each row corresponds to a new record.
To make data analysis easier, QuantAQ maintains several software programs designed to reduce the time it takes for you to go from data to insight. Below, we highlight several tools and their purpose:
QuantAQ CLI
The QuantAQ CLI is a simple Python-based tool for cleaning, munging, and interacting with data from QuantAQ devices.
py-smps
py-smps
is a Python library for manipulating and analyzing size-resolved particle data from OPCs, SMPS, or other particle sizing instruments.
atmospy
atmopsy
is a Python library for analyzing and visualizing air quality data.
py-quantaq
py-quantaq
is a simple API wrapper for the QuantAQ Cloud API. It is the recommended method for downloading or interacting with data or devices when using Python.
r-quantaq
r-quantaq
is a simple API wrapper for the QuantAQ Cloud API. It is the recommended method for downloading or interacting with data or devices when using R.
Please note that configuring Wi-Fi is *not* required for operation. All MODULAIR devices have cellular modems, and Wi-Fi is a fallback in the event you are operating in an area that does not have a reliable cellular connection.
To configure Wi-Fi credentials for your device, use our or visit . Complete instructions can be found in our . The MODULAIR can store up to ten separate credentials before they begin to be overwritten.