Skip to main content

Prilagođena konfiguracija analognog sučelja

Što ovaj primjer prikazuje​

Primjer electrochemical-customConfig.py iz modula gradi vlastiti SensorConfig umjesto da koristi gotovu predložak-konfiguraciju te te postavke šalje analognom sučelju LMP91000 i ADC-u. Koristite ga kada želite sami podesiti pojačanje, internu nulu ili pomak nule.

Primjer stvara senzor s vlastitim SENSOR_CUSTOM i bez adc_addr, pa se koristi zadana adresa modula. Vrijednosti u primjeru odgovaraju ćeliji za ozon. Za ćeliju na ovoj pločici vrijednosti predloška SENSOR_NH3 u nastavku dobra su polazna točka. Tri od njih (ADS_GAIN_4_096V, INTERNAL_ZERO_20_PERCENT i BIAS_SIGN_POSITIVE) nisu u importima primjera, stoga ih dodajte: ADS_GAIN_4_096V dolazi iz ads1115, a druge dvije iz ElectrochemicalGasSensor.

Modul komunicira s ATtiny404 mostom na pločici samo kada je adc_addr od 0x30 do 0x37. Svaka druga vrijednost, poput zadane 0x49 koju koristi ovaj primjer, tumači se kao I2C adresa ADS1115 s kojim modul komunicira izravno. Na ovoj pločici ADS1115 je spojen na pinove SDA2/SCL2 headera, do kojih Qwiic konektori ne dopiru, pa se ovaj primjer ne izvodi preko Qwiic kabela. Umjesto toga kontroler povežite s headerom: 3,3 V na 3V3, GND na GND, SDA pin iz primjera (21) na SDA2, a njegov SCL pin (22) na SCL2. Primjer se tada izvodi kakav jest, bez promjene adrese.

Dijagram spajanja u komentarima primjera spaja LMPEN na GPIO pin. Na ovoj pločici LMPEN ostavite nespojen: otpornik od 10 kΩ već ga povlači na GND, a na njega je spojen i ATtiny404.

ArgumentVrijednost SENSOR_NH3
nano_amperes_per_ppm40.0
internal_zero_calibration0
ads_gainADS_GAIN_4_096V
tia_gainTIA_GAIN_35_KOHM
rloadRLOAD_10_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

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)

🔗Otvori cijeli primjer

electrochemical-customConfig.py u commitu 623e1e6

→

Thonny shell prikazuje:

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

Zatim se svake 2,5 sekunde pojavljuje redak koji počinje s Sensor reading:, u ppb s pet decimala.

Ako begin() vrati False, primjer umjesto toga 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 postavke jedne ćelije: njezinu osjetljivost i pomak nule za pretvorbu u ppm, područje ADC-a te pojačanje, opterećenje, referencu, internu nulu, bias, kratkospajanje FET-a i način rada LMP91000.

ReturnsKonfiguracijski objekt koji se prosljeđuje klasi ElectrochemicalGasSensor.

Parametri

ParametarOpis
nano_amperes_per_ppmOsjetljivost ćelije u nA po ppm, iz tehničkog lista ćelije.
internal_zero_calibrationNaponski pomak dodan radi postavljanja nule očitanja na čistom zraku.
ads_gainMjerno područje ADC-a, od ADS_GAIN_6_144V do ADS_GAIN_0_256V.
tia_gainPovratni otpornik pojačala, od TIA_GAIN_2_75_KOHM do TIA_GAIN_350_KOHM, ili TIA_GAIN_EXTERNAL.
rloadOpteretni otpornik, od RLOAD_10_OHM do RLOAD_100_OHM.
ref_sourceREF_INTERNAL ili REF_EXTERNAL. Pretvorba u ppm pretpostavlja referentni napon pločice od 2,5 V.
internal_zeroINTERNAL_ZERO_20_PERCENT, _50_PERCENT, _67_PERCENT ili INTERNAL_ZERO_BYPASSED.
bias_signBIAS_SIGN_NEGATIVE ili BIAS_SIGN_POSITIVE.
biasBias kao postotak referentnog napona, od BIAS_0_PERCENT do BIAS_24_PERCENT.
fet_shortFET_SHORT_DISABLED za normalan rad ili FET_SHORT_ENABLED.
op_modeOP_MODE_3LEAD_AMP_CELL za normalan rad; postoje i načini duboki san, stanje mirovanja, 2-lead i mjerenje temperature.
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensor

Stvara objekt senzora s bilo kojim SensorConfig, gotovim predloškom ili vlastitim. adc_addr određuje kako begin() komunicira s pločicom: od 0x30 do 0x37 koristi protokol ATtiny mosta; svaka druga vrijednost koristi se kao vlastita I2C adresa ADC-a.

ReturnsObjekt senzora.

Parametri

ParametarTipOpis
sensor_typeSensorConfigVaša konfiguracija, ovdje SENSOR_CUSTOM.
i2cI2CVaš I2C objekt.
adc_addrintAdresa s kojom modul komunicira. Zadano 0x49, što ovaj primjer koristi. Na ovoj pločici prekidač ADDRESS postavlja adresu mosta od 0x30 do 0x37.
config_pinint ili NoneBroj GPIO pina koji modul postavlja u nisku razinu dok konfigurira LMP91000, a poslije u visoku, kada je adc_addr izvan raspona od 0x30 do 0x37. Zadano None. Ne koristi se od 0x30 do 0x37.
begin()returns bool

Konfigurira pojačanje ADC-a i upisuje tri vrijednosti registara LMP91000 izgrađene iz vašeg SensorConfig: preko mosta na pločici kada je adresa od 0x30 do 0x37, ili izravno u ADS1115 i LMP91000 za svaku drugu adresu.

ReturnsTrue kada je svaki korak uspio. False kada most nije odgovorio s OK unutar 500 ms ili je javio pogrešku, kada pokretanje ADS1115 nije uspjelo ili kada konfiguriranje analognog sučelja nije uspjelo.

getPPB()returns float

Izvodi jedno očitanje i pretvara ga pomoću pojačanja, interne nule, pomaka i osjetljivosti iz vaše konfiguracije. Rezultat manji od nule vraća se kao 0.

ReturnsKoncentracija u ppb.

Sve zajedno​

begin() pakira vaš SensorConfig u tri registra postavki LMP91000 i upisuje ih, a svako očitanje za pretvorbu koristi ista polja. Mijenjajte jedan po jedan argument i uspoređujte s vrijednostima SENSOR_NH3 iznad.