# MODULAIR-UFP

| 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**    | [Download](https://assets.quant-aq.com/downloads/spec-sheets/modulair-ufp.latest.pdf) |                                                                                           |

## 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.&#x20;

### 1.1 Specifications

#### 1.1.1 Air Quality Measurements

| PARAMETER                  | RANGE             | ACCURACY  |
| -------------------------- | ----------------- | --------- |
| 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](https://www.tandfonline.com/doi/10.1080/02786826.2025.2506707?url_ver=Z39.88-2003\&rfr_id=ori:rid:crossref.org\&rfr_dat=cr_pub%20%200pubmed).

#### 1.1.2 Power and Communications

<table><thead><tr><th width="218.46484375">PARAMETER</th><th>DETAILS</th></tr></thead><tbody><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f50b">🔋</span> <strong>Power</strong></td><td>12V<br>5W average consumption</td></tr><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f4f6">📶</span> <strong>Communication</strong></td><td><strong>North America</strong><br>LTE Cat M1 with 2G fallback<br>Wi-Fi (2.4GHz or 5GHz)<br><br><strong>EMEAA</strong><br>LTE CAT1 with 2G/3G fallback<br>Wi-Fi (2.4GHz or 5GHz)</td></tr><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f4c8">📈</span> <strong>Data</strong></td><td>Web interface (quant-aq.com)<br>Programmatic access (QuantAQ API)<br>Local storage (16GB µSD card)</td></tr></tbody></table>

#### 1.1.3 Operating Specifications

<table><thead><tr><th width="260.83984375">PARAMETER</th><th>DETAILS</th></tr></thead><tbody><tr><td>Weatherproof rating</td><td>IP67</td></tr><tr><td>Operating temperature</td><td>5ºC to 45ºC*</td></tr><tr><td>Operating humidity</td><td>05 to 95%, non-condensing</td></tr><tr><td>Dimensions</td><td>25.34" x 10.6" x 5.22"</td></tr><tr><td>Weight</td><td>10 lbs (4.5 kg)</td></tr></tbody></table>

{% hint style="info" %}
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.
{% endhint %}

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

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FqHWEGXzcYHJvbjYGsIZY%2FMODULAIR-UFP%20Product%20Manual%20Images.png?alt=media&#x26;token=6aac2621-d983-424b-9dbb-1e6ab9dc0dcd" alt=""><figcaption><p>Figure 2.1. Front view of the MODULAIR-UFP.</p></figcaption></figure>

### 2.2 Base View

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

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FBzhVSPJJ8XFVGEOwiUZo%2FMODULAIR-UFP%20Product%20Manual%20Images%20(1).png?alt=media&#x26;token=b3086441-a41e-4900-a28a-33aec30a9657" alt=""><figcaption><p>Figure 2.2. Base view of the MODULAIR-UFP.</p></figcaption></figure>

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

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FhqaFYSgpLQVljiwPHX25%2FMODULAIR-UFP%20Product%20Manual%20Images%20(2).png?alt=media&#x26;token=669d3d35-0609-43fb-af17-04ea16376dcb" alt=""><figcaption><p>Figure 2.3. Internal sensor view of the MODULAIR-UFP.</p></figcaption></figure>

#### 2.3.2 Core Board

{% hint style="info" %}
Under normal operating circumstances, it should not be necessary to access the Core Board directly. You should only do so under the advisement of the QuantAQ Support team.
{% endhint %}

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.

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FsCJLfhEQOjZGTbVa75dC%2FMODULAIR-UFP%20Product%20Manual%20Images%20(3).png?alt=media&#x26;token=de344269-494a-4fab-a870-6a514f4fb104" alt=""><figcaption><p>Figure 2.4. The Core Board that runs all MODULAIR-X series devices.</p></figcaption></figure>

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

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2F1oNB42NMzLhoXEtyqHEM%2FMODULAIR-UFP%20Product%20Manual%20Images%20(4).png?alt=media&#x26;token=fb502fc8-77cc-4396-adbf-ee3e4466c52e" alt=""><figcaption><p>Figure 3.1. The MODULAIR-UFP is shipped in a custom Seahorse enclosure.</p></figcaption></figure>

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.

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FZLt7PmHx9VQ5AO8mMxWM%2FMODULAIR-UFP%20Product%20Manual%20Images%20(5).png?alt=media&#x26;token=7778ba69-74f9-4169-a1e1-5d6ac494d18e" alt=""><figcaption><p>Figure 3.2. The components found inside the Components Box.</p></figcaption></figure>

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.

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FnueY9i40gDNqZ69LYE4x%2FMODULAIR-UFP%20Product%20Manual%20Images%20(6).png?alt=media&#x26;token=1cf3f667-09ff-4dc0-a15b-afe672926fb8" alt=""><figcaption><p>Figure 3.3. Instructions for packing and unpacking the MODULAIR-UFP.</p></figcaption></figure>

A video overview of how to best pack and unpack your MODULAIR-UFP can be found below.

{% embed url="<https://www.loom.com/share/791028ef92914299815322cfde77d1d7>" %}

### 3.2 Device Registration

{% hint style="info" %}
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.
{% endhint %}

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

{% stepper %}
{% step %}

### 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.
{% endstep %}

{% step %}

### Fill out the device registration form

Fill out the form presented to you on your screen.
{% endstep %}

{% step %}

### 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".
{% endstep %}
{% endstepper %}

### 3.3 Configuring Wi-Fi

{% hint style="warning" %}
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.
{% endhint %}

{% hint style="info" %}
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.
{% endhint %}

To configure Wi-Fi credentials for your device, use our [web-based configuration tool](https://app.quant-aq.com/wifi-setup) or visit <https://app.quant-aq.com/wifi-setup>. Complete instructions can be found in our [Help Center](https://support.quant-aq.com/en/articles/10947910-configuring-wifi-credentials-on-supported-sensors). The MODULAIR can store up to ten separate credentials before they begin to be overwritten.&#x20;

### 3.4 Installation

{% hint style="info" %}
If the provided installation hardware does not work for your deployment, please contact QuantAQ Support via the in-app chat, and we will help to find a solution.
{% endhint %}

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).&#x20;

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FMeWZ9MyKjWRBeKovLKrM%2FIMG_5011%202.JPG?alt=media&#x26;token=bc1f75b4-930e-4213-bb19-ec6d648f659a" alt="" width="375"><figcaption><p>Figure 3.4. An image of a well-installed MODULAIR-UFP instrument.</p></figcaption></figure>

To physically install your sensor, follow the instructions below.

{% embed url="<https://www.loom.com/share/ec4ae102c9c04965ada3f474842d75dd>" %}

{% stepper %}
{% step %}

#### Secure the Pole Mount Kit

Secure the Pole Mount Bracket to the pole using the included carriage bolts and back plates.

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FeGl9b3ZaqDuFTUUPGz8F%2F6.png?alt=media&#x26;token=f96587d0-57a3-46ee-9590-e52dfbdf5215" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Pre-install the 3/8" 10-32 screws to the MODULAIR-UFP

Using the provided 3/8", 10-32 screws, partially screw each one into the fasteners in each corner on the back of the MODULAIR-UFP.
{% endstep %}

{% step %}

#### Secure the MODULAIR-UFP

Slide the four screws through the slots on the Pole Mount Bracket and secure using a 1/8" driver.

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2F4uYtIygnwOrjltAt7N38%2FMODULAIR-UFP%20Assembly%20with%20Subassemblies%20(DHH)%20v12.png?alt=media&#x26;token=0f456d57-05d2-4302-b277-0920d96c4668" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Install the Power Cable

Plug the M12 to USB-C power cable into the base of the MODULAIR-UFP.
{% endstep %}

{% step %}

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

<figure><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2Fv7qSo4U90zfbKG4Ikb5m%2FMODULAIR-UFP%20Product%20Manual%20Images%20(10).png?alt=media&#x26;token=cdfe4da5-1922-4ae0-ac64-e52c5d24500c" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### 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.
{% endstep %}

{% step %}

#### Purge the Water Line

Connect the provided 6 mL syringe to the Purge Port near the bottom of the MODULAIR-UFP. Extract water until there are no air bubbles remaining in the water line that connects the water reservoir to the CPC. This may take up to three pulls. Dispose of the water safely.
{% endstep %}

{% step %}

#### 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.
{% endstep %}
{% endstepper %}

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

{% embed url="<https://www.loom.com/share/bada9bad5c5548afb2cf9a260af13736>" %}

{% stepper %}
{% step %}

### Disconnect the water line

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.&#x20;
{% endstep %}

{% step %}

### Remove the water reservoir

Carefully remove the water reservoir from its cradle by pulling it up and out toward you. You can use a second hand to hold the cradle in place or wiggle the reservoir back and forth if it is a tight fit.
{% endstep %}

{% step %}

### Refill the water reservoir

Fill the reservoir with up to 500 mL of distilled (or cleaner) water. When complete, reattach the lid of the Nalgene bottle.
{% endstep %}

{% step %}

### Reinstall the water reservoir

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
{% endstep %}

{% step %}

### Purge the water line

Connect the provided 6 mL syringe to the Purge Port near the bottom of the MODULAIR-UFP. Extract water until there are no air bubbles remaining in the water line that connects the water reservoir to the CPC. This may take up to three pulls. Dispose of the water safely.
{% endstep %}
{% endstepper %}

#### 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.&#x20;

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

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}.cs**v 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><img src="https://3525414418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcdMusFauIE4AZkm3CC0c%2Fuploads%2FwTmdZBEFLj56UZyDCoHM%2FScreenshot%202025-10-03%20at%202.33.46%E2%80%AFPM.png?alt=media&#x26;token=565c1157-1175-4df0-abf7-0ce65885b539" alt=""><figcaption><p>Figure 4.1. Sample of a data file header. The first three rows are metadata with subsequent rows containing the header and data.</p></figcaption></figure>

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.

