Skip to main content

Koristite prilagođenu konfiguraciju senzora

Što ovaj primjer prikazuje​

Primjer electrochemical-customConfig.py izrađuje vlastitu konfiguraciju SensorConfig, SENSOR_CUSTOM, umjesto da koristi jednu od unaprijed definiranih konfiguracija modula, te ispisuje koncentraciju plina u PPB svakih 2,5 sekundi.

Primjer stvara senzor na zadanoj adresi modula, 0x49.

Ovako modulu zadajete ćeliju ove pločice. U ovom obliku SENSOR_CUSTOM sadrži primjere vrijednosti, na primjer osjetljivost od -1000 nA po ppm, pa njegova očitanja nisu vrijednosti za H2S. Za ćeliju SGX-4H2S-300 ove pločice postavite vrijednosti iz unaprijed definirane konfiguracije SENSOR_H2S modula, s izlaznim signalom koji tehnički list ćelije navodi, 460 nA po ppm (460 ± 140), umjesto 1200 iz te konfiguracije. Ta je konfiguracija napisana za ćeliju SGX-4H2S-100, a s ćelijom ove pločice očitava oko 2,6 puta premalo:

ArgumentVrijednost za ovu pločicu
nano_amperes_per_ppm460.0
internal_zero_calibration0
ads_gainADS_GAIN_4_096V
tia_gainTIA_GAIN_7_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

Uvezite svaku konstantu koju koristite: ADS_GAIN_4_096V iz ads1115, ostale iz ElectrochemicalGasSensor, kao što prikazuje Brzi početak. Promijenite Pin(22) i Pin(21) u SCL i SDA pinove svojeg kontrolera ako se razlikuju.

Programski kôd primjera​

# FILE: electrochemical-customConfig.py

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 cjeloviti primjer

Očekivani rezultat:

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

Zatim se svakih 2,5 sekundi pojavljuje redak koji počinje s Sensor reading:, s koncentracijom u PPB na pet decimala. Ako pločica ne odgovori, skripta ispisuje ERROR: Can't init the sensor! Check connections! i čeka.

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 za jednu plinsku ćeliju: vrijednosti kojima getPPM() pretvara očitanje i vrijednosti koje begin() upisuje u ulazni stupanj LMP91000. Unaprijed definirane konfiguracije modula, poput SENSOR_H2S, također su objekti SensorConfig.

ReturnsObjekt konfiguracije koji se prosljeđuje klasi ElectrochemicalGasSensor.

Parametri

NameTypeDescription
nano_amperes_per_ppmfloatOsjetljivost ćelije u nA po ppm, iz njezina tehničkog lista. getPPM() dijeli njome.
internal_zero_calibrationfloatNapon koji se dodaje očitanju kako bi se ono postavilo na nulu u čistom zraku.
ads_gainintMjerno područje ADS1115, od ADS_GAIN_6_144V do ADS_GAIN_0_256V (iz ads1115).
tia_gainintPojačanje ulaznog pojačala, od TIA_GAIN_2_75_KOHM do TIA_GAIN_350_KOHM, ili TIA_GAIN_EXTERNAL.
rloadintOpteretni otpornik, od RLOAD_10_OHM do RLOAD_100_OHM.
ref_sourceintIzvor reference, REF_INTERNAL ili REF_EXTERNAL.
internal_zerointUnutarnja nula, INTERNAL_ZERO_20_PERCENT, INTERNAL_ZERO_50_PERCENT, INTERNAL_ZERO_67_PERCENT ili INTERNAL_ZERO_BYPASSED.
bias_signintPolaritet prednapona, BIAS_SIGN_NEGATIVE ili BIAS_SIGN_POSITIVE.
biasintPrednapon kao postotak reference, od BIAS_0_PERCENT do BIAS_24_PERCENT.
fet_shortintFET_SHORT_DISABLED ili FET_SHORT_ENABLED.
op_modeintRadni način; OP_MODE_3LEAD_AMP_CELL za normalan rad.
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensor

Stvara objekt senzora. Adresa određuje kako begin() komunicira s pločicom: adresa od 0x30 do 0x37 ide preko ATtiny404 na pločici; svaka druga adresa, poput zadane 0x49, ide na ADS1115 na toj adresi i izravno na LMP91000.

ReturnsObjekt senzora.

Parametri

NameTypeDescription
sensor_typeSensorConfigKonfiguracija koja se koristi. Ovaj primjer prosljeđuje SENSOR_CUSTOM.
i2cmachine.I2CI2C sabirnica na kojoj se nalazi pločica. Bez nje modul sam otvara sabirnicu samo na pločicama koje prepoznaje: ESP32 izvedbama MicroPythona i jednoj vlastitoj izvedbi Soldered pločice (I2C sabirnica 0, SCL 22, SDA 21) te ESP8266 izvedbama (SCL 5, SDA 4). Na svakoj drugoj pločici javlja Board not recognized, please pass an I2C object manually.
adc_addrintAdresa s kojom begin() komunicira. Ovaj primjer je izostavlja pa se koristi zadana adresa, 0x49.
config_pinintGPIO koji modul drži u visokom stanju i spušta u nisko dok izravno konfigurira LMP91000. Ne koristi se na adresama od 0x30 do 0x37. Ovaj primjer ga izostavlja.
begin()returns bool

Uz adresu od 0x30 do 0x37 provjerava odgovara li ATtiny404 na pločici, šalje mu pojačanje ADC-a iz konfiguracije i najsporiju brzinu podataka, a zatim mu nalaže da konfiguraciju upiše u ulazni stupanj LMP91000; svaka se naredba ponavlja do 500 ms. Uz bilo koju drugu adresu provjerava odgovara li ADS1115 na toj adresi, postavlja mu pojačanje i najsporiju brzinu podataka, a zatim konfiguraciju upisuje izravno u LMP91000. Pozovite je jednom prije očitavanja.

ReturnsTrue ako je svaki korak uspio, inače False.

getPPB()returns float

Očitava vrijednost pomoću getPPM(), koji pretvara prema osjetljivosti iz konfiguracije, i množi je s 1000.

ReturnsKoncentracija plina u PPB.

Ovaj primjer koristi i I2C i Pin iz MicroPythonova modula machine, koji nije dio modula Soldered ElectrochemicalGasSensor.

Sve zajedno​

Izradite SensorConfig prema tehničkom listu svoje ćelije, proslijedite ga klasi ElectrochemicalGasSensor, jednom pozovite begin(), a zatim očitavajte pomoću getPPB() ili getPPM(). Za ovu pločicu vrijednosti se nalaze u tablici iznad.