Skip to main content

Očitanje dva senzora

Što prikazuje ovaj primjer​

Primjer electrochemical-twoSensors.py stvara dva objekta senzora na jednoj I2C sabirnici, svaki sa svojom ADC adresom i konfiguracijskim pinom, te ispisuje oba očitanja u PPB svakih 2,5 sekunde. Senzor 1 stvara s adc_addr=0x4A i config_pin=25, a senzor 2 s adc_addr=0x49 i config_pin=32.

Prije pokretanja:

  • Primjer je napisan sa SENSOR_O3, predloškom modula za ozon, pa njegove vrijednosti nisu vrijednosti za H2S. Nemojte ga bez izmjene prebaciti na SENSOR_H2S: taj predložak je 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 s tim predloškom očitanja ispadaju oko 2,6 puta preniska. Umjesto toga objema senzorima 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-twoSensors.py

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

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

# Sensor 1: ADC address 0x4A, LMPEN on pin 25
sensor1 = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x4A, config_pin=25)

# Sensor 2: ADC address 0x49, LMPEN on pin 32
sensor2 = ElectrochemicalGasSensor(SENSOR_O3, i2c, adc_addr=0x49, config_pin=32)

# -------------------------------------------------------------------------
# Setup
# -------------------------------------------------------------------------
print("Electrochemical Gas Sensor - Two Sensors Example")

if not sensor1.begin():
print("ERROR: Can't init sensor 1! Check connections!")
while True:
time.sleep_ms(100)

print("Sensor 1 initialized successfully!")

if not sensor2.begin():
print("ERROR: Can't init sensor 2! Check connections!")
while True:
time.sleep_ms(100)

print("Sensor 2 initialized successfully!")

# -------------------------------------------------------------------------
# Main loop
# -------------------------------------------------------------------------
while True:
reading1 = sensor1.getPPB()
reading2 = sensor2.getPPB()

print("Sensor 1 reading: {:.5f} PPB".format(reading1))
print("Sensor 2 reading: {:.5f} PPB".format(reading2))

time.sleep_ms(2500)

Otvorite cijeli primjer

Očekivani rezultat:

ShellMicroPython
Electrochemical Gas Sensor - Two Sensors Example
Sensor 1 initialized successfully!
Sensor 2 initialized successfully!

Zatim se svakih 2,5 sekunde ispisuju redak Sensor 1 reading: i redak Sensor 2 reading:, svaki s koncentracijom u PPB na pet decimala. Ako senzor ne odgovori, skripta ispisuje ERROR: Can't init sensor 1! Check connections! (ili sensor 2) i čeka.

Korištene funkcije​

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

Stvara po jedan objekt senzora za svaku plinsku ćeliju, svaki sa svojom adresom i konfiguracijskim pinom. Adresa određuje kako begin() komunicira s pločicom: adresa od 0x30 do 0x37 ide preko ATtiny404 na pločici; svaka druga adresa, primjerice zadana 0x49, ide na ADS1115 na toj adresi i izravno na LMP91000. Ako je config_pin zadan, postavlja se kao izlaz i postavlja u visoko stanje.

ReturnsObjekt senzora.

Parametri

NazivTipOpis
sensor_typeSensorConfigPredlož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 na ovoj pločici proslijedite prilagođeni s 460 nA po ppm.
i2cmachine.I2CI2C sabirnica za komunikaciju. Oba objekta dijele istu sabirnicu.
adc_addrintAdresa s kojom begin() komunicira. Ovaj primjer prosljeđuje 0x4A za senzor 1 i 0x49 za senzor 2.
config_pinintGPIO koji modul drži u visokom stanju i povlači u nisko dok izravno konfigurira LMP91000 tog senzora. Ne koristi se na adresama od 0x30 do 0x37. Ovaj primjer prosljeđuje 25 za senzor 1 i 32 za senzor 2.
begin()returns bool

Kod adrese od 0x30 do 0x37 provjerava odgovara li ATtiny404 na pločici na toj adresi, šalje mu ADC pojačanje prema tipu senzora i najsporiju brzinu podataka, a zatim mu nalaže da konfigurira LMP91000 front end; svaka se naredba ponavlja do 500 ms. Kod svake druge adrese provjerava odgovara li ADS1115 na toj adresi, postavlja mu pojačanje i najsporiju brzinu podataka, a zatim izravno konfigurira LMP91000, pri čemu tijekom upisa povlači config_pin u nisko stanje. Pozovite je jednom za svaki objekt senzora.

ReturnsTrue ako su svi koraci uspjeli, inače False.

getPPB()returns float

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

ReturnsKoncentracija plina u PPB.

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

Sve zajedno​

Otvorite jednu I2C sabirnicu, stvorite po jedan objekt ElectrochemicalGasSensor za svaku plinsku ćeliju, svaki sa svojom adresom i konfiguracijskim pinom, pozovite begin() na svakom, a zatim svaki očitajte s getPPB().