Gas-Konzentration auslesen
Was dieses Beispiel zeigt
Das Beispiel bridgeBoard der Bibliothek startet das Breakout über seine ATtiny404-Bridge und gibt die Gas-Konzentration alle 2,5 Sekunden in ppm aus. Es erstellt den Sensor mit der Adresse 0x30, auf der dieses Board antwortet, bis Sie den ADDRESS-Schalter verstellen.
Das Beispiel erstellt den Sensor mit SENSOR_CO, dem Preset der Bibliothek für Kohlenmonoxid. SENSOR_NH3 ist das Preset der Bibliothek für die SGX-4NH3-Zelle dieses Boards: 40 nA pro ppm, eine Verstärkung des Verstärkers von 35 kΩ und der 4,096-V-Bereich des ADC. Die Umrechnung in ppm verwendet die Empfindlichkeit des Presets: 70 nA/ppm für SENSOR_CO, 40 nA/ppm für SENSOR_NH3. In der ausgelieferten Form sind die Messwerte des Beispiels daher keine Ammoniak-ppm. Um Ammoniak zu messen, ändern Sie in der Zeile, die den Sensor erstellt, SENSOR_CO in SENSOR_NH3.
Die Kommentare des Beispiels sagen, die Adresse werde mit Jumpern auf der Rückseite des Boards eingestellt. Bei diesem Board wird die Adresse mit dem dreistufigen ADDRESS-Schalter eingestellt. Die in den Kommentaren genannten Adressen 0x49/0x4A/0x4B sind ADS1115-Adressen, keine Adressen, auf denen dieses Board antwortet. Wo die Kommentare sagen, LMPEN sei fest mit GND verbunden, wird er bei diesem Board über einen 10-kΩ-Widerstand auf GND gezogen: Lassen Sie ihn unverbunden.
Der Beispielcode
/**
**************************************************
*
* @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:
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.
Verwendete Funktionen
ElectrochemicalGasSensor(sensorType _t, uint8_t _adcAddr = DEFAULT_ADC_ADDR, int _configPin = -1)returns noneErstellt das Sensorobjekt. begin() entscheidet anhand der Adresse, wie mit dem Board kommuniziert wird: Von 0x30 bis 0x37 wird die ATtiny404-Bridge verwendet; jede andere Adresse wird als eigene I2C-Adresse des ADS1115 verwendet. Wird die Adresse weggelassen, gilt DEFAULT_ADC_ADDR, 0x49.
ReturnsKonstruktor.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
_t | sensorType | Das Zellen-Preset. SENSOR_NH3 ist das Preset für die Zelle dieses Boards. |
_adcAddr | uint8_t | Die Adresse. Dieses Beispiel übergibt 0x30, die Adresse des Boards im Auslieferungszustand; der ADDRESS-Schalter stellt sie von 0x30 bis 0x37 ein. |
_configPin | int | Ein GPIO, den die Bibliothek auf Low setzt, während sie den LMP91000 konfiguriert, wenn die Adresse außerhalb von 0x30 bis 0x37 liegt. Wird von 0x30 bis 0x37 nicht verwendet. Standard -1, kein Pin. |
bool begin()returns boolStartet I2C. Bei einer Adresse von 0x30 bis 0x37 prüft es, ob die Bridge antwortet, und sendet ihr die ADC-Einstellungen aus dem Preset; bei jeder anderen Adresse startet es den ADS1115 direkt auf dieser Adresse. Anschließend konfiguriert es das analoge Frontend des LMP91000. Rufen Sie es einmal vor jeder Messung auf.
Returnstrue, wenn jeder Schritt erfolgreich war. false, wenn die Bridge nicht innerhalb von 500 ms mit OK geantwortet oder einen Fehler gemeldet hat, wenn das Starten des ADS1115 fehlgeschlagen ist oder wenn die Konfiguration des analogen Frontends fehlgeschlagen ist.
double getPPM()returns doubleNimmt einen ADC-Messwert auf, entfernt den internen Nullpunkt des Frontends, addiert die Nullpunktkalibrierung und rechnet den Zellenstrom mit der Empfindlichkeit des Presets in ppm um. Ein Ergebnis unter null wird als 0 zurückgegeben.
ReturnsDie Gas-Konzentration in ppm.
double getPPB()returns doubleDerselbe Messwert wie bei getPPM(), in Parts per Billion. Das Beispiel zeigt ihn als Alternative in einem Kommentar.
ReturnsgetPPM() multipliziert mit 1000.
Zusammenfassung
Erstellen Sie den Sensor mit einem Preset und der Adresse des Schalters, rufen Sie begin() einmal in setup() auf und rufen Sie dann getPPM() auf, wann immer Sie einen Messwert möchten. Wenn begin() false zurückgibt, prüfen Sie zuerst das Kabel und die Adresse.