Portable Air Quality Measurement System
A one line project description
Author: Crantea Antonio-Cristian
GitHub Project Link: link_to_github
Description
The project consists of a portable device that measures air quality, monitoring parameters such as CO₂ levels, volatile organic compounds (VOCs) and PM2.5 particles. The data is displayed in real time on an OLED screen and transmitted via WiFi to a server for storage and analysis. The project will be implemented on a Raspberry Pi Pico 2 W, using the Rust language and integrating specialized sensors for precise measurements. The device will operate on a LiPo battery for portability and autonomy.
Motivation
The motivation for this project is that I have always wanted to create something real, tangible that I could use for something. The idea of an air quality filter started from the area where I live, namely Crângasi where there is a panel that displays the air quality in the area. From there I took this idea and thought of trying to recreate such a project myself.
Architecture
The project architecture consists of several software and hardware components, which work together to collect, display and transmit air quality data. The main architectural components and the connections between them are:
- Data collection module (Sensors)
- Includes the CCS811 (for CO₂ and VOC) and SDS011 (for PM2.5 particles) sensors.
- These sensors are controlled by dedicated Rust drivers and communicate via I2C/UART with the microcontroller.
- Main controller (Raspberry Pi Pico 2 W)
- Runs the code written in Rust, using frameworks such as embassy or rtic for concurrent tasks.
- Integrates the HAL (Hardware Abstraction Layer) libraries for interaction with sensors and external components.
- Display module
- The OLED is used to display the measured values in real time.
- Controlled by the ssd1306 library.
- Communication module
- Data transmission to a server is done via WiFi using the abstractions provided by embedded-nal.
- Data can be serialized to JSON using the serde and serde_json libraries.
- Power module
- Includes the LiPo battery and a TP4056 charging/protection module.
- Ensures system portability and autonomy.
Log
Week 5 - 11 May
Soon...
Week 12 - 18 May
Soon...
Week 19 - 25 May
Soon...
Hardware
The project uses the following hardware components:
- Raspberry Pi Pico 2 W – Microcontroller with integrated WiFi, compatible with Rust, which manages the sensors, display and communication.
- CCS811 Sensor – Measures CO₂ and volatile organic compounds (VOC) concentrations in the air.
- SDS011 Sensor – Detects PM2.5 particulate matter, relevant for air pollution assessment.
- 1.44” LCD module (ST7735S) – Displays collected data in real time, via SPI interface, at a resolution of 128x128 px.
- Li-Ion battery 3.7V, 1200 mAh – Provides portable power to the device.
- Battery holder – Allows safe connection of the battery to the microcontroller.
- TP4056 charger module – Manages charging and protection of the Li-Ion battery.
- Breadboard and jumper cables – Facilitates connection and testing of circuits during the prototyping phase.
- Case – Provides protection and portability of the assembly.
Schematics
Soon...
Bill of Materials
Device | Usage | Price |
---|---|---|
Raspberry Pi Pico W | The microcontroller | 35 RON |
CCS811 Sensor | CO₂ sensor | 97 RON |
SDS011 Sensor | PM2.5 particle sensor | 54 RON |
LCD Module ST7735S | Displays visual information | 28 RON |
Li-Ion battery .7V, 1200 mAh | Ensures the portability and autonomy of the device | 12 RON |
Battery holder | Secure connection and fixation of portable battery | 5 RON |
Li-Ion battery charger module (TP4056) | Charges, protects and manages the Li-Ion battery. | 12 RON |
Breadboard | Prototyping and organizing electronic circuits without soldering | 10 RON |
Software
Library | Description | Usage |
---|---|---|
embedded-hal | Hardware abstraction layer for embedded systems | Provides a common set of traits for interfacing with hardware peripherals |
rp2040-hal | Hardware abstraction layer for Raspberry Pi RP2040 microcontroller | Used to access and control peripherals of the Raspberry Pi Pico |
st7735-lcd | Driver for ST7735 LCD over SPI | Used to control the ST7735 display module |
ccs811 | Driver for CCS811 air quality sensor | Used to read CO₂ and TVOC data from the CCS811 sensor |
sds011 | Driver for SDS011 particulate matter sensor | Used to read PM2.5 and PM10 data from the SDS011 sensor |
embassy | Asynchronous embedded framework | Used for async, real-time embedded applications |
heapless | Data structures without dynamic allocation | Provides fixed-capacity data structures useful in no_std environments |
serde & serde_json | Serialization framework and JSON support | Used to serialize and deserialize data, e.g., for sending to a server |
embedded-nal | Network abstraction layer for embedded systems | Provides traits for abstracting network sockets and communication |