Есть метеостанция на базе Arduino Mega + Ethernet Shield с датчиками DHT22 для грубой оценки "погоды" внутри метеостанции, TroykaMeteoSensor для точных измерений за бортом и ИК датчик температуры для оценки облачности MLX90615. Проблема состоит в том, что при понижении температуры ниже 5-6 градусов TroykaMeteoSensor падает с ошибкой (метод .read() возвращает код ошибки -1 или -2, что, судя по документации, соответствует неправильной длине данных и несовпадению контрольных сумм). Провел эксперимент с погружением метеостанции в морозилку на полчаса. После извлечения сразу подключил ее к компьютеру и стал смотреть что происходит. Вот вывод Serial-порта с комментариями: Код (Text): Troyka sensor state: -1 # включение сразу после морозилки Measured parameters: # код ошибки -1 и значения getTemperatureC() Troyka T: 0.00 # и getHumidity() по 0.0 Troyka H: 0.00 # MLX показывает правильную температуру. MLX T: -5.05 Heater ON (60 seconds) # греем встроенным в датчик heater'ом Heater OFF Troyka sensor state: 0 # видим, что ему стало лучше (код возврата 0) Measured parameters: Troyka T: 0.00 # но getTemperature() снова вернул нам 0.00 MLX T: -1.99 --------delay 1s---------- # ждем секунду и снова пробуем прочитать данные # за это время датчик успел снова остыть Troyka sensor state: -2 # теперь код ошибки -2 Measured parameters: Troyka T: 3.38 # но данные уже не 0.00 Troyka H: 75.75 MLX T: -1.89 Heater ON (60 seconds) # код ошибки не 0 => снова греем Heater OFF Troyka sensor state: 0 # другое дело Measured parameters: Troyka T: 3.38 MLX T: 0.95 --------delay 1s---------- Troyka sensor state: 0 # на этот раз так быстро остыть не успел Measured parameters: Troyka T: 6.91 Troyka H: 71.42 MLX T: 1.07 --------delay 1s---------- Troyka sensor state: 0 Measured parameters: Troyka T: 6.66 Troyka H: 71.47 MLX T: 1.11 --------delay 1s---------- Troyka sensor state: 0 Measured parameters: Troyka T: 6.47 Troyka H: 71.78 MLX T: 1.21 --------delay 1s---------- Troyka sensor state: 0 Measured parameters: Troyka T: 6.36 Troyka H: 72.19 MLX T: 1.29 --------delay 1s---------- Troyka sensor state: 0 Measured parameters: Troyka T: 6.31 Troyka H: 72.75 MLX T: 1.39 --------delay 1s---------- Troyka sensor state: -2 # и вот тут мы снова за своё..... Measured parameters: Troyka T: 6.31 Troyka H: 72.75 MLX T: 1.43 Heater ON (60 seconds) # снова греем....... Heater OFF Troyka sensor state: 0 Measured parameters: Troyka T: 6.31 MLX T: 4.09 --------delay 1s---------- Troyka sensor state: 0 # после этого все заработало и больше не Measured parameters: # отваливалось Troyka T: 8.54 Troyka H: 68.92 MLX T: 4.13 Как можно видеть, датчик не хочет стабильно работать пока не прогреется выше 6-7 градусов. При этом остальные датчики работают исправно. Проверено экспериментально в морозилке и на улице с феном. Интересно узнать в чем проблема - брак SHT31, брак самого Troyka-модуля или фича (которой в метеостанции, конечно, быть не должно)?
Кажется, проблема решилась увеличением входного напряжения на датчике до 5В. Видимо, 3.3 вольта для него всё же мало. Причем проявляется это только при низких температурах.... Нужно еще потестировать, но до -5 при 5В все работает хорошо.
Было бы интересно сравнить!) Если что - вот скетч: Код (C++): #include <TroykaMeteoSensor.h> int state; double t, h; #define SDA_PIN 20 //define the SDA pin #define SCL_PIN 21 //define the SCL pin TroykaMeteoSensor tms; void setup(){ delay(5000); Serial.begin(9600); tms.begin(); } void loop(){ delay(1000); state = tms.read(); h = tms.getHumidity(); t = tms.getTemperatureC(); Serial.print("my state: "); Serial.println(state); Serial.print("t = "); Serial.println(t); Serial.print("h = "); Serial.println(h); Serial.println(""); }
Спасибо - не надо. У меня свое овно http://forum.amperka.ru/threads/Суперэкономичный-беспроводной-монитор-Т-и-rh.17221/