Upotreba prilagođene konfiguracije senzora
Što prikazuje ovaj primjer
Primjer customConfig gradi vlastiti sensorType, SENSOR_CUSTOM,
umjesto da koristi jednu od unaprijed definiranih postavki biblioteke, s njim stvara senzor na
zadanoj adresi biblioteke, 0x49, i svakih 2,5 sekunde ispisuje koncentraciju plina u PPM.
Ovako biblioteci zadajete ćeliju ove pločice. U zapisanom obliku
SENSOR_CUSTOM sadrži primjer osjetljivosti od 100 nA po ppm, pa njegova očitanja nisu H2S vrijednosti. Za ćeliju SGX-4H2S-300 ove pločice postavite vrijednosti na one iz postavke SENSOR_H2S biblioteke, s izlaznim signalom koji
tehnički list
ćelije SGX-4H2S-300 navodi, 460 nA po ppm (460 ± 140), umjesto 1200 iz postavke. Postavka je napisana za ćeliju SGX-4H2S-100, a s ćelijom ove pločice očitava oko 2,6 puta premalo:
| Polje | Vrijednost za ovu pločicu |
|---|---|
nanoAmperesPerPPM | 460.0F |
internalZeroCalibration | 0 |
adsGain | ADS_GAIN_4_096V |
TIA_GAIN_IN_KOHMS | TIA_GAIN_7_KOHM |
RLOAD | RLOAD_10_OHM |
REF_SOURCE | REF_EXTERNAL |
INTERNAL_ZERO | INTERNAL_ZERO_20_PERCENT |
BIAS_SIGN | BIAS_SIGN_POSITIVE |
BIAS | BIAS_0_PERCENT |
FET_SHORT | FET_SHORT_DISABLED |
OP_MODE | OP_MODE_3LEAD_AMP_CELL |
Kôd primjera
// Include the required library
#include "Electrochemical-Gas-Sensor-SOLDERED.h"
/**
* Here are parameters to configure for the custom sensor:
*
* nanoAmperesPerPPM: From the datasheet of the particular electrochemical
* sensor, used in the calculation of PPM/PPB
*
* internalZeroCalibration: A fixed value which is summed to the voltage
* measured by the ADS. The value here should make the reading be
* just barely 0 PPM when the sensor is in a place with none of the target gas
*
* adsGain: The gain of the ADS
* The voltage here represents the max range which it can measure
* ADS_GAIN_6_144V 6.144 V
* ADS_GAIN_4_096V 4.096 V
* ADS_GAIN_2_048V 2.048 V
* ADS_GAIN_1_024V 1.024 V
* ADS_GAIN_0_512V 0.512 V
* ADS_GAIN_0_256V 0.256 V
*
* TIA_GAIN_IN_KOHMS: The gain of the amplifier
* This increases the sensitivity of the measurement
* TIA_GAIN_EXTERNAL External resistance
* TIA_GAIN_2_75_KOHM 2.75 kOhm
* TIA_GAIN_3_5_KOHM 3.5 kOhm
* TIA_GAIN_7_KOHM 7 kOhm
* TIA_GAIN_14_KOHM 14 kOhm
* TIA_GAIN_35_KOHM 35 kOhm
* TIA_GAIN_120_KOHM 120 kOhm
* TIA_GAIN_350_KOHM 350 kOhm
*
* RLOAD: The load resistor in the LMP91000
* Specified in the electrochemical sensor's datasheet
* RLOAD_10_OHM 10 Ohm
* RLOAD_33_OHM 33 Ohm
* RLOAD_50_OHM 50 Ohm
* RLOAD_100_OHM 100 Ohm
*
* REF_SOURCE: Source of the control voltage reference
* For our breakout, use external, there's a 2.5V external
* reference voltage
* REF_INTERNAL Internal
* REF_EXTERNAL External
*
* INTERNAL_ZERO: Internal zero selection
* If the electrochemical sensor has a positive polarity, you
* would usually want to use 20% for the most headroom in the signal
* INTERNAL_ZERO_20_PERCENT 20%
* INTERNAL_ZERO_50_PERCENT 50%
* INTERNAL_ZERO_67_PERCENT 67%
* INTERNAL_ZERO_BYPASSED Internal zero bypassed
*
* BIAS_SIGN: The polarity of the bias voltage
* BIAS_SIGN_NEGATIVE Negative
* BIAS_SIGN_POSITIVE Positive
*
* BIAS: Added bias, percentage of the reference voltage
* Most sensors don't require this, check each sensor's datasheet
* BIAS_0_PERCENT 0%
* BIAS_1_PERCENT 1%
* BIAS_2_PERCENT 2%
* BIAS_4_PERCENT 4%
* BIAS_6_PERCENT 6%
* ...
* BIAS_22_PERCENT 22%
* BIAS_24_PERCENT 24%
*
* FET_SHORT: Short the FET
* Used to perserve the electrochemical sensor
* Has to be disabled for the sensor to be operable
* FET_SHORT_DISABLED Disabled
* FET_SHORT_ENABLED Enabled
*
* OP_MODE: Mode of operation
* OP_MODE_DEEP_SLEEP Deep Sleep (default)
* OP_MODE_2LEAD_GROUND_CELL 2-lead ground referred galvanic cell
* OP_MODE_STANDBY Standby
* OP_MODE_3LEAD_AMP_CELL 3-lead amperometric cell
* OP_MODE_TEMPERATURE_TIA_OFF Temperature measurement (TIA Off)
* OP_MODE_TEMPERATURE_TIA_ON Temperature measurement (TIA On)
*
* For more details, check thge LMP91000 datasheet, chapter 7.6
*/
// Here is an example of a custom configuration:
const sensorType SENSOR_CUSTOM = {
100.0F, // nanoAmperesPerPPM
0, // internalZeroCalibration
ADS_GAIN_4_096V, // adsGain
TIA_GAIN_120_KOHM, // TIA_GAIN_IN_KOHMS
RLOAD_10_OHM, // RLOAD
REF_EXTERNAL, // REF_SOURCE
INTERNAL_ZERO_20_PERCENT, // INTERNAL_ZERO
BIAS_SIGN_NEGATIVE, // BIAS_SIGN
BIAS_0_PERCENT, // BIAS
FET_SHORT_DISABLED, // FET_SHORT
OP_MODE_3LEAD_AMP_CELL, // OP_MODE
};
// Create the sensor object with the custom type
ElectrochemicalGasSensor sensor(SENSOR_CUSTOM);
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();
// Print the reading with 5 digits of precision
Serial.println("Sensor reading: ");
Serial.print(reading, 5);
Serial.println(" PPM");
// Wait a bit before reading again
delay(2500);
}
Očekivani rezultat:
Sensor initialized successfully!
Zatim skica svakih 2,5 sekunde u jednom retku ispisuje Sensor reading:, a u sljedećem koncentraciju u PPM na pet decimala, nakon čega slijedi PPM. Ako senzor ne odgovori, skica ispisuje
ERROR: Can't init the sensor! Check connections! i zaustavlja se.
Korištene funkcije
sensorType je struktura koja sadrži postavke jedne ćelije, ovim redoslijedom:
| Polje | Tip | Značenje |
|---|---|---|
nanoAmperesPerPPM | double | Osjetljivost ćelije u nA po ppm. getPPM() dijeli s njom. |
internalZeroCalibration | double | Napon koji se prije pretvorbe dodaje očitanju kako bi se ono postavilo na nulu bez ciljanog plina. |
adsGain | uint8_t | Puni mjerni opseg ADC-a, od ADS_GAIN_6_144V do ADS_GAIN_0_256V. |
TIA_GAIN_IN_KOHMS | uint8_t | Pojačanje ulaznog pojačala, od TIA_GAIN_2_75_KOHM do TIA_GAIN_350_KOHM ili TIA_GAIN_EXTERNAL. |
RLOAD | uint8_t | Otpornik opterećenja, od RLOAD_10_OHM do RLOAD_100_OHM. |
REF_SOURCE | uint8_t | Izvor reference, REF_INTERNAL ili REF_EXTERNAL. |
INTERNAL_ZERO | uint8_t | Unutarnja nula, INTERNAL_ZERO_20_PERCENT, INTERNAL_ZERO_50_PERCENT, INTERNAL_ZERO_67_PERCENT ili INTERNAL_ZERO_BYPASSED. |
BIAS_SIGN | uint8_t | Polaritet prednapona, BIAS_SIGN_NEGATIVE ili BIAS_SIGN_POSITIVE. |
BIAS | uint8_t | Prednapon kao postotak reference, od BIAS_0_PERCENT do BIAS_24_PERCENT. |
FET_SHORT | uint8_t | FET_SHORT_DISABLED ili FET_SHORT_ENABLED. |
OP_MODE | uint8_t | Radni način; postavke koriste OP_MODE_3LEAD_AMP_CELL. |
ElectrochemicalGasSensor(sensorType _t, uint8_t _adcAddr = DEFAULT_ADC_ADDR, int _configPin = -1)returns noneStvara objekt senzora. Adresa određuje kako begin() komunicira s pločicom: adresa od 0x30 do 0x37 ide preko ATtiny404 na pločici; svaka druga adresa, kao zadana 0x49, ide na ADS1115 na toj adresi i izravno na LMP91000.
ReturnsKonstruktor.
Parametri
| Naziv | Tip | Opis |
|---|---|---|
_t | sensorType | Konfiguracija koju treba koristiti. Ovaj primjer prosljeđuje SENSOR_CUSTOM. |
_adcAddr | uint8_t | Adresa s kojom begin() komunicira. Ovaj primjer je izostavlja, pa se koristi zadana adresa, 0x49 (DEFAULT_ADC_ADDR). |
_configPin | int | GPIO koji biblioteka drži u visokom stanju i povlači u nisko dok izravno konfigurira LMP91000. Zanemaruje se za adrese od 0x30 do 0x37. Ovaj primjer ga izostavlja (-1, nema). |
bool begin()returns boolPokreće I2C i prema adresi odabire način komunikacije s pločicom. Za adresu od 0x30 do 0x37 provjerava odgovara li ATtiny404 na pločici i šalje mu ADC pojačanje iz konfiguracije s najsporijom brzinom podataka; svaka naredba čeka odgovor do 500 ms. Za svaku drugu adresu pokreće ADS1115 na toj adresi s istim pojačanjem i brzinom podataka. U oba slučaja zatim upisuje konfiguraciju u ulazni stupanj LMP91000. Pozovite ga jednom prije očitavanja.
Returnstrue kada je svaki korak uspio, inače false.
double getPPM()returns doubleČita ADC, oduzima unutarnju nulu ulaznog stupnja (2,5 V puta njezin postotak), dodaje kalibraciju nule, zatim dijeli s pojačanjem pojačala i s osjetljivošću iz konfiguracije u nA po ppm. Rezultat manji od 0 vraća se kao 0.
ReturnsKoncentracija plina u PPM.
Sastavljanje cjeline
Popunite const sensorType vrijednostima svoje ćelije, proslijedite ga klasi
ElectrochemicalGasSensor, jednom pozovite begin(), a zatim očitavajte s getPPM(). Za
ovu pločicu vrijednosti daje prva tablica.