Skip to main content

Prilagođena konfiguracija

Što ovaj primjer prikazuje​

Primjer electrochemical-customConfig.py iz modula gradi vlastiti SensorConfig: osjetljivost ćelije, nulti pomak, raspon ADC-a i sve postavke čipa LMP91000. begin() zatim šalje tu konfiguraciju na pločicu umjesto ugrađene unaprijed definirane postavke.

Vrijednosti u primjeru nisu vrijednosti ove pločice. Da biste podesili ćeliju ove pločice, krenite od preseta SENSOR_CL2 iz modula i mijenjajte jednu po jednu vrijednost. Uvezite konstante koje koristite, kao u primjeru: pojačanje iz ads1115, ostalo iz ElectrochemicalGasSensor.

ArgumentVrijednost SENSOR_CL2
nano_amperes_per_ppm600.0
internal_zero_calibration0
ads_gainADS_GAIN_4_096V
tia_gainTIA_GAIN_120_KOHM
rloadRLOAD_33_OHM
ref_sourceREF_EXTERNAL
internal_zeroINTERNAL_ZERO_20_PERCENT
bias_signBIAS_SIGN_POSITIVE
biasBIAS_0_PERCENT
fet_shortFET_SHORT_DISABLED
op_modeOP_MODE_3LEAD_AMP_CELL

Ostavite ref_source na REF_EXTERNAL: pločica ima referencu od 2,5 V za ulazni stupanj, a modul računa ppm s 2,5 V.

Primjer otvara I2C sabirnicu 0 sa SCL na pinu 22 i SDA na pinu 21. Promijenite ih prema svojoj pločici.

Kôd primjera​

# 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)

🔗Otvorite cjelovit primjer

Examples/electrochemical-customConfig.py u commitu 623e1e6

→

Spojna shema u primjeru spaja LMPEN na GPIO. Na ovoj pločici otpornik od 10 kΩ drži LMPEN u niskom stanju i spojen je na ATtiny404, pa ga ostavite nespojenim (pogledajte tablicu pinova na stranici Detalji o hardveru).

Očekivani rezultat:

ShellMicroPython
Electrochemical Gas Sensor - Custom Config Example
Sensor initialized successfully!

Zatim svakih 2,5 s jedan redak: Sensor reading: , koncentracija u ppb s pet decimala i PPB. Ako begin() ne uspije, skripta ispisuje ERROR: Can't init the sensor! Check connections! i zaustavlja se.

Korištene funkcije​

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 SensorConfig

Sadrži konfiguraciju jedne ćelije. Ugrađene postavke, među njima SENSOR_CL2, također su objekti SensorConfig.

ReturnsKonfiguracijski objekt, prosljeđuje se funkciji ElectrochemicalGasSensor().

Parametri

TipNazivOpis
floatnano_amperes_per_ppmOsjetljivost ćelije u nA po ppm, koristi se pri izračunu ppm-a.
floatinternal_zero_calibrationNaponski pomak pribrojen svakom očitanju.
intads_gainMjerno područje ADS1115, od ADS_GAIN_6_144V do ADS_GAIN_0_256V.
inttia_gainPojačanje pojačala LMP91000, TIA_GAIN_EXTERNAL ili od TIA_GAIN_2_75_KOHM do TIA_GAIN_350_KOHM.
intrloadOtpornik opterećenja, RLOAD_10_OHM, RLOAD_33_OHM, RLOAD_50_OHM ili RLOAD_100_OHM.
intref_sourceREF_INTERNAL ili REF_EXTERNAL.
intinternal_zeroINTERNAL_ZERO_20_PERCENT, _50_PERCENT, _67_PERCENT ili INTERNAL_ZERO_BYPASSED.
intbias_signBIAS_SIGN_NEGATIVE ili BIAS_SIGN_POSITIVE.
intbiasBias kao udio reference, od BIAS_0_PERCENT do BIAS_24_PERCENT.
intfet_shortFET_SHORT_DISABLED ili FET_SHORT_ENABLED.
intop_modeNačin rada, OP_MODE_3LEAD_AMP_CELL za normalno mjerenje.
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensor

Stvara objekt senzora. Ništa se ne šalje na pločicu do poziva begin().

ReturnsObjekt senzora.

Parametri

TipNazivOpis
SensorConfigsensor_typeKonfiguracija, ovdje SENSOR_CUSTOM iz primjera.
I2Ci2cGotov objekt machine.I2C; primjer ga prosljeđuje. Ako se izostavi, modul stvara I2C(0, scl=Pin(22), sda=Pin(21)) na portu esp32 i na jednoj drugoj pločici koju prepoznaje po nazivu (i ondje su pinovi 22 i 21); na esp8266 stvara I2C(scl=Pin(5), sda=Pin(4)); na bilo kojoj drugoj pločici javlja Board not recognized, please pass an I2C object manually.
intadc_addrI2C adresa, 0x49 ako se izostavi, kao u primjeru. Za adresu od 0x30 do 0x37, raspon prekidača ADDRESS ove pločice, begin() komunicira s ATtiny404 čipom na pločici; za bilo koju drugu adresu traži ADS1115 na toj adresi i LMP91000 na 0x48 na sabirnici koju proslijedite.
intconfig_pinGPIO za ulaz MENB čipa LMP91000: modul ga postavlja u nisko stanje dok izravno konfigurira LMP91000, a inače u visoko. None ako se izostavi, kao u primjeru. Ne koristi se za adrese od 0x30 do 0x37.
sensor.begin()returns bool

Provjerava odgovara li pločica, postavlja ADC pojačanje i brzinu podataka iz konfiguracije te upisuje u LMP91000 pojačanje pojačala i opterećenje, referencu, interni nulti pomak, bias i način rada. Pozovite je jednom prije očitanja.

ReturnsTrue ako je pločica odgovorila i oba koraka konfiguracije uspjela, inače False.

sensor.getPPB()returns float

Izvodi jedno očitanje i pretvara ga u ppb s vrijednostima iz konfiguracije: getPPM() puta 1000. Rezultat ispod nule vraća se kao 0.0.

ReturnsKoncentracija plina u ppb.

Ovaj primjer koristi i I2C i Pin iz MicroPythonova modula machine te time.sleep_ms(), koji nisu dio ove biblioteke, nego dolaze s000 samim MicroPythonom.

Sastavljanje cjeline​

begin() upisuje postavke LMP91000 i ADC-a na pločicu, a getPPB() u izračunu koristi nano_amperes_per_ppm, internal_zero_calibration, pojačanje pojačala i interni nulti pomak. Nakon svake promjene ponovno pokrenite skriptu.