Zum Hauptinhalt springen

Gemittelte Messung

Was dieses Beispiel zeigt​

Das Beispiel electrochemical-averagedMeasurement.py des Moduls nimmt mehrere Messwerte auf, wartet dazwischen und gibt deren Mittelwert in ppb aus. Die Mittelung glättet das Rauschen einer einzelnen Messung.

Das Beispiel erzeugt den Sensor mit dem Ozon-Preset des Moduls, SENSOR_O3, und ohne adc_addr, sodass die Standardadresse des Moduls verwendet wird. Der Kommentar im Beispiel weist darauf hin, das Preset an Ihren Sensortyp anzupassen: SENSOR_NH3 ist das Preset für die Ammoniakzelle dieses Boards, und die Umrechnung in ppm verwendet die Empfindlichkeit des Presets (-1000 nA/ppm für SENSOR_O3, 40 nA/ppm für SENSOR_NH3). In der ausgelieferten Fassung sind die Messwerte des Beispiels daher keine Ammoniakwerte. Um Ammoniak zu messen, ändern Sie SENSOR_O3 in SENSOR_NH3 in der Importzeile und in der Zeile, die den Sensor erzeugt. Das Beispiel öffnet I2C-Bus 0 an Pin 22 (SCL) und Pin 21 (SDA).

Das Modul kommuniziert nur dann mit der ATtiny404-Bridge des Boards, wenn adc_addr zwischen 0x30 und 0x37 liegt. Jeder andere Wert, etwa die Standardadresse 0x49, die dieses Beispiel verwendet, wird als I2C-Adresse eines ADS1115 aufgefasst, mit dem das Modul direkt kommuniziert. Auf diesem Board liegt der ADS1115 an den Pins SDA2/SCL2 der Stiftleiste, die von den Qwiic-Connectors nicht erreicht werden. Dieses Beispiel läuft daher nicht über das Qwiic-Kabel. Verbinden Sie den Controller stattdessen mit der Stiftleiste: 3,3 V mit 3V3, GND mit GND, den SDA-Pin des Beispiels (21) mit SDA2 und seinen SCL-Pin (22) mit SCL2. Das Beispiel läuft dann unverändert, ohne Änderung der Adresse.

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

Der Beispielcode​

# FILE: electrochemical-averagedMeasurement.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Averaged PPM reading example using the built-in averaging function.
# LAST UPDATED: 2026-05-21

# Connecting diagram:
#
# Qwiic------------------------>Qwiic
# LMPEN------------------------>GND or GPIO pin (see config_pin parameter below)

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)

🔗Vollständiges Beispiel öffnen

electrochemical-averagedMeasurement.py im Commit 623e1e6

→

Die Thonny-Shell zeigt:

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

Danach erscheint eine Zeile, die mit Sensor reading: beginnt, mit dem Mittelwert in ppb. Fünf Messungen mit jeweils 3 Sekunden Wartezeit danach dauern 15 Sekunden, hinzu kommt die Pause von 2,5 Sekunden, sodass etwa alle 17,5 Sekunden eine neue Zeile erscheint.

Wenn begin() den Wert False zurückgibt, gibt das Beispiel stattdessen ERROR: Can't init the sensor! Check connections! aus und stoppt.

Verwendete Funktionen​

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

Erzeugt das Sensorobjekt. adc_addr legt fest, wie begin() mit dem Board kommuniziert: Von 0x30 bis 0x37 wird das ATtiny-Bridge-Protokoll verwendet, jeder andere Wert wird als eigene I2C-Adresse des ADC verwendet.

ReturnsDas Sensorobjekt.

Parameter

ParameterTypBeschreibung
sensor_typeSensorConfigDas Zellen-Preset. SENSOR_NH3 ist das Preset für die Zelle dieses Boards.
i2cI2CIhr I2C-Objekt.
adc_addrintDie Adresse, mit der das Modul kommuniziert. Standard 0x49, die dieses Beispiel verwendet. Auf diesem Board stellt der ADDRESS-Schalter die Adresse der Bridge von 0x30 bis 0x37 ein.
config_pinint oder NoneEine GPIO-Pin-Nummer, die das Modul während der Konfiguration des LMP91000 auf Low und danach auf High setzt, wenn adc_addr außerhalb von 0x30 bis 0x37 liegt. Standard None. Von 0x30 bis 0x37 nicht verwendet.
begin()returns bool

Bei einer Adresse von 0x30 bis 0x37 wird geprüft, ob die Bridge antwortet, und ihr werden die Einstellungen für ADC und Analog-Frontend aus dem Preset gesendet. Bei jeder anderen Adresse wird der ADS1115 direkt unter dieser Adresse gestartet und der LMP91000 konfiguriert. Rufen Sie sie 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 Analog-Frontends fehlgeschlagen ist.

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

Mittelt num_measurements Messwerte, wartet nach jedem seconds_delay Sekunden und gibt das Ergebnis in ppb zurück. Blockiert, bis alle Messungen abgeschlossen sind.

ReturnsgetAveragedPPM() multipliziert mit 1000.

Parameter

ParameterTypBeschreibung
num_measurementsintWie viele Messwerte gemittelt werden. Standard 5.
seconds_delayintSekunden Wartezeit nach jeder Messung. Standard 2.
getAveragedPPM(num_measurements=5, seconds_delay=2)returns float

Derselbe Mittelwert in ppm. Das Beispiel zeigt ihn in einem Kommentar als Alternative.

ReturnsDie gemittelte Konzentration in ppm.

Parameter

ParameterTypBeschreibung
num_measurementsintWie viele Messwerte gemittelt werden. Standard 5.
seconds_delayintSekunden Wartezeit nach jeder Messung. Standard 2.

Zusammenfassung​

Verwenden Sie die gemittelten Funktionen, wenn ein stabiler Wert wichtiger ist als ein schneller. Sie blockieren während der Wartezeit. Halten Sie daher NUM_READINGS × SECS_BETWEEN_READINGS kurz, wenn Ihr Programm noch andere Aufgaben erledigen muss.