Moved calibration to same cycle as measuring
This commit is contained in:
parent
eacd7c9c5b
commit
9e0d11cc86
2 changed files with 24 additions and 12 deletions
|
@ -24,6 +24,7 @@ namespace sensor {
|
||||||
int16_t stable_measurements = 0;
|
int16_t stable_measurements = 0;
|
||||||
uint32_t waiting_color = color::blue;
|
uint32_t waiting_color = color::blue;
|
||||||
bool should_calibrate = false;
|
bool should_calibrate = false;
|
||||||
|
unsigned long time_calaibration_started = millis();
|
||||||
|
|
||||||
void initialize() {
|
void initialize() {
|
||||||
#if defined(ESP8266)
|
#if defined(ESP8266)
|
||||||
|
@ -100,10 +101,11 @@ namespace sensor {
|
||||||
* a measurement rate of 2s for at least two minutes before applying the FRC command and sending the reference value.
|
* a measurement rate of 2s for at least two minutes before applying the FRC command and sending the reference value.
|
||||||
*/
|
*/
|
||||||
Serial.println(F("Setting SCD30 timestep to 2s, prior to calibration."));
|
Serial.println(F("Setting SCD30 timestep to 2s, prior to calibration."));
|
||||||
scd30.setMeasurementInterval(2); // [s] The change will only take effect after next measurement.
|
scd30.setMeasurementInterval(MEASUREMENT_TIMESTEP); // [s] The change will only take effect after next measurement.
|
||||||
Serial.println(F("Waiting until the measurements are stable for at least 2 minutes."));
|
Serial.println(F("Waiting until the measurements are stable for at least 2 minutes."));
|
||||||
Serial.println(F("It could take a very long time."));
|
Serial.println(F("It could take a very long time."));
|
||||||
should_calibrate = true;
|
should_calibrate = true;
|
||||||
|
time_calaibration_started = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
void calibrateAndRestart() {
|
void calibrateAndRestart() {
|
||||||
|
@ -126,18 +128,22 @@ namespace sensor {
|
||||||
}
|
}
|
||||||
|
|
||||||
void displayCO2OnLedRing() {
|
void displayCO2OnLedRing() {
|
||||||
if (co2 < 250) {
|
int16_t co2_int = co2;
|
||||||
|
if (co2_int < CALIBRATE_LEVEL) {
|
||||||
// Sensor should be calibrated.
|
// Sensor should be calibrated.
|
||||||
led_effects::showWaitingLED(color::magenta);
|
led_effects::showWaitingLED(color::magenta);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(co2_int < 400) {
|
||||||
|
co2_int = 400;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Display data, even if it's "old" (with breathing).
|
* Display data, even if it's "old" (with breathing).
|
||||||
* Those effects include a short delay.
|
* Those effects include a short delay.
|
||||||
*/
|
*/
|
||||||
if (co2 < 2000) {
|
if (co2_int < 2000) {
|
||||||
led_effects::displayCO2color(co2);
|
led_effects::displayCO2color(co2_int);
|
||||||
led_effects::breathe(co2);
|
led_effects::breathe(co2_int);
|
||||||
} else {
|
} else {
|
||||||
// >= 2000: entire ring blinks red
|
// >= 2000: entire ring blinks red
|
||||||
led_effects::redAlert();
|
led_effects::redAlert();
|
||||||
|
@ -170,8 +176,11 @@ namespace sensor {
|
||||||
*/
|
*/
|
||||||
if (freshData) {
|
if (freshData) {
|
||||||
if (should_calibrate) {
|
if (should_calibrate) {
|
||||||
|
if(millis() - time_calaibration_started > 60000)
|
||||||
|
{
|
||||||
countStableMeasurements();
|
countStableMeasurements();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
logToSerial();
|
logToSerial();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
#define buttonPin 0
|
#define buttonPin 0
|
||||||
// This file is a config template, and can be copied to config.h. Please don't save any important password in this template.
|
// This file is a config template, and can be copied to config.h. Please don't save any important password in this template.
|
||||||
|
|
||||||
|
// This is the level at which the magenta LED color signals need for calibration
|
||||||
|
// in some case it is irritating when this happens so you can lower this level if need - but use with care. Calibration shuld be done time to time
|
||||||
|
#define CALIBRATE_LEVEL 250
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SERVICES
|
* SERVICES
|
||||||
*/
|
*/
|
||||||
|
@ -16,7 +20,6 @@
|
||||||
// # define AMPEL_CSV // Should data be logged as CSV, on the ESP flash memory?
|
// # define AMPEL_CSV // Should data be logged as CSV, on the ESP flash memory?
|
||||||
// # define AMPEL_LORAWAN // Should data be sent over LoRaWAN? (Requires ESP32 + LoRa modem, and "MCCI LoRaWAN LMIC library")
|
// # define AMPEL_LORAWAN // Should data be sent over LoRaWAN? (Requires ESP32 + LoRa modem, and "MCCI LoRaWAN LMIC library")
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WIFI
|
* WIFI
|
||||||
*/
|
*/
|
||||||
|
@ -31,7 +34,7 @@
|
||||||
|
|
||||||
// How often should measurement be performed, and displayed?
|
// How often should measurement be performed, and displayed?
|
||||||
//NOTE: SCD30 timer does not seem to be very precise. Variations may occur.
|
//NOTE: SCD30 timer does not seem to be very precise. Variations may occur.
|
||||||
# define MEASUREMENT_TIMESTEP 10 // [s] Value between 2 and 1800 (range for SCD30 sensor)
|
# define MEASUREMENT_TIMESTEP 2 // [s] Value between 2 and 1800 (range for SCD30 sensor)
|
||||||
|
|
||||||
// How often should measurements be appended to CSV ?
|
// How often should measurements be appended to CSV ?
|
||||||
// Probably a good idea to use a multiple of MEASUREMENT_TIMESTEP, so that averages can be calculated
|
// Probably a good idea to use a multiple of MEASUREMENT_TIMESTEP, so that averages can be calculated
|
||||||
|
@ -41,17 +44,17 @@
|
||||||
|
|
||||||
// Residual heat from CO2 sensor seems to be high enough to change the temperature reading. How much should it be offset?
|
// Residual heat from CO2 sensor seems to be high enough to change the temperature reading. How much should it be offset?
|
||||||
// NOTE: Sign isn't relevant. The returned temperature will always be shifted down.
|
// NOTE: Sign isn't relevant. The returned temperature will always be shifted down.
|
||||||
# define TEMPERATURE_OFFSET -3 // [K]
|
# define TEMPERATURE_OFFSET 0 // [K]
|
||||||
|
|
||||||
// Altitude above sea level
|
// Altitude above sea level
|
||||||
// Used for CO2 calibration
|
// Used for CO2 calibration
|
||||||
// here: Stuttgart, Schellingstr. 24. (Source: Google Earth)
|
// here: Stuttgart, Schellingstr. 24. (Source: Google Earth)
|
||||||
# define ALTITUDE_ABOVE_SEA_LEVEL 680 // [m]
|
# define ALTITUDE_ABOVE_SEA_LEVEL 660 // [m]
|
||||||
|
|
||||||
// The reference CO2 concentration has to be within the range 400 ppm ≤ cref(CO2) ≤ 2000 ppm.
|
// The reference CO2 concentration has to be within the range 400 ppm ≤ cref(CO2) ≤ 2000 ppm.
|
||||||
// Used for CO2 calibration
|
// Used for CO2 calibration
|
||||||
// here : measured concentration in Stuttgart
|
// here : measured concentration in Stuttgart
|
||||||
# define ATMOSPHERIC_CO2_CONCENTRATION 425 // [ppm]
|
# define ATMOSPHERIC_CO2_CONCENTRATION 430 // [ppm]
|
||||||
|
|
||||||
// Should the sensor try to calibrate itself?
|
// Should the sensor try to calibrate itself?
|
||||||
// Sensirion recommends 7 days of continuous readings with at least 1 hour a day of 'fresh air' for self-calibration to complete.
|
// Sensirion recommends 7 days of continuous readings with at least 1 hour a day of 'fresh air' for self-calibration to complete.
|
||||||
|
|
Loading…
Reference in a new issue