Skip to main content

Kalibracija nule

Što prikazuje ovaj primjer​

Primjer calibrateSensor iz biblioteke dodaje fiksni naponski pomak svakom očitanju pomoću setCustomZeroCalibration(). Na zraku bez ciljanog plina namjestite pomak tako da napon nakon kalibracije bude otprilike 0, kao što piše u komentaru primjera.

Primjer stvara senzor s SENSOR_NH3, predloškom za amonijak. Biblioteka izračunava ppm iz osjetljivosti i postavki pojačanja iz predloška; predložak za klorovu ćeliju ove pločice je SENSOR_CL2.

Da biste vidjeli napone dok podešavate pomak, u instaliranoj biblioteci otvorite src/Electrochemical-Gas-Sensor-SOLDERED.h i uklonite // ispred #define ELECTROCHEMICAL_SENSOR_DEBUG. Svaki poziv getPPM() tada dodatno ispisuje sirovi napon, napon bez referentne vrijednosti i napon nakon kalibracije.

Kôd primjera​

Select Board
calibrateSensor.ino
/**
**************************************************
*
* @file calibrateSensor.ino
* @brief See how to calibrate an electrochemical sensor
*
* To successfully run the sketch:
* - Uncomment the #define in the library header file
* - 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"

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

Komentar u zaglavlju traži da se spoji LMPEN. Na ovoj pločici otpornik od 10 kΩ drži LMPEN u niskom stanju i spojen je na ATtiny404, pa ga ostavite nespojenim (pogledajte tablicu pinova na Detalji o hardveru).

Očekivani rezultat:

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

Zatim redak Sensor reading: svakih 2,5 s, kao u brzom početku. Kad je debug define omogućen, svakom očitanju prethodi Electrochemical gas sensor readings: i tri retka, Raw voltage measurement:, Voltage without reference value: i Voltage after calibration:, svaki s vrijednošću u voltima na deset decimala. Ako begin() ne uspije, 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 ElectrochemicalGasSensor

Stvara objekt senzora. Sprema samo postavke; ništa se ne šalje pločici dok se ne pozove begin().

ReturnsObjekt senzora.

Parametri

TipNazivOpis
sensorType_tPredložak ćelije. Primjer prosljeđuje SENSOR_NH3; SGX-4CL2 ćelija ove pločice ima predložak SENSOR_CL2.
uint8_t_adcAddrI2C adresa, DEFAULT_ADC_ADDR (0x49) ako se izostavi; primjer prosljeđuje 0x49. Za adresu od 0x30 do 0x37, raspon ADDRESS prekidača ove pločice, begin() komunicira s ATtiny404 čipom na pločici; za bilo koju drugu adresu traži ADS1115 na toj adresi i LMP91000 izravno na sabirnici.
int_configPinGPIO koji begin() postavlja u nisko stanje dok izravno konfigurira LMP91000; primjer prosljeđuje 32. -1 (nijedan) ako se izostavi. Ne koristi se za adrese od 0x30 do 0x37.
bool begin()returns bool

Pokreće Wire, provjerava odgovara li pločica, postavlja ADC pojačanje i brzinu podataka iz predloška te konfigurira LMP91000 postavkama iz predloška. Pozovite jednom u setup() prije čitanja.

Returnstrue ako je pločica odgovorila i oba koraka konfiguracije uspjela, inače false.

void setCustomZeroCalibration(double calibration)returns void

Postavlja napon koji getPPM() dodaje svakom očitanju nakon što oduzme unutarnji napon nule. Zamjenjuje kalibraciju nule iz predloška, koja u SENSOR_CL2 iznosi 0.

ReturnsNišta.

Parametri

TipNazivOpis
doublecalibrationPomak u voltima. Primjer koristi customCalibration (0,05).
double getPPM()returns double

Provodi jedno očitanje i pretvara ga u ppm: oduzima unutarnji napon nule (referenca od 2,5 V pomnožena unutarnjim postotkom nule iz predloška), dodaje kalibraciju nule, dijeli s pojačanjem pojačala i s osjetljivošću iz predloška u nA po ppm. Rezultat manji od nule vraća se kao 0.

ReturnsKoncentracija plina u ppm.

Primjer koristi i Serial i delay(), koji dolaze s Arduino jezgrom, a ne s ovom bibliotekom.

Sastavljanje cjeline​

Pokrenite skicu na zraku bez ciljanog plina, pročitajte Voltage after calibration: i mijenjajte customCalibration dok taj napon ne bude otprilike 0. Zadržite pronađenu vrijednost i pozovite setCustomZeroCalibration() s njom u vlastitoj skici, nakon begin().