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
/**
**************************************************
*
* @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:
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 ElectrochemicalGasSensorStvara objekt senzora. Sprema samo postavke; ništa se ne šalje pločici do poziva begin(). Primjer stvara dva.
ReturnsObjekt senzora.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
sensorType | _t | Postavke ćelije. Primjer prosljeđuje SENSOR_CO i SENSOR_NO2; SGX-4CL2 ćelija ove pločice ima postavke SENSOR_CL2. |
uint8_t | _adcAddr | I2C 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 | _configPin | GPIO 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 boolPokreć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 doubleUzima 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 doubleIsto 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.