Zum Hauptinhalt springen

Mehrere Messwerte mitteln

Was dieses Beispiel zeigt​

Das Beispiel electrochemical-averagedMeasurement.py nimmt fünf Messwerte im Abstand von drei Sekunden auf, bildet ihren Mittelwert, gibt den Mittelwert in PPB aus, wartet 2,5 Sekunden und beginnt von vorn.

Das Beispiel erstellt den Sensor mit der Standardadresse des Moduls, 0x49.

Bevor Sie es ausführen:

  • Das Beispiel ist mit SENSOR_O3 geschrieben, der Ozon-Voreinstellung des Moduls, daher sind seine Werte keine H2S-Werte. Stellen Sie es nicht unverändert auf SENSOR_H2S um: Diese Voreinstellung ist für die Zelle SGX-4H2S-100 (1200 nA pro ppm) geschrieben. Das Datenblatt der Zelle SGX-4H2S-300 dieses Boards nennt ein Ausgangssignal von 460 ± 140 nA pro ppm, daher fällt der Messwert mit dieser Voreinstellung etwa 2,6-mal zu niedrig aus. Übergeben Sie stattdessen eine eigene SensorConfig mit den Einstellungen von SENSOR_H2S und 460 nA pro ppm, wie Schnellstart zeigt.
  • Ändern Sie Pin(22) und Pin(21) auf die SCL- und SDA-Pins Ihres Controllers, falls diese abweichen.
  • NUM_READINGS und SECS_BETWEEN_READINGS legen fest, über wie viele Messwerte gemittelt wird und wie viele Sekunden zwischen ihnen vergehen.

Der Beispielcode​

# FILE: electrochemical-averagedMeasurement.py

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

# How many readings to average and how many seconds to wait between them
NUM_READINGS = 5
SECS_BETWEEN_READINGS = 3

# 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)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Averaged Measurement 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:
# getAveragedPPM is a blocking call — it waits between each reading
reading = sensor.getAveragedPPB(NUM_READINGS, SECS_BETWEEN_READINGS)

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

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

time.sleep_ms(2500)

Das vollständige Beispiel öffnen

Erwartetes Ergebnis:

ShellMicroPython
Electrochemical Gas Sensor - Averaged Measurement Example
Sensor initialized successfully!

Danach folgt eine Zeile, die mit Sensor reading: beginnt, mit der gemittelten Konzentration in PPB auf fünf Nachkommastellen. Mit den Einstellungen des Beispiels nimmt jede Mittelung fünf Messwerte mit je 3 Sekunden Wartezeit danach auf, dann wartet das Skript 2,5 Sekunden, sodass etwa alle 17,5 Sekunden eine neue Zeile erscheint. Antwortet das Board 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 Umwandlungseinstellungen 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_typeSensorConfigVoreinstellung aus dem Modul (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) oder eine eigene SensorConfig. Übergeben Sie für die Zelle dieses Boards eine eigene mit 460 nA pro ppm.
i2cmachine.I2CDer I2C-Bus, an dem das Board angeschlossen ist. Ohne ihn öffnet das Modul selbst einen 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 lässt sie weg, daher wird die Standardadresse 0x49 verwendet.
config_pinintEin GPIO, den das Modul auf High hält 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 prüft es, ob der ATtiny404 des Boards antwortet, sendet ihm die ADC-Verstärkung aus dem Sensortyp und die langsamste Datenrate und lässt ihn dann das LMP91000-Front-End konfigurieren; jeder Befehl wird bis zu 500 ms lang wiederholt. Bei jeder anderen Adresse prüft es, ob ein ADS1115 unter dieser Adresse antwortet, stellt dessen Verstärkung und die langsamste Datenrate ein und konfiguriert dann den LMP91000 direkt. Rufen Sie es einmal vor dem Messen auf.

ReturnsTrue, wenn jeder Schritt erfolgreich war, sonst False.

getAveragedPPB(num_measurements=5, seconds_delay=2)returns float

Gibt getAveragedPPM() mit denselben Argumenten zurück, multipliziert mit 1000. Blockiert, bis alle Messwerte aufgenommen sind.

ReturnsGemittelte Gaskonzentration in PPB.

Parameter

NameTypBeschreibung
num_measurementsintÜber wie viele Messwerte gemittelt wird. Das Beispiel übergibt NUM_READINGS (5).
seconds_delayintSekunden Wartezeit nach jedem Messwert. Das Beispiel übergibt SECS_BETWEEN_READINGS (3).
getAveragedPPM(num_measurements=5, seconds_delay=2)returns float

Die auskommentierte Alternative im Beispiel. Nimmt num_measurements Messwerte mit getPPM() auf, wartet nach jedem seconds_delay Sekunden und gibt deren Mittelwert zurück. Blockiert, bis alle Messwerte aufgenommen sind.

ReturnsGemittelte Gaskonzentration in PPM.

Parameter

NameTypBeschreibung
num_measurementsintÜber wie viele Messwerte gemittelt wird.
seconds_delayintSekunden Wartezeit nach jedem Messwert.

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

Zusammenfügen​

Öffnen Sie den I2C-Bus, erstellen Sie einen ElectrochemicalGasSensor mit einem Sensortyp, rufen Sie begin() einmal auf und rufen Sie dann getAveragedPPB() oder getAveragedPPM() mit der Anzahl der Messwerte und der Wartezeit dazwischen auf. Jeder Aufruf blockiert etwa num_measurements mal seconds_delay Sekunden lang.