Skip to main content
Version: ACS CC

Portable Air Quality Measurement System

A one line project description

info

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

Schematic

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:

  1. 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.
  1. 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.
  1. Display module
  • The OLED is used to display the measured values ​​in real time.
  • Controlled by the ssd1306 library.
  1. 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.
  1. 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

DeviceUsagePrice
Raspberry Pi Pico WThe microcontroller35 RON
CCS811 SensorCO₂ sensor97 RON
SDS011 SensorPM2.5 particle sensor54 RON
LCD Module ST7735SDisplays visual information28 RON
Li-Ion battery .7V, 1200 mAhEnsures the portability and autonomy of the device12 RON
Battery holderSecure connection and fixation of portable battery5 RON
Li-Ion battery charger module (TP4056)Charges, protects and manages the Li-Ion battery.12 RON
BreadboardPrototyping and organizing electronic circuits without soldering10 RON

Software

LibraryDescriptionUsage
embedded-halHardware abstraction layer for embedded systemsProvides a common set of traits for interfacing with hardware peripherals
rp2040-halHardware abstraction layer for Raspberry Pi RP2040 microcontrollerUsed to access and control peripherals of the Raspberry Pi Pico
st7735-lcdDriver for ST7735 LCD over SPIUsed to control the ST7735 display module
ccs811Driver for CCS811 air quality sensorUsed to read CO₂ and TVOC data from the CCS811 sensor
sds011Driver for SDS011 particulate matter sensorUsed to read PM2.5 and PM10 data from the SDS011 sensor
embassyAsynchronous embedded frameworkUsed for async, real-time embedded applications
heaplessData structures without dynamic allocationProvides fixed-capacity data structures useful in no_std environments
serde & serde_jsonSerialization framework and JSON supportUsed to serialize and deserialize data, e.g., for sending to a server
embedded-nalNetwork abstraction layer for embedded systemsProvides traits for abstracting network sockets and communication
  1. link
  2. link ...