Skip to main content

Kalibracija nulte točke

Što ovaj primjer prikazuje​

Primjer modula electrochemical-calibrateSensor.py dodaje vaš vlastiti nulti pomak svakom očitanju. Pokrenite ga na mjestu na kojem nema ciljanog plina i podešavajte CUSTOM_CALIBRATION dok očitanje ne bude tek nešto malo iznad 0 ppb.

Primjer stvara senzor s predefiniranom konfiguracijom modula za ozon, SENSOR_O3, te adc_addr=0x49 i config_pin=32. SENSOR_NH3 je predefinirana konfiguracija za ćeliju ove pločice, a pretvorba u ppm koristi osjetljivost iz te konfiguracije (-1000 nA/ppm za SENSOR_O3, 40 nA/ppm za SENSOR_NH3). Zato očitanja iz primjera u isporučenom obliku nisu vrijednosti amonijaka. Za očitavanje amonijaka zamijenite SENSOR_O3 s SENSOR_NH3 u retku s importom i u retku koji stvara senzor. Primjer otvara I2C sabirnicu 0 na pinu 22 (SCL) i pinu 21 (SDA).

Modul komunicira s ATtiny404 mostom na pločici samo kada je adc_addr od 0x30 do 0x37. Svaka druga vrijednost, kao što je 0x49 iz ovog primjera, tumači se kao I2C adresa ADS1115 čipa s kojim modul komunicira izravno, dok je config_pin postavljen na nisku razinu tijekom konfiguriranja LMP91000. 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 spojite kontroler na header: 3,3 V na 3V3, GND na GND, SDA pin primjera (21) na SDA2, a njegov SCL pin (22) na SCL2. Primjer se tada izvodi onako kako je napisan, bez promjene adrese.

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

Kod primjera​

# FILE: electrochemical-calibrateSensor.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Sensor zero-point calibration example.
# LAST UPDATED: 2026-05-21

# Connecting diagram:
#
# Qwiic------------------------>Qwiic
# LMPEN------------------------>32 (GPIO pin, required for configuration)

from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import ElectrochemicalGasSensor, SENSOR_O3

# This value is added to the voltage read from the ADC.
# In an environment with 0 of the target gas, the reading after calibration
# should be just barely 0 PPB — adjust this value until that is the case.
CUSTOM_CALIBRATION = 0

# Initialize I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))

# Custom ADC address (0x49 default) and GPIO pin for LMPEN
sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x49, config_pin=32)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Calibration Example")

if not sensor.begin():
print("ERROR: Can't init the sensor! Check connections!")
while True:
time.sleep_ms(100)

# Apply the zero-point calibration offset
sensor.setCustomZeroCalibration(CUSTOM_CALIBRATION)

print("Sensor initialized successfully!")

# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading = sensor.getPPB()

# O3 is typically measured in PPB
# Switch to getPPM() if PPM is more relevant for your use case
print("Sensor reading: {:.5f} PPB".format(reading))

time.sleep_ms(2500)

🔗Otvorite cijeli primjer

electrochemical-calibrateSensor.py u commitu 623e1e6

→

Thonny shell prikazuje:

ShellMicroPython
Electrochemical Gas Sensor - Calibration Example
Sensor initialized successfully!

Nakon toga svake 2,5 sekunde slijedi 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​

ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensor

Stvara objekt senzora. 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_typeSensorConfigPredefinirana konfiguracija ćelije. SENSOR_NH3 je predefinirana konfiguracija za ćeliju ove pločice.
i2cI2CVaš I2C objekt.
adc_addrintAdresa s kojom modul komunicira. Zadano je 0x49; primjer prosljeđuje 0x49. Na ovoj pločici prekidač ADDRESS postavlja adresu mosta od 0x30 do 0x37.
config_pinint ili NoneBroj GPIO pina koji modul postavlja na nisku razinu dok konfigurira LMP91000, a nakon toga na visoku, kada je adc_addr izvan raspona od 0x30 do 0x37; primjer prosljeđuje 32. Zadano je None. Ne koristi se od 0x30 do 0x37.
begin()returns bool

S adresom od 0x30 do 0x37 provjerava odgovara li most i šalje mu postavke ADC-a i analognog ulaznog stupnja iz predefinirane konfiguracije. Sa svakom drugom adresom izravno pokreće ADS1115 na toj adresi i konfigurira LMP91000. Pozovite je jednom prije bilo kojeg očitanja.

ReturnsTrue kada su svi koraci uspjeli. False kada most nije odgovorio s OK unutar 500 ms ili je javio pogrešku, kada pokretanje ADS1115 nije uspjelo ili kada konfiguriranje analognog ulaznog stupnja nije uspjelo.

setCustomZeroCalibration(calibration)returns None

Postavlja napon koji se dodaje svakom očitanju nakon uklanjanja unutarnje nule ulaznog stupnja. Zamjenjuje internal_zero_calibration iz predefinirane konfiguracije, koji za SENSOR_NH3 iznosi 0.

ReturnsNišta.

Parametri

ParametarTipOpis
calibrationfloatPomak u voltima. Odaberite ga tako da čisti zrak daje očitanje tek nešto malo iznad 0.
getPPB()returns float

Uzima jedno očitanje s primijenjenim vašim pomakom i vraća ga u dijelovima na milijardu (ppb). Rezultat ispod nule vraća se kao 0.

ReturnsgetPPM() pomnoženo s 1000.

getPPM()returns float

Isto očitanje u ppm. Primjer ga u komentaru navodi kao alternativu.

ReturnsKoncentracija plina u ppm.

Sastavljanje cjeline​

Imajte na umu da se rezultat ispod nule ispisuje kao 0, pa očitanje točno 0 može skrivati prenizak pomak. Kada čisti zrak daje očitanje tek nešto malo iznad 0, pozovite setCustomZeroCalibration() s tom vrijednošću nakon begin() u vlastitom programu.