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:
| Argument | Vrijednost za ovu pločicu |
|---|---|
nano_amperes_per_ppm | 460.0 |
internal_zero_calibration | 0 |
ads_gain | ADS_GAIN_4_096V |
tia_gain | TIA_GAIN_7_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 |
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)
Očekivani rezultat:
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 SensorConfigSadrž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
| Name | Type | Description |
|---|---|---|
nano_amperes_per_ppm | float | Osjetljivost ćelije u nA po ppm, iz njezina tehničkog lista. getPPM() dijeli njome. |
internal_zero_calibration | float | Napon koji se dodaje očitanju kako bi se ono postavilo na nulu u čistom zraku. |
ads_gain | int | Mjerno područje ADS1115, od ADS_GAIN_6_144V do ADS_GAIN_0_256V (iz ads1115). |
tia_gain | int | Pojačanje ulaznog pojačala, od TIA_GAIN_2_75_KOHM do TIA_GAIN_350_KOHM, ili TIA_GAIN_EXTERNAL. |
rload | int | Opteretni otpornik, od RLOAD_10_OHM do RLOAD_100_OHM. |
ref_source | int | Izvor reference, REF_INTERNAL ili REF_EXTERNAL. |
internal_zero | int | Unutarnja nula, INTERNAL_ZERO_20_PERCENT, INTERNAL_ZERO_50_PERCENT, INTERNAL_ZERO_67_PERCENT ili INTERNAL_ZERO_BYPASSED. |
bias_sign | int | Polaritet prednapona, BIAS_SIGN_NEGATIVE ili BIAS_SIGN_POSITIVE. |
bias | int | Prednapon kao postotak reference, od BIAS_0_PERCENT do BIAS_24_PERCENT. |
fet_short | int | FET_SHORT_DISABLED ili FET_SHORT_ENABLED. |
op_mode | int | Radni način; OP_MODE_3LEAD_AMP_CELL za normalan rad. |
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensorStvara 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
| Name | Type | Description |
|---|---|---|
sensor_type | SensorConfig | Konfiguracija koja se koristi. Ovaj primjer prosljeđuje SENSOR_CUSTOM. |
i2c | machine.I2C | I2C 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_addr | int | Adresa s kojom begin() komunicira. Ovaj primjer je izostavlja pa se koristi zadana adresa, 0x49. |
config_pin | int | GPIO 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 boolUz 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 floatOč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.