Skip to main content

Očitavanje koncentracije plina

Što ovaj primjer prikazuje​

Primjer modula electrochemical-bridgeBoard.py pokreće pločicu preko njezina ATtiny404 mosta i svake 2,5 sekunde ispisuje koncentraciju plina u ppm. Senzor stvara na adresi 0x30, na kojoj ova pločica odgovara dok ne promijenite njezin prekidač ADDRESS.

Primjer koristi predložak modula za ozon, SENSOR_O3. SENSOR_NH3 je predložak modula za ćeliju SGX-4NH3, s 40 nA po ppm, pojačanjem pojačala od 35 kΩ i rasponom ADC-a od 4,096 V. Pretvorba u ppm koristi osjetljivost iz predloška: -1000 nA/ppm za SENSOR_O3, 40 nA/ppm za SENSOR_NH3. Zato očitanja iz primjera, u izvornom obliku, nisu ppm amonijaka. Za očitanje amonijaka promijenite SENSOR_O3 u SENSOR_NH3 u retku s importom i u retku koji stvara senzor. Primjer otvara I2C sabirnicu 0 na pinu 22 (SCL) i pinu 21 (SDA); promijenite pinove ako vaša pločica koristi druge.

Komentari u primjeru kažu da se adresa postavlja jumperima na stražnjoj strani pločice. Na ovoj se pločici adresa postavlja prekidačem ADDRESS s tri položaja. Adrese 0x49/0x4A/0x4B koje komentari spominju adrese su ADS1115, a ne adrese na kojima ova pločica odgovara. Tamo gdje komentari kažu da je LMPEN čvrsto spojen na GND, na ovoj pločici ga na GND povlači otpornik od 10 kΩ: ostavite ga nespojenim.

Kod primjera​

# FILE: electrochemical-bridgeBoard.py
# AUTHOR: Fran Fodor @ Soldered
# BRIEF: Single sensor PPM reading example for the ATtiny404 bridge board revision,
# which allows daisy-chaining multiple boards on one I2C bus.
# LAST UPDATED: 2026-07-23

# Connecting diagram:
#
# Qwiic------------------------>Qwiic
#
# Note: on this board revision, LMPEN is hardwired to GND, so there's no
# config_pin to set - it's ignored whenever adc_addr falls in the bridge
# range (0x30-0x37). Set the desired address using the jumpers on the back
# of the board before powering it on.

from machine import I2C, Pin
import time
from ElectrochemicalGasSensor import ElectrochemicalGasSensor, SENSOR_O3

# Initialize I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))

# (address = 0x30 + jumper offset, giving a range of 0x30-0x37).
# Any additional boards on the same bus just need a different jumper
# setting, same as twoSensors.py does for legacy boards with 0x49/0x4A/0x4B.
sensor = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x30)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - ATtiny Bridge Board Example")

if not sensor.begin():
print("ERROR: Can't init the sensor! Check connections and jumper address!")
while True:
time.sleep_ms(100)

print("Sensor initialized successfully!")

# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading = sensor.getPPM()

# If PPB is more relevant for your sensor, use:
# reading = sensor.getPPB()

print("Sensor reading: {:.5f} PPM".format(reading))

time.sleep_ms(2500)

🔗Otvorite cijeli primjer

electrochemical-bridgeBoard.py u commitu 623e1e6

→

Očekivani rezultat:

ShellMicroPython
Electrochemical Gas Sensor - ATtiny Bridge Board Example
Sensor initialized successfully!

Nakon toga svake 2,5 sekunde slijedi redak koji počinje s Sensor reading:, s koncentracijom u ppm na pet decimala.

Korištene funkcije​

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

Stvara objekt senzora. adc_addr određuje kako begin() komunicira s pločicom: od 0x30 do 0x37 koristi protokol ATtiny mosta; svaka druga vrijednost koristi se kao vlastita I2C adresa ADC-a.

ReturnsObjekt senzora.

Parametri

ParametarTipOpis
sensor_typeSensorConfigPredložak ćelije. SENSOR_NH3 je predložak za ćeliju ove pločice.
i2cI2CVaš I2C objekt. S None modul sam bira pinove samo na nekoliko pločica koje prepoznaje, na primjer I2C(0, scl=Pin(22), sda=Pin(21)) na ESP32 i I2C(scl=Pin(5), sda=Pin(4)) na ESP8266. Na pločici koju ne prepoznaje izaziva iznimku, pa proslijedite vlastiti I2C objekt.
adc_addrintAdresa na kojoj modul komunicira. Zadano 0x49. Primjer prosljeđuje 0x30, adresu pločice u isporučenom stanju; prekidač ADDRESS postavlja je od 0x30 do 0x37.
config_pinint ili NoneBroj GPIO pina koji modul postavlja u nisku razinu dok konfigurira LMP91000, a poslije u visoku, kada je adc_addr izvan raspona od 0x30 do 0x37. Zadano None. Ne koristi se od 0x30 do 0x37.
begin()returns bool

Uz adresu od 0x30 do 0x37 provjerava odgovara li most i šalje mu postavke ADC-a i analognog ulaznog stupnja iz predloška. Uz bilo koju drugu adresu izravno pokreće ADS1115 na toj adresi i konfigurira LMP91000. Pozovite je jednom prije bilo kojeg očitanja.

ReturnsTrue kada su svi koraci uspjeli. False kada most nije odgovorio s OK unutar 500 ms ili je prijavio pogrešku, kada pokretanje ADS1115 nije uspjelo ili kada konfiguriranje analognog ulaznog stupnja nije uspjelo.

getPPM()returns float

Izvodi jedno očitanje ADC-a, uklanja unutarnju nulu ulaznog stupnja, dodaje kalibraciju nule i pretvara struju ćelije u ppm. Rezultat ispod nule vraća se kao 0.0.

ReturnsKoncentracija plina u ppm.

getPPB()returns float

Isto očitanje kao getPPM(), u dijelovima na milijardu. Primjer ga u komentaru prikazuje kao alternativu.

ReturnsgetPPM() pomnožen s 1000.

Sastavljanje cjeline​

Stvorite senzor s predloškom i adresom prekidača, jednom pozovite begin(), a zatim pozovite getPPM() kad god želite očitanje. Ako begin() vrati False, prvo provjerite kabel i adresu.