MODULAIR-UFP

Product manual for the MODULAIR-UFP ultrafine particle monitor.

Key
Valu

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.

Datasheet

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

PARAMETER
RANGE
ACCURACY

Total Number Concentration

0 to 100,000 p/cc

Not yet determined.

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, 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

PARAMETER
DETAILS

🔋 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

PARAMETER
DETAILS

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)

*It is important to note that using the MODULAIR-UFP without proper winterization can lead to permanent, irreversible damage. The MODULAIR-UFP uses water as its operating liquid, and the instrument can be damaged if water internal to the system freezes and expands.

1.2 Certifications

Coming soon.

2. Sensor Overview

Coming soon.

3. Installation and Hardware Setup

3.1 Unpacking

Coming soon.

3.2 Device Registration

You do not need to physically have your sensor present to complete the device registration process. The process can also be completed without powering on your sensor.

Each device ships with a Registration Card containing a QR code and a short confirmation code. Follow the instructions below to register your device.

1

Scan the QR code

Using an internet-connected phone, tablet, or computer, scan the QR code on your Registration Card. It is best to first log in to quant-aq.com on the same device. The QR code should direct you to the registration page on the QuantAQ Cloud.

2

Fill out the device registration form

Fill out the form presented to you on your screen.

3

Enter the claim code

The form will ask you for a Claim Code, which can be found on your Registration Card. It is a 6-digit alphanumeric code. This ensures only the person in possession can register it.

Once completed, press "Register".

3.3 Configuring Wi-Fi

To use our web-based configuration tool, you must use a computer operating system and browser that supports WebUSB technology. Examples include Chrome, Edge, and Opera browsers on Windows, Mac, Linux, or Chromebook devices.

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

Coming soon.

3.5 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:

  1. Antenna Connection. If your device has an external antenna, ensure it is seated securely and placed at a 90º angle pointing toward the sky.

  2. 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.

  3. 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:

  1. Local Storage. Raw, 10-second resolution data is available for download directly from the onboard 16GB µSD card.

  2. Web User Interface. Data can be downloaded directly from the QuantAQ Cloud in CSV format.

  3. 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.

Figure 4.1. Sample of a data file header. The first three rows are metadata with subsequent rows containing the header and data.

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.

ID
COLUMN
UNIT
Description
1

timestamp

Timestamp, UTC, ISO format

2

fw

Firmare version

3

flag

MODULAIR-UFP flag

4

soc

%

LiPo battery State of Charge

5

sample_temp

ºC

Internal box temperature

6

sample_rh

%

Internal box relative humidity

7

wx_ws

m/s

Vector Wind speed, as measured by the MaxiMet GMX500

8

wx_wd

deg

Vector Wind direction, as measured by the MaxiMet GMX500

9

wx_ws_scalar

m/s

Scalar wind speed, as measured by the MaxiMet GMX500

10

wx_u

The u-component of the wind speed/direction

11

wx_v

The v-component of the wind speed/direction

12

wx_pressure

hPa

Ambient pressure, as measured by the MaxiMet GMX500

13

wx_temp

ºC

Ambient temperature, as measured by the MaxiMet GMX500

14

wx_rh

%

Ambient relative humidity, as measured by the MaxiMet GMX500

15

wx_dew_point

ºC

Ambient dew point, as measured by the MaxiMet GMX500

16

cpc_elapsed_seconds

s

Seconds since the CPC started up.

17

cpc_serial_number

Serial Number of the CPC subcomponent.

18

cpc_particle_number_conc

p/cc

Raw particle number concentration

19

cpc_particle_number_conc_corr

p/cc

Particle number concentration with nominal correction for high concentrations.

20

cpc_sample_number

The sample number, auto-incrementing

21

cpc_flag

The current flag of the CPC subcomponent

22

cpc_pressure_at_beginning

hPa

Pressure reading in cell when particle counting begins

23

cpc_pressure_at_end

hPa

Pressure reading in cell when particle counting ends

24

cpc_pressure_ambient

hPa

Ambient pressure, as measured by the CPC subcomponent

25

cpc_temperature_ambient

ºC

Ambient temperature, as measured by the CPC subcomponent

26

cpc_temperature_at_input

ºC

Temperature at the CPC input valve

27

cpc_humidity_at_input

%

Relative humidity at the CPC input valve

28

cpc_dew_point_at_input

ºC

Dew point at CPC input valve

29

cpc_temperature_at_output

ºC

Temperature at the CPC output valve

30

cpc_humidity_at_output

%

Relative humidity at the CPC output valve

31

cpc_dew_point_at_output

ºC

Dew point at the CPC output valve

32

cpc_particle_count

Number of detected particles during the count interval

33

cpc_particle_count_corr

Dead-time corrected particle count

34

cpc_flush_time_ms

ms

Cell flush time

35

cpc_humidification_time_ms

ms

Cell humidification time

36

cpc_expansion_time_start

Time after start of expansion that counting starts

37

cpc_expansion_time_end

Time after start of expansion that counting ends

38

cpc_dead_time_corr_factor

Dead-time correction factor

39

cpc_power_to_pump

%

Power to the pump

40

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:

COLUMN
FILE LOCATION
UNIT
DESCRIPTIO

timestamp

rawfinal

id

rawfinal

timestamp_local

rawfinal

sn

rawfinal

sample_rh

rawfinal

%

sample_temp

rawfinal

ºC

lat

rawfinal

lon

rawfinal

device_state

rawfinal

wx_ws

rawfinal

wx_wd

rawfinal

wx_ws_scalar

rawfinal

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

final

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
4

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.

Flags are consistent across all QuantAQ products, so there may be flags in the table below that irrelevant to your product.

FLAG
VALUE
WHY IS IT SET?
WHAT TO DO?

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.

LED COLOR
PATTERN
MODE
DESCRIPTION

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?