Zum Hauptinhalt springen

Gaskonzentration auslesen

Was dieses Beispiel zeigt​

Das Beispiel bridgeBoard startet das Breakout an seiner I2C-Adresse 0x30 und gibt die Gaskonzentration alle 2,5 Sekunden in PPM aus. Da die Adresse im Bereich 0x30 bis 0x37 liegt, kommuniziert die Bibliothek mit dem ATtiny404 des Boards, der das LMP91000-Frontend konfiguriert und den ADS1115 für Sie ausliest.

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 geschrieben, mit einer Empfindlichkeit von 1200 nA pro ppm, während dieses Board die Zelle SGX-4H2S-300 trägt, deren Datenblatt ein Ausgangssignal von 460 ± 140 nA pro ppm angibt. getPPM() teilt durch die Empfindlichkeit des Presets, daher fällt der Messwert mit SENSOR_H2S etwa 2,6-mal zu niedrig aus. Übergeben Sie stattdessen einen benutzerdefinierten Sensortyp mit den Einstellungen von SENSOR_H2S und 460 nA pro ppm, wie Quick Start zeigt.

Wenn Sie die Adresse des Boards mit dem ADDRESS-Schalter verschoben haben, passen Sie 0x30 entsprechend an.

Der Beispielcode​

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

ElectrochemicalGasSensor sensor(SENSOR_CO, 0x30);

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 and jumper address!");
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 das Board nicht, gibt die Skizze ERROR: Can't init the sensor! Check connections and jumper address! 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 Frontend- und Umwandlungseinstellungen 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 der Standardwert 0x49, geht an einen ADS1115 unter 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 benutzerdefinierter sensorType. SENSOR_H2S ist für die Zelle SGX-4H2S-100 (1200 nA pro ppm) geschrieben und liest mit der Zelle SGX-4H2S-300 dieses Boards (460 ± 140 nA pro ppm in ihrem Datenblatt) etwa 2,6-mal zu niedrig: Übergeben Sie einen benutzerdefinierten Typ mit 460 nA pro ppm.
_adcAddruint8_tDie Adresse, mit der begin() kommuniziert. Dieses Beispiel übergibt 0x30, die Adresse des ATtiny404 (der ADDRESS-Schalter stellt 0x30 bis 0x37 ein). Der Standardwert ist 0x49.
_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, wie mit dem Board kommuniziert wird. Bei einer Adresse von 0x30 bis 0x37 prüft es, ob der ATtiny404 des Boards antwortet, und sendet ihm die ADC-Verstärkung aus dem Sensortyp mit der langsamsten Datenrate; jeder Befehl wartet bis zu 500 ms auf eine Antwort. Bei jeder anderen Adresse startet es einen ADS1115 unter dieser Adresse mit derselben Verstärkung und Datenrate. In beiden Fällen konfiguriert es anschließend das LMP91000-Frontend. Rufen Sie es einmal vor dem Auslesen auf.

Returnstrue, wenn jeder Schritt erfolgreich war, false, wenn das Board nicht geantwortet oder einen Fehler gemeldet hat.

double getPPM()returns double

Liest den ADC über das Board aus, subtrahiert die interne Nullstellung des Frontends (2,5 V mal dessen Prozentwert), addiert die Nullpunktkalibrierung und teilt dann durch die Verstärkung des Verstärkers und durch die Empfindlichkeit der Zelle 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: Sie nimmt mit getPPM() eine Messung vor und multipliziert sie mit 1000.

ReturnsGaskonzentration in PPB.

Zusammenfassung​

Erstellen Sie ein ElectrochemicalGasSensor mit einem Sensor-Preset und der Adresse des Boards, rufen Sie begin() einmal in setup() auf und rufen Sie dann getPPM() auf, wann immer Sie eine Messung möchten. Um mehrere Boards an einem Bus zu verwenden, geben Sie jedem mit seinem ADDRESS-Schalter eine andere Adresse und erstellen Sie ein Objekt pro Adresse.