<table><thead><tr><th width="69.12890625" data-type="number">ID</th><th width="263.83984375">COLUMN</th><th width="115.78515625">UNIT</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>timestamp</td><td></td><td>Timestamp, UTC, ISO format</td></tr><tr><td>2</td><td>fw</td><td></td><td>Firmare version</td></tr><tr><td>3</td><td>flag</td><td></td><td>MODULAIR-UFP flag</td></tr><tr><td>4</td><td>soc</td><td>%</td><td>LiPo battery State of Charge</td></tr><tr><td>5</td><td>sample_temp</td><td>ºC</td><td>Internal box temperature</td></tr><tr><td>6</td><td>sample_rh</td><td>%</td><td>Internal box relative humidity</td></tr><tr><td>7</td><td>wx_ws</td><td>m/s</td><td>Vector Wind speed, as measured by the MaxiMet GMX500</td></tr><tr><td>8</td><td>wx_wd</td><td>deg</td><td>Vector Wind direction, as measured by the MaxiMet GMX500</td></tr><tr><td>9</td><td>wx_ws_scalar</td><td>m/s</td><td>Scalar wind speed, as measured by the MaxiMet GMX500</td></tr><tr><td>10</td><td>wx_u</td><td></td><td>The u-component of the wind speed/direction</td></tr><tr><td>11</td><td>wx_v</td><td></td><td>The v-component of the wind speed/direction</td></tr><tr><td>12</td><td>wx_pressure</td><td>hPa</td><td>Ambient pressure, as measured by the MaxiMet GMX500</td></tr><tr><td>13</td><td>wx_temp</td><td>ºC</td><td>Ambient temperature, as measured by the MaxiMet GMX500</td></tr><tr><td>14</td><td>wx_rh</td><td>%</td><td>Ambient relative humidity, as measured by the MaxiMet GMX500</td></tr><tr><td>15</td><td>wx_dew_point</td><td>ºC</td><td>Ambient dew point, as measured by the MaxiMet GMX500</td></tr><tr><td>16</td><td>cpc_elapsed_seconds</td><td>s</td><td>Seconds since the CPC started up.</td></tr><tr><td>17</td><td>cpc_serial_number</td><td></td><td>Serial Number of the CPC subcomponent.</td></tr><tr><td>18</td><td>cpc_particle_number_conc</td><td>p/cc</td><td>Raw particle number concentration</td></tr><tr><td>19</td><td>cpc_particle_number_conc_corr</td><td>p/cc</td><td>Particle number concentration with nominal correction for high concentrations.</td></tr><tr><td>20</td><td>cpc_sample_number</td><td></td><td>The sample number, auto-incrementing</td></tr><tr><td>21</td><td>cpc_flag</td><td></td><td>The current flag of the CPC subcomponent</td></tr><tr><td>22</td><td>cpc_pressure_at_beginning</td><td>hPa</td><td>Pressure reading in cell when particle counting begins</td></tr><tr><td>23</td><td>cpc_pressure_at_end</td><td>hPa</td><td>Pressure reading in cell when particle counting ends</td></tr><tr><td>24</td><td>cpc_pressure_ambient</td><td>hPa</td><td>Ambient pressure, as measured by the CPC subcomponent</td></tr><tr><td>25</td><td>cpc_temperature_ambient</td><td>ºC</td><td>Ambient temperature, as measured by the CPC subcomponent</td></tr><tr><td>26</td><td>cpc_temperature_at_input</td><td>ºC</td><td>Temperature at the CPC input valve</td></tr><tr><td>27</td><td>cpc_humidity_at_input</td><td>%</td><td>Relative humidity at the CPC input valve</td></tr><tr><td>28</td><td>cpc_dew_point_at_input</td><td>ºC</td><td>Dew point at CPC input valve</td></tr><tr><td>29</td><td>cpc_temperature_at_output</td><td>ºC</td><td>Temperature at the CPC output valve</td></tr><tr><td>30</td><td>cpc_humidity_at_output</td><td>%</td><td>Relative humidity at the CPC output valve</td></tr><tr><td>31</td><td>cpc_dew_point_at_output</td><td>ºC</td><td>Dew point at the CPC output valve</td></tr><tr><td>32</td><td>cpc_particle_count</td><td></td><td>Number of detected particles during the count interval</td></tr><tr><td>33</td><td>cpc_particle_count_corr</td><td></td><td>Dead-time corrected particle count</td></tr><tr><td>34</td><td>cpc_flush_time_ms</td><td>ms</td><td>Cell flush time</td></tr><tr><td>35</td><td>cpc_humidification_time_ms</td><td>ms</td><td>Cell humidification time</td></tr><tr><td>36</td><td>cpc_expansion_time_start</td><td></td><td>Time after start of expansion that counting starts</td></tr><tr><td>37</td><td>cpc_expansion_time_end</td><td></td><td>Time after start of expansion that counting ends</td></tr><tr><td>38</td><td>cpc_dead_time_corr_factor</td><td></td><td>Dead-time correction factor</td></tr><tr><td>39</td><td>cpc_power_to_pump</td><td>%</td><td>Power to the pump</td></tr><tr><td>40</td><td>cpc_k_factor</td><td></td><td>Conversion factor used to calculate the number concentration including cell volume and conversion of pressure reading into appropriate units</td></tr></tbody></table>

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

