Zum Hauptinhalt springen

Benutzerdefinierte Konfiguration

Was dieses Beispiel zeigt​

Das Beispiel customConfig der Bibliothek erstellt ein eigenes sensorType-Preset: die Empfindlichkeit der Zelle, den Nullpunkt-Offset, den ADC-Bereich und alle Einstellungen des LMP91000. begin() sendet dann diese Konfiguration an das Board, statt ein integriertes Preset zu verwenden.

Die Werte im Beispiel gehören nicht zu diesem Board. Um die Zelle dieses Boards abzustimmen, gehen Sie vom Preset SENSOR_CL2 der Bibliothek aus und ändern Sie jeweils nur einen Wert:

FeldWert von 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

Lassen Sie REF_SOURCE auf REF_EXTERNAL: Das Board hat eine 2,5-V-Referenz für das Front-End, und die Bibliothek berechnet ppm mit 2,5 V.

Der Beispielcode​

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

Der Kommentar im Kopf verlangt, LMPEN mit einem GPIO zu verbinden. Auf diesem Board hält ein 10-kΩ-Widerstand LMPEN auf Low, und der Pin ist mit dem ATtiny404 verbunden, daher lassen Sie ihn unverbunden (siehe die Pin-Tabelle unter Hardware-Details).

Erwartetes Ergebnis:

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

Danach, alle 2,5 s, Sensor reading: in einer eigenen Zeile, gefolgt von einer Zeile mit dem Wert in ppm mit fünf Nachkommastellen und PPM. Schlägt begin() fehl, gibt der Sketch ERROR: Can't init the sensor! Check connections! aus und hält an.

Verwendete Funktionen​

ElectrochemicalGasSensor(sensorType _t, uint8_t _adcAddr = DEFAULT_ADC_ADDR, int _configPin = -1)returns ElectrochemicalGasSensor

Erstellt das Sensorobjekt. Es speichert nur die Einstellungen; bis begin() aufgerufen wird, wird nichts an das Board gesendet.

ReturnsDas Sensorobjekt.

Parameter

TypNameBeschreibung
sensorType_tDas Preset, hier das eigene SENSOR_CUSTOM des Beispiels. Seine Felder sind in der Reihenfolge aufgeführt, in der die Struktur sensorType sie deklariert.
uint8_t_adcAddrDie I2C-Adresse, DEFAULT_ADC_ADDR (0x49), wenn sie wie im Beispiel weggelassen wird. Bei einer Adresse von 0x30 bis 0x37, dem Bereich des ADDRESS-Schalters dieses Boards, kommuniziert begin() mit dem ATtiny404 des Boards; bei jeder anderen Adresse sucht es an dieser Adresse einen ADS1115 und den LMP91000 direkt am Bus.
int_configPinEin GPIO, den begin() auf Low setzt, während es den LMP91000 direkt konfiguriert. -1 (keiner), wenn er weggelassen wird. Bei den Adressen 0x30 bis 0x37 ohne Funktion.
bool begin()returns bool

Startet Wire, prüft, ob das Board antwortet, stellt die ADC-Verstärkung und die Datenrate des Presets ein und schreibt die Verstärkung und Last des Verstärkers, die Referenz, den internen Nullpunkt, die Bias-Spannung und den Betriebsmodus des Presets in den LMP91000. Rufen Sie es einmal in setup() auf, bevor Sie lesen.

Returnstrue, wenn das Board geantwortet hat und beide Konfigurationsschritte erfolgreich waren, sonst false.

double getPPM()returns double

Führt eine Messung durch und rechnet sie mit den Werten des Presets in ppm um: Sie zieht die interne Nullpunktspannung ab (2,5 V mal der Prozentsatz des internen Nullpunkts), addiert internalZeroCalibration und teilt durch die Verstärkung des Verstärkers und durch nanoAmperesPerPPM. Ein Ergebnis unter null wird als 0 zurückgegeben.

ReturnsDie Gaskonzentration in ppm.

Das Beispiel verwendet außerdem Serial und delay(), die zum Arduino-Core gehören, nicht zu dieser Bibliothek.

Alles zusammenfügen​

begin() schreibt die Felder des LMP91000 und des ADC auf das Board, und getPPM() verwendet nanoAmperesPerPPM, internalZeroCalibration, die Verstärkung des Verstärkers und den internen Nullpunkt in seiner Berechnung. Laden Sie den Sketch nach jeder Änderung erneut hoch. Die Konstantennamen für jedes Feld (TIA_GAIN_..., RLOAD_..., BIAS_..., OP_MODE_...) sind in der Datei src/sensorConfigData.h der Bibliothek definiert.