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_O3geschrieben, der Ozon-Voreinstellung des Moduls, daher sind seine Werte keine H2S-Werte. Stellen Sie es nicht unverändert aufSENSOR_H2Sum: 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 eigeneSensorConfigmit den Einstellungen vonSENSOR_H2Sund 460 nA pro ppm, wie Schnellstart zeigt. - Ändern Sie
Pin(22)undPin(21)auf die SCL- und SDA-Pins Ihres Controllers, falls diese abweichen. NUM_READINGSundSECS_BETWEEN_READINGSlegen 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:
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 ElectrochemicalGasSensorErstellt 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
| Name | Typ | Beschreibung |
|---|---|---|
sensor_type | SensorConfig | Voreinstellung 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. |
i2c | machine.I2C | Der 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_addr | int | Die Adresse, mit der begin() kommuniziert. Dieses Beispiel lässt sie weg, daher wird die Standardadresse 0x49 verwendet. |
config_pin | int | Ein 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 boolBei 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 floatGibt getAveragedPPM() mit denselben Argumenten zurück, multipliziert mit 1000. Blockiert, bis alle Messwerte aufgenommen sind.
ReturnsGemittelte Gaskonzentration in PPB.
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
num_measurements | int | Über wie viele Messwerte gemittelt wird. Das Beispiel übergibt NUM_READINGS (5). |
seconds_delay | int | Sekunden Wartezeit nach jedem Messwert. Das Beispiel übergibt SECS_BETWEEN_READINGS (3). |
getAveragedPPM(num_measurements=5, seconds_delay=2)returns floatDie 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
| Name | Typ | Beschreibung |
|---|---|---|
num_measurements | int | Über wie viele Messwerte gemittelt wird. |
seconds_delay | int | Sekunden 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.