<table><thead><tr><th width="269.5703125">COLUMN</th><th>FILE LOCATION<select multiple><option value="tF9caryzs2xx" label="raw" color="blue"></option><option value="qLNP8iAUsBxM" label="final" color="blue"></option></select></th><th>UNIT</th><th>DESCRIPTIO</th></tr></thead><tbody><tr><td>timestamp</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>id</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>timestamp_local</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>sn</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>sample_rh</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td>%</td><td></td></tr><tr><td>sample_temp</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td>ºC</td><td></td></tr><tr><td>lat</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>lon</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>device_state</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>wx_ws</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>wx_wd</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>wx_ws_scalar</td><td><span data-option="tF9caryzs2xx">raw, </span><span data-option="qLNP8iAUsBxM">final</span></td><td></td><td></td></tr><tr><td>wx_u</td><td></td><td></td><td></td></tr><tr><td>wx_v</td><td></td><td></td><td></td></tr><tr><td>wx_pressure</td><td></td><td>hPa</td><td></td></tr><tr><td>wx_temp</td><td></td><td>ºC</td><td></td></tr><tr><td>wx_rh</td><td></td><td>%</td><td></td></tr><tr><td>wx_dew_point</td><td></td><td>ºC</td><td></td></tr><tr><td>cpc_elapsed_seconds</td><td></td><td></td><td></td></tr><tr><td>cpc_serial_number</td><td></td><td></td><td></td></tr><tr><td>cpc_flag</td><td></td><td></td><td></td></tr><tr><td>cpc_pressure_at_beginning</td><td></td><td>hPa</td><td></td></tr><tr><td>cpc_pressure_at_end</td><td></td><td>hPa</td><td></td></tr><tr><td>cpc_pressure_ambient</td><td></td><td>hPa</td><td></td></tr><tr><td>cpc_temperature_ambient</td><td></td><td>ºC</td><td></td></tr><tr><td>cpc_temperature_at_input</td><td></td><td>ºC</td><td></td></tr><tr><td>cpc_temperature_at_output</td><td></td><td>ºC</td><td></td></tr><tr><td>cpc_humidity_at_input</td><td></td><td>%</td><td></td></tr><tr><td>cpc_humidity_at_output</td><td></td><td>%</td><td></td></tr><tr><td>cpc_dew_point_at_input</td><td></td><td>ºC</td><td></td></tr><tr><td>cpc_dew_point_at_output</td><td></td><td>ºC</td><td></td></tr><tr><td>cpc_particle_count</td><td></td><td></td><td></td></tr><tr><td>cpc_particle_count_corr</td><td></td><td></td><td></td></tr><tr><td>cpc_particle_number_conc</td><td></td><td></td><td></td></tr><tr><td>cpc_flush_time_ms</td><td></td><td></td><td></td></tr><tr><td>cpc_humidification_time_ms</td><td></td><td></td><td></td></tr><tr><td>cpc_expansion_time_start</td><td></td><td></td><td></td></tr><tr><td>cpc_expansion_time_end</td><td></td><td></td><td></td></tr><tr><td>cpc_dead_time_corr_factor</td><td></td><td></td><td></td></tr><tr><td>cpc_power_to_pump</td><td></td><td></td><td></td></tr><tr><td>cpc_k_factor</td><td></td><td></td><td></td></tr><tr><td>cpc_particle_number_conc_corr</td><td><span data-option="qLNP8iAUsBxM">final</span></td><td>p/cc</td><td></td></tr></tbody></table>

