Usrednjavanje više očitanja
Što ovaj primjer prikazuje
Primjer averagedMeasurement uzima pet očitanja s pauzom od tri sekunde nakon svakog, izračunava njihov prosjek, ispisuje prosjek u PPM, čeka 2,5 sekunde i počinje ispočetka. Senzor stvara na zadanoj adresi biblioteke, 0x49.
NUM_READINGS i SECS_BETWEEN_READINGS određuju koliko se očitanja usrednjava i koliko sekundi prođe nakon svakog od njih.
Primjer je napisan sa SENSOR_CO, unaprijed definiranom postavkom biblioteke za ugljikov monoksid, pa njegove PPM vrijednosti nisu vrijednosti za H2S. Ne prebacujte ga bez izmjena na postavku SENSOR_H2S iz biblioteke: ta je postavka napisana za ćeliju SGX-4H2S-100 osjetljivosti 1200 nA po ppm, dok ova pločica ima ćeliju SGX-4H2S-300, čiji
tehnički list
navodi izlazni signal od 460 ± 140 nA po ppm. S postavkom
SENSOR_H2S očitanje je oko 2,6 puta preniskо. Umjesto toga proslijedite prilagođeni tip senzora s postavkama SENSOR_H2S i 460 nA po ppm, kao što prikazuje
Brzi početak
.
Kôd primjera
// Include the required library
#include "Electrochemical-Gas-Sensor-SOLDERED.h"
// How many readings to average from and how long to wait between them
#define NUM_READINGS 5
#define SECS_BETWEEN_READINGS 3
// Configurations for each of the sensor types are in sensorConfigData.h in the library's 'src' folder
// Create the sensor object with the according type
ElectrochemicalGasSensor sensor(SENSOR_CO);
// If you are using a custom I2C address (for multiple sensors) use:
// ElectrochemicalGasSensor sensor(SENSOR_CO, 0x4A, 25);
// For more details on this, see customAddress.ino
void setup()
{
Serial.begin(115200); // For debugging
// Init the breakout
if (!sensor.begin())
{
// Can't init? Notify the user and go to infinite loop
Serial.println("ERROR: Can't init the sensor! Check connections!");
while (true)
delay(100);
}
Serial.println("Sensor initialized successfully!");
}
void loop()
{
// Make the averaged reading
// This is a blocking function, so it will take a while before code continues
double reading = sensor.getAveragedPPM(NUM_READINGS, SECS_BETWEEN_READINGS);
// If PPB is more relevant for your sensor, you can use:
// double reading = sensor.getAveragedPPB(NUM_READINGS, SECS_BETWEEN_READINGS);
// Print the reading with 5 digits of precision
Serial.print("Sensor reading: ");
Serial.print(reading, 5);
Serial.println(" PPM");
// Wait a bit before reading again
delay(2500);
}
Očekivani rezultat:
Sensor initialized successfully!
Zatim slijedi redak koji počinje s Sensor reading: s usrednjenom koncentracijom u PPM na pet decimala. Uz postavke iz primjera svaki prosjek uzima pet očitanja s pauzom od 3 sekunde nakon svakog, zatim program čeka 2,5 sekunde, pa se novi redak pojavljuje otprilike svakih 17,5 sekundi. Ako senzor ne odgovori, program ispisuje
ERROR: Can't init the sensor! Check connections! i zaustavlja se.
Korištene funkcije
ElectrochemicalGasSensor(sensorType _t, uint8_t _adcAddr = DEFAULT_ADC_ADDR, int _configPin = -1)returns noneStvara objekt senzora. Tip senzora sadrži postavke ulaznog stupnja i pretvorbe za jednu plinsku ćeliju. Adresa određuje kako begin() komunicira s pločicom: adresa od 0x30 do 0x37 ide preko ATtiny404 na pločici; svaka druga adresa, primjerice zadana 0x49, ide na ADS1115 na toj adresi i izravno na LMP91000.
ReturnsKonstruktor.
Parametri
| Naziv | Tip | Opis |
|---|---|---|
_t | sensorType | Unaprijed definirana postavka iz biblioteke (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) ili prilagođeni sensorType. Za ćeliju ove pločice proslijedite prilagođeni s 460 nA po ppm. |
_adcAddr | uint8_t | Adresa s kojom begin() komunicira. Ovaj primjer je izostavlja pa se koristi zadana, 0x49 (DEFAULT_ADC_ADDR). |
_configPin | int | GPIO koji biblioteka drži u visokom stanju i povlači u nisko dok izravno konfigurira LMP91000. Zanemaruje se za adrese od 0x30 do 0x37. Ovaj primjer ga izostavlja (-1, nema). |
bool begin()returns boolPokreće I2C i prema adresi odabire način komunikacije s pločicom. S adresom od 0x30 do 0x37 provjerava odgovara li ATtiny404 na pločici i šalje mu pojačanje ADC-a iz tipa senzora uz najsporiju brzinu podataka; svaka naredba čeka odgovor do 500 ms. Sa svakom drugom adresom pokreće ADS1115 na toj adresi s istim pojačanjem i brzinom podataka. U oba slučaja zatim konfigurira ulazni stupanj LMP91000. Pozovite je jednom prije očitavanja.
Returnstrue kada su svi koraci uspjeli, inače false.
double getAveragedPPM(uint8_t _numMeasurements = 5, uint8_t _secondsDelay = 2)returns doubleUzima _numMeasurements očitanja pomoću getPPM(), čekajući _secondsDelay sekundi nakon svakog, i vraća njihovu srednju vrijednost. Blokira dok se ne uzmu sva očitanja.
ReturnsUsrednjena koncentracija plina u PPM.
Parametri
| Naziv | Tip | Opis |
|---|---|---|
_numMeasurements | uint8_t | Koliko se očitanja usrednjava. Primjer prosljeđuje NUM_READINGS (5). |
_secondsDelay | uint8_t | Broj sekundi čekanja nakon svakog očitanja. Primjer prosljeđuje SECS_BETWEEN_READINGS (3). |
double getAveragedPPB(uint8_t _numMeasurements = 5, uint8_t _secondsDelay = 2)returns doubleAlternativa iz primjera koja je zakomentirana: vraća getAveragedPPM() s istim argumentima, pomnoženo s 1000. Blokira dok se ne uzmu sva očitanja.
ReturnsUsrednjena koncentracija plina u PPB.
Parametri
| Naziv | Tip | Opis |
|---|---|---|
_numMeasurements | uint8_t | Koliko se očitanja usrednjava. |
_secondsDelay | uint8_t | Broj sekundi čekanja nakon svakog očitanja. |
Sve zajedno
Stvorite jedan ElectrochemicalGasSensor s tipom senzora, jednom pozovite begin() u setup(), a zatim pozovite getAveragedPPM() ili getAveragedPPB() s brojem očitanja i čekanjem nakon svakog. Svaki poziv blokira otprilike _numMeasurements puta _secondsDelay sekundi.