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
/**
**************************************************
*
* @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:
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 ElectrochemicalGasSensorErstellt das Sensorobjekt. Es speichert nur die Einstellungen; bis begin() aufgerufen wird, wird nichts an das Board gesendet.
ReturnsDas Sensorobjekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
sensorType | _t | Das Zellen-Preset. Das Beispiel übergibt SENSOR_CO; die SGX-4CL2-Zelle dieses Boards hat das Preset SENSOR_CL2. |
uint8_t | _adcAddr | Die 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 | _configPin | Ein 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 boolStartet 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 doubleNimmt _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
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | _numMeasurements | Wie viele Messwerte gemittelt werden. Standardmäßig 5; das Beispiel übergibt NUM_READINGS (5). |
uint8_t | _secondsDelay | Sekunden 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 doubleWie getAveragedPPM(), mal 1000. Das Beispiel zeigt es als Alternative in einem Kommentar.
ReturnsDie gemittelte Gaskonzentration in ppb.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | _numMeasurements | Wie viele Messwerte gemittelt werden. Standardmäßig 5. |
uint8_t | _secondsDelay | Sekunden 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().