MODULAIR-UFP
Product manual for the MODULAIR-UFP ultrafine particle monitor.
Product Name
MODULAIR-UFP
SKU(s)
MOD-UFP-NORAM
For use in North America.
MOD-UFP-GLOBAL
For use outside North America. Please contact QuantAQ Sales for specific country support.
1. Introduction and Specs
The MODULAIR™-UFP provides real-time, direct measurement of total particle number concentration (~5-3,000 nm), temperature, humidity, pressure, wind direction, and wind speed in an easy-to-use, easy-to-deploy, internet-connected system.
1.1 Specifications
1.1.1 Air Quality Measurements
Total Number Concentration
0 to 100,000 p/cc
+/- 10%
Temperature*
-40ºC to 70ºC
+/- 0.3ºC
Relative Humidity
0 to 100%
+/- 2%
Pressure
300 to 1,250 hPa
0.4 hPa
Wind Direction
0 to 60 m/s
3% RMSE
Wind Speed
0º to 360º
+/- 3º
*This is the specification for the temperature measurement itself provided by the GMX500 weather station, not the safe operating temperature of the MODULAIR-UFP.
For more information on the operating principle of the CPC, please refer to Hering et al, 2025.
1.1.2 Power and Communications
🔋 Power
12V 5W average consumption
📶 Communication
North America LTE Cat M1 with 2G fallback Wi-Fi (2.4GHz or 5GHz) EMEAA LTE CAT1 with 2G/3G fallback Wi-Fi (2.4GHz or 5GHz)
📈 Data
Web interface (quant-aq.com) Programmatic access (QuantAQ API) Local storage (16GB µSD card)
1.1.3 Operating Specifications
Weatherproof rating
IP67
Operating temperature
5ºC to 45ºC*
Operating humidity
05 to 95%, non-condensing
Dimensions
25.34" x 10.6" x 5.22"
Weight
10 lbs (4.5 kg)
1.2 Certifications
Coming soon.
2. Sensor Overview
2.1 Front View
Below is a front view of the MODULAIR-UFP. Air is pulled in through the inlet on the base of the unit (see 2.2 Base View for a more detailed view). The top of the unit features the Gill MaxiMet GMX500 weather station.

2.2 Base View
The base of the MODULAIR-UFP highlights the inlet (with insect screen installed) and the M12 Power Cable.

2.3 Internal View
2.3.1 Sensor View
The internals of the MODULAIR-UFP can be accessed by opening the outer lid of the MODULAIR-UFP enclosure. Near the top (closest to the weather station, external), you will see the power switch, status LED, µUSB debugging port, and µSD card. On the right-hand side, you will see the condensation particle counter (CPC). On the left-hand side, you will see the water reservoir and the load cell. Near the bottom, you will see the purge port.

2.3.2 Core Board
The Core Board is mounted to the main chassis internal to the MODULAIR-UFP. A top-down view can be seen in Figure 2.3, where the µSD card, debugging port, Status LED, and power switch are accessible.

3. Installation and Hardware Setup
3.1 Unpacking
Your MODULAIR-UFP arrives in a custom Seahorse shipping case that is designed to keep your MODULAIR-UFP safe during transport. It is essential that you keep this case as-is in the event you need to transport the MODULAIR-UFP or ship it back to QuantAQ for calibration or repair. For shipping purposes, with all components in place, the enclosure measures 31" x 21" x 11" and weighs 45 lb.
When unpacking your MODULAIR-UFP, you should expect to find the following:
MODULAIR-UFP Ultrafine Particle Monitor
Pole Mount Bracket
Components Box
Device registration card
AC/DC 12VDC Power Brick
M12 Power Cable
6 mL syringe
Pole Mount Components Bag
(2) Pole Mount Back Plates
(4) 1/4"-20, 3" Carriage Bolts
(4) 1/4"-20 nuts
(4) 10-32, 3/8" screws

In the cardboard components box (lower right of Figure 3.1), you will find the loose components, including the power cable, power brick, registration card, and liquid syringe. These components are shown in Figure 3.2.

When removing the MODULAIR-UFP from its case, it is important not to lift by the Weather Station. This also applies when putting the MODULAIR-UFP back inside its case. Lift by either grabbing the sides of the polycarbonate enclosure or by the aluminum weather station mount, located between the polycarbonate enclosure and the weather station.
Once you remove the MODULAIR-UFP from its case, you will see a thin sheet of foam that sits below the sensor. After removing this layer of foam, you will find the Pole Mount Bracket. Please see Figure 3.3 for more instructions.