#### 4.1.3 Data Downloaded via API

For details on how to use the API to download data, please view the API docs [here](https://docs.quant-aq.com/software-apis-and-libraries/quantaq-cloud-api). 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:

```json
// 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.&#x20;

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.&#x20;

{% hint style="info" %}
Flags are consistent across all QuantAQ products, so there may be flags in the table below that irrelevant to your product.
{% endhint %}

<table><thead><tr><th width="169.62109375">FLAG</th><th width="90.24609375">VALUE</th><th width="221.5234375">WHY IS IT SET?</th><th>WHAT TO DO?</th></tr></thead><tbody><tr><td>FLAG_STARTUP</td><td>1</td><td>This flag is set when the device powers on.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_OPC</td><td>2</td><td>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.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_NEPH</td><td>4</td><td>This flag is set when the nephelometer has indicated the data failed to transfer correctly.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_RHTP</td><td>8</td><td>This flag is set when the relative humidity and temperature sensor has failed.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_CO</td><td>16</td><td>This flag is set when the CO sensor has failed or data does not meet initial on-board QA/QC.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_NO</td><td>32</td><td>This flag is set when the NO sensor has failed or data does not meet initial on-board QA/QC.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_NO2</td><td>64</td><td>This flag is set when the NO2 sensor has failed or data does not meet initial on-board QA/QC.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_O3</td><td>128</td><td>This flag is set when the O3 sensor has failed or data does not meet initial on-board QA/QC.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_CO2</td><td>256</td><td>This flag is set when the CO2 sensor has failed or data does not meet initial on-board QA/QC.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_SO2</td><td>512</td><td>This flag is set when the SO2 sensor has failed or data does not meet initial on-board QA/QC.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_H2S</td><td>1024</td><td>This flag is set when the H2S sensor has failed or data does not meet initial on-board QA/QC.</td><td>Remove any rows where this flag is set.</td></tr><tr><td>FLAG_BAT</td><td>2048</td><td>This flag is set when the internal LiPo battery is low or dead.</td><td>None.</td></tr><tr><td>FLAG_OVERHEAT</td><td>4096</td><td>This flag is set when the OPC has overheated.</td><td>Contact QuantAQ.</td></tr><tr><td>FLAG_SD</td><td>8192</td><td>This flag is set when the SD card has failed.</td><td>Replace the SD card.</td></tr></tbody></table>

## 5. Maintenance and Service

Coming soon.

## 6. Changelog

Please see our [public changelog](https://changes.quant-aq.com/) 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.

<table><thead><tr><th width="143.58984375">LED COLOR</th><th width="97.0703125">PATTERN</th><th width="167.98046875">MODE</th><th>DESCRIPTION</th></tr></thead><tbody><tr><td>Green</td><td>Blinking</td><td>Looking for Internet</td><td>If your device is blinking green, it is trying to connect to the cellular network. There is no need to take any action.</td></tr><tr><td></td><td>Breathing</td><td>Cloud not Connected</td><td>If your device is breathing green, it has a cellular connection but has not been able to connect to the cloud.</td></tr><tr><td>Cyan</td><td>Blinking</td><td>Connecting to the Cloud</td><td>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.</td></tr><tr><td></td><td>Breathing</td><td>Connected</td><td>When your device is breathing cyan, everything is good and you are happily connected to the internet and the QuantAQ Cloud.</td></tr><tr><td>Magenta</td><td>Blinking</td><td>Firmware Update</td><td>When your device is blinking magenta, it is undergoing an over-the-air firmware update. DO NOT power off when this is happening.</td></tr><tr><td>White</td><td>Breathing</td><td>Internet Off</td><td>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.</td></tr><tr><td>Red</td><td>Blinking</td><td>System Failure</td><td>A system failure has occurred. This is likely caused by faulty on-board firmware or corrupted memory. Please contact QuantAQ for next steps.</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.quant-aq.com/hardware/modulair-ufp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
