Skip to main content

Senzor na prilagođenoj adresi

Što ovaj primjer prikazuje​

Primjer customAddress iz biblioteke stvara senzor na adresi koju proslijedite konstruktoru, pokreće ga i svakih 2,5 sekunde ispisuje koncentraciju plina u ppm.

Primjer prosljeđuje SENSOR_SO2, predložak biblioteke za sumporov dioksid, adresu 0x4B i GPIO 5 kao konfiguracijski pin. SENSOR_NH3 je predložak biblioteke za ćeliju amonijaka na ovoj pločici, a pretvorba u ppm koristi osjetljivost iz predloška. Zato očitanja iz primjera u izvornom obliku nisu ppm amonijaka. Za mjerenje amonijaka u retku koji stvara senzor zamijenite SENSOR_SO2 s SENSOR_NH3.

Biblioteka komunicira s ATtiny404 mostom na pločici kada je adresa od 0x30 do 0x37; s bilo kojom drugom adresom, kao što je 0x4B u ovom primjeru, komunicira izravno s ADS1115 na toj adresi, pri čemu je konfiguracijski pin postavljen u nisku razinu dok konfigurira LMP91000. Na ovoj pločici ADS1115 je spojen na pinove SDA2/SCL2 headera, do kojih Qwiic konektori ne dopiru, pa se ovaj primjer ne izvodi preko Qwiic kabela. Umjesto toga povežite mikrokontroler na header: 3,3 V na 3V3, GND na GND, SDA na SDA2 i SCL na SCL2. Primjer se tada izvodi kako je napisan, bez promjene adrese; ADS1115 odgovara na 0x4B kada je od JP2 do JP4 zatvoren JP4. Prekidač ADDRESS na pločici opisan je u poglavlju Detalji o hardveru.

Kôd primjera​

Select Board
customAddress.ino
/**
**************************************************
*
* @file customAddress.ino
* @brief See how to init a sensor on a custom address
*
* To successfully run the sketch:
* - Set the custom address using the jumpers on the back of the board
* - Connect LMPEN pin to GND or a GPIO pin so the breakout 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 the sensor object with the according type
// To set a custom address, connect one of the following jumpers:
// JP5 for 0x49
// JP6 for 0x4A
// JP7 for 0x4B
// The final parameter is the GPIO pin for LMPEN
ElectrochemicalGasSensor sensor(SENSOR_SO2, 0x4B, 5);

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

// Init the breakout
if (!sensor.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("Sensor initialized successfully!");
}

void loop()
{
// Make the reading
double reading = sensor.getPPM();

// If PPB is more relevant for your sensor, you can use:
// double reading = sensor.getPPB();

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

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

Nazivi jumpera u komentarima primjera ne odgovaraju ovoj pločici. Ovdje JP2 do JP4 postavljaju adresu ADS1115 (JP2 0x49, zatvoren kada pločica dolazi iz tvornice; JP3 0x4A; JP4 0x4B), JP5 i JP6 su jumperi za 10 kΩ I2C pull-up, a JP7 ne postoji. Nemojte prerezati JP5 ni JP6 radi promjene adrese. Adresa same pločice postavlja se prekidačem ADDRESS, a ne jumperima na poleđini. Komentari također spominju spajanje LMPEN na GND ili na GPIO pin: na ovoj pločici otpornik od 10 kΩ već ga povlači na GND, zato ga ostavite nespojenim.

Serijski monitor prikazuje:

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

Nakon toga svakih 2,5 sekunde slijedi redak koji počinje s Sensor reading:, s koncentracijom u ppm na pet decimala.

Ako 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 none

Stvara objekt senzora na adresi koju proslijedite. begin() prema adresi odabire način komunikacije s pločicom: od 0x30 do 0x37 koristi ATtiny404 most; svaka druga adresa koristi se kao vlastita I2C adresa ADS1115.

ReturnsKonstruktor.

Parametri

ParametarTipOpis
_tsensorTypePredložak ćelije, ovdje SENSOR_SO2. SENSOR_NH3 je predložak za ćeliju ove pločice.
_adcAddruint8_tAdresa mosta od 0x30 do 0x37 ili inače adresa ADS1115; ovdje adresa ADS1115 0x4B. Adresa same ove pločice je adresa njezina mosta, postavljena prekidačem ADDRESS od 0x30 do 0x37.
_configPinintGPIO koji biblioteka postavlja u nisku razinu dok konfigurira LMP91000 kada je adresa izvan raspona od 0x30 do 0x37, ovdje 5. Ne koristi se od 0x30 do 0x37.
bool begin()returns bool

Pokreće I2C. S adresom od 0x30 do 0x37 provjerava odgovara li most 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 prije bilo kojeg očitanja.

Returnstrue kada su svi koraci uspjeli. false kada most 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 double

Izvodi jedno očitanje ADC-a, uklanja unutarnju nulu ulaznog stupnja, dodaje kalibracijsku nulu i pretvara struju ćelije u ppm pomoću osjetljivosti iz predloška. Rezultat manji od nule vraća se kao 0.

ReturnsKoncentracija plina u ppm.

double getPPB()returns double

Isto očitanje kao getPPM(), u dijelovima na milijardu (ppb). Primjer ga prikazuje u komentaru kao alternativu.

ReturnsgetPPM() pomnožen s 1000.

Sastavljanje cjeline​

Adresa koju proslijedite konstruktoru ona je s kojom begin() komunicira, pa se mora podudarati s adresom na kojoj pločica odgovara. Zatim jednom pozovite begin() u setup(), a getPPM() kad god želite očitanje.