Zum Hauptinhalt springen

Gaskonzentration auslesen

Was dieses Beispiel zeigt​

Das Beispiel electrochemical-bridgeBoard.py startet das Breakout an seiner I2C-Adresse 0x30 und gibt die Gaskonzentration in PPM alle 2,5 Sekunden aus. Da die Adresse im Bereich 0x30 bis 0x37 liegt, kommuniziert das Modul mit dem ATtiny404 des Boards, der das LMP91000-Frontend konfiguriert und den ADS1115 für Sie ausliest.

Bevor Sie es ausführen:

  • Das Beispiel ist mit SENSOR_O3, dem Ozon-Preset des Moduls, geschrieben, daher sind seine PPM-Werte keine H2S-Werte. Stellen Sie es nicht unverändert auf das Preset SENSOR_H2S des Moduls 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. getPPM() teilt durch die Empfindlichkeit des Presets, sodass der Messwert mit SENSOR_H2S 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 es der Schnellstart zeigt.
  • Ändern Sie Pin(22) und Pin(21) auf die SCL- und SDA-Pins Ihres Controllers, falls diese abweichen.
  • Wenn Sie die Adresse des Boards mit dem ADDRESS-Schalter verschoben haben, ändern Sie 0x30 entsprechend.

Der Beispielcode​

# FILE: electrochemical-bridgeBoard.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))

sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x30)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - ATtiny Bridge Board Example")

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

print("Sensor initialized successfully!")

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

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

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

time.sleep_ms(2500)

Das vollständige Beispiel öffnen

Erwartetes Ergebnis:

ShellMicroPython
Electrochemical Gas Sensor - ATtiny Bridge Board Example
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 das Board nicht, gibt das Skript ERROR: Can't init the sensor! Check connections and jumper address! 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 Frontend- und Umwandlungseinstellungen für eine Gaszelle. Die Adresse bestimmt, wie begin() mit dem Board kommuniziert: 0x30 bis 0x37 läuft über den ATtiny404 dieses Boards.

ReturnsDas Sensorobjekt.

Parameter

NameTypBeschreibung
sensor_typeSensorConfigPreset aus dem Modul: SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3 oder SENSOR_CL2. Oder eine eigene SensorConfig. SENSOR_H2S ist für die Zelle SGX-4H2S-100 (1200 nA pro ppm) geschrieben und liest mit der Zelle SGX-4H2S-300 dieses Boards (460 ± 140 nA pro ppm in ihrem Datenblatt) etwa 2,6-mal zu niedrig: Übergeben Sie eine eigene SensorConfig mit 460 nA pro ppm.
i2cmachine.I2CDer I2C-Bus, an dem das Board angeschlossen ist. Ohne ihn öffnet das Modul selbst einen, aber nur auf den Boards, 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 übergibt 0x30, die Adresse des ATtiny404 (der ADDRESS-Schalter stellt 0x30 bis 0x37 ein). Bei jeder anderen Adresse (der Standard ist 0x49) kommuniziert das Modul stattdessen mit einem ADS1115 unter dieser Adresse und direkt mit dem LMP91000.
config_pinintEin GPIO, den das Modul auf High hält und auf Low zieht, während es den LMP91000 direkt konfiguriert. Wird nicht verwendet, wenn die Adresse 0x30 bis 0x37 ist.
begin()returns bool

Prüft, ob das Board antwortet, sendet die ADC-Konfiguration und konfiguriert dann das LMP91000-Frontend. Jeder Befehl an das Board wird bis zu 500 ms lang wiederholt. Rufen Sie sie einmal vor dem Auslesen auf.

ReturnsTrue, wenn jeder Schritt erfolgreich war, False, wenn das Board nicht geantwortet oder einen Fehler gemeldet hat.

getPPM()returns float

Liest den ADC über das Board aus, subtrahiert die interne Nullstelle des Frontends (2,5 V mal ihr Prozentsatz), 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.0 zurückgegeben.

ReturnsGaskonzentration in PPM.

getPPB()returns float

Die auskommentierte Alternative im Beispiel: liest mit getPPM() einen Messwert aus und multipliziert ihn mit 1000.

ReturnsGaskonzentration in PPB.

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

Alles zusammen​

Öffnen Sie den I2C-Bus, erstellen Sie ein ElectrochemicalGasSensor mit einem Sensor-Preset und der Adresse des Boards, rufen Sie begin() einmal auf und rufen Sie dann getPPM() auf, wann immer Sie einen Messwert möchten. Um mehrere Boards an einem Bus zu verwenden, geben Sie jedem mit seinem ADDRESS-Schalter eine andere Adresse und erstellen Sie ein Objekt pro Adresse.