Skip to main content

PRJ023 — Presentation

2025-PRJ-023-ST_023-ST_023-Air quality monitor

clickbait
Obr.: Model senzoru kvality ovzdušia

Project Summary 🗂️ [zobraziť]

Tento projekt je kompletné riešenie na meranie kvality ovzdušia pomocou syntézy mikrontroléra a senzorov.

Introduction

2025-PRJ-023-ST_023-ST_023-Air quality monito

Projekt rieši meranie kvality ovzdušia pomocou mikrokontroléra ESP32 a senzorov AHTX0 a ENS160, pričom údaje o teplote, vlhkosti, TVOC, eCO₂ a odvodenom AQI sú zobrazované na OLED displeji a odosielané na server. Server ich ukladá do databázy a poskytuje responzívne webové rozhranie na sledovanie aktuálnych hodnôt aj historických trendov. Prínosom je dostupné, cenovo efektívne riešenie pre monitoring kvality vzduchu s možnosťou vzdialeného prístupu k dátam.

Obsah

01-Business

Problém

Zvýšená koncentrácia CO₂ a TVOC v interiéroch znižuje komfort, zdravie a produktivitu, pričom dostupné riešenia sú drahé alebo komplikované.

Cieľ projektu

Vyvinúť cenovo dostupné zariadenie na meranie kvality ovzdušia s lokálnym displejom a vzdialeným prístupom cez webové rozhranie.

Cieľoví používatelia

Domácnosti, kancelárie, školy, malé firmy – všetci, ktorí potrebujú sledovať kvalitu vzduchu v uzavretých priestoroch.

Hodnota projektu

Dostupnosť: nízke náklady, jednoduchá inštalácia
Prehľadnosť: OLED displej + webová aplikácia

Obmedzenia

Výkon a pamäť ESP32
Stabilita Wi-Fi pripojenia
Presnosť senzorov závislá od kalibrácie

Použitia

Monitorovanie kvality vzduchu v domácnosti
Riadenie ventilácie v kancelárii podľa CO₂

02-Top Level Architecture

Fyzické komponenty

  • ESP32 DevKit (mikrokontrolér, Wi-Fi modul, GPIO piny, I²C zbernica, displej, napájanie)
  • Senzorový modul: AHTX0 (meranie teploty & vlhkosti)
  • Senzorový modul: ENS160 (meranie TVOC, eCO₂, výpočet AQI)
  • Drevený kryt (otvor pre prúdenie vzduchu, otvor na napájanie)

Hardware architektúra

hardware architecture
Obr.: Diagram zobrazujúci fyzické komponenty

System architektúra

component architecture
Obr.: Diagram zobrazujúci softvérové a systémové komponenty

03-Solution Architecture

ESP32 so senzormi (I²C) vykresľuje merania na displej a zároveň ich posiela cez Wi‑Fi v JSON formáte na REST server, ktorý ich validuje, ukladá do SQLite a sprístupňuje ich vo webovom dashboarde.

Vývojový diagram

flow chart
Obr.: Diagram vizualizuje tok riešenia. Mikrokontrolér číta senzorové dáta a vykresľuje na displej. Zároveň ich zasiela v intervaloch cez sieť na server, kde sa ukladajú do databázy. Dáta si môže používa hocikedy prezrieť z PC alebo mobilu.

04-Analysis

Analýza problému

Cieľom projektu je vytvoriť zariadenie na monitorovanie kvality ovzdušia, ktoré bude cenovo dostupné, jednoduché na inštaláciu a poskytne používateľovi prehľadné dáta v reálnom čase aj historické trendy. Riešenie musí byť vhodné pre domáce aj kancelárske prostredie.

Funkčné požiadavky

  • zariadenie musí merať teplotu, vlhkosť, TVOC, eCO₂ a odvodený AQI,
  • musí umožniť pripojenie k Wi‑Fi a odosielanie dát na server,
  • systém musí poskytovať webové rozhranie (desktop & mobil) na vizualizáciu dát,
  • musí podporovať historické grafy a aktuálne hodnoty,

Nefunkčné požiadavky

  • stabilné pripojenie k Wi‑Fi,
  • jednoduchá konfigurácia (plug & play),
  • responzívne a intuitívne UI,
  • bezpečná komunikácia (napr. HTTPS).

Hardvérové obmedzenia

  • použitie ESP32 ako hlavného mikrokontroléra,
  • senzory AHTX0 a ENS160 (I²C),
  • napájanie cez USB (5V),
  • obmedzený výpočtový výkon ESP32.

Softvérové obmedzenia

  • firmware v Arduino IDE (C++),
  • komunikácia cez HTTP/JSON,
  • server postavený na Python Flask + SQLite,
  • obmedzená pamäť ESP32 → optimalizácia kódu,
  • nutnosť spracovania dát na strane servera (agregácie, grafy).

