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 naSENSOR_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đ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-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)
Očekivani rezultat:
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 ElectrochemicalGasSensorStvara 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
| Naziv | Tip | Opis |
|---|---|---|
sensor_type | SensorConfig | Predlož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. |
i2c | machine.I2C | I2C sabirnica za komunikaciju. Oba objekta dijele istu sabirnicu. |
adc_addr | int | Adresa s kojom begin() komunicira. Ovaj primjer prosljeđuje 0x4A za senzor 1 i 0x49 za senzor 2. |
config_pin | int | GPIO 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 boolKod 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 floatOč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().