Zum Hauptinhalt springen

Benutzerdefinierte Adresse

Was dieses Beispiel zeigt​

Das Beispiel customAddress der Bibliothek erstellt den Sensor mit einer anderen I2C-Adresse als der Standardadresse. Dabei werden die Adresse und ein Pin als zweites und drittes Argument des Konstruktors übergeben, und die Konzentration wird alle 2,5 s in ppm ausgegeben. Es übergibt die Adresse 0x4B und den Pin 5.

Das Beispiel erstellt den Sensor mit SENSOR_SO2, dem Preset für Schwefeldioxid. Die Bibliothek berechnet ppm aus den Empfindlichkeits- und Verstärkungseinstellungen des Presets; das Preset für die Chlorzelle dieses Boards ist SENSOR_CL2.

Die eigene Adresse dieses Boards wird mit dem ADDRESS-Schalter eingestellt, von 0x30 bis 0x37 (0x30 im Auslieferungszustand); siehe Hardware-Details.

Der Beispielcode​

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

Die Kommentare im Beispiel stellen die Adresse mit Jumpern auf der Rückseite des Boards ein, nennen Jumper für 0x49 bis 0x4B und verlangen, LMPEN zu verbinden. Auf diesem Board befinden sich alle Jumper auf der Oberseite, JP5 und JP6 sind Pull-up-Jumper, und die eigene Adresse des Boards wird mit dem ADDRESS-Schalter eingestellt. Ein 10-kΩ-Widerstand hält LMPEN auf Low, und der Pin ist mit dem ATtiny404 verdrahtet, daher lassen Sie ihn unverbunden (siehe Hardware-Details).

Erwartetes Ergebnis:

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

Danach folgt alle 2,5 s eine Zeile: Sensor reading: , die Konzentration 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; an das Board wird nichts gesendet, bis begin() aufgerufen wird.

ReturnsDas Sensorobjekt.

Parameter

TypNameBeschreibung
sensorType_tDas Zellen-Preset. Das Beispiel übergibt SENSOR_SO2; die SGX-4CL2-Zelle dieses Boards hat das Preset SENSOR_CL2.
uint8_t_adcAddrDie I2C-Adresse, DEFAULT_ADC_ADDR (0x49), wenn sie weggelassen wird; das Beispiel übergibt 0x4B. 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 nach einem ADS1115 und direkt am Bus nach dem LMP91000.
int_configPinEin GPIO, den begin() auf Low setzt, während es den LMP91000 direkt konfiguriert; das Beispiel übergibt 5. -1 (keiner), wenn er weggelassen wird. Bei Adressen von 0x30 bis 0x37 ungenutzt.
bool begin()returns bool

Startet Wire, prüft, ob das Board antwortet, stellt die ADC-Verstärkung und die Datenrate des Presets ein und konfiguriert den LMP91000 mit den Einstellungen des Presets. Rufen Sie es einmal in setup() vor dem Lesen auf.

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 in ppm um: Sie zieht die interne Nullspannung ab (die 2,5-V-Referenz multipliziert mit dem internen Nullprozentwert des Presets), addiert die Nullpunktkalibrierung, teilt durch die Verstärkung des Verstärkers und durch die Empfindlichkeit des Presets in nA pro ppm. Ein Ergebnis unter null wird als 0 zurückgegeben.

ReturnsDie Gaskonzentration in ppm.

double getPPB()returns double

Dieselbe Messung wie getPPM(), mal 1000. Das Beispiel zeigt sie in einem Kommentar als Alternative zu getPPM().

ReturnsDie Gaskonzentration in ppb.

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

Alles zusammen​

Die Adresse und der Pin sind die einzigen Unterschiede zu einem Sensor, der mit den Standardwerten erstellt wird: begin() liest die Adresse, um zu entscheiden, wie das Board erreicht wird, und der Rest des Sketches ist derselbe, mit einer einzelnen Messung alle 2,5 s.