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 naSENSOR_H2Sbez 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đ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.
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)
Očekivani rezultat:
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 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 i izravno na LMP91000. Ako je zadan config_pin, postavlja se kao izlaz i pokreće u visoko stanje.
ReturnsObjekt senzora.
Parametri
| Name | Type | Description |
|---|---|---|
sensor_type | SensorConfig | Unaprijed 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. |
i2c | machine.I2C | I2C 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_addr | int | Adresa s kojom begin() komunicira. Ovaj primjer prosljeđuje 0x49. |
config_pin | int | GPIO 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 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 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 NonePostavlja 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
| Name | Type | Description |
|---|---|---|
calibration | float | Pomak u voltima. Primjer prosljeđuje CUSTOM_CALIBRATION. |
getPPB()returns floatOčitava vrijednost pomoću getPPM() i množi je s 1000.
ReturnsKoncentracija plina u PPB.
getPPM()returns floatAlternativa 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.