Cenová analýza

  • Senzor CO₂ príliš drahý: 90€
  • Senzor ENS160+AHT21 (eCO₂): 9.90€
  • ESP32: 7.30€
  • Káble: 3.40€ (počet 120ks)

05-Design

skica
Obr.: Náčrť drevenej krabičky, ktorá zakrýva hardvér.
3d dizajn
Obr.: 3D model drevenej krabičky.
kabeláž
Obr.: Návrh kabeláže medzi mikrokontrolérom a senzorom.

Server API

  • GET /health – stav servera (uptime, verzia)
  • POST /send-data – prijme najnovšie merania zo senzora (JSON payload)
  • GET /read-data – vráti dáta pre používateľa a dátum/interval
    • Query parametre: user_id, date (napr. 2026-01-13)

Databázová schéma

users (väzba používateľ ↔ zariadenie)

StĺpecTypPopis
idINTEGERPrimárny kľúč
serial_numberTEXTJedinečný identifikátor zariadenia

sensor_realtime (posledné merania na používateľa/zariadenie)

StĺpecTypPopis
idINTEGERPrimárny kľúč
user_idINTEGERFK na users.id
temperatureREALTeplota v °C
humidityREALRelatívna vlhkosť v %
aqiINTEGERIndex kvality vzduchu
co2REALeCO₂ v ppm
tvocREALTVOC
timestampINTEGERUnix čas merania

06-Implementation

balík
Obr.: Balík s hardvérom.
balík mikrokontroléra
Obr.: Balík s ESP32.
balík senzora
Obr.: Balík s ENS160+AHT21.

Úryvok kódu senzora:

// Reading the sensor data
void readSensorData(unsigned long currentMillis) {
// --- Read AHT21 ---
sensors_event_t hmd, temp;
aht.getEvent(&hmd, &temp);
float temperature = temp.temperature;
float humidity = hmd.relative_humidity;
// --- Print AHT21 results ---
Serial.print("Temp: "); Serial.print(temperature); Serial.print(" °C, ");
Serial.print("Humidity: "); Serial.print(humidity); Serial.println(" %");
// --- Read ENS160 ---
int aqi; // air quality index (1-5)
int co2; // estimated CO2 (ppm)
int tvoc; // total VOC [Volatile Organic Compounds] (ppb)
if( ens.checkDataStatus() ) {
aqi = ens.getAQI();
co2 = ens.getECO2();
tvoc = ens.getTVOC();
// --- Print ENS160 results ---
Serial.print("Air Quality Index (1-5): "); Serial.print(aqi); Serial.print(", ");
Serial.print("eCO2: "); Serial.print(co2); Serial.print(" ppm, ");
Serial.print("TVOC: "); Serial.print(tvoc); Serial.println(" ppb");
}
else {
Serial.print("Failed to read air quality data!");
}
// Displaying message to display
displayMessage(
"Temperature: " + String(temperature) + "C\nHumidity: " + String(humidity) +
"%\nAQI: " + String(aqi) + "index\nCO2: " + String(co2) +
"ppm\nTVOC: " + String(tvoc) + "mg/m3"
);
// Every 5 minutes also send to server
if (currentMillis - lastSendTime >= SEND_INTERVAL) {
Serial.println("Sending sensor data to server...");
lastSendTime = currentMillis;
sendDataToServer(temperature, humidity, aqi, co2, tvoc);
}
}

Úryvok kódu servera:

@app.route('/send-data/', methods=['POST'])
def receive_data():
"""Receive data endpoint."""
try:
# If no JSON is provided
request_json = request.json
if not request_json:
return fill_json_response(status=STATUS_OK, error="No JSON provided")
# Convert JSON to dictionary
request_dict = dict(request_json)
# Validate JSON schema
valid, missing_key = validate_received_data_schema(data=request_dict)
if not valid:
return fill_json_response(status=STATUS_BAD, error=f"Missing key: {missing_key}")
# Save to database
write_data(data=request_dict)
# Return success
return fill_json_response(status=STATUS_ADD, error=None)
# Handle errors
except (ValueError, RuntimeError) as error:
print("Error:", error)
return fill_json_response(status=STATUS_ERROR, error="Internal server error")

Server je hostovaný na platforme Azure.

Zapojenie hardvéru a prototypovanie

zapojený mikrokontrolér
Obr.: Zapojený ESP32.
zapojený senzor
Obr.: Zapojený senzor ENS160+AHT21.

Vloženie hardvéru do krabičky z dreva

