Zum Hauptinhalt springen

Einzelne Sensormessung

Was dieses Beispiel zeigt​

Das Beispiel singleSensor der Bibliothek erstellt einen Sensor, startet ihn und gibt die Gaskonzentration alle 2,5 Sekunden in ppm aus.

Das Beispiel erstellt den Sensor mit SENSOR_CO, dem Kohlenmonoxid-Preset der Bibliothek, und ohne Adresse, sodass die Standardadresse der Bibliothek verwendet wird. SENSOR_NH3 ist das Preset der Bibliothek für die SGX-4NH3-Zelle auf diesem Board, und 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 Bibliothek kommuniziert mit der ATtiny404-Bridge des Boards, wenn die Adresse zwischen 0x30 und 0x37 liegt, und direkt mit einem ADS1115 unter dieser Adresse bei jeder anderen Adresse, etwa der Standardadresse 0x49, die dieses Beispiel verwendet. Auf diesem Board liegt der ADS1115 an den Pins SDA2/SCL2 der Stiftleiste, die die Qwiic-Connectoren nicht erreichen, daher läuft dieses Beispiel nicht über das Qwiic-Kabel. Verbinden Sie stattdessen den Controller mit der Stiftleiste: 3,3 V mit 3V3, GND mit GND, SDA mit SDA2 und SCL mit SCL2. Das Beispiel läuft dann wie geschrieben, ohne Änderung der Adresse.

In den Kommentaren des Beispiels wird LMPEN mit GND oder einem GPIO-Pin verbunden. Lassen Sie LMPEN auf diesem Board unverbunden: Ein 10-kΩ-Widerstand zieht ihn bereits auf GND, und auch der ATtiny404 ist damit verbunden.

Der Beispielcode​

Select Board
singleSensor.ino
/**
**************************************************
*
* @file singleSensor.ino
* @brief See how to init one sensor and make a simple reading of PPM of gas.
*
* To successfully run the sketch:
* - Connect LMPEN pin to GND or a GPIO pin so the breakout can be configured
* - Run the sketch and open serial monitor at 115200 baud!
*
* @authors Robert @ soldered.com
***************************************************/

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

Der Serial Monitor zeigt:

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.

Wenn begin() den Wert false zurückgibt, gibt das Beispiel stattdessen 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. begin() wählt 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, wie in diesem Beispiel, gilt DEFAULT_ADC_ADDR, 0x49.

ReturnsKonstruktor.

Parameter

ParameterTypBeschreibung
_tsensorTypeDas Zellen-Preset. SENSOR_NH3 ist das Preset für die Zelle dieses Boards.
_adcAddruint8_tDie Adresse. Standard DEFAULT_ADC_ADDR (0x49). Auf diesem Board stellt der ADDRESS-Schalter die Adresse der Bridge von 0x30 bis 0x37 ein.
_configPinintEin 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 bool

Startet 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 unter dieser Adresse. Danach konfiguriert es das analoge Frontend 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 double

Führt eine ADC-Messung durch, 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 Gaskonzentration in ppm.

double getPPB()returns double

Dieselbe Messung wie getPPM(), in Parts per Billion (ppb). Das Beispiel zeigt sie in einem Kommentar als Alternative.

ReturnsgetPPM() multipliziert mit 1000.

Zusammenfassung​

Erstellen Sie den Sensor mit einem Preset, rufen Sie begin() einmal in setup() auf und rufen Sie dann getPPM() oder getPPB() auf, wann immer Sie eine Messung möchten. Wenn begin() den Wert false zurückgibt, gibt das Beispiel einen Fehler aus und hält an.