Den Nullpunkt kalibrieren
Was dieses Beispiel zeigt
Das Beispiel calibrateSensor wendet einen Nullpunkt-Offset an und gibt die
Gaskonzentration alle 2,5 Sekunden in PPM aus. Es erstellt den Sensor mit der Adresse
0x49 und dem Konfigurationspin 32.
customCalibration ist eine Spannung, die die Bibliothek zur ADC-Spannung addiert, bevor sie
diese umrechnet. Der Kommentar im Beispiel beschreibt das Vorgehen: Passen Sie in einer Umgebung ohne
das Zielgas den Wert an, bis die Spannung nach der Kalibrierung
ungefähr 0 beträgt.
Um diese Spannung zu sehen, sollen Sie im Beispiel eine Zeile in der Header-Datei der Bibliothek,
Electrochemical-Gas-Sensor-SOLDERED.h, auskommentieren:
//#define ELECTROCHEMICAL_SENSOR_DEBUG
Ist sie definiert, gibt jeder Aufruf von getPPM() zusätzlich die rohe Spannungsmessung,
die Spannung ohne den Referenzwert und die Spannung nach der Kalibrierung aus.
Das Beispiel ist mit SENSOR_NH3, dem Ammoniak-Preset der Bibliothek, geschrieben, daher sind seine
PPM-Werte keine H2S-Werte. Stellen Sie es nicht unverändert auf das Preset SENSOR_H2S
der Bibliothek um: Dieses Preset ist für die Zelle SGX-4H2S-100 mit einer
Empfindlichkeit von 1200 nA pro ppm geschrieben, während dieses Board die Zelle SGX-4H2S-300 trägt,
deren
Datenblatt
ein Ausgangssignal von 460 ± 140 nA pro ppm angibt. Mit SENSOR_H2S fällt der
Messwert etwa 2,6-mal zu niedrig aus. Übergeben Sie stattdessen einen benutzerdefinierten Sensortyp mit den
Einstellungen von SENSOR_H2S und 460 nA pro ppm, wie in der
Kurzanleitung
gezeigt.
Der Beispielcode
// Include the required library
#include "Electrochemical-Gas-Sensor-SOLDERED.h"
// This is the custom value we set for the calibration voltage
// This value is added to the voltage read from the ADC
// In an environment with 0 of the target gas, the voltage after calibration should be
// roughly 0, adjust customCalibration to get it to that value.
const double customCalibration = 0.05;
// Create the sensor object with the according type
ElectrochemicalGasSensor sensor(SENSOR_NH3, 0x49, 32);
void setup()
{
Serial.begin(115200); // For debugging
// Initialize 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);
}
//Set the custom calibration value
sensor.setCustomZeroCalibration(customCalibration);
Serial.println("Sensor initialized successfully!");
}
void loop()
{
// Make the reading
double reading = sensor.getPPM();
// This function will also print debug messages if the #define in
// the header file of the library is uncommented
// It will print:
// - The raw voltage measurement
// - Voltage without reference value
// - Voltage after calibration
// These values can help you adjust the internal zero calibration
// 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);
}
Erwartetes Ergebnis:
Sensor initialized successfully!
Danach folgt alle 2,5 Sekunden eine Zeile, die mit Sensor reading: beginnt, mit der
Konzentration in PPM auf fünf Dezimalstellen. Die Bibliothek meldet nie einen Wert unter
null: Sie gibt stattdessen 0 zurück, daher ist 0.00000 ein normaler Messwert. Ist
ELECTROCHEMICAL_SENSOR_DEBUG definiert, gehen jedem Messwert die Zeilen
Electrochemical gas sensor readings:, Raw voltage measurement:,
Voltage without reference value: und Voltage after calibration: voraus, jede
Spannung in Volt auf zehn Dezimalstellen. Antwortet der Sensor nicht, 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 noneErstellt das Sensorobjekt. Der Sensortyp enthält die Front-End- und Umrechnungseinstellungen für eine Gaszelle. Die Adresse bestimmt, wie begin() mit dem Board kommuniziert: Eine Adresse von 0x30 bis 0x37 läuft über den ATtiny404 des Boards; jede andere Adresse, etwa die Standardadresse 0x49, führt zu einem ADS1115 unter dieser Adresse und direkt zum LMP91000.
ReturnsKonstruktor.
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
_t | sensorType | Preset aus der Bibliothek (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) oder ein benutzerdefinierter sensorType. Übergeben Sie für die Zelle dieses Boards einen benutzerdefinierten mit 460 nA pro ppm. |
_adcAddr | uint8_t | Die Adresse, mit der begin() kommuniziert. Dieses Beispiel übergibt 0x49. |
_configPin | int | Ein GPIO, den die Bibliothek auf High hält und auf Low zieht, während sie den LMP91000 direkt konfiguriert. Wird bei Adressen von 0x30 bis 0x37 ignoriert. Dieses Beispiel übergibt 32. |
bool begin()returns boolStartet I2C und wählt anhand der Adresse, wie mit dem Board kommuniziert wird. Bei einer Adresse von 0x30 bis 0x37 prüft sie, ob der ATtiny404 des Boards antwortet, und sendet ihm die ADC-Verstärkung aus dem Sensortyp mit der niedrigsten Datenrate; jeder Befehl wartet bis zu 500 ms auf eine Antwort. Bei jeder anderen Adresse startet sie einen ADS1115 unter dieser Adresse mit derselben Verstärkung und Datenrate, setzt den Konfigurationspin als Ausgang auf High und zieht ihn auf Low, während sie den LMP91000 konfiguriert. Rufen Sie sie einmal vor dem Auslesen auf.
Returnstrue, wenn jeder Schritt erfolgreich war, andernfalls false.
void setCustomZeroCalibration(double calibration)returns voidLegt den Nullpunkt-Offset fest: eine Spannung, die getPPM() addiert, nachdem der interne Nullpunkt des Front-Ends abgezogen wurde, und bevor in PPM umgerechnet wird. Sie ersetzt die interne Nullpunktkalibrierung des Sensortyps für dieses Objekt.
ReturnsNichts.
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
calibration | double | Offset in Volt. Das Beispiel übergibt customCalibration (0,05). |
double getPPM()returns doubleLiest den ADC aus, subtrahiert den internen Nullpunkt des Front-Ends (2,5 V mal dessen Prozentwert), addiert die Nullpunktkalibrierung und teilt dann durch die Verstärkung des Verstärkers und durch die Zellenempfindlichkeit in nA pro ppm aus dem Sensortyp. Ein Ergebnis unter 0 wird als 0 zurückgegeben. Ist ELECTROCHEMICAL_SENSOR_DEBUG definiert, gibt sie außerdem die drei Spannungen aus.
ReturnsGaskonzentration in PPM.
Alles zusammen
Erstellen Sie den Sensor, rufen Sie begin() auf und rufen Sie dann setCustomZeroCalibration() mit
Ihrem Offset auf, bevor Sie Messwerte erfassen. Führen Sie den Sketch dort aus, wo kein
Zielgas vorhanden ist, ändern Sie customCalibration und laden Sie ihn erneut hoch, bis die Spannung
nach der Kalibrierung ungefähr 0 beträgt.