Skip to main content

Prilagođena konfiguracija

Što ovaj primjer prikazuje​

Primjer customConfig iz biblioteke gradi vlastiti sensorType preset: osjetljivost ćelije, nulti pomak, raspon ADC-a i sve postavke LMP91000. Funkcija begin() zatim šalje tu konfiguraciju na pločicu umjesto ugrađenog preseta.

Vrijednosti u primjeru nisu vrijednosti ove pločice. Za podešavanje ćelije ove pločice krenite od preseta SENSOR_CL2 iz biblioteke i mijenjajte jednu po jednu vrijednost:

PoljeVrijednost SENSOR_CL2
nanoAmperesPerPPM600.0F
internalZeroCalibration0
adsGainADS_GAIN_4_096V
TIA_GAIN_IN_KOHMSTIA_GAIN_120_KOHM
RLOADRLOAD_33_OHM
REF_SOURCEREF_EXTERNAL
INTERNAL_ZEROINTERNAL_ZERO_20_PERCENT
BIAS_SIGNBIAS_SIGN_POSITIVE
BIASBIAS_0_PERCENT
FET_SHORTFET_SHORT_DISABLED
OP_MODEOP_MODE_3LEAD_AMP_CELL

Ostavite REF_SOURCE na REF_EXTERNAL: pločica ima referencu od 2,5 V za ulazni stupanj, a biblioteka računa ppm s 2,5 V.

Kôd primjera​

Select Board
customConfig.ino
/**
**************************************************
*
* @file customConfig.ino
* @brief Create a custom config for the LMP91000 and upload it to the device.
* This enables you to use this breakout with any electrochemical sensor.
*
* To successfully run the sketch:
* - Edit the custom configuration
* - Connect LMPEN to any GPIO pin
* - Run the sketch and open serial monitor at 115200 baud!
*
*
* @authors Robert @ soldered.com
***************************************************/

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

Komentar u zaglavlju traži da se LMPEN spoji na GPIO. Na ovoj pločici otpornik od 10 kΩ drži LMPEN u niskom stanju, a on je spojen na ATtiny404, pa ga ostavite nespojenim (pogledajte tablicu pinova na stranici Detalji o hardveru).

Očekivani rezultat:

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

Zatim se svakih 2,5 s ispisuje Sensor reading: u zasebnom retku, a iza njega redak s vrijednošću u ppm s pet decimala i PPM. Ako 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 na pločicu dok se ne pozove begin().

ReturnsObjekt senzora.

Parametri

TipNazivOpis
sensorType_tPreset, ovdje vlastiti SENSOR_CUSTOM iz primjera. Njegova su polja navedena redoslijedom kojim ih deklarira struktura sensorType.
uint8_t_adcAddrI2C adresa, DEFAULT_ADC_ADDR (0x49) ako se izostavi, kao u primjeru. Za adresu od 0x30 do 0x37, što je raspon preklopnika ADDRESS na ovoj pločici, begin() komunicira s ATtiny404 na pločici; za bilo koju drugu adresu traži ADS1115 na toj adresi i LMP91000 izravno na sabirnici.
int_configPinGPIO koji begin() postavlja u nisko stanje dok izravno konfigurira LMP91000. -1 (nema) 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 pojačanje i brzinu podataka ADC-a iz preseta te upisuje u LMP91000 pojačanje pojačala i opterećenje, referencu, interni nulti napon, bias i radni način iz preseta. Pozovite ga jednom u setup() prije čitanja.

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

double getPPM()returns double

Očitava jednu vrijednost i pretvara je u ppm vrijednostima iz preseta: oduzima interni nulti napon (2,5 V puta postotak internog nulte točke), dodaje internalZeroCalibration, dijeli s pojačanjem pojačala i s nanoAmperesPerPPM. Rezultat manji od nule vraća se kao 0.

ReturnsKoncentracija plina u ppm.

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

Sve zajedno​

begin() upisuje polja LMP91000 i ADC-a na pločicu, a getPPM() u izračunu koristi nanoAmperesPerPPM, internalZeroCalibration, pojačanje pojačala i interni nulti napon. Nakon svake promjene ponovno učitajte skicu. Nazivi konstanti za svako polje (TIA_GAIN_..., RLOAD_..., BIAS_..., OP_MODE_...) definirani su u datoteci biblioteke src/sensorConfigData.h.