Zum Hauptinhalt springen

Einen Sensor auslesen

Was dieses Beispiel zeigt​

Das Beispiel singleSensor erstellt einen Sensor mit der Standardadresse der Bibliothek, 0x49, startet ihn und gibt die Gaskonzentration alle 2,5 Sekunden in PPM aus.

Das Beispiel ist mit SENSOR_CO, dem Kohlenmonoxid-Preset der Bibliothek, geschrieben, daher sind seine PPM-Werte keine H2S-Werte. Stellen Sie es nicht unverändert auf das Preset SENSOR_H2S der Bibliothek um: Dieses Preset ist für die Zelle SGX-4H2S-100 mit einer Empfindlichkeit von 1200 nA pro ppm geschrieben, während dieses Board die Zelle SGX-4H2S-300 trägt, deren Datenblatt ein Ausgangssignal von 460 ± 140 nA pro ppm angibt. Mit SENSOR_H2S fällt der Messwert etwa 2,6-mal zu niedrig aus. Übergeben Sie stattdessen einen eigenen Sensortyp mit den Einstellungen von SENSOR_H2S und 460 nA pro ppm, wie Schnellstart zeigt.

Der Beispielcode​

Select Board
singleSensor.ino
// Include the required library
#include "Electrochemical-Gas-Sensor-SOLDERED.h"

// 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_SO2, 0x4B, 5);
// 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 reading
double reading = sensor.getPPM();

// If PPB is more relevant for your sensor, you can use:
// double reading = sensor.getPPB();

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

Erwartetes Ergebnis:

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

Danach folgt alle 2,5 Sekunden eine Zeile, die mit Sensor reading: beginnt, mit der Konzentration in PPM auf fünf Nachkommastellen. Antwortet der Sensor nicht, gibt die Skizze 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 none

Erstellt das Sensorobjekt. Der Sensortyp enthält die Einstellungen für das Frontend und die Umrechnung für eine Gaszelle. Die Adresse bestimmt, wie begin() mit dem Board kommuniziert: Eine Adresse von 0x30 bis 0x37 läuft über den ATtiny404 des Boards; jede andere Adresse, etwa die Standardadresse 0x49, geht an einen ADS1115 mit dieser Adresse und direkt an den LMP91000.

ReturnsKonstruktor.

Parameter

NameTypBeschreibung
_tsensorTypePreset aus der Bibliothek: SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3 oder SENSOR_CL2. Oder ein eigener sensorType. Für die Zelle dieses Boards übergeben Sie einen eigenen mit 460 nA pro ppm.
_adcAddruint8_tDie Adresse, mit der begin() kommuniziert. Dieses Beispiel lässt sie weg, daher wird die Standardadresse 0x49 (DEFAULT_ADC_ADDR) verwendet.
_configPinintEin GPIO, den die Bibliothek auf High hält und auf Low zieht, während sie den LMP91000 direkt konfiguriert. Wird bei Adressen von 0x30 bis 0x37 ignoriert. Dieses Beispiel lässt ihn weg (-1, keiner).
bool begin()returns bool

Startet I2C und wählt anhand der Adresse aus, wie mit dem Board kommuniziert wird. Bei einer Adresse von 0x30 bis 0x37 prüft sie, ob der ATtiny404 des Boards antwortet, und sendet ihm die ADC-Verstärkung aus dem Sensortyp mit der niedrigsten Datenrate; jeder Befehl wartet bis zu 500 ms auf eine Antwort. Bei jeder anderen Adresse startet sie einen ADS1115 mit dieser Adresse, derselben Verstärkung und derselben Datenrate. In beiden Fällen konfiguriert sie anschließend das LMP91000-Frontend. Rufen Sie sie einmal vor dem Auslesen auf.

Returnstrue, wenn alle Schritte erfolgreich waren, sonst false.

double getPPM()returns double

Liest den ADC aus, zieht die interne Nullstelle des Frontends ab (2,5 V mal deren Prozentwert), addiert die Nullpunktkalibrierung und teilt dann durch die Verstärkung des Verstärkers und durch die Zellempfindlichkeit in nA pro ppm aus dem Sensortyp. Ein Ergebnis unter 0 wird als 0 zurückgegeben.

ReturnsGaskonzentration in PPM.

double getPPB()returns double

Die auskommentierte Alternative im Beispiel: liest mit getPPM() einen Messwert und multipliziert ihn mit 1000.

ReturnsGaskonzentration in PPB.

Zusammenfassung​

Erstellen Sie einen ElectrochemicalGasSensor mit einem Sensortyp, rufen Sie begin() einmal in setup() auf und rufen Sie dann getPPM() oder getPPB() auf, wann immer Sie einen Messwert möchten.