Nulta kalibracija
Što prikazuje ovaj primjer
Primjer modula electrochemical-calibrateSensor.py dodaje fiksni offset napon
svakom očitanju pomoću setCustomZeroCalibration(). Na zraku bez ciljanog plina
podešavajte CUSTOM_CALIBRATION dok očitanje nije tek nešto iznad 0, kao što
stoji u komentaru primjera.
Primjer stvara senzor s SENSOR_O3, unaprijed definiranom postavkom za ozonsku ćeliju.
Modul izračunava svako očitanje iz osjetljivosti i postavki pojačanja te postavke;
postavka za klorovu ćeliju ove pločice je SENSOR_CL2.
Primjer otvara I2C sabirnicu 0 sa SCL na pinu 22 i SDA na pinu 21. Promijenite
ih prema svojoj pločici.
Kod primjera
# FILE: electrochemical-calibrateSensor.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Sensor zero-point calibration example.
# LAST UPDATED: 2026-05-21
# Connecting diagram:
#
# Qwiic------------------------>Qwiic
# LMPEN------------------------>32 (GPIO pin, required for configuration)
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 cjeloviti primjer
Examples/electrochemical-calibrateSensor.py u commitu 623e1e6
Spojna shema u primjeru povezuje LMPEN na GPIO 32. Na ovoj pločici otpornik od
10 kΩ drži LMPEN na niskoj razini i spojen je na ATtiny404, pa ga ostavite
nepovezanim (pogledajte tablicu pinova na stranici
Hardverski detalji).
Očekivani rezultat:
Electrochemical Gas Sensor - Calibration Example
Sensor initialized successfully!
Zatim svakih 2,5 s redak: Sensor reading: , koncentracija u ppb s pet
decimala i PPB. Ako begin() ne uspije, skripta ispisuje
ERROR: Can't init the sensor! Check connections! i zaustavlja se.
Korištene funkcije
ElectrochemicalGasSensor(sensor_type, i2c=None, adc_addr=0x49, config_pin=None)returns ElectrochemicalGasSensorStvara objekt senzora. Preko I2C-a se ništa ne šalje do poziva begin().
ReturnsObjekt senzora.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
SensorConfig | sensor_type | Postavka ćelije. Primjer prosljeđuje SENSOR_O3; SGX-4CL2 ćelija ove pločice ima postavku SENSOR_CL2. |
I2C | i2c | Gotov machine.I2C objekt; primjer ga prosljeđuje. Ako se izostavi, modul stvara I2C(0, scl=Pin(22), sda=Pin(21)) na portu esp32 i na jednoj drugoj pločici koju prepoznaje po nazivu (i tamo su pinovi 22 i 21); na esp8266 I2C(scl=Pin(5), sda=Pin(4)); na bilo kojoj drugoj pločici javlja Board not recognized, please pass an I2C object manually. |
int | adc_addr | I2C adresa, 0x49 ako se izostavi; primjer prosljeđuje 0x49. Za adresu od 0x30 do 0x37, raspon ADDRESS sklopke ove pločice, begin() komunicira s ATtiny404 čipom na pločici; za bilo koju drugu adresu traži ADS1115 na toj adresi i LMP91000 na 0x48 na sabirnici koju proslijedite. |
int | config_pin | GPIO za MENB ulaz LMP91000: modul ga postavlja na nisku razinu dok izravno konfigurira LMP91000, a inače na visoku; primjer prosljeđuje 32. None ako se izostavi. Ne koristi se za adrese od 0x30 do 0x37. |
sensor.begin()returns boolProvjerava odgovara li pločica, postavlja ADC pojačanje i brzinu podataka prema postavci te konfigurira LMP91000 postavkama te postavke. Pozovite ga jednom prije čitanja.
ReturnsTrue ako je pločica odgovorila i oba koraka konfiguracije uspjela, inače False.
sensor.setCustomZeroCalibration(calibration)returns NonePostavlja napon koji getPPM() i getPPB() dodaju svakom očitanju nakon oduzimanja internog nultog napona. Zamjenjuje nultu kalibraciju postavke, koja u SENSOR_CL2 iznosi 0.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
float | calibration | Offset u voltima. Primjer koristi CUSTOM_CALIBRATION (0). |
sensor.getPPB()returns floatUzima jedno očitanje i pretvara ga u ppb: getPPM() puta 1000. getPPM() oduzima interni nulti napon, dodaje nultu kalibraciju, dijeli s pojačanjem pojačala i osjetljivošću postavke te vraća 0.0 za rezultat ispod nule.
ReturnsKoncentracija plina u ppb.
Ovaj primjer koristi i
I2C i
Pin iz
MicroPythonova modula machine te
time.sleep_ms(),
koji nisu dio ove biblioteke, nego dolaze sParam MicroPythonom.
Sve zajedno
Pokrenite skriptu na čistom zraku i mijenjajte CUSTOM_CALIBRATION dok očitanje
nije tek nešto iznad 0 ppb. Očitanja ispod nule prijavljuju se kao 0, pa očitanje
od točno 0 ne govori koliko ispod nule ga offset ostavlja. Pronađenu
vrijednost upotrijebite s setCustomZeroCalibration() u vlastitoj skripti, nakon
begin().