Всем добра ! ! !
у меня проблема с датчиком СО2
он с различной периодичностью выдаёт ложные значения
(среднее значение колеблется в районе 1000 ppm, ложные показания могут быть 40-60 ppm или 2000-2500 ppm = рандом полнейший)
что-то в коде его вынуждает так себя вести...
само по себе измерение работает без этих глюков (брал кусок кода из версии 1.6.2 и заливал отдельно с выводом значения на дисплей)
подумал,что это конфликт с DHT21 (прикрутил его к этому кусочку = работают оба без глюков)
датчик питаю от ЛБП, землю соединил, автокалибровка отключена (пробовал и с ней = результат такой же)
вот этот скетч вырезан из прошивки 1.6.2 и с ним всё работает... могу видосик записать или как ещё показать те глюки???
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <DHT.h>
DHT dht(A3, DHT21);
float sensorVals[2];
#define CO2_PIN_NAME A2
#define CO2_MAX 5000
uint32_t settingsTimer;
int CO2ppm = 0;
bool CO2_flag = false;
bool CO2_rst = false;
void setup(){
lcd.init();
lcd.backlight();
dht.begin();
}
void loop(){
static uint32_t tmr;
if (millis() - settingsTimer > 1000) {
if (digitalRead(CO2_PIN_NAME)) {
if (!CO2_flag) {
tmr = millis();
CO2_flag = true;
}
} else {
if (CO2_flag) {
// защита от измерения после вывода на дисплей
if (!CO2_rst) {
tmr = millis() - tmr;
CO2ppm = (CO2_MAX / 1000) * (tmr - 2);
}
CO2_flag = false;
CO2_rst = false;
sensorVals[0] = dht.readTemperature();
sensorVals[1] = dht.readHumidity();
lcd.setCursor(0, 0);
lcd.print("Temperature = " + String(sensorVals[0]));
lcd.setCursor(0, 1);
lcd.print("Humidity = " + String(sensorVals[1]));
lcd.setCursor(0, 3);
lcd.print("CO2 ppm = " + String(CO2ppm));
}
}
}
}
вся забава в том,что если отключить в оригинальной прошивке 1.6.2 поддержку DHT, тогда эти глюки практически не заметны...
бывают периодически резкие скачки или просадки показаний примерно в 200 ppm (готов списать это на погрешность измерений или на сквозняк который привносит такие изменения состава воздуха)
но как только включаю " #define DHT_SENS2 1 " (даже если физически датчик не подсоединяю) то отклонения проскакивают в 1000 ppm и более......