Zum Hauptinhalt springen

Eine eigene Adresse verwenden

Was dieses Beispiel zeigt​

Das Beispiel customAddress erstellt den Sensor unter einer von Ihnen gewählten Adresse, 0x4B, mit dem Konfigurationspin 5 und gibt dann alle 2,5 Sekunden die Gaskonzentration in PPM aus. Übergeben Sie dem Konstruktor als zweites Argument die Adresse und als drittes den Konfigurationspin, um dasselbe in Ihrem eigenen Sketch zu erreichen. Auf diesem Board legen JP2 bis JP4 die Adresse des ADS1115 fest (JP2 für 0x49, JP3 für 0x4A, JP4 für 0x4B), und der ADDRESS-Schalter legt die eigene Adresse des Boards von 0x30 bis 0x37 fest. Beides ist beschrieben unter Hardware-Details. JP2 ist im Auslieferungszustand geschlossen. Öffnen Sie daher JP2, bevor Sie JP3 oder JP4 schließen, und schließen Sie nur eine der beiden Brücken: Wenn Sie JP3 oder JP4 schließen, während JP2 noch geschlossen ist, legt das SDA2 oder SCL2 auf 3V3 und stoppt den On-Board-Bus.

Das Beispiel ist mit SENSOR_SO2 geschrieben, dem Schwefeldioxid-Preset der Bibliothek, 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. 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
customAddress.ino
// Include the required library
#include "Electrochemical-Gas-Sensor-SOLDERED.h"

// Create the sensor object with the according type
// The final parameter is the GPIO pin for LMPEN
ElectrochemicalGasSensor sensor(SENSOR_SO2, 0x4B, 5);

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 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 none

Erstellt das Sensorobjekt. Der Sensortyp enthält die Front-End- 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 die Standardadresse 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, 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 übergibt 0x4B.
_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 übergibt 5.
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 niedrigsten 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, setzt den Konfigurationspin als Ausgang auf HIGH und zieht ihn auf LOW, während es den LMP91000 konfiguriert. Rufen Sie es einmal vor dem Lesen auf.

Returnstrue, wenn jeder Schritt erfolgreich war, andernfalls false.

double getPPM()returns double

Liest den ADC, subtrahiert den internen Nullpunkt des Front-Ends (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: liest mit getPPM() einen Wert und multipliziert ihn mit 1000.

ReturnsGaskonzentration in PPB.

Alles zusammen​

Übergeben Sie die Adresse und den Konfigurationspin als zweites und drittes Argument des Konstruktors, rufen Sie begin() einmal in setup() auf und lesen Sie dann mit getPPM() oder getPPB().