Gaskonzentration in PPB auslesen
Was dieses Beispiel zeigt
Das Beispiel electrochemical-singleSensor.py erstellt einen Sensor mit der
Standardadresse des Moduls, 0x49, startet ihn und gibt die Gaskonzentration in PPB
alle 2,5 Sekunden aus.
Bevor Sie es ausführen:
- Das Beispiel ist mit
SENSOR_O3, dem Ozon-Preset des Moduls, geschrieben. Seine Werte sind daher keine H2S-Werte. Stellen Sie es nicht unverändert aufSENSOR_H2Sum: Dieses Preset 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, sodass der Messwert mit diesem Preset etwa 2,6-mal zu niedrig ausfällt. Übergeben Sie stattdessen eine eigeneSensorConfigmit den Einstellungen vonSENSOR_H2Sund 460 nA pro ppm, wie die Kurzanleitung zeigt. - Ändern Sie
Pin(22)undPin(21)auf die SCL- und SDA-Pins Ihres Controllers, falls diese abweichen.
Der Beispielcode
# FILE: electrochemical-singleSensor.py
from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import ElectrochemicalGasSensor, SENSOR_O3
# 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)
# If using a custom ADC address or a GPIO pin for LMP91000 MENB:
# sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x4B, config_pin=5)
# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Single Sensor 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()
# If PPM is more relevant for your sensor, use:
# reading = sensor.getPPM()
print("Sensor reading: {:.5f} PPB".format(reading))
time.sleep_ms(2500)
Erwartetes Ergebnis:
Electrochemical Gas Sensor - Single Sensor 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 der Sensor 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 Umrechnungseinstellungen 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 | Preset aus dem Modul (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 nur auf den Boards einen, 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 legt 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 wird geprüft, ob der ATtiny404 des Boards antwortet; dann werden ihm die ADC-Verstärkung aus dem Sensortyp und die langsamste Datenrate gesendet und er konfiguriert das LMP91000-Front-End. Jeder Befehl wird bis zu 500 ms lang wiederholt. Bei jeder anderen Adresse wird geprüft, ob unter dieser Adresse ein ADS1115 antwortet, seine Verstärkung und die langsamste Datenrate werden eingestellt und anschließend wird der LMP91000 direkt konfiguriert. Rufen Sie sie vor dem Auslesen einmal auf.
ReturnsTrue, wenn jeder Schritt erfolgreich war, andernfalls False.
getPPB()returns floatLiest mit getPPM() einen Messwert aus und multipliziert ihn mit 1000.
ReturnsGaskonzentration in PPB.
getPPM()returns floatDie auskommentierte Alternative im Beispiel. Liest einen ADC-Wert aus, subtrahiert den internen Nullpunkt des Front-Ends (2,5 V mal dessen Prozentwert), addiert die Nullpunktkalibrierung und teilt dann durch die Verstärkung des Verstärkers und durch die Zellenempfindlichkeit 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 zusammengesetzt
Öffnen Sie den I2C-Bus, erstellen Sie einen ElectrochemicalGasSensor mit einem Sensortyp, rufen Sie
begin() einmal auf und rufen Sie dann getPPB() oder getPPM() auf, wann immer Sie einen Messwert möchten.