Skip to main content

Usrednjeno mjerenje

Što ovaj primjer prikazuje​

Primjer electrochemical-averagedMeasurement.py iz modula očitava nekoliko vrijednosti, među očitanjima čeka i ispisuje njihov prosjek u ppb. Usrednjavanje ublažava šum pojedinačnog očitanja.

Primjer stvara senzor s ozonskom predpostavkom modula, SENSOR_O3, i bez adc_addr, pa se koristi zadana adresa modula. Komentar u primjeru kaže da predpostavku treba promijeniti prema vrsti vašeg senzora: SENSOR_NH3 je predpostavka za amonijačnu ćeliju ove pločice, a pretvorba u ppm koristi osjetljivost iz predpostavke (-1000 nA/ppm za SENSOR_O3, 40 nA/ppm za SENSOR_NH3). Zato očitanja u primjeru, onakvom kakav je isporučen, nisu vrijednosti amonijaka. Da biste očitali amonijak, zamijenite SENSOR_O3 sa 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, 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 spojite 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 GND ili na GPIO pin. Na ovoj pločici LMPEN ostavite nespojen: otpornik od 10 kΩ već ga veže na GND, a na njega je spojen i ATtiny404.

Kod primjera​

# FILE: electrochemical-averagedMeasurement.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Averaged PPM reading example using the built-in averaging function.
# LAST UPDATED: 2026-05-21

# Connecting diagram:
#
# Qwiic------------------------>Qwiic
# LMPEN------------------------>GND or GPIO pin (see config_pin parameter below)

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

# How many readings to average and how many seconds to wait between them
NUM_READINGS = 5
SECS_BETWEEN_READINGS = 3

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

# Create sensor object - change SENSOR_O3 to match your sensor type
# Available types: SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3,
# SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2
sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Averaged Measurement 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:
# getAveragedPPM is a blocking call — it waits between each reading
reading = sensor.getAveragedPPB(NUM_READINGS, SECS_BETWEEN_READINGS)

# If PPM is more relevant for your sensor, use:
# reading = sensor.getAveragedPPM(NUM_READINGS, SECS_BETWEEN_READINGS)

print("Sensor reading: {:.5f} PPB".format(reading))

time.sleep_ms(2500)

🔗Otvorite cijeli primjer

electrochemical-averagedMeasurement.py u commitu 623e1e6

→

Thonny shell prikazuje:

ShellMicroPython
Electrochemical Gas Sensor - Averaged Measurement Example
Sensor initialized successfully!

Zatim se pojavljuje redak koji počinje s Sensor reading: i sadrži prosjek u ppb. Pet očitanja s 3 sekunde nakon svakog traje 15 sekundi, uz pauzu od 2,5 sekunde, pa novi redak stiže otprilike svakih 17,5 sekundi.

Ako begin() vrati False, primjer umjesto toga ispisuje ERROR: Can't init the sensor! Check connections! i staje.

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_typeSensorConfigPredpostavka ćelije. SENSOR_NH3 je predpostavka za ćeliju ove pločice.
i2cI2CVaš I2C objekt.
adc_addrintAdresa s kojom modul komunicira. Zadano 0x49, što koristi ovaj primjer. 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

S adresom od 0x30 do 0x37 provjerava odgovara li most te mu šalje postavke ADC-a i analognog ulaznog stupnja iz predpostavke. S bilo kojom 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.

getAveragedPPB(num_measurements=5, seconds_delay=2)returns float

Usrednjava num_measurements očitanja, čekajući seconds_delay sekundi nakon svakog, i vraća rezultat u ppb. Blokira dok se sva očitanja ne završe.

ReturnsgetAveragedPPM() pomnoženo s 1000.

Parametri

ParametarTipOpis
num_measurementsintKoliko se očitanja usrednjava. Zadano 5.
seconds_delayintKoliko sekundi čekati nakon svakog očitanja. Zadano 2.
getAveragedPPM(num_measurements=5, seconds_delay=2)returns float

Isti prosjek u ppm. Primjer ga u komentaru prikazuje kao alternativu.

ReturnsUsrednjena koncentracija u ppm.

Parametri

ParametarTipOpis
num_measurementsintKoliko se očitanja usrednjava. Zadano 5.
seconds_delayintKoliko sekundi čekati nakon svakog očitanja. Zadano 2.

Sve zajedno​

Usrednjene funkcije koristite kad je stabilna vrijednost važnija od brze. Dok čekaju, blokiraju izvođenje, pa NUM_READINGS × SECS_BETWEEN_READINGS držite kratkim ako vaš program ima i drugog posla.