Skip to main content

Kalibracija nulte točke

Što ovaj primjer prikazuje​

Primjer electrochemical-calibrateSensor.py primjenjuje pomak nulte točke i ispisuje koncentraciju plina u PPB svakih 2,5 sekunde.

Primjer stvara senzor s adc_addr=0x49 i config_pin=32.

CUSTOM_CALIBRATION je napon koji modul pribraja naponu ADC-a prije pretvorbe. Komentar u primjeru daje postupak: na zraku bez ciljanog plina podešavajte vrijednost dok očitanje nije tek nešto malo iznad 0 PPB.

Prije pokretanja:

  • Primjer je napisan sa SENSOR_O3, modulovom unaprijed postavljenom konfiguracijom za ozon, pa njegove vrijednosti nisu vrijednosti za H2S. Ne prebacujte ga na SENSOR_H2S bez izmjena: ta je konfiguracija napisana 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 s tom konfiguracijom očitanje ispada oko 2,6 puta preniskо. 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.

Kôd primjera​

# FILE: electrochemical-calibrateSensor.py

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

Očekivani rezultat:

ShellMicroPython
Electrochemical Gas Sensor - Calibration Example
Sensor initialized successfully!

Zatim se svakih 2,5 sekunde ispisuje redak koji počinje s Sensor reading:, s koncentracijom u PPB na pet decimala. Modul nikada ne prijavljuje vrijednost ispod nule: umjesto toga vraća 0, pa je 0.00000 normalno očitanje. 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 i izravno na LMP91000. Ako je zadan config_pin, postavlja se kao izlaz i pokreće u visoko stanje.

ReturnsObjekt senzora.

Parametri

NameTypeDescription
sensor_typeSensorConfigUnaprijed postavljena konfiguracija iz modula (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) ili prilagođeni SensorConfig. Za ćeliju na ovoj pločici proslijedite prilagođenu konfiguraciju s 460 nA po ppm.
i2cmachine.I2CI2C sabirnica na kojoj je pločica. 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 bilo kojoj drugoj pločici javlja Board not recognized, please pass an I2C object manually.
adc_addrintAdresa s kojom begin() komunicira. Ovaj primjer prosljeđuje 0x49.
config_pinintGPIO koji modul drži u visokom stanju i povlači u nisko dok izravno konfigurira LMP91000. Ne koristi se za adrese od 0x30 do 0x37. Ovaj primjer prosljeđuje 32.
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 navodi 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, povlačeći config_pin u nisko stanje tijekom upisa. Pozovite je jednom prije očitavanja.

ReturnsTrue ako je svaki korak uspio, inače False.

setCustomZeroCalibration(calibration)returns None

Postavlja pomak nulte točke: napon koji getPPM() pribraja naponu ADC-a prije pretvorbe. Vrijednost upisuje u objekt vrste senzora, pa zamjenjuje njegovu internu nultu kalibraciju.

ReturnsNišta.

Parametri

NameTypeDescription
calibrationfloatPomak u voltima. Primjer prosljeđuje CUSTOM_CALIBRATION.
getPPB()returns float

Očitava vrijednost pomoću getPPM() i množi je s 1000.

ReturnsKoncentracija plina u PPB.

getPPM()returns float

Alternativa koju navodi komentar u primjeru. Očitava ADC, oduzima internu nulu ulaznog stupnja (2,5 V puta njezin postotak), pribraja nultu kalibraciju, a zatim dijeli s pojačanjem pojačala i s osjetljivošću ćelije u nA po ppm iz vrste senzora. Rezultat manji od 0 vraća se kao 0.0.

ReturnsKoncentracija plina u PPM.

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

Sastavljanje cjeline​

Stvorite senzor, pozovite begin(), a zatim pozovite setCustomZeroCalibration() sa svojim pomakom prije nego što počnete očitavati. Pokrenite skriptu na čistom zraku, promijenite CUSTOM_CALIBRATION i ponovno je pokrenite dok očitanje nije tek nešto malo iznad 0 PPB.