Skip to main content

Usrednjeno mjerenje

Što prikazuje ovaj primjer​

Primjer averagedMeasurement iz biblioteke očitava senzor pet puta u razmaku od tri sekunde, jednim pozivom funkcije izračunava prosjek i ispisuje rezultat.

Primjer stvara senzor s SENSOR_CO, predloškom za ugljikov monoksid. Biblioteka izračunava ppm iz osjetljivosti i postavki pojačanja koje određuje predložak; predložak za klorovu ćeliju ove pločice je SENSOR_CL2.

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

Komentar u zaglavlju traži da se poveže LMPEN. Na ovoj pločici otpornik od 10 kΩ drži LMPEN na niskoj razini, a spojen je na ATtiny404, pa ga ostavite nepovezanim (pogledajte tablicu pinova na stranici Detalji o hardveru).

Očekivani rezultat:

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

Svako usrednjavanje uzima pet očitanja s pauzom od 3 s nakon svakog, pa se prvi redak Sensor reading: (prosjek u ppm s pet decimala, zatim PPM) pojavljuje nakon otprilike 15 s, a sljedeći otprilike svakih 17,5 s, uz pauzu od 2,5 s na kraju funkcije loop(). Ako begin() ne uspije, skica 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 ElectrochemicalGasSensor

Stvara objekt senzora. Sprema samo postavke; ništa se ne šalje na pločicu dok se ne pozove begin().

ReturnsObjekt senzora.

Parametri

TipNazivOpis
sensorType_tPredložak ćelije. Primjer koristi SENSOR_CO; ćelija SGX-4CL2 na ovoj pločici ima predložak SENSOR_CL2.
uint8_t_adcAddrI2C adresa, DEFAULT_ADC_ADDR (0x49) ako je izostavljena, kao u primjeru. Za adresu od 0x30 do 0x37, raspon prekidača ADDRESS na ovoj pločici, begin() komunicira s ATtiny404 na pločici; za bilo koju drugu adresu traži ADS1115 na toj adresi i LMP91000 izravno na sabirnici.
int_configPinGPIO koji begin() postavlja na nisku razinu dok izravno konfigurira LMP91000. -1 (nijedan) ako je izostavljen. Ne koristi se za adrese od 0x30 do 0x37.
bool begin()returns bool

Pokreće Wire, provjerava odgovara li pločica, postavlja pojačanje ADC-a i brzinu podataka prema predlošku te konfigurira LMP91000 postavkama predloška. Pozovite je jednom u setup() prije očitavanja.

Returnstrue ako je pločica odgovorila i oba koraka konfiguracije uspjela, inače false.

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

Uzima _numMeasurements očitanja pomoću getPPM(), čekajući _secondsDelay sekundi nakon svakog, i vraća njihovu srednju vrijednost. Blokira izvođenje dok ne završi.

ReturnsUsrednjena koncentracija plina u ppm.

Parametri

TipNazivOpis
uint8_t_numMeasurementsKoliko se očitanja usrednjava. Zadano 5; primjer predaje NUM_READINGS (5).
uint8_t_secondsDelaySekunde čekanja nakon svakog očitanja. Zadano 2; primjer predaje SECS_BETWEEN_READINGS (3).
double getAveragedPPB(uint8_t _numMeasurements = 5, uint8_t _secondsDelay = 2)returns double

Isto kao getAveragedPPM(), pomnoženo s 1000. Primjer je prikazuje u komentaru kao alternativu.

ReturnsUsrednjena koncentracija plina u ppb.

Parametri

TipNazivOpis
uint8_t_numMeasurementsKoliko se očitanja usrednjava. Zadano 5.
uint8_t_secondsDelaySekunde čekanja nakon svakog očitanja. Zadano 2.

Primjer koristi i Serial i delay(), koji dolaze s Arduino jezgrom, a ne s ovom bibliotekom.

Sve zajedno​

Promijenite NUM_READINGS i SECS_BETWEEN_READINGS kako biste uskladili brzinu odziva i stabilnost vrijednosti. Dok getAveragedPPM() radi, ostatak funkcije loop() čeka.