Den Nullpunkt kalibrieren
Was dieses Beispiel zeigt
Das Beispiel electrochemical-calibrateSensor.py wendet einen Nullpunkt-Offset an
und gibt die Gaskonzentration alle 2,5 Sekunden in PPB aus.
Das Beispiel erstellt den Sensor mit adc_addr=0x49 und config_pin=32.
CUSTOM_CALIBRATION ist eine Spannung, die das Modul zur ADC-Spannung addiert, bevor es sie
umrechnet. Der Kommentar im Beispiel nennt das Vorgehen: Stellen Sie in Luft ohne das
Zielgas den Wert so ein, dass die Anzeige gerade eben 0 PPB beträgt.
Bevor Sie es ausführen:
- Das Beispiel ist mit
SENSOR_O3, der Ozon-Voreinstellung des Moduls, geschrieben, 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 gibt ein Ausgangssignal von 460 ± 140 nA pro ppm an, daher fällt der Messwert mit dieser Voreinstellung etwa 2,6-mal zu niedrig aus. Übergeben Sie stattdessen eine eigeneSensorConfigmit denSENSOR_H2S-Einstellungen und 460 nA pro ppm, wie Schnellstart zeigt. - Ändern Sie
Pin(22)undPin(21)auf die SCL- und SDA-Pins Ihres Controllers, falls sie abweichen.
Der Beispielcode
# FILE: electrochemical-calibrateSensor.py
from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import ElectrochemicalGasSensor, SENSOR_O3
# This value is added to the voltage read from the ADC.
# In an environment with 0 of the target gas, the reading after calibration
# should be just barely 0 PPB — adjust this value until that is the case.
CUSTOM_CALIBRATION = 0
# Initialize I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
# Custom ADC address (0x49 default) and GPIO pin for LMPEN
sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x49, config_pin=32)
# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Calibration Example")
if not sensor.begin():
print("ERROR: Can't init the sensor! Check connections!")
while True:
time.sleep_ms(100)
# Apply the zero-point calibration offset
sensor.setCustomZeroCalibration(CUSTOM_CALIBRATION)
print("Sensor initialized successfully!")
# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading = sensor.getPPB()
# O3 is typically measured in PPB
# Switch to getPPM() if PPM is more relevant for your use case
print("Sensor reading: {:.5f} PPB".format(reading))
time.sleep_ms(2500)
Das vollständige Beispiel öffnen
Erwartetes Ergebnis:
Electrochemical Gas Sensor - Calibration 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. Das Modul meldet nie einen Wert unter
null: Es gibt stattdessen 0 zurück, daher ist 0.00000 ein normaler Messwert. Wenn das Board
nicht antwortet, 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. Ein config_pin wird, falls angegeben, als Ausgang gesetzt und auf High getrieben.
ReturnsDas Sensorobjekt.
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
sensor_type | SensorConfig | Voreinstellung des Moduls (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) oder eine eigene SensorConfig. Für die Zelle dieses Boards übergeben Sie 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, aber 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 übergibt 0x49. |
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 übergibt 32. |
begin()returns boolPrüft bei einer Adresse von 0x30 bis 0x37, 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 sie, ob ein ADS1115 unter dieser Adresse antwortet, setzt dessen Verstärkung und die langsamste Datenrate und konfiguriert dann den LMP91000 direkt, wobei config_pin während der Schreibvorgänge auf Low gezogen wird. Rufen Sie sie einmal vor dem Lesen auf.
ReturnsTrue, wenn jeder Schritt erfolgreich war, sonst False.
setCustomZeroCalibration(calibration)returns NoneLegt den Nullpunkt-Offset fest: eine Spannung, die getPPM() zur ADC-Spannung addiert, bevor es sie umrechnet. Sie schreibt den Wert in das Sensortyp-Objekt und ersetzt damit dessen interne Nullpunktkalibrierung.
ReturnsNichts.
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
calibration | float | Offset in Volt. Das Beispiel übergibt CUSTOM_CALIBRATION. |
getPPB()returns floatNimmt mit getPPM() einen Messwert auf und multipliziert ihn mit 1000.
ReturnsGaskonzentration in PPB.
getPPM()returns floatDie Alternative, die der Kommentar im Beispiel nennt. Nimmt einen ADC-Messwert auf, zieht den internen Nullpunkt des Front-Ends ab (2,5 V mal dessen Prozentwert), addiert die Nullpunktkalibrierung und teilt dann durch die Verstärkung des Verstärkers und durch die Zellempfindlichkeit in nA pro ppm aus dem Sensortyp. Ein Ergebnis unter 0 wird als 0.0 zurückgegeben.
ReturnsGaskonzentration in PPM.
Dieses Beispiel verwendet außerdem I2C und Pin aus dem
machine-Modul von MicroPython,
das nicht Teil des Soldered-Moduls ElectrochemicalGasSensor ist.
Alles zusammenfügen
Erstellen Sie den Sensor, rufen Sie begin() auf und rufen Sie dann
setCustomZeroCalibration() mit Ihrem Offset auf, bevor Sie Messwerte erfassen. Führen Sie das
Skript in sauberer Luft aus, ändern Sie CUSTOM_CALIBRATION und führen Sie es erneut aus, bis die
Anzeige gerade eben 0 PPB beträgt.