A video overview of how to best pack and unpack your MODULAIR-UFP can be found below.
3.2 Device Registration
Each device ships with a Registration Card containing a QR code and a short confirmation code. Follow the instructions below to register your device.
3.3 Configuring Wi-Fi
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 web-based configuration tool or visit https://app.quant-aq.com/wifi-setup. Complete instructions can be found in our Help Center. The MODULAIR can store up to ten separate credentials before they begin to be overwritten.
3.4 Installation
The MODULAIR-UFP ships with a Pole Mount Kit specifically designed to support the unit. It is designed to be attached to a pole or Post with a diameter between 1.25" and 2". The MODULAIR-UFP should be mounted toward the top of a pole or post such that the weather station is not impeded by anything and can provide accurate data (see Figure 3.4).
To physically install your sensor, follow the instructions below.
Make sure the Insect Shield is Installed Properly
During shipping and installation, the insect shield can become wedged against the base of the MODULAIR-UFP. Make sure it is properly seated, approximately 1" away from the base of the Swagelok fitting. See the image below for an example of how it should be positioned. When seated properly, you will feel the internal o-ring slip into place.

Fill the Water Reservoir
Disconnect the water line that runs from the CPC to the water reservoir by pressing the button on the front of the fitting attached to the lid of the water reservoir. Carefully remove the water reservoir from its cradle and fill it with up to 500 mL of distilled water (or cleaner). Reinsert the water reservoir by sliding it into the cradle, while pushing up on the cradle from underneath to prevent the load cell from being depressed too hard. Then, reattach the water line that connects the water reservoir to the CPC. A detailed view of this step can be seen in the video located in Section 3.5.1 below.
Power On the MODULAIR-UFP
Inside the MODULAIR-UFP, you will see the power switch toward the upper left-hand side. Slide the power switch to the right into the on position.
At this point, the Status LED will begin blinking, and within a few minutes, it should begin breathing cyan, which indicates it is connected to the internet and to the QuantAQ Cloud.
3.5 Operation
3.5.1 Refilling the Water Reservoir
The water reservoir holds up to 500 mL of distilled water. Under normal operating conditions, you should expect the water reservoir to last for ~120 days between refills. The video and instructions below cover how to refill the water reservoir.
3.5.2 Storing or shipping your MODULAIR-UFP
Before storing or shipping your MODULAIR-UFP, it is important to ensure water is removed from the internals of the system to avoid breaking internal components. When water freezes, it expands, which can cause some internal subcomponents (e.g., the Nafion) to break. Before putting the MODULAIR-UFP in its shipping case, purge the water line several times as described in Step 6 of Section 3.5.1 above.
3.6 Connectivity Considerations
As all QuantAQ products are internet-connected, it is important to consider connectivity when choosing an installation location. There are three primary things to consider:
Antenna Connection. If your device has an external antenna, ensure it is seated securely and placed at a 90º angle pointing toward the sky.
Antenna Placement. Do not place the device near metal objects or other sources of RF (i.e., antenna). Keep the antenna at least 18" away from metal objects as they can cause distortions and reflections.
Location and Cellular Availability. Install your sensor in a location with a known cellular signal on the carriers we support.
4. Software and Data
4.1 Data Structure and Outputs
There are three ways in which you can access data for the MODULAIR-UFP:
Local Storage. Raw, 10-second resolution data is available for download directly from the onboard 16GB µSD card.
Web User Interface. Data can be downloaded directly from the QuantAQ Cloud in CSV format.
API. Data can be accessed programmatically via the QuantAQ API.
4.1.1 Local Storage
Data is collected and saved to an onboard µSD card every 10 seconds. 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 files with 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 takes place mid-day, a new file will be created for that date.

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 header columns, and rows 5 and higher contain data. Each row corresponds to a new record.
Table 4.1 below documents the columns available in the downloaded data, their units, and their description.
timestamp
Timestamp, UTC, ISO format
fw
Firmare version
flag
MODULAIR-UFP flag
soc
%
LiPo battery State of Charge
sample_temp
ºC
Internal box temperature
sample_rh
%
Internal box relative humidity
wx_ws
m/s
Vector Wind speed, as measured by the MaxiMet GMX500
wx_wd
deg
Vector Wind direction, as measured by the MaxiMet GMX500
wx_ws_scalar
m/s
Scalar wind speed, as measured by the MaxiMet GMX500
wx_u
The u-component of the wind speed/direction
wx_v
The v-component of the wind speed/direction
wx_pressure
hPa
Ambient pressure, as measured by the MaxiMet GMX500
wx_temp
ºC
Ambient temperature, as measured by the MaxiMet GMX500
wx_rh
%
Ambient relative humidity, as measured by the MaxiMet GMX500
wx_dew_point
ºC
Ambient dew point, as measured by the MaxiMet GMX500
cpc_elapsed_seconds
s
Seconds since the CPC started up.
cpc_serial_number
Serial Number of the CPC subcomponent.
cpc_particle_number_conc
p/cc
Raw particle number concentration
cpc_particle_number_conc_corr
p/cc
Particle number concentration with nominal correction for high concentrations.
cpc_sample_number
The sample number, auto-incrementing
cpc_flag
The current flag of the CPC subcomponent
cpc_pressure_at_beginning
hPa
Pressure reading in cell when particle counting begins
cpc_pressure_at_end
hPa
Pressure reading in cell when particle counting ends
cpc_pressure_ambient
hPa
Ambient pressure, as measured by the CPC subcomponent
cpc_temperature_ambient
ºC
Ambient temperature, as measured by the CPC subcomponent
cpc_temperature_at_input
ºC
Temperature at the CPC input valve
cpc_humidity_at_input
%
Relative humidity at the CPC input valve
cpc_dew_point_at_input
ºC
Dew point at CPC input valve
cpc_temperature_at_output
ºC
Temperature at the CPC output valve
cpc_humidity_at_output
%
Relative humidity at the CPC output valve
cpc_dew_point_at_output
ºC
Dew point at the CPC output valve
cpc_particle_count
Number of detected particles during the count interval
cpc_particle_count_corr
Dead-time corrected particle count
cpc_flush_time_ms
ms
Cell flush time
cpc_humidification_time_ms
ms
Cell humidification time
cpc_expansion_time_start
Time after start of expansion that counting starts
cpc_expansion_time_end
Time after start of expansion that counting ends
cpc_dead_time_corr_factor
Dead-time correction factor
cpc_power_to_pump
%
Power to the pump
cpc_k_factor
Conversion factor used to calculate the number concentration including cell volume and conversion of pressure reading into appropriate units
4.1.2 Data Stored on the QuantAQ Cloud
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
id
timestamp_local
sn
sample_rh
%
sample_temp
ºC
lat
lon
device_state
wx_ws
wx_wd
wx_ws_scalar
wx_u
wx_v
wx_pressure
hPa
wx_temp
ºC
wx_rh
%
wx_dew_point
ºC
cpc_elapsed_seconds
cpc_serial_number
cpc_flag
cpc_pressure_at_beginning
hPa
cpc_pressure_at_end
hPa
cpc_pressure_ambient
hPa
cpc_temperature_ambient
ºC
cpc_temperature_at_input
ºC
cpc_temperature_at_output
ºC
cpc_humidity_at_input
%
cpc_humidity_at_output
%
cpc_dew_point_at_input
ºC
cpc_dew_point_at_output
ºC
cpc_particle_count
cpc_particle_count_corr
cpc_particle_number_conc
cpc_flush_time_ms
cpc_humidification_time_ms
cpc_expansion_time_start
cpc_expansion_time_end
cpc_dead_time_corr_factor
cpc_power_to_pump
cpc_k_factor
cpc_particle_number_conc_corr
p/cc
4.1.3 Data Downloaded via API
For details on how to use the API to download data, please view the API docs here. The names, units, and descriptions for key-value pairs retrieved via the API are identical to those found in the section above, though they may be embedded beneath a key (e.g., all meteorological data is shown under the met key). Data is returned as JSON, as shown in the example below:
// Some code
{
"data": [
{
"cpc_particle_number_conc_corr": 54960,
"geo": {
"lat": null,
"lon": null
},
"met": {
"wx_dew_point": 14.37,
"wx_pressure": 1011.68,
"wx_rh": 39.43,
"wx_temp": 29.6,
"wx_u": -0.309,
"wx_v": 2.256,
"wx_wd": 352.21,
"wx_ws": 2.28,
"wx_ws_scalar": 2.35
},
"raw_data_id": 1,
"sn": "MOD-UFP-00003",
"timestamp": "2025-06-12T23:36:45",
"timestamp_local": "2025-06-12T19:36:45",
"url": "https://api.quant-aq.com/v1/devices/MOD-UFP-00003/data/1"
},
...
],
"meta": {
"first_url": "https://api.quant-aq.com/device-api/v1/devices/MOD-UFP-00003/data/?page=1&per_page=50&limit=3",
"last_url": "https://api.quant-aq.com/device-api/v1/devices/MOD-UFP-00003/data/?page=1&per_page=50&limit=3",
"next_url": null,
"page": 1,
"pages": 1,
"per_page": 50,
"prev_url": null,
"total": 3
}
}4.2 Understanding the Status Flag
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.
# bit AND - is FLAG_STARTUP set?
>>> 4 & 1
0
# bit AND - is FLAG_NEPH set?
>>> 4 & 4
4The 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.
5. Maintenance and Service
Coming soon.
6. Changelog
Please see our public changelog for a full history of all firmware changes.
7. Appendix
7.1 Status LED
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.
Last updated
Was this helpful?

