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.
| Argument | Vrijednost SENSOR_NH3 |
|---|---|
nano_amperes_per_ppm | 40.0 |
internal_zero_calibration | 0 |
ads_gain | ADS_GAIN_4_096V |
tia_gain | TIA_GAIN_35_KOHM |
rload | RLOAD_10_OHM |
ref_source | REF_EXTERNAL |
internal_zero | INTERNAL_ZERO_20_PERCENT |
bias_sign | BIAS_SIGN_POSITIVE |
bias | BIAS_0_PERCENT |
fet_short | FET_SHORT_DISABLED |
op_mode | OP_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:
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 SensorConfigSadrž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
| Parametar | Opis |
|---|---|
nano_amperes_per_ppm | Osjetljivost ćelije u nA po ppm, iz tehničkog lista ćelije. |
internal_zero_calibration | Naponski pomak dodan radi postavljanja nule očitanja na čistom zraku. |
ads_gain | Mjerno područje ADC-a, od ADS_GAIN_6_144V do ADS_GAIN_0_256V. |
tia_gain | Povratni otpornik pojačala, od TIA_GAIN_2_75_KOHM do TIA_GAIN_350_KOHM, ili TIA_GAIN_EXTERNAL. |
rload | Opteretni otpornik, od RLOAD_10_OHM do RLOAD_100_OHM. |
ref_source | REF_INTERNAL ili REF_EXTERNAL. Pretvorba u ppm pretpostavlja referentni napon pločice od 2,5 V. |
internal_zero | INTERNAL_ZERO_20_PERCENT, _50_PERCENT, _67_PERCENT ili INTERNAL_ZERO_BYPASSED. |
bias_sign | BIAS_SIGN_NEGATIVE ili BIAS_SIGN_POSITIVE. |
bias | Bias kao postotak referentnog napona, od BIAS_0_PERCENT do BIAS_24_PERCENT. |
fet_short | FET_SHORT_DISABLED za normalan rad ili FET_SHORT_ENABLED. |
op_mode | OP_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 ElectrochemicalGasSensorStvara 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
| Parametar | Tip | Opis |
|---|---|---|
sensor_type | SensorConfig | Vaša konfiguracija, ovdje SENSOR_CUSTOM. |
i2c | I2C | Vaš I2C objekt. |
adc_addr | int | Adresa s kojom modul komunicira. Zadano 0x49, što ovaj primjer koristi. Na ovoj pločici prekidač ADDRESS postavlja adresu mosta od 0x30 do 0x37. |
config_pin | int ili None | Broj 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 boolKonfigurira 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 floatIzvodi 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.