Zum Hauptinhalt springen

Gemittelte Messung

Was dieses Beispiel zeigt​

Das Beispiel averagedMeasurement der Bibliothek nimmt fünf Messwerte im Abstand von drei Sekunden auf, mittelt sie mit einem einzigen Funktionsaufruf und gibt das Ergebnis aus.

Das Beispiel erstellt den Sensor mit SENSOR_CO, dem Preset für Kohlenmonoxid. Die Bibliothek berechnet ppm aus den Empfindlichkeits- und Verstärkungseinstellungen des Presets; das Preset für die Chlorzelle dieses Boards ist SENSOR_CL2.

Der Beispielcode​

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

Der Kommentar im Kopf des Beispiels verlangt, dass LMPEN angeschlossen wird. Auf diesem Board hält ein 10-kΩ-Widerstand LMPEN auf Low und es ist mit dem ATtiny404 verbunden, daher lassen Sie es unbeschaltet (siehe die Pin-Tabelle unter Hardware-Details).

Erwartetes Ergebnis:

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

Jeder Mittelwert besteht aus fünf Messungen mit je 3 s Wartezeit danach, daher erscheint die erste Sensor reading: -Zeile (der Mittelwert in ppm mit fünf Nachkommastellen, dann PPM) nach etwa 15 s, und die folgenden etwa alle 17,5 s, wenn man die 2,5 s Pause am Ende von loop() mitrechnet. Schlägt begin() fehl, gibt der Sketch ERROR: Can't init the sensor! Check connections! aus und hält an.

Verwendete Funktionen​

ElectrochemicalGasSensor(sensorType _t, uint8_t _adcAddr = DEFAULT_ADC_ADDR, int _configPin = -1)returns ElectrochemicalGasSensor

Erstellt das Sensorobjekt. Es speichert nur die Einstellungen; bis begin() aufgerufen wird, wird nichts an das Board gesendet.

ReturnsDas Sensorobjekt.

Parameter

TypNameBeschreibung
sensorType_tDas Zellen-Preset. Das Beispiel übergibt SENSOR_CO; die SGX-4CL2-Zelle dieses Boards hat das Preset SENSOR_CL2.
uint8_t_adcAddrDie I2C-Adresse, DEFAULT_ADC_ADDR (0x49), wenn sie weggelassen wird, wie im Beispiel. Bei einer Adresse von 0x30 bis 0x37, dem Bereich des ADDRESS-Schalters dieses Boards, kommuniziert begin() mit dem ATtiny404 des Boards; bei jeder anderen Adresse sucht es einen ADS1115 unter dieser Adresse und den LMP91000 direkt am Bus.
int_configPinEin GPIO, den begin() auf Low legt, während es den LMP91000 direkt konfiguriert. -1 (keiner), wenn er weggelassen wird. Für die Adressen 0x30 bis 0x37 ungenutzt.
bool begin()returns bool

Startet Wire, prüft, ob das Board antwortet, stellt Verstärkung und Datenrate des ADC gemäß Preset ein und konfiguriert den LMP91000 mit den Einstellungen des Presets. Rufen Sie es einmal in setup() vor dem Auslesen auf.

Returnstrue, wenn das Board geantwortet hat und beide Konfigurationsschritte erfolgreich waren, sonst false.

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

Nimmt _numMeasurements Messwerte mit getPPM() auf, wartet nach jedem _secondsDelay Sekunden und gibt deren Mittelwert zurück. Die Funktion blockiert, bis sie fertig ist.

ReturnsDie gemittelte Gaskonzentration in ppm.

Parameter

TypNameBeschreibung
uint8_t_numMeasurementsWie viele Messwerte gemittelt werden. Standardmäßig 5; das Beispiel übergibt NUM_READINGS (5).
uint8_t_secondsDelaySekunden Wartezeit nach jedem Messwert. Standardmäßig 2; das Beispiel übergibt SECS_BETWEEN_READINGS (3).
double getAveragedPPB(uint8_t _numMeasurements = 5, uint8_t _secondsDelay = 2)returns double

Wie getAveragedPPM(), mal 1000. Das Beispiel zeigt es als Alternative in einem Kommentar.

ReturnsDie gemittelte Gaskonzentration in ppb.

Parameter

TypNameBeschreibung
uint8_t_numMeasurementsWie viele Messwerte gemittelt werden. Standardmäßig 5.
uint8_t_secondsDelaySekunden Wartezeit nach jedem Messwert. Standardmäßig 2.

Das Beispiel verwendet außerdem Serial und delay(), die zum Arduino-Core gehören, nicht zu dieser Bibliothek.

Alles zusammengesetzt​

Ändern Sie NUM_READINGS und SECS_BETWEEN_READINGS, um Reaktionszeit gegen einen stabileren Wert abzuwägen. Solange getAveragedPPM() läuft, wartet der Rest von loop().