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
/**
**************************************************
*
* @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:
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 ElectrochemicalGasSensorStvara objekt senzora. Sprema samo postavke; ništa se ne šalje pločici dok se ne pozove begin().
ReturnsObjekt senzora.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
sensorType | _t | Predložak ćelije. Primjer prosljeđuje SENSOR_NH3; SGX-4CL2 ćelija ove pločice ima predložak SENSOR_CL2. |
uint8_t | _adcAddr | I2C 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 | _configPin | GPIO 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 boolPokreć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 voidPostavlja 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
| Tip | Naziv | Opis |
|---|---|---|
double | calibration | Pomak u voltima. Primjer koristi customCalibration (0,05). |
double getPPM()returns doubleProvodi 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().