Benutzerdefinierte Konfiguration des Analog-Frontends
Was dieses Beispiel zeigt
Das Beispiel electrochemical-customConfig.py des Moduls erstellt eine eigene SensorConfig, statt eine Voreinstellung zu verwenden, und sendet diese Einstellungen an das analoge Frontend LMP91000 und an den ADC. Nutzen Sie es, wenn Sie die Verstärkung, die interne Nullstellung oder den Nullpunkt-Offset selbst anpassen möchten.
Das Beispiel erstellt den Sensor mit der eigenen SENSOR_CUSTOM und ohne adc_addr, daher wird die Standardadresse des Moduls verwendet. Die Werte im Beispiel gehören zur Ozon-Zelle. Für die Zelle dieses Boards sind die unten aufgeführten Werte der Voreinstellung SENSOR_NH3 ein Ausgangspunkt. Drei davon (ADS_GAIN_4_096V, INTERNAL_ZERO_20_PERCENT und BIAS_SIGN_POSITIVE) sind in den Importen des Beispiels nicht enthalten, fügen Sie sie also hinzu: ADS_GAIN_4_096V stammt aus ads1115, die beiden anderen aus ElectrochemicalGasSensor.
Das Modul kommuniziert mit der ATtiny404-Bridge des Boards nur, 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 die Qwiic-Connectors nicht erreichen. Dieses Beispiel läuft daher nicht über das Qwiic-Kabel. Verbinden Sie stattdessen den Controller mit der Stiftleiste: 3,3 V mit 3V3, GND mit GND, den SDA-Pin des Beispiels (21) mit SDA2 und den SCL-Pin (22) mit SCL2. Das Beispiel läuft dann wie geschrieben, ohne Änderung der Adresse.
Das Anschlussdiagramm in den Kommentaren des Beispiels verbindet LMPEN mit einem GPIO-Pin. Lassen Sie LMPEN auf diesem Board unverbunden: Ein 10-kΩ-Widerstand zieht ihn bereits auf GND, und auch der ATtiny404 ist damit verbunden.
| Argument | Wert für SENSOR_NH3 |
|---|---|
nano_amperes_per_ppm | 40.0 |
internal_zero_calibration | 0 |
ads_gain | ADS_GAIN_4_096V |
tia_gain | TIA_GAIN_35_KOHM |
rload | RLOAD_10_OHM |
ref_source | REF_EXTERNAL |
internal_zero | INTERNAL_ZERO_20_PERCENT |
bias_sign | BIAS_SIGN_POSITIVE |
bias | BIAS_0_PERCENT |
fet_short | FET_SHORT_DISABLED |
op_mode | OP_MODE_3LEAD_AMP_CELL |
Der Beispielcode
# FILE: electrochemical-customConfig.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Custom LMP91000 configuration example for any electrochemical sensor.
# LAST UPDATED: 2026-05-21
# Connecting diagram:
#
# Qwiic------------------------>Qwiic
# LMPEN------------------------>GPIO pin (see config_pin parameter below)
from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import (
ElectrochemicalGasSensor, SensorConfig,
TIA_GAIN_35_KOHM, RLOAD_10_OHM, REF_EXTERNAL,
INTERNAL_ZERO_67_PERCENT, BIAS_SIGN_NEGATIVE, BIAS_0_PERCENT,
FET_SHORT_DISABLED, OP_MODE_3LEAD_AMP_CELL,
)
from ads1115 import ADS_GAIN_2_048V
# Custom sensor configuration — edit these values to match your sensor's datasheet.
#
# nanoAmperesPerPPM: Sensitivity from the sensor datasheet (nA/PPM)
# internalZeroCalibration: Voltage offset added to zero the reading in clean air
# adsGain: ADS1115 full-scale range (ADS_GAIN_6_144V .. ADS_GAIN_0_256V)
# tia_gain: TIA feedback resistor (TIA_GAIN_2_75_KOHM .. TIA_GAIN_350_KOHM)
# rload: Load resistor (RLOAD_10_OHM .. RLOAD_100_OHM)
# ref_source: Reference voltage source (REF_INTERNAL / REF_EXTERNAL)
# internal_zero: Internal zero percentage (INTERNAL_ZERO_20/50/67_PERCENT or _BYPASSED)
# bias_sign: Bias polarity (BIAS_SIGN_NEGATIVE / BIAS_SIGN_POSITIVE)
# bias: Bias percentage of Vref (BIAS_0_PERCENT .. BIAS_24_PERCENT)
# fet_short: FET short (FET_SHORT_DISABLED / FET_SHORT_ENABLED)
# op_mode: Operating mode (OP_MODE_3LEAD_AMP_CELL for normal operation)
SENSOR_CUSTOM = SensorConfig(
nano_amperes_per_ppm=-1000.0,
internal_zero_calibration=-0.0012,
ads_gain=ADS_GAIN_2_048V,
tia_gain=TIA_GAIN_35_KOHM,
rload=RLOAD_10_OHM,
ref_source=REF_EXTERNAL,
internal_zero=INTERNAL_ZERO_67_PERCENT,
bias_sign=BIAS_SIGN_NEGATIVE,
bias=BIAS_0_PERCENT,
fet_short=FET_SHORT_DISABLED,
op_mode=OP_MODE_3LEAD_AMP_CELL,
)
# Initialize I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
sensor = ElectrochemicalGasSensor(SENSOR_CUSTOM, i2c)
# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Custom Config 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()
print("Sensor reading: {:.5f} PPB".format(reading))
time.sleep_ms(2500)
🔗Vollständiges Beispiel öffnen
electrochemical-customConfig.py im Commit 623e1e6
Die Thonny-Shell zeigt:
Electrochemical Gas Sensor - Custom Config Example
Sensor initialized successfully!
Danach folgt alle 2,5 Sekunden eine Zeile, die mit Sensor reading: beginnt, in ppb mit fünf Nachkommastellen.
Gibt begin() den Wert False zurück, gibt das Beispiel stattdessen ERROR: Can't init the sensor! Check connections! aus und hält an.
Verwendete Funktionen
SensorConfig(nano_amperes_per_ppm, internal_zero_calibration, ads_gain, tia_gain, rload, ref_source, internal_zero, bias_sign, bias, fet_short, op_mode)returns SensorConfigEnthält die Einstellungen einer Zelle: ihre Empfindlichkeit und ihren Nullpunkt-Offset für die ppm-Umrechnung, den ADC-Bereich sowie Verstärkung, Last, Referenz, internen Nullpunkt, Bias, FET-Kurzschluss und Betriebsmodus des LMP91000.
ReturnsDas Konfigurationsobjekt, das an ElectrochemicalGasSensor übergeben wird.
Parameter
| Parameter | Beschreibung |
|---|---|
nano_amperes_per_ppm | Empfindlichkeit der Zelle in nA pro ppm, aus dem Datenblatt der Zelle. |
internal_zero_calibration | Spannungs-Offset, der addiert wird, um die Messung in sauberer Luft auf null zu setzen. |
ads_gain | Vollausschlagbereich des ADC, ADS_GAIN_6_144V bis ADS_GAIN_0_256V. |
tia_gain | Rückkopplungswiderstand des Verstärkers, TIA_GAIN_2_75_KOHM bis TIA_GAIN_350_KOHM, oder TIA_GAIN_EXTERNAL. |
rload | Lastwiderstand, RLOAD_10_OHM bis RLOAD_100_OHM. |
ref_source | REF_INTERNAL oder REF_EXTERNAL. Die ppm-Umrechnung setzt die 2,5-V-Referenz des Boards voraus. |
internal_zero | INTERNAL_ZERO_20_PERCENT, _50_PERCENT, _67_PERCENT oder INTERNAL_ZERO_BYPASSED. |
bias_sign | BIAS_SIGN_NEGATIVE oder BIAS_SIGN_POSITIVE. |
bias | Bias als Prozentsatz der Referenz, BIAS_0_PERCENT bis BIAS_24_PERCENT. |
fet_short | FET_SHORT_DISABLED für den Normalbetrieb oder FET_SHORT_ENABLED. |
op_mode | OP_MODE_3LEAD_AMP_CELL für den Normalbetrieb; es gibt auch Deep-Sleep-, Standby-, 2-Leiter- und Temperaturmodi. |
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensorErstellt das Sensorobjekt mit einer beliebigen SensorConfig, einer Voreinstellung oder Ihrer eigenen. 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
| Parameter | Typ | Beschreibung |
|---|---|---|
sensor_type | SensorConfig | Ihre Konfiguration, hier SENSOR_CUSTOM. |
i2c | I2C | Ihr I2C-Objekt. |
adc_addr | int | Die Adresse, mit der das Modul kommuniziert. Standard ist 0x49, die dieses Beispiel verwendet. Auf diesem Board stellt der ADDRESS-Schalter die Adresse der Bridge von 0x30 bis 0x37 ein. |
config_pin | int oder None | Eine 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 ist None. Von 0x30 bis 0x37 wird sie nicht verwendet. |
begin()returns boolKonfiguriert die ADC-Verstärkung und schreibt die drei LMP91000-Registerwerte, die aus Ihrer SensorConfig erzeugt werden: über die Bridge des Boards, wenn die Adresse 0x30 bis 0x37 ist, oder bei jeder anderen Adresse direkt an den ADS1115 und den LMP91000.
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 analogen Frontends fehlgeschlagen ist.
getPPB()returns floatNimmt eine Messung auf und rechnet sie mit der Verstärkung, dem internen Nullpunkt, dem Offset und der Empfindlichkeit Ihrer Konfiguration um. Ein Ergebnis unter null wird als 0 zurückgegeben.
ReturnsDie Konzentration in ppb.
Zusammenfassung
begin() packt Ihre SensorConfig in die drei Einstellungsregister des LMP91000 und schreibt sie, und jede Messung verwendet dieselben Felder für die Umrechnung. Ändern Sie jeweils nur ein Argument und vergleichen Sie es mit den oben genannten Werten für SENSOR_NH3.