Skip to main content

Očitanje dvaju senzora

Što ovaj primjer prikazuje​

Primjer twoSensors stvara dva objekta senzora, svaki sa svojom adresom i konfiguracijskim pinom, te svake 2,5 sekunde ispisuje očitanje svakog od njih: prvo u PPM, drugo u PPB. Stvara sensorCO sa SENSOR_CO na adresi 0x4A s pinom 25 i sensorNO2 sa SENSOR_NO2 na adresi 0x49 s pinom 32.

Predlošci u primjeru namijenjeni su ugljikovu monoksidu i dušikovu dioksidu, pa njegove vrijednosti nisu vrijednosti za H2S. Nemojte upotrebljavati predložak SENSOR_H2S iz biblioteke bez izmjena: taj je predložak napisan za ćeliju SGX-4H2S-100 osjetljivosti 1200 nA po ppm, dok ova pločica ima ćeliju SGX-4H2S-300, čiji tehnički list navodi izlazni signal od 460 ± 140 nA po ppm. sa SENSOR_H2S je očitanje otprilike 2,6 puta preniško. Umjesto toga proslijedite prilagođenu vrstu senzora s postavkama SENSOR_H2S i 460 nA po ppm, kao što prikazuje Brzi početak.

Kôd primjera​

Select Board
twoSensors.ino
// Include the required library
#include "Electrochemical-Gas-Sensor-SOLDERED.h"

// Create two different sensor objects
ElectrochemicalGasSensor sensorCO(SENSOR_CO, 0x4A, 25);
ElectrochemicalGasSensor sensorNO2(SENSOR_NO2, 0x49, 32);
// To see how the custom addresses are determined, check customAddress.ino

void setup()
{
Serial.begin(115200); // For debugging

// Init breakout #1
if (!sensorCO.begin())
{
// Can't init? Notify the user and go to infinite loop
Serial.println("ERROR: Can't init the sensor! Check connections!");
while (true)
delay(100);
}

Serial.println("CO sensor initialized successfully!");

// Init breakout #2
if (!sensorNO2.begin())
{
// Can't init? Notify the user and go to infinite loop
Serial.println("ERROR: Can't init the sensor! Check connections!");
while (true)
delay(100);
}

Serial.println("NO2 sensor initialized successfully!");
}

void loop()
{
// Make the reading of CO and print it
double COreading = sensorCO.getPPM();

// Print the reading with 5 digits of precision
Serial.print("CO sensor reading: ");
Serial.print(COreading, 5);
Serial.println(" PPM");

// Make the reading of NO2 and print it
double NO2reading = sensorNO2.getPPB();

// Print the reading with 5 digits of precision
Serial.print("NO2 sensor reading: ");
Serial.print(NO2reading, 5);
Serial.println(" PPB");

// Wait a bit before reading again
delay(2500);
}

Očekivani rezultat:

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
CO sensor initialized successfully!
NO2 sensor initialized successfully!

Zatim svake 2,5 sekunde slijede redak CO sensor reading: u PPM i redak NO2 sensor reading: u PPB, oba na pet decimala. Ako senzor ne odgovori, skica ispisuje ERROR: Can't init the sensor! Check connections! i zaustavlja se.

Korištene funkcije​

ElectrochemicalGasSensor(sensorType _t, uint8_t _adcAddr = DEFAULT_ADC_ADDR, int _configPin = -1)returns none

Stvara jedan objekt senzora po plinskoj ćeliji, svaki sa svojom adresom i konfiguracijskim pinom. Vrsta senzora sadrži postavke ulaznog sklopa 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, primjerice zadana 0x49, ide na ADS1115 na toj adresi te izravno na LMP91000.

ReturnsKonstruktor.

Parametri

NameTypeDescription
_tsensorTypePredložak iz biblioteke (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) ili prilagođeni sensorType. Za ćeliju ove pločice proslijedite prilagođeni s 460 nA po ppm.
_adcAddruint8_tAdresa s kojom begin() komunicira. Ovaj primjer proslijeđuje 0x4A za sensorCO i 0x49 za sensorNO2.
_configPinintGPIO koji biblioteka drži u visokom stanju i spušta u nisko dok izravno konfigurira LMP91000 tog senzora. Ignorira se na adresama od 0x30 do 0x37. Ovaj primjer proslijeđuje 25 i 32.
bool begin()returns bool

Pokreće I2C i prema adresi bira način komunikacije s pločicom. S adresom od 0x30 do 0x37 provjerava odgovara li ATtiny404 na pločici te mu šalje pojačanje ADC-a iz vrste senzora s najsporijom brzinom podataka; svaka naredba čeka odgovor do 500 ms. S bilo kojom drugom adresom pokreće ADS1115 na toj adresi s istim pojačanjem i brzinom podataka, postavlja konfiguracijski pin kao izlaz u visokom stanju te ga spušta u nisko dok konfigurira LMP91000. Pozovite ga jednom za svaki objekt senzora.

Returnstrue ako su svi koraci uspjeli, inače false.

double getPPM()returns double

Očitava ADC, oduzima unutarnju nulu ulaznog sklopa (2,5 V puta njezin postotak), dodaje kalibraciju nule, 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.

ReturnsKoncentracija plina u PPM.

double getPPB()returns double

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

ReturnsKoncentracija plina u PPB.

Sve zajedno​

Stvorite jedan objekt ElectrochemicalGasSensor po plinskoj ćeliji, svaki sa svojom adresom i konfiguracijskim pinom, pozovite begin() na svakom, a zatim očitajte svaki pomoću getPPM() ili getPPB().