Skip to main content

Usrednjavanje više očitanja

Što ovaj primjer prikazuje​

Primjer electrochemical-averagedMeasurement.py uzima pet očitanja u razmaku od tri sekunde, izračunava njihov prosjek, ispisuje prosjek u PPB, čeka 2,5 sekunde i počinje ispočetka.

Primjer stvara senzor na zadanoj adresi modula, 0x49.

Prije pokretanja:

  • Primjer je napisan sa SENSOR_O3, predloškom modula za ozon, pa njegove vrijednosti nisu vrijednosti za H2S. Nemojte ga bez izmjena prebaciti na SENSOR_H2S: taj je predložak napisan za ćeliju SGX-4H2S-100 (1200 nA po ppm). Tehnički list ćelije SGX-4H2S-300 na ovoj pločici navodi izlazni signal od 460 ± 140 nA po ppm, pa se s tim predloškom očitanje dobiva otprilike 2,6 puta preniskim. Umjesto toga proslijedite prilagođeni SensorConfig s postavkama SENSOR_H2S i 460 nA po ppm, kao što prikazuje Brzi početak .
  • Promijenite Pin(22) i Pin(21) u SCL i SDA pinove svojeg kontrolera ako se razlikuju.
  • NUM_READINGS i SECS_BETWEEN_READINGS određuju koliko se očitanja usrednjuje i koliko sekundi prođe između njih.

Kôd primjera​

# FILE: electrochemical-averagedMeasurement.py

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

Očekivani rezultat:

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

Zatim slijedi redak koji počinje s Sensor reading: i prosječnom koncentracijom u PPB s pet decimala. Uz postavke iz primjera svaki prosjek uzima pet očitanja s čekanjem od 3 sekunde nakon svakog, zatim skripta čeka 2,5 sekundi, pa se novi redak pojavljuje otprilike svakih 17,5 sekundi. Ako pločica ne odgovara, skripta ispisuje ERROR: Can't init the sensor! Check connections! i čeka.

Korištene funkcije​

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

Stvara objekt senzora. Vrsta senzora sadrži postavke ulaznog stupnja i pretvorbe za jednu plinsku ćeliju. Adresa određuje kako begin() komunicira s pločicom: adresa od 0x30 do 0x37 ide preko ATtiny404 na pločici; svaka druga adresa, kao zadana 0x49, ide na ADS1115 na toj adresi, a na LMP91000 izravno.

ReturnsObjekt senzora.

Parametri

NameTypeDescription
sensor_typeSensorConfigPredložak iz modula (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) ili prilagođeni SensorConfig. Za ćeliju ove pločice proslijedite prilagođeni s 460 nA po ppm.
i2cmachine.I2CI2C sabirnica na kojoj se pločica nalazi. Bez nje modul sam otvara sabirnicu samo na pločicama koje prepoznaje: ESP32 izvedbe MicroPythona i vlastita izvedba jedne Soldered pločice (I2C sabirnica 0, SCL 22, SDA 21) te ESP8266 izvedbe (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, 0x49.
config_pinintGPIO koji modul drži u visokom stanju i povlači u nisko dok izravno konfigurira LMP91000. Ne koristi se na adresama od 0x30 do 0x37. Ovaj primjer ga izostavlja.
begin()returns bool

S adresom od 0x30 do 0x37 provjerava odgovara li ATtiny404 na pločici, šalje mu pojačanje ADC-a iz vrste senzora i najsporiju brzinu podataka, a zatim ga traži da konfigurira ulazni stupanj LMP91000; svaka se naredba ponavlja do 500 ms. Sa svakom drugom adresom provjerava odgovara li ADS1115 na toj adresi, postavlja njegovo pojačanje i najsporiju brzinu podataka, a zatim izravno konfigurira LMP91000. Pozovite je jednom prije očitanja.

ReturnsTrue ako su svi koraci uspjeli, inače False.

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

Vraća getAveragedPPM() s istim argumentima, pomnoženo s 1000. Blokira dok se ne uzmu sva očitanja.

ReturnsProsječna koncentracija plina u PPB.

Parametri

NameTypeDescription
num_measurementsintKoliko se očitanja usrednjuje. Primjer prosljeđuje NUM_READINGS (5).
seconds_delayintSekunde čekanja nakon svakog očitanja. Primjer prosljeđuje SECS_BETWEEN_READINGS (3).
getAveragedPPM(num_measurements=5, seconds_delay=2)returns float

Alternativa iz primjera koja je u komentaru. Uzima num_measurements očitanja pomoću getPPM(), čekajući seconds_delay sekundi nakon svakog, i vraća njihovu srednju vrijednost. Blokira dok se ne uzmu sva očitanja.

ReturnsProsječna koncentracija plina u PPM.

Parametri

NameTypeDescription
num_measurementsintKoliko se očitanja usrednjuje.
seconds_delayintSekunde čekanja nakon svakog očitanja.

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

Sve zajedno​

Otvorite I2C sabirnicu, stvorite jedan ElectrochemicalGasSensor s vrstom senzora, jednom pozovite begin(), a zatim pozovite getAveragedPPB() ili getAveragedPPM() s brojem očitanja i čekanjem između njih. Svaki poziv blokira otprilike num_measurements puta seconds_delay sekundi.