Zum Hauptinhalt springen

Gaskonzentration in PPB auslesen

Was dieses Beispiel zeigt​

Das Beispiel electrochemical-singleSensor.py erstellt einen Sensor mit der Standardadresse des Moduls, 0x49, startet ihn und gibt die Gaskonzentration in PPB alle 2,5 Sekunden aus.

Bevor Sie es ausführen:

  • Das Beispiel ist mit SENSOR_O3, dem Ozon-Preset des Moduls, geschrieben. Seine Werte sind daher keine H2S-Werte. Stellen Sie es nicht unverändert auf SENSOR_H2S um: Dieses Preset ist für die Zelle SGX-4H2S-100 (1200 nA pro ppm) geschrieben. Das Datenblatt der Zelle SGX-4H2S-300 dieses Boards gibt ein Ausgangssignal von 460 ± 140 nA pro ppm an, sodass der Messwert mit diesem Preset etwa 2,6-mal zu niedrig ausfällt. Übergeben Sie stattdessen eine eigene SensorConfig mit den Einstellungen von SENSOR_H2S und 460 nA pro ppm, wie die Kurzanleitung zeigt.
  • Ändern Sie Pin(22) und Pin(21) auf die SCL- und SDA-Pins Ihres Controllers, falls diese abweichen.

Der Beispielcode​

# FILE: electrochemical-singleSensor.py

from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import ElectrochemicalGasSensor, SENSOR_O3

# Initialize I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))

# Create sensor object - change SENSOR_O3 to match your sensor type
# Available types: SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3,
# SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2
sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c)

# If using a custom ADC address or a GPIO pin for LMP91000 MENB:
# sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x4B, config_pin=5)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Single Sensor Example")

if not sensor.begin():
print("ERROR: Can't init the sensor! Check connections!")
while True:
time.sleep_ms(100)

print("Sensor initialized successfully!")

# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading = sensor.getPPB()

# If PPM is more relevant for your sensor, use:
# reading = sensor.getPPM()

print("Sensor reading: {:.5f} PPB".format(reading))

time.sleep_ms(2500)

Vollständiges Beispiel öffnen

Erwartetes Ergebnis:

ShellMicroPython
Electrochemical Gas Sensor - Single Sensor Example
Sensor initialized successfully!

Danach folgt alle 2,5 Sekunden eine Zeile, die mit Sensor reading: beginnt, mit der Konzentration in PPB auf fünf Nachkommastellen. Antwortet der Sensor nicht, gibt das Skript ERROR: Can't init the sensor! Check connections! aus und wartet.

Verwendete Funktionen​

ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensor

Erstellt das Sensorobjekt. Der Sensortyp enthält die Front-End- und Umrechnungseinstellungen 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.

ReturnsDas Sensorobjekt.

Parameter

NameTypBeschreibung
sensor_typeSensorConfigPreset aus dem Modul (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) oder eine eigene SensorConfig. Für die Zelle dieses Boards übergeben Sie eine eigene mit 460 nA pro ppm.
i2cmachine.I2CDer I2C-Bus, an dem das Board angeschlossen ist. Ohne ihn öffnet das Modul selbst nur auf den Boards einen, die es erkennt: ESP32-Builds von MicroPython und der eigene Build eines Soldered-Boards (I2C-Bus 0, SCL 22, SDA 21) sowie ESP8266-Builds (SCL 5, SDA 4). Auf jedem anderen Board löst es Board not recognized, please pass an I2C object manually aus.
adc_addrintDie Adresse, mit der begin() kommuniziert. Dieses Beispiel lässt sie weg, daher wird die Standardadresse 0x49 verwendet.
config_pinintEin GPIO, den das Modul auf High legt und auf Low zieht, während es den LMP91000 direkt konfiguriert. Bei Adressen von 0x30 bis 0x37 ungenutzt. Dieses Beispiel lässt ihn weg.
begin()returns bool

Bei einer Adresse von 0x30 bis 0x37 wird geprüft, ob der ATtiny404 des Boards antwortet; dann werden ihm die ADC-Verstärkung aus dem Sensortyp und die langsamste Datenrate gesendet und er konfiguriert das LMP91000-Front-End. Jeder Befehl wird bis zu 500 ms lang wiederholt. Bei jeder anderen Adresse wird geprüft, ob unter dieser Adresse ein ADS1115 antwortet, seine Verstärkung und die langsamste Datenrate werden eingestellt und anschließend wird der LMP91000 direkt konfiguriert. Rufen Sie sie vor dem Auslesen einmal auf.

ReturnsTrue, wenn jeder Schritt erfolgreich war, andernfalls False.

getPPB()returns float

Liest mit getPPM() einen Messwert aus und multipliziert ihn mit 1000.

ReturnsGaskonzentration in PPB.

getPPM()returns float

Die auskommentierte Alternative im Beispiel. Liest einen ADC-Wert aus, 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 Zellenempfindlichkeit in nA pro ppm aus dem Sensortyp. Ein Ergebnis unter 0 wird als 0.0 zurückgegeben.

ReturnsGaskonzentration in PPM.

Dieses Beispiel verwendet außerdem I2C und Pin aus dem machine-Modul von MicroPython, das nicht Teil des Soldered-Moduls ElectrochemicalGasSensor ist.

Alles zusammengesetzt​

Öffnen Sie den I2C-Bus, erstellen Sie einen ElectrochemicalGasSensor mit einem Sensortyp, rufen Sie begin() einmal auf und rufen Sie dann getPPB() oder getPPM() auf, wann immer Sie einen Messwert möchten.