This repository provides instructions for the building of particulate matter monitoring systems using the Arduino UNO and Alphasense OPC-N3 optical particle counter module.
There are two variants:
- A portable monitor to measure the personal exposure to particulate matter.
- A stationary monitor for remote long(er)-term deployment.
This repository is part of a bachelor's thesis whose goal it was to develope adaptable low-cost PM monitors and provide a simple and free guide for others also looking to build such systems. The monitors described in this repository can either be copied directly or used as the basis for custom units adapted to specific needs. The project itself is licensed under the the CC-BY 4.0
license, however some of the software libraries used are come with different licenses. For more details on this, see Section 3
of this README file.
The core of both the portable and stationary monitors is a stack made up of an Arduino UNO and an Adafruit Data Logger Shield (DLS). The stationary monitor also includes a DFRobot SIM7600CE-T shield for wireless data transmission to Google Drive. Both monitors feature local data storage on an SD card and proper timestamping using the DLS' real-time clock. To interface with the Alphasense OPC-N3 module, a voltage divider is required to drop the SPI lines from 5 V to 3 V. The handy prototyping area of the DLS is used to implement this and also to host all of the required connectors for power, communication and (optional) status LEDs.
--TODO IMAGE_PORTABLE_SCHEMATIC_OVERVIEW
--TODO IMAGE_STATIONARY_SCHEMATIC_OVERVIEW
One goal of the project was to keep the cost of the monitors low, so they are built from readily available and affordable components. The only real exception is the Alphasense OPC-N3. This is rather pricey but could be substituted by a cheaper sensor module if not all of its particular functionality is needed (be aware, replacing the OPC migth require changing the hardware and software interface).
The following tables give a rough breakdown of the costs of each of the monitors. The links are for reference only as sourcing the parts locally is most likely the cheapest option!
Name | Source | Approx. price (CHF) |
---|---|---|
Arduino UNO (R3/R4 Minima) | Mouser | 20.- |
Adafruit Data Logger Shield (Rev. C) | Mouser | 15.- |
SD card (32 GB) | Mouser | 20.- |
RTC battery (CR1220) | Digitec | 5.- |
Powerbank | Digitec | 35.- |
Alphasense OPC-N3 | N/A | ~500.- |
Small components (LEDs, resistors, wires, etc.) | N/A | ~10.- |
Total | ~570.- |
Name | Source | Approx. price (CHF) |
---|---|---|
Arduino UNO (R3/R4 Minima) | Mouser | 20.- |
Adafruit Data Logger Shield (Rev. C) | Mouser | 15.- |
SD card (32 GB) | Mouser | 20.- |
RTC battery (CR1220) | Digitec | 5.- |
Alphasense OPC-N3 | N/A | ~500.- |
UPS board | Aliexpress | ~5.- |
UPS batteries (2x 18650) | Digitec | 30.- |
DFRobot SIM7600CE-T | Mouser | 60.- |
Small components (LEDs, resistors, wires, etc.) | N/A | ~15.- |
Total | ~670.- |
The cost breakdowns do NOT include housings for the monitors, as this is very dependant on the exact use case. They could be as simple as a plastic food container. For this project, the housings were 3D-printed on a consumer grade FDM printer. More details on these can be found in Section 1.3.
of this README file.
The files for the 3D-printed housings can be found in the cad
directory. This also contains some simplified CAD models of the UNO and OPC to allow you to design your own housings.
The designs provided can be printed on standard consuer grade FDM printers. They should be printed from a material such as PETG or ASA to make sure they are strong enough and not easily damaged by UV radiation.
The housing for the portabel monitor is designed to be used with a GoPro 'Chesty' chest harness. This allows the monitor to be worn somewhat comfortably.
A list of all the hardware required for the portable monitor housing is provided below.
Item | Note | Quantity |
---|---|---|
3D-printed parts | PETG or ASA | 1 complete set |
Threaded inserts M3 | - | 7 |
Threaded inserts M4 | - | 8 |
M3x8 screws | button head | 7 |
M3x10 screws | button head | 7 |
M3x16 screws | button head | 2 |
M4x10 screws | button head | 8 |
GoPro 'Chesty' | - | 1 |
A list of all the hardware required for the stationary monitor housing is provided below.
Item | Note | Quantity |
---|---|---|
3D-printed parts | PETG or ASA | 1 complete set |
Threaded inserts M3 | - | 8 |
Threaded inserts M4 | - | 4 |
M3x8 screws | button head | 8 |
M3x10 screws | button head | 4 |
M4x12 screws | countersunk | 4 |
M3x20 standoffs | male/female | 4 |
To build your own PM monitors, first follow the assembly guide for you chosen version. To use you monitors, have a look at the usage guides. These can be found in the docs
directory. Alternatively, the table below provides direct links to individual guides.
Portable | Stationary |
---|---|
Assembly |
Assembly |
Usage |
Usage |
The code provided in this repository makes use of the libraries listed in the following table. When using any code from this repository, make sure you follow any applicable licenses of the libraries in addition to the license of the project. A copy of the licenses is provided in the licenses
directory.
Library | License |
---|---|
SPI.h | LGPL v2.1 |
SD.h | GPL v3 |
RTClib | MIT |
SoftwareSerial | LGPL v2.1 |
.
├── CITATION.cff
├── LICENSE.md
├── README.md
├── cad
│ ├── Portable
│ │ ├── Portable_v1-0-0.f3d
│ │ ├── Portable_v1-0-0.step
│ │ ├── Portable_v1-0-0.stl
│ │ └── test.stl
│ ├── README.md
│ ├── Stationary
│ │ ├── Stationary_v1-0-0.f3d
│ │ ├── Stationary_v1-0-0.step
│ │ └── Stationary_v1-0-0.stl
│ └── misc
│ ├── Alphasense_OPC-N3.f3d
│ ├── Alphasense_OPC-N3.step
│ ├── Arduino_UNO_PCB.f3d
│ ├── Arduino_UNO_PCB.step
│ ├── SBS_TTBB1000FASTA.f3d
│ └── SBS_TTBB1000FASTA.step
├── img
│ ├── Portable_CAD.png
│ ├── README.md
│ └── Stationary_CAD.png
└── src
├── Data_Reception
│ └── Google_Sheet_Script.txt
├── Portable_v1-0-0
│ └── Portable_v1-0-0.ino
├── Portable_v2-0-0
│ └── Portable_v2-0-0.ino
├── README.md
├── RTC_adjust
│ ├── README.md
│ └── RTC_adjust_v1-0-0.ino
└── Stationary
├── README.md
└── Stationary_v1-0-0.ino