box 1
Obr.: Otvor na vzduch.
box 2
Obr.: Otvor na display.
box 3
Obr.: Otvor na napájanie.

07-Testing & Verification

Nechali sme na internáte bežať senzor 8 dní. 4 dni bol senzor bez krytu, 4 dni v krabičke.

Bez krytu

data before
Obr.: Hodnoty teploty a vlhkosti sú pomerne presné. Hodnoty oxidu uhličitého primerané.

S krytom

data after
Obr.: Hodnoty teploty sú značne zvýšené (v priemere o 4 stupne). Vlhkosť rovnaká. Oxid uhličitý zvýšený (v priemere o hodnotu 300).

Výsledky

Krabička nedodáva senzoru dostatočnú výmenu vzduchu. Zariadenie sa prehrieva a skresľuje výsledky. Taktiež skresľuje aj častice v ovzduší a oxid uhličitý kvôli slabej výmene vzduchu.

08-Operation

Bežná prevádzka

Používateľ zapojí senzor (micro-usb). Senzor sa sám naštartuje a vypisuje na obrazovku jeho stav. Automaticky začína merať a pri prístupe na wifi aj zasielať dáta na server.

WiFi

Ak používateľ chce, aby sa zariadenie pripojilo na sieť, tak musí zdieľať pripojenie s určitými podmienkami. Meno siete musí byť "Hotspot" a heslo "smvit12345". Pre finálny produkt by bol použitý sofistikovanejší prístup ako pre POC.

Signály

Modrá LEDka bliká v intervale pripomínajúci tlkot srdca

Všetko beží v poriadku. Zariadenie meria a úšpešne zasiela dáta na server.

Modrá LEDka bliká v pol sekundovom rovnomernom intervale

Zariadenie signalizuje, že sa mu nepodarilo pripojiť na WiFi. Zariadenie ďalej funguje a meria, ale nezasiela dáta na server.

Modrá LEDka bliká v sekundovom rovnomernom intervale

Zariadenie signalizuje, že je na WiFi pripojené, ale nevie dopytovať server (výpadok buď servera alebo lokálnej siete WiFi). Zariadenie ďalej funguje a meria, ale nezasiela dáta na server.

09-Change Management

Pôvodný návrh

V pôvodnom návrhu projektu Air Quality Monitor sa počítalo s kompletnou implementáciou merania kvality ovzdušia, prenosu dát na server a vizualizácie v prehľadnom webovom rozhraní. Zariadenie malo byť umiestnené v kompaktnom drevenom púzdre, ktoré zabezpečí ochranu elektroniky a jednoduchú manipuláciu.

Realizácia

Všetky plánované funkcie boli implementované:

  • meranie teploty, vlhkosti, TVOC, eCO₂ a odvodeného AQI,
  • prenos dát cez Wi-Fi na Flask server,
  • ukladanie dát do SQLite,
  • webové rozhranie s historickými grafmi a aktuálnymi hodnotami,
  • voliteľný OLED displej pre lokálne zobrazenie.

Potenciálne zlepšenia

Pre ďalšiu verziu projektu boli identifikované možnosti vylepšenia:

  • Sofistikovanejšie Wi-Fi pripájanie (konfigurácia cez webový portál alebo mobilnú aplikáciu).

  • Lepšie uchopenie hardvéru v krabičke (presne vybudované drážky pre ESP32 a senzory, aby boli pevne uchytené a odolné voči pohybu).

  • Optimalizovaný prietok vzduchu (ventilačné otvory alebo mriežky, aby sa zabránilo skresleniu meraní spôsobenému uzavretým priestorom).

Implementácia týchto vylepšení by zvýšila presnosť meraní, mechanickú stabilitu a profesionálny vzhľad zariadenia.

10-Lemontree 🗂️ [zobraziť]

Nasledujúce obrázky zobrazujú proces porovnávania a zlúčenia modelov v nástroji Lemontree, ktorý sa používa na správu verzovania modelov vytvorených v Enterprise Architect (EA). Lemontree umožňuje identifikovať rozdiely medzi dvoma verziami modelu, vizualizovať zmeny a vykonať ich zlúčenie.

lemontree
Obr.: Porovnanie modulov v hierarchii komponentov. Lemontree zobrazuje rozdiely v štruktúre modulov a ich vlastnostiach. V spodnej časti sú detailné zmeny atribútov (napr. názvy, typy).
lemontree
Obr.: Zlúčenie rozdielov medzi dvoma verziami modelu. V hornej časti sú zobrazené tri stĺpce: pôvodná verzia, upravená verzia a cieľová verzia po zlúčení. V strede je vizualizovaný Use Case diagram s vyznačenými zmenami. V spodnej časti sú detailné informácie o zlúčených vlastnostiach.