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 naSENSOR_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đeniSensorConfigs postavkamaSENSOR_H2Si 460 nA po ppm, kao što prikazuje Brzi početak . - Promijenite
Pin(22)iPin(21)u SCL i SDA pinove svojeg kontrolera ako se razlikuju. NUM_READINGSiSECS_BETWEEN_READINGSodređ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)
Očekivani rezultat:
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 ElectrochemicalGasSensorStvara 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
| Name | Type | Description |
|---|---|---|
sensor_type | SensorConfig | Predlož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. |
i2c | machine.I2C | I2C 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_addr | int | Adresa s kojom begin() komunicira. Ovaj primjer je izostavlja pa se koristi zadana, 0x49. |
config_pin | int | GPIO 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 boolS 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 floatVraća getAveragedPPM() s istim argumentima, pomnoženo s 1000. Blokira dok se ne uzmu sva očitanja.
ReturnsProsječna koncentracija plina u PPB.
Parametri
| Name | Type | Description |
|---|---|---|
num_measurements | int | Koliko se očitanja usrednjuje. Primjer prosljeđuje NUM_READINGS (5). |
seconds_delay | int | Sekunde čekanja nakon svakog očitanja. Primjer prosljeđuje SECS_BETWEEN_READINGS (3). |
getAveragedPPM(num_measurements=5, seconds_delay=2)returns floatAlternativa 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
| Name | Type | Description |
|---|---|---|
num_measurements | int | Koliko se očitanja usrednjuje. |
seconds_delay | int | Sekunde č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.