Gaskonzentration auslesen
Was dieses Beispiel zeigt
Das Beispiel electrochemical-bridgeBoard.py startet das Breakout an seiner I2C-Adresse 0x30 und gibt die Gaskonzentration in PPM alle 2,5 Sekunden aus.
Da die Adresse im Bereich 0x30 bis 0x37 liegt, kommuniziert das Modul mit dem ATtiny404 des Boards, der das LMP91000-Frontend konfiguriert und den ADS1115 für Sie ausliest.
Bevor Sie es ausführen:
- Das Beispiel ist mit
SENSOR_O3, dem Ozon-Preset des Moduls, geschrieben, daher sind seine PPM-Werte keine H2S-Werte. Stellen Sie es nicht unverändert auf das PresetSENSOR_H2Sdes Moduls um: Dieses Preset ist für die Zelle SGX-4H2S-100 geschrieben, mit einer Empfindlichkeit von 1200 nA pro ppm, während dieses Board die Zelle SGX-4H2S-300 trägt, deren Datenblatt ein Ausgangssignal von 460 ± 140 nA pro ppm angibt.getPPM()teilt durch die Empfindlichkeit des Presets, sodass der Messwert mitSENSOR_H2Setwa 2,6-mal zu niedrig ausfällt. Übergeben Sie stattdessen eine eigeneSensorConfigmit den Einstellungen vonSENSOR_H2Sund 460 nA pro ppm, wie es der Schnellstart zeigt. - Ändern Sie
Pin(22)undPin(21)auf die SCL- und SDA-Pins Ihres Controllers, falls diese abweichen. - Wenn Sie die Adresse des Boards mit dem ADDRESS-Schalter verschoben haben, ändern Sie
0x30entsprechend.
Der Beispielcode
# FILE: electrochemical-bridgeBoard.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))
sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x30)
# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - ATtiny Bridge Board Example")
if not sensor.begin():
print("ERROR: Can't init the sensor! Check connections and jumper address!")
while True:
time.sleep_ms(100)
print("Sensor initialized successfully!")
# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading = sensor.getPPM()
# If PPB is more relevant for your sensor, use:
# reading = sensor.getPPB()
print("Sensor reading: {:.5f} PPM".format(reading))
time.sleep_ms(2500)
Das vollständige Beispiel öffnen
Erwartetes Ergebnis:
Electrochemical Gas Sensor - ATtiny Bridge Board Example
Sensor initialized successfully!
Danach folgt alle 2,5 Sekunden eine Zeile, die mit Sensor reading: beginnt, mit der Konzentration in PPM auf fünf Nachkommastellen. Antwortet das Board nicht, gibt das Skript ERROR: Can't init the sensor! Check connections and jumper address! 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 Frontend- und Umwandlungseinstellungen für eine Gaszelle. Die Adresse bestimmt, wie begin() mit dem Board kommuniziert: 0x30 bis 0x37 läuft über den ATtiny404 dieses Boards.
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 oder SENSOR_CL2. Oder eine eigene SensorConfig. SENSOR_H2S ist für die Zelle SGX-4H2S-100 (1200 nA pro ppm) geschrieben und liest mit der Zelle SGX-4H2S-300 dieses Boards (460 ± 140 nA pro ppm in ihrem Datenblatt) etwa 2,6-mal zu niedrig: Übergeben Sie eine eigene SensorConfig 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 0x30, die Adresse des ATtiny404 (der ADDRESS-Schalter stellt 0x30 bis 0x37 ein). Bei jeder anderen Adresse (der Standard ist 0x49) kommuniziert das Modul stattdessen mit einem ADS1115 unter dieser Adresse und direkt mit dem LMP91000. |
config_pin | int | Ein GPIO, den das Modul auf High hält und auf Low zieht, während es den LMP91000 direkt konfiguriert. Wird nicht verwendet, wenn die Adresse 0x30 bis 0x37 ist. |
begin()returns boolPrüft, ob das Board antwortet, sendet die ADC-Konfiguration und konfiguriert dann das LMP91000-Frontend. Jeder Befehl an das Board wird bis zu 500 ms lang wiederholt. Rufen Sie sie einmal vor dem Auslesen auf.
ReturnsTrue, wenn jeder Schritt erfolgreich war, False, wenn das Board nicht geantwortet oder einen Fehler gemeldet hat.
getPPM()returns floatLiest den ADC über das Board aus, subtrahiert die interne Nullstelle des Frontends (2,5 V mal ihr Prozentsatz), addiert die Nullpunktkalibrierung und teilt dann durch die Verstärkung des Verstärkers und durch die Empfindlichkeit der Zelle in nA pro ppm aus dem Sensortyp. Ein Ergebnis unter 0 wird als 0.0 zurückgegeben.
ReturnsGaskonzentration in PPM.
getPPB()returns floatDie auskommentierte Alternative im Beispiel: liest mit getPPM() einen Messwert aus 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 zusammen
Öffnen Sie den I2C-Bus, erstellen Sie ein ElectrochemicalGasSensor mit einem Sensor-Preset und der Adresse des Boards, rufen Sie begin() einmal auf und rufen Sie dann getPPM() auf, wann immer Sie einen Messwert möchten. Um mehrere Boards an einem Bus zu verwenden, geben Sie jedem mit seinem ADDRESS-Schalter eine andere Adresse und erstellen Sie ein Objekt pro Adresse.