Skip to main content

Kalibracija nulte točke

Što prikazuje ovaj primjer​

Primjer calibrateSensor primjenjuje pomak nulte točke i svakih 2,5 sekunde ispisuje koncentraciju plina u PPM. Senzor stvara s adresom 0x49 i konfiguracijskim pinom 32.

customCalibration je napon koji biblioteka pribraja naponu ADC-a prije pretvorbe. Komentar u primjeru opisuje postupak: u okruženju bez ciljnog plina namjestite vrijednost tako da napon nakon kalibracije bude približno 0.

Da biste vidjeli taj napon, primjer traži da maknete komentar s jednog retka u datoteci zaglavlja biblioteke, Electrochemical-Gas-Sensor-SOLDERED.h:

//#define ELECTROCHEMICAL_SENSOR_DEBUG

Kad je ta definicija uključena, svaki poziv getPPM() ispisuje i neobrađeno mjerenje napona, napon bez referentne vrijednosti i napon nakon kalibracije.

Primjer je napisan sa SENSOR_NH3, predloškom biblioteke za amonijak, pa njegove PPM vrijednosti nisu vrijednosti za H2S. Nemojte ga bez izmjena prebaciti na predložak SENSOR_H2S iz biblioteke: taj je predložak napisan za ćeliju SGX-4H2S-100 s osjetljivošću od 1200 nA po ppm, a ova pločica nosi ćeliju SGX-4H2S-300, čiji tehnički list navodi izlazni signal od 460 ± 140 nA po ppm. Sa SENSOR_H2S očitanje je oko 2,6 puta preniskо. Umjesto toga proslijedite prilagođenu vrstu senzora s postavkama SENSOR_H2S i 460 nA po ppm, kao što prikazuje Brzi početak.

Kôd primjera​

Select Board
calibrateSensor.ino
// 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);
}

Očekivani rezultat:

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

Zatim svakih 2,5 sekunde slijedi redak koji počinje s Sensor reading:, s koncentracijom u PPM na pet decimala. Biblioteka nikad ne javlja vrijednost manju od nule: umjesto nje vraća 0, pa je 0.00000 uobičajeno očitanje. Kad je definiran ELECTROCHEMICAL_SENSOR_DEBUG, svakom očitanju prethode retci Electrochemical gas sensor readings:, Raw voltage measurement:, Voltage without reference value: i Voltage after calibration:, pri čemu je svaki napon izražen u voltima na deset decimala. Ako senzor ne odgovori, 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 none

Stvara objekt senzora. Vrsta senzora sadrži postavke ulaznog stupnja i pretvorbe za jednu plinsku ćeliju. Adresa određuje kako begin() komunicira s pločicom: adresa od 0x30 do 0x37 ide preko ATtiny404 na pločici; svaka druga adresa, primjerice zadana 0x49, ide na ADS1115 na toj adresi i izravno na LMP91000.

ReturnsKonstruktor.

Parametri

NazivTipOpis
_tsensorTypePredložak iz biblioteke (SENSOR_CO, SENSOR_NO2, SENSOR_SO2, SENSOR_O3, SENSOR_NO, SENSOR_H2S, SENSOR_NH3, SENSOR_CL2) ili prilagođeni sensorType. Za ćeliju ove pločice proslijedite prilagođeni s 460 nA po ppm.
_adcAddruint8_tAdresa s kojom begin() komunicira. Ovaj primjer prosljeđuje 0x49.
_configPinintGPIO koji biblioteka drži u visokom stanju i spušta u nisko dok izravno konfigurira LMP91000. Zanemaruje se za adrese od 0x30 do 0x37. Ovaj primjer prosljeđuje 32.
bool begin()returns bool

Pokreće I2C i prema adresi odabire način komunikacije s pločicom. S adresom od 0x30 do 0x37 provjerava odgovara li ATtiny404 na pločici i šalje mu pojačanje ADC-a iz vrste senzora s najsporijom brzinom podataka; svaka naredba čeka odgovor do 500 ms. S bilo kojom drugom adresom pokreće ADS1115 na toj adresi s istim pojačanjem i brzinom podataka, postavlja konfiguracijski pin kao izlaz u visokom stanju te ga spušta u nisko dok konfigurira LMP91000. Pozovite je jednom prije očitavanja.

Returnstrue kad su svi koraci uspjeli, inače false.

void setCustomZeroCalibration(double calibration)returns void

Postavlja pomak nulte točke: napon koji getPPM() pribraja nakon oduzimanja unutarnje nule ulaznog stupnja, a prije pretvorbe u PPM. Za ovaj objekt zamjenjuje unutarnju kalibraciju nule iz vrste senzora.

ReturnsNišta.

Parametri

NazivTipOpis
calibrationdoublePomak u voltima. Primjer prosljeđuje customCalibration (0,05).
double getPPM()returns double

Čita ADC, oduzima unutarnju nulu ulaznog stupnja (2,5 V puta njezin postotak), pribraja kalibraciju nule, a zatim dijeli s pojačanjem pojačala i s osjetljivošću ćelije u nA po ppm iz vrste senzora. Rezultat manji od 0 vraća se kao 0. Kad je definiran ELECTROCHEMICAL_SENSOR_DEBUG, ispisuje i ta tri napona.

ReturnsKoncentracija plina u PPM.

Sve zajedno​

Stvorite senzor, pozovite begin(), a zatim pozovite setCustomZeroCalibration() sa svojim pomakom prije nego što počnete očitavati. Pokrenite skicu na mjestu bez ciljnog plina, promijenite customCalibration i ponovno je učitavajte dok napon nakon kalibracije ne bude približno 0.