Skip to main content

Usrednjeno mjerenje

Što ovaj primjer prikazuje​

Primjer averagedMeasurement iz biblioteke očitava više vrijednosti, čeka između očitanja i ispisuje njihov prosjek. Usrednjavanje izglađuje šum pojedinačnog očitanja.

Primjer stvara senzor pomoću SENSOR_CO, predloška biblioteke za ugljikov monoksid, i bez adrese, pa se koristi zadana adresa biblioteke. SENSOR_NH3 je predložak biblioteke za ćeliju SGX-4NH3 na ovoj pločici, a pretvorba u ppm koristi osjetljivost predloška: 70 nA/ppm za SENSOR_CO, 40 nA/ppm za SENSOR_NH3. Zato očitanja primjera u isporučenom obliku nisu ppm amonijaka. Za očitanje amonijaka u retku koji stvara senzor promijenite SENSOR_CO u SENSOR_NH3.

Biblioteka komunicira s ATtiny404 mostom na pločici kada je adresa od 0x30 do 0x37, a za bilo koju drugu adresu, poput zadane 0x49 koju koristi ovaj primjer, izravno s ADS1115 na toj adresi. Na ovoj pločici ADS1115 je spojen na pinove SDA2/SCL2 headera, do kojih Qwiic konektori ne dopiru, pa se ovaj primjer ne izvodi preko Qwiic kabela. Umjesto toga kontroler spojite na header: 3,3 V na 3V3, GND na GND, SDA na SDA2 i SCL na SCL2. Primjer se tada izvodi onako kako je napisan, bez promjene adrese.

Komentari u primjeru spajaju LMPEN na GND ili na GPIO pin. Na ovoj pločici LMPEN ostavite nespojenim: otpornik od 10 kΩ već ga povlači na GND, a na njega je spojen i ATtiny404.

Kod primjera​

Select Board
averagedMeasurement.ino
/**
**************************************************
*
* @file averagedMeasurement.ino
* @brief See how to use a built-in function to make an averaged measurement
*
* To successfully run the sketch:
* - Connect LMPEN pin to GND or a GPIO pin so the breakout can be configured
* - Run the sketch and open serial monitor at 115200 baud!
*
* @authors Robert @ soldered.com
***************************************************/

// 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);
}

Serijski monitor prikazuje:

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
Sensor initialized successfully!

Zatim se pojavljuje redak koji počinje s Sensor reading: s prosjekom u ppm. Pet očitanja s 3 sekunde nakon svakog traje 15 sekundi, uz pauzu od 2,5 sekunde, pa novi redak stiže otprilike svakih 17,5 sekundi.

Ako begin() vrati false, primjer umjesto toga 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 none

Stvara objekt senzora. begin() prema adresi odabire način komunikacije s pločicom: od 0x30 do 0x37 koristi ATtiny404 most; svaka druga adresa koristi se kao vlastita I2C adresa ADS1115. Izostavljanjem adrese, kao u ovom primjeru, koristi se DEFAULT_ADC_ADDR, 0x49.

ReturnsKonstruktor.

Parametri

ParametarTipOpis
_tsensorTypePredložak ćelije. SENSOR_NH3 je predložak za ćeliju ove pločice.
_adcAddruint8_tAdresa. Zadano DEFAULT_ADC_ADDR (0x49). Na ovoj pločici prekidač ADDRESS postavlja adresu mosta od 0x30 do 0x37.
_configPinintGPIO koji biblioteka postavlja u nisku razinu dok konfigurira LMP91000 kada je adresa izvan raspona od 0x30 do 0x37. Ne koristi se od 0x30 do 0x37. Zadano -1, bez pina.
bool begin()returns bool

Pokreće I2C. S adresom od 0x30 do 0x37 provjerava odgovara li most i šalje mu ADC postavke iz predloška; s bilo kojom drugom adresom izravno pokreće ADS1115 na toj adresi. Zatim konfigurira analogni ulazni stupanj LMP91000.

Returnstrue kada su svi koraci uspjeli. false kada most nije odgovorio s OK unutar 500 ms ili je prijavio pogrešku, kada pokretanje ADS1115 nije uspjelo ili kada konfiguriranje analognog ulaznog stupnja nije uspjelo.

double getAveragedPPM(uint8_t _numMeasurements = 5, uint8_t _secondsDelay = 2)returns double

Uzima _numMeasurements očitanja pomoću getPPM(), nakon svakog čeka _secondsDelay sekundi i vraća njihov prosjek. Blokira dok se sva očitanja ne završe.

ReturnsUsrednjena koncentracija u ppm.

Parametri

ParametarTipOpis
_numMeasurementsuint8_tKoliko se očitanja usrednjava. Zadano 5.
_secondsDelayuint8_tSekunde čekanja nakon svakog očitanja. Zadano 2.
double getAveragedPPB(uint8_t _numMeasurements = 5, uint8_t _secondsDelay = 2)returns double

Isti prosjek kao getAveragedPPM(), u dijelovima na milijardu. Primjer ga prikazuje u komentaru kao alternativu.

ReturnsgetAveragedPPM() pomnožen s 1000.

Parametri

ParametarTipOpis
_numMeasurementsuint8_tKoliko se očitanja usrednjava. Zadano 5.
_secondsDelayuint8_tSekunde čekanja nakon svakog očitanja. Zadano 2.

Sastavljanje cjeline​

Koristite usrednjene funkcije kada je stabilna vrijednost važnija od brze. Budući da blokiraju izvođenje, ništa drugo u loop() ne radi dok čekaju, zato NUM_READINGS × SECS_BETWEEN_READINGS držite kratkim ako vaša skica ima drugog posla.