Proiectul realizat măsoară presiunea atmosferică, temperatura aerului și nivelul de CO2 în vederea evaluării calității unui spațiu de birouri. Ideea de la care am pornit a fost necesitatea monitorizării atmosferei în vederea reglării automate eficiente a sistemelor de aerisire. Sunt colectate date despre parametrii de mediu care pot influența negativ confortul, productivitatea și sănătatea angajaților întru-un mediu variabil (valorile depind și de etaj, număr de angajați etc.). Transmiterea rezultatelor se face folosind portul serial, respectiv WIFI. Pe ecranul LCD se pot urmări valorile citite de unul din senzori în momentul curent, comutând între senzori cu ajutorul unui buton. De asemenea, datele sunt prezentate sub forma a trei grafice pe un server web, pentru a putea analiza evoluția lor în timp.
Montajul este alcătuit dintr-o plăcuță ESP32-C3-DEVKITM-1, la care se conectează folosind bus-ul I2C un sensor Senseair Sunrise 006-0-0007 pentru măsurarea nivelului de CO2 din aer (valoare masurată în ppm), un senzor BMP180 Bosch pentru măsurarea presiunii atmosferice și a temperaturii, respectiv 3 LED-uri de culori diferite (+ o rezistență de 1kΩ pentru fiecare LED). În funcție de intervalul în care este plasată valoarea citită de la senzorul de CO2 se va aprinde LED-ul corespunzător (verde: < 700, 700 < galben < 1000, roșu: > 1000). Ventilatorul este pornit daca nivelul de CO2 este mai mare de 700 ppm, respectiv oprit dupa ce pragul nu mai este atins. Din datele citite de la senzorul BMP180 se poate calcula și altitudinea. Toate datele sunt transmise si pe UART către PC, putând urmări în consola atât valorile cât și statusul returnat (success/fail). Firmware-ul încărcat pe plăcuță pornește un server web, astfel, putând fi accesată pagina web corespunzătoare afișând datele citite pe două grafice: un grafic cu valorile temperaturii și ale presiunii citite de senzorul BMP180, respectiv un grafic al nivelului de CO2 măsurat cu senzorul Sunrise. Aceleasi date sunt afisate si pe LCD-ul graphic
Comentariu | Descriere | Identificator | Amprentă | LibRef | Cantitate |
---|---|---|---|---|---|
Cap Pol2 | Condensator Polarizat (Axial) | C1, C4, C6 | POLAR0.8 | Cap Pol2 | 3 |
Cap | Condensator | C2, C3, C5 | RAD-0.3 | Cap | 3 |
1N4148 | Diodă Schottky | D1 | SMB | D Schottky | 1 |
VERDE | LED Verde | D10 | LED-0 | LED0 | 1 |
GALBEN | LED Galben | D11 | LED-0 | LED0 | 1 |
ROSU | LED Roșu | D12 | LED-0 | LED0 | 1 |
4311 | Modul Display LCD Grafic RGB TFT - Color, IPS (In-Plane Switching) SPI 2 (50.80mm) 320 x 240 | LCD_1 | MODULE_4311 | 4311 | 1 |
Motor | Motor, Tip General | M1 | RB5-10.5 | Motor | 1 |
2N3904 | Tranzistor NPN uz general | Q1 | TO-92A | 2N3904 | 1 |
Res1 | Rezistor | R1, R2, R3, R4, R5, R6 | AXIAL-0.3 | Res1 | 6 |
ESP32-C3-DEVKITM-1 | Placă de dezvoltare WiFi (802.11) (engineering sample only) ESP32-C3, cu ESP32-C3-MINI-1, 4 MB Flash, cu pini | U1 | XCVR_ESP32-C3-DEVKITM-1 | ESP32-C3-DEVKITM-1 | 1 |
BMP180 | Senzor de presiune 4.35PSI ~ 15.95PSI (30kPa ~ 110kPa) Absolut - 16 ~ 19 b 7-VLGA | U2 | BMP180 | BMP180 | 1 |
Sunrise 006-0-0002 | Senzor de Dioxid de Carbon (CO2) | U3 | XDCR_006-0-0002 | 006-0-0002 | 1 |
Descrierea codului aplicaţiei (firmware):
Code snippets
- utilizare algoritm ABC pentru valorile sub 400 ppm
uint8_t meterControl = Wire.read(); if (enable) { Serial.println("Enabling ABC..."); meterControl &= (uint8_t)~0x02U; } else { Serial.println("Disabling ABC..."); meterControl |= 0x02U; }
- citire valoare CO2
byteHi = Wire.read(); byteLo = Wire.read(); co2Val = ((int16_t)(int8_t)byteHi << 8) | (uint16_t)byteLo;
- citire valoare temperatura, presiune, altitudine
bmpTemperature = bmp.readTemperature(); bmpPressure = bmp.readPressure(); bmpRealAltitude = bmp.readAltitude(101500);
Datasheet-uri:
Link-uri utile: