Zum Hauptinhalt springen

Chlor auslesen

Was dieses Beispiel zeigt​

Das Beispiel bridgeBoard der Bibliothek startet das Board mit seiner Standardadresse 0x30 und gibt alle 2,5 s die Gaskonzentration in ppm aus. Es ist dasselbe Beispiel wie in der Schnellstartanleitung.

Das Beispiel erzeugt den Sensor mit SENSOR_CO, der Voreinstellung für Kohlenmonoxid. Die Bibliothek berechnet ppm aus den Empfindlichkeits- und Verstärkungseinstellungen der Voreinstellung; die Voreinstellung für die Chlorzelle dieses Boards ist SENSOR_CL2.

Der Beispielcode​

Die Kommentare im Beispiel besagen, dass die Adresse mit Jumpern auf der Rückseite des Boards eingestellt wird und dass LMPEN fest mit GND verbunden ist. Bei diesem Board legt der ADDRESS-Schalter auf der Oberseite die Adresse fest (standardmäßig 0x30). Ein 10-kΩ-Widerstand hält LMPEN auf Low und es ist mit dem ATtiny404 verbunden, lassen Sie es also unbeschaltet (siehe Hardware-Details).

Select Board
bridgeBoard.ino
/**
**************************************************
*
* @file bridgeBoard.ino
* @brief See how to init a sensor on the new ATtiny404 bridge board revision,
*
* To successfully run the sketch:
* - Set the desired address using the jumpers on the back of the board
* (address = 0x30 + jumper offset, giving a range of 0x30-0x37)
* - Run the sketch and open serial monitor at 115200 baud!
*
* Note: on this board revision, LMPEN is hardwired to GND, so there's
* no configPin argument to pass - the constructor's third argument
* is ignored whenever the address falls in the bridge range (0x30-0x37).
*
*
* @authors @ soldered.com
***************************************************/

// Include the required library
#include "Electrochemical-Gas-Sensor-SOLDERED.h"

// Any additional boards on the same bus just need a different jumper setting
// (0x30-0x37), same as twoSensors.ino does for legacy boards with 0x49/0x4A/0x4B.
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 s eine Zeile: Sensor reading: , die Konzentration in ppm mit fünf Nachkommastellen und PPM. Antwortet das Board nicht, gibt der Sketch 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 ElectrochemicalGasSensor

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

ReturnsDas Sensorobjekt.

Parameter

TypeNameDescription
sensorType_tDie Voreinstellung der Zelle. Das Beispiel übergibt SENSOR_CO; die SGX-4CL2-Zelle dieses Boards hat die Voreinstellung SENSOR_CL2.
uint8_t_adcAddrDie I2C-Adresse, DEFAULT_ADC_ADDR (0x49), wenn sie weggelassen wird. Bei einer Adresse von 0x30 bis 0x37, dem Bereich des ADDRESS-Schalters dieses Boards, kommuniziert begin() mit dem ATtiny404 des Boards; das Beispiel übergibt 0x30, die Standardadresse des Boards. Bei jeder anderen Adresse sucht begin() an dieser Adresse nach einem ADS1115 und direkt am Bus nach dem LMP91000.
int_configPinEin GPIO, den begin() auf Low setzt, während es den LMP91000 direkt konfiguriert. -1 (keiner), wenn weggelassen. Bei Adressen von 0x30 bis 0x37 ohne Wirkung.
bool begin()returns bool

Startet Wire, prüft, ob das Board antwortet, sendet ihm die ADC-Verstärkung und die Datenrate der Voreinstellung und konfiguriert den LMP91000 mit den Einstellungen der Voreinstellung für Verstärkung, Last, Referenz, Nullpunkt und Bias. Rufen Sie es einmal in setup() vor dem Lesen auf. Jeder Austausch mit dem Board wartet bis zu 500 ms auf eine Antwort.

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

double getPPM()returns double

Nimmt eine Messung vor und rechnet sie in ppm um: Es subtrahiert die interne Nullspannung (die 2,5-V-Referenz mal den internen Nullprozentsatz der Voreinstellung), addiert die Nullpunktkalibrierung, dividiert durch die Verstärkung des Verstärkers und durch die Empfindlichkeit der Voreinstellung in nA pro ppm. Ein Ergebnis unter null wird als 0 zurückgegeben.

ReturnsDie Gaskonzentration in ppm.

double getPPB()returns double

Gleiche Messung wie getPPM(), mal 1000. Das Beispiel zeigt es in einem Kommentar als Alternative zu getPPM().

ReturnsDie Gaskonzentration in ppb.

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

Alles zusammengesetzt​

begin() übernimmt die gesamte Einrichtung, daher ruft loop() nur getPPM() auf und gibt das Ergebnis aus. Um stattdessen in ppb zu lesen, ersetzen Sie die Zeile getPPM() durch die Zeile getPPB() im Kommentar darunter.