smvit-air-sensor

🏠 Domov · ⬅️ Nahor

PRJ023 — Prezentácia

Senzor kvality ovzdušia

2025-PRJ-023-ST_023-ST_023

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 monitor

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

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

Nefunkčné požiadavky

Hardvérové obmedzenia

Softvérové obmedzenia

Cenová analýza

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


Databázová schéma

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

Stĺpec Typ Popis
id INTEGER Primárny kľúč
serial_number TEXT Jedinečný identifikátor zariadenia

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

Stĺpec Typ Popis
id INTEGER Primárny kľúč
user_id INTEGER FK na users.id
temperature REAL Teplota v °C
humidity REAL Relatívna vlhkosť v %
aqi INTEGER Index kvality vzduchu
co2 REAL eCO₂ v ppm
tvoc REAL TVOC
timestamp INTEGER Unix č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é:

Potenciálne zlepšenia

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

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.