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:
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 ElectrochemicalGasSensorStvara 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
| Parametar | Tip | Opis |
|---|---|---|
sensor_type | SensorConfig | Predpostavka ćelije. SENSOR_NH3 je predpostavka za ćeliju ove pločice. |
i2c | I2C | Vaš I2C objekt. |
adc_addr | int | Adresa s kojom modul komunicira. Zadano 0x49, što koristi ovaj primjer. 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 boolS 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 floatUsrednjava 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
| Parametar | Tip | Opis |
|---|---|---|
num_measurements | int | Koliko se očitanja usrednjava. Zadano 5. |
seconds_delay | int | Koliko sekundi čekati nakon svakog očitanja. Zadano 2. |
getAveragedPPM(num_measurements=5, seconds_delay=2)returns floatIsti prosjek u ppm. Primjer ga u komentaru prikazuje kao alternativu.
ReturnsUsrednjena koncentracija u ppm.
Parametri
| Parametar | Tip | Opis |
|---|---|---|
num_measurements | int | Koliko se očitanja usrednjava. Zadano 5. |
seconds_delay | int | Koliko 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.