Dva senzora na jednoj sabirnici
Što ovaj primjer prikazuje
Primjer twoSensors iz biblioteke čita dvije pločice na istoj I2C sabirnici. Stvara po jedan objekt senzora za svaku pločicu, pokreće oba i svake 2,5 sekunde ispisuje jedno očitanje u ppm, a drugo u ppb.
Primjer stvara sensorCO sa SENSOR_CO na adresi 0x4A s GPIO 25 kao konfiguracijskim pinom te sensorNO2 sa SENSOR_NO2 na adresi 0x49 s GPIO 32. SENSOR_NH3 je predložak iz biblioteke za amonijačnu ćeliju ove pločice, a pretvorba u ppm koristi osjetljivost iz tog predloška. Zato očitanja iz primjera u izvornom obliku nisu vrijednosti amonijaka. Za očitanje amonijaka zamijenite SENSOR_CO i SENSOR_NO2 s SENSOR_NH3 u dva retka koja stvaraju senzore.
Biblioteka komunicira s ATtiny404 premosnikom na pločici kada je adresa od 0x30 do 0x37; s bilo kojom drugom adresom, kao što su 0x4A i 0x49 iz primjera, komunicira izravno s ADS1115 na toj adresi. Na ovoj pločici ADS1115 je spojen na pinove SDA2/SCL2 headera, do kojih Qwiic konektori ne dopiru, pa se ovaj primjer ne može pokrenuti preko Qwiic kabela. Umjesto toga spojite kontroler na header svake pločice: 3,3 V na 3V3, GND na GND, SDA na SDA2 i SCL na SCL2. JP2 do JP4 određuju adresu ADS1115 na svakoj pločici, kako opisuje Pojedinosti o hardveru. Primjer tada radi onako kako je napisan, bez promjene adresa.
Komentari u primjeru kažu da adrese treba postaviti jumperima na stražnjoj strani pločice i da LMPEN svake pločice treba spojiti na GPIO pin. Na ovoj pločici adresa se postavlja prekidačem ADDRESS, a LMPEN ostaje nespojen: otpornik od 10 kΩ već povlači LMPEN na GND, a na njega je spojen i ATtiny404.
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);
}
Serijski monitor prikazuje:
CO sensor initialized successfully!
NO2 sensor initialized successfully!
Nakon toga svake 2,5 sekunde slijede dva retka: CO sensor reading: u ppm i NO2 sensor reading: u ppb, oba na pet decimala.
Ako poziv begin() vrati false, primjer umjesto toga 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 noneStvara jedan objekt senzora. Stvorite po jedan za svaku pločicu, svaki s vlastitom adresom. begin() prema adresi odabire način komunikacije s pločicom: od 0x30 do 0x37 koristi ATtiny404 premosnik; svaka druga adresa koristi se kao vlastita I2C adresa ADS1115.
ReturnsKonstruktor.
Parametri
| Parametar | Tip | Opis |
|---|---|---|
_t | sensorType | Predložak ćelije, ovdje SENSOR_CO i SENSOR_NO2. SENSOR_NH3 je predložak za ćeliju ove pločice. |
_adcAddr | uint8_t | Adresa premosnika od 0x30 do 0x37 ili inače adresa ADS1115; ovdje adrese ADS1115 0x4A i 0x49. Vlastita adresa ove pločice je adresa njezina premosnika, postavljena prekidačem ADDRESS od 0x30 do 0x37. |
_configPin | int | GPIO koji biblioteka postavlja u nisko stanje dok konfigurira LMP91000 te pločice kada je adresa izvan raspona od 0x30 do 0x37, ovdje 25 i 32. Ne koristi se od 0x30 do 0x37. |
bool begin()returns boolPokreće I2C. S adresom od 0x30 do 0x37 provjerava odgovara li premosnik i šalje mu postavke ADC-a iz predloška; s bilo kojom drugom adresom izravno pokreće ADS1115 na toj adresi. Zatim konfigurira analogni ulazni stupanj LMP91000. Pozovite ga jednom za svaki senzor prije bilo kojeg očitanja.
Returnstrue kada su svi koraci uspjeli. false kada premosnik nije odgovorio s OK unutar 500 ms ili je javio pogrešku, kada pokretanje ADS1115 nije uspjelo ili kada konfiguriranje analognog ulaznog stupnja nije uspjelo.
double getPPM()returns doubleUzima jedno očitanje s tog senzora i pretvara ga u ppm pomoću predloška senzora. Rezultat manji od nule vraća se kao 0.
ReturnsKoncentracija plina u ppm.
double getPPB()returns doubleIsto očitanje kao getPPM(), u dijelovima na milijardu (ppb).
ReturnsgetPPM() pomnožen s 1000.
Sve zajedno
Svakoj pločici dodijelite njezinu adresu, stvorite po jedan objekt senzora za svaku pločicu i na svakom pozovite begin(). Ako bilo koji begin() vrati false, primjer ispisuje pogrešku i zaustavlja se.