Skip to main content

Dva senzora

Što ovaj primjer prikazuje​

Primjer twoSensors iz biblioteke stvara dva objekta senzora, svaki sa svojom predpostavkom, adresom i pinom, pokreće oba i svakih 2,5 s ispisuje očitanje prvog u ppm, a drugog u ppb.

Senzori u primjeru koriste SENSOR_CO (na 0x4A, pin 25) i SENSOR_NO2 (na 0x49, pin 32). Biblioteka izračunava svako očitanje iz osjetljivosti i postavki pojačanja svoje predpostavke; predpostavka za klorovu ćeliju ove pločice je SENSOR_CL2.

Kôd primjera​

Select Board
twoSensors.ino
/**
**************************************************
*
* @file twoSensors.ino
* @brief See how to init two sensors and make two readings of PPM of gas.
*
* To successfully run the sketch:
* - Set different addresses using the jumpers on the back of the breakout
* - Connect LMPEN pins to a GPIO pin so the breakouts can be configured
* - Run the sketch and open serial monitor at 115200 baud!
*
*
* @authors Robert @ soldered.com
***************************************************/

// 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);
}

Komentar u zaglavlju traži različite adrese postavljene jumperima na poleđini i spajanje LMPEN pinova na GPIO pinove. Na ovoj pločici svi su jumperi na gornjoj strani i nijedan od njih ne postavlja adresu pločice, a otpornik od 10 kΩ drži LMPEN na niskoj razini dok je spojen na ATtiny404, pa ga ostavite nespojenim (pogledajte Detalji o hardveru).

Očekivani rezultat:

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

Zatim svakih 2,5 s dva retka: CO sensor reading: s vrijednošću prvog senzora u ppm na pet decimala i PPM, te NO2 sensor reading: s vrijednošću drugog senzora u ppb na pet decimala i PPB. Ako bilo koji begin() ne uspije, 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 ElectrochemicalGasSensor

Stvara objekt senzora. Sprema samo postavke; ništa se ne šalje pločici do poziva begin(). Primjer stvara dva.

ReturnsObjekt senzora.

Parametri

TipNazivOpis
sensorType_tPostavke ćelije. Primjer prosljeđuje SENSOR_CO i SENSOR_NO2; SGX-4CL2 ćelija ove pločice ima postavke SENSOR_CL2.
uint8_t_adcAddrI2C adresa, DEFAULT_ADC_ADDR (0x49) ako se izostavi; primjer prosljeđuje 0x4A i 0x49. Za adresu od 0x30 do 0x37, raspon ADDRESS preklopke ove pločice, begin() komunicira s ATtiny404 čipom na pločici; za svaku drugu adresu traži ADS1115 na toj adresi i LMP91000 izravno na sabirnici.
int_configPinGPIO koji begin() postavlja na nisku razinu dok izravno konfigurira LMP91000; primjer prosljeđuje 25 i 32. -1 (nijedan) ako se izostavi. Ne koristi se za adrese od 0x30 do 0x37.
bool begin()returns bool

Pokreće Wire, provjerava odgovara li pločica, postavlja ADC pojačanje i brzinu podataka iz postavki ćelije te konfigurira LMP91000 postavkama te ćelije. Primjer je poziva jednom za svaki objekt senzora u setup().

Returnstrue ako je pločica odgovorila i oba koraka konfiguracije uspjela, inače false.

double getPPM()returns double

Uzima jedno očitanje i pretvara ga u ppm: oduzima unutarnji nulti napon (referentnih 2,5 V pomnoženo s unutarnjim postotkom nule iz postavki ćelije), dodaje kalibraciju nule, dijeli s pojačanjem pojačala i s osjetljivošću ćelije u nA po ppm. Rezultat ispod nule vraća se kao 0.

ReturnsKoncentracija plina u ppm.

double getPPB()returns double

Isto očitanje kao getPPM(), pomnoženo s 1000. Primjer njime čita drugi senzor.

ReturnsKoncentracija plina u ppb.

Primjer također koristi Serial i delay(), koji dolaze s Arduino jezgrom, a ne s ovom bibliotekom.

Sastavljanje cjeline​

Svaki objekt senzora čuva vlastite postavke, adresu i pin, pa ih petlja čita jedan za drugim istim funkcijama. Svaki objekt treba vlastitu adresu.