Eine eigene Sensorkonfiguration verwenden
Was dieses Beispiel zeigt
Das Beispiel electrochemical-customConfig.py erstellt eine eigene SensorConfig,
SENSOR_CUSTOM, statt eines der Presets des Moduls zu verwenden, und gibt die
Gaskonzentration alle 2,5 Sekunden in PPB aus.
Das Beispiel erstellt den Sensor unter der Standardadresse des Moduls, 0x49.
So geben Sie dem Modul die Zelle dieses Boards vor. In der vorliegenden Form enthält SENSOR_CUSTOM
Beispielwerte, etwa eine Empfindlichkeit von -1000 nA pro ppm, daher sind die Messwerte keine
H2S-Werte. Für die Zelle SGX-4H2S-300 dieses Boards setzen Sie die Werte des Presets SENSOR_H2S
des Moduls ein, mit dem Ausgangssignal, das das
Datenblatt
der Zelle angibt, 460 nA pro ppm (460 ± 140), anstelle der 1200 des Presets. Das Preset
ist für die Zelle SGX-4H2S-100 geschrieben und liefert mit der Zelle dieses Boards etwa
2,6-mal zu niedrige Werte:
| Argument | Wert für dieses Board |
|---|---|
nano_amperes_per_ppm | 460.0 |
internal_zero_calibration | 0 |
ads_gain | ADS_GAIN_4_096V |
tia_gain | TIA_GAIN_7_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 |
Importieren Sie jede Konstante, die Sie verwenden: ADS_GAIN_4_096V aus ads1115, die übrigen aus
ElectrochemicalGasSensor, wie
Schnellstart
zeigt. Ändern Sie Pin(22) und Pin(21) auf die SCL- und SDA-Pins Ihres Controllers, falls
diese abweichen.
Der Beispielcode
# FILE: electrochemical-customConfig.py
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)
Das vollständige Beispiel öffnen
Erwartetes Ergebnis:
Electrochemical Gas Sensor - Custom Config Example
Sensor initialized successfully!
Danach folgt alle 2,5 Sekunden eine Zeile, die mit Sensor reading: beginnt, mit der
Konzentration in PPB auf fünf Nachkommastellen. Antwortet das Board nicht, gibt das Skript
ERROR: Can't init the sensor! Check connections! aus und wartet.
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 für eine Gaszelle: die Werte, mit denen getPPM() umrechnet, und die Werte, die begin() in das LMP91000-Front-End schreibt. Auch die Presets des Moduls, etwa SENSOR_H2S, sind SensorConfig-Objekte.
ReturnsDas Konfigurationsobjekt, das an ElectrochemicalGasSensor übergeben wird.
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
nano_amperes_per_ppm | float | Die Empfindlichkeit der Zelle in nA pro ppm, aus ihrem Datenblatt. getPPM() teilt durch diesen Wert. |
internal_zero_calibration | float | Spannung, die zum Messwert addiert wird, um ihn in sauberer Luft auf null zu setzen. |
ads_gain | int | Vollausschlagbereich des ADS1115, ADS_GAIN_6_144V bis ADS_GAIN_0_256V (aus ads1115). |
tia_gain | int | Verstärkung des Front-End-Verstärkers, TIA_GAIN_2_75_KOHM bis TIA_GAIN_350_KOHM oder TIA_GAIN_EXTERNAL. |
rload | int | Lastwiderstand, RLOAD_10_OHM bis RLOAD_100_OHM. |
ref_source | int | Referenzquelle, REF_INTERNAL oder REF_EXTERNAL. |
internal_zero | int | Interner Nullpunkt, INTERNAL_ZERO_20_PERCENT, INTERNAL_ZERO_50_PERCENT, INTERNAL_ZERO_67_PERCENT oder INTERNAL_ZERO_BYPASSED. |
bias_sign | int | Polarität der Bias-Spannung, BIAS_SIGN_NEGATIVE oder BIAS_SIGN_POSITIVE. |
bias | int | Bias-Spannung als Prozentsatz der Referenz, BIAS_0_PERCENT bis BIAS_24_PERCENT. |
fet_short | int | FET_SHORT_DISABLED oder FET_SHORT_ENABLED. |
op_mode | int | Betriebsmodus; OP_MODE_3LEAD_AMP_CELL für den Normalbetrieb. |
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensorErstellt das Sensorobjekt. 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, führt zu einem ADS1115 unter dieser Adresse und direkt zum LMP91000.
ReturnsDas Sensorobjekt.
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
sensor_type | SensorConfig | Die zu verwendende Konfiguration. Dieses Beispiel übergibt SENSOR_CUSTOM. |
i2c | machine.I2C | Der I2C-Bus, an dem das Board hängt. Ohne diesen Parameter öffnet das Modul selbst nur auf den Boards einen Bus, 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 setzt 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 der Konfiguration und die langsamste Datenrate und lässt ihn dann die Konfiguration in das LMP91000-Front-End schreiben; jeder Befehl wird bis zu 500 ms lang wiederholt. Bei jeder anderen Adresse prüft es, ob unter dieser Adresse ein ADS1115 antwortet, stellt dessen Verstärkung und die langsamste Datenrate ein und schreibt die Konfiguration dann direkt in den LMP91000. Rufen Sie es einmal vor dem Lesen auf.
ReturnsTrue, wenn jeder Schritt erfolgreich war, andernfalls False.
getPPB()returns floatNimmt mit getPPM() einen Messwert auf, der mit der Empfindlichkeit der Konfiguration umgerechnet wird, 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 zusammengesetzt
Erstellen Sie aus dem Datenblatt Ihrer Zelle eine SensorConfig, übergeben Sie sie an
ElectrochemicalGasSensor, rufen Sie einmal begin() auf und lesen Sie dann mit getPPB() oder
getPPM(). Für dieses Board liefert die obige Tabelle die Werte.