Sensor an einer benutzerdefinierten Adresse
Was dieses Beispiel zeigt
Das Beispiel customAddress der Bibliothek erstellt den Sensor an einer Adresse, die Sie dem Konstruktor übergeben, startet ihn und gibt alle 2,5 Sekunden die Gaskonzentration in ppm aus.
Das Beispiel übergibt SENSOR_SO2, das Schwefeldioxid-Preset der Bibliothek, die Adresse 0x4B und GPIO 5 als Konfigurationspin. SENSOR_NH3 ist das Preset der Bibliothek für die Ammoniakzelle dieses Boards, und die Umrechnung in ppm verwendet die Empfindlichkeit des Presets. In der ausgelieferten Form sind die Messwerte des Beispiels daher keine Ammoniak-ppm. Um Ammoniak zu messen, ändern Sie SENSOR_SO2 in der Zeile, die den Sensor erstellt, in SENSOR_NH3.
Die Bibliothek kommuniziert mit der ATtiny404-Bridge des Boards, wenn die Adresse zwischen 0x30 und 0x37 liegt; bei jeder anderen Adresse, etwa 0x4B in diesem Beispiel, kommuniziert sie direkt mit einem ADS1115 an dieser Adresse, wobei der Konfigurationspin während der Konfiguration des LMP91000 auf Low gesetzt ist. Auf diesem Board liegt der ADS1115 an den Pins SDA2/SCL2 der Stiftleiste, die die Qwiic-Connectors nicht erreichen, daher läuft dieses Beispiel nicht über das Qwiic-Kabel. Verbinden Sie stattdessen den Controller mit der Stiftleiste: 3,3 V mit 3V3, GND mit GND, SDA mit SDA2 und SCL mit SCL2. Das Beispiel läuft dann wie geschrieben, ohne Änderung der Adresse; der ADS1115 antwortet auf 0x4B, wenn von JP2 bis JP4 nur JP4 geschlossen ist. Der ADDRESS-Schalter des Boards ist unter Hardware-Details beschrieben.
Der Beispielcode
/**
**************************************************
*
* @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 Jumper-Namen in den Kommentaren des Beispiels passen nicht zu diesem Board. Hier legen JP2 bis JP4 die Adresse des ADS1115 fest (JP2 0x49, bei Auslieferung des Boards geschlossen; JP3 0x4A; JP4 0x4B), JP5 und JP6 sind die 10-kΩ-I2C-Pull-up-Jumper, und JP7 gibt es nicht. Durchtrennen Sie JP5 oder JP6 nicht, um eine Adresse zu ändern. Die eigene Adresse des Boards wird mit dem ADDRESS-Schalter eingestellt, nicht mit Jumpern auf der Rückseite. Die Kommentare verbinden außerdem LMPEN mit GND oder einem GPIO-Pin: Auf diesem Board zieht ein 10-kΩ-Widerstand ihn bereits auf GND, lassen Sie ihn daher unverbunden.
Der Serial Monitor zeigt:
Sensor initialized successfully!
Danach folgt alle 2,5 Sekunden eine Zeile, die mit Sensor reading: beginnt, mit der Konzentration in ppm auf fünf Nachkommastellen.
Wenn begin() den Wert false zurückgibt, gibt das Beispiel stattdessen 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 noneErstellt das Sensorobjekt an der übergebenen Adresse. begin() entscheidet anhand der Adresse, wie mit dem Board kommuniziert wird: Von 0x30 bis 0x37 wird die ATtiny404-Bridge verwendet; jede andere Adresse wird als eigene I2C-Adresse des ADS1115 verwendet.
ReturnsKonstruktor.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
_t | sensorType | Das Zellen-Preset, hier SENSOR_SO2. SENSOR_NH3 ist das Preset für die Zelle dieses Boards. |
_adcAddr | uint8_t | Eine Bridge-Adresse von 0x30 bis 0x37 oder sonst eine ADS1115-Adresse; hier die ADS1115-Adresse 0x4B. Die eigene Adresse dieses Boards ist seine Bridge-Adresse, die mit dem ADDRESS-Schalter von 0x30 bis 0x37 eingestellt wird. |
_configPin | int | Ein GPIO, den die Bibliothek auf Low setzt, während sie den LMP91000 konfiguriert, wenn die Adresse außerhalb von 0x30 bis 0x37 liegt, hier 5. Wird von 0x30 bis 0x37 nicht verwendet. |
bool begin()returns boolStartet I2C. Bei einer Adresse von 0x30 bis 0x37 prüft es, ob die Bridge antwortet, und sendet ihr die ADC-Einstellungen aus dem Preset; bei jeder anderen Adresse startet es den ADS1115 direkt an dieser Adresse. Anschließend konfiguriert es das analoge Frontend LMP91000. Rufen Sie es einmal vor jeder Messung auf.
Returnstrue, wenn jeder Schritt erfolgreich war. false, wenn die Bridge nicht innerhalb von 500 ms mit OK geantwortet oder einen Fehler gemeldet hat, wenn das Starten des ADS1115 fehlgeschlagen ist oder wenn die Konfiguration des analogen Frontends fehlgeschlagen ist.
double getPPM()returns doubleFührt eine ADC-Messung durch, entfernt den internen Nullpunkt des Frontends, addiert die Nullpunktkalibrierung und rechnet den Zellenstrom mit der Empfindlichkeit des Presets in ppm um. Ein Ergebnis unter null wird als 0 zurückgegeben.
ReturnsDie Gaskonzentration in ppm.
double getPPB()returns doubleDieselbe Messung wie getPPM(), in Parts per Billion. Das Beispiel zeigt sie als Alternative in einem Kommentar.
ReturnsgetPPM() multipliziert mit 1000.
Zusammenfassung
Die Adresse, die Sie dem Konstruktor übergeben, ist die, mit der begin() kommuniziert. Sie muss daher mit der Adresse übereinstimmen, auf der das Board antwortet. Rufen Sie dann begin() einmal in setup() auf und getPPM(), wann immer Sie einen Messwert möchten.