Подключение нескольких датчиков для метеостанции

katava
Offline
Зарегистрирован: 18.04.2012

Подскажите какие датчики подключить для метеостанции. 

Мерим:

Температура уличная

Влажность уличная

Температура дома

Влажность дома

Давление

Контроллер nodemcu 

В наличии осталось только два bmp280 с одинаковыми адресами 076, в доставке bme280 и ds18b20. Два bmp280 не получается подключить потому что адреса одинаковые. Можно ли совместить три разных датчика для измерения вышеперечисленных величин? Может еще в природе есть датчики о которых я не знаю.. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

DHT22 eще есть. И туева хуча других.

alex_r61
Offline
Зарегистрирован: 20.06.2012

У bm e/p280 есть ещё SPI.

katava
Offline
Зарегистрирован: 18.04.2012

alex_r61 пишет:

У bm e/p280 есть ещё SPI.

Одной библиотекой подключатся эти датчики (2 датчика) по i2c и spi? 

alex_r61
Offline
Зарегистрирован: 20.06.2012

Библиотеку надо ковырять или свою писать.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

я не понимаю смысл подключения двух bmp280 к одной Ардуине.  Думается мне, что атмосферное давление что дома, что в улице не шыбко различается, поэтому одного даччика более чем достаточно.  А для температуры/влажности есть DHT22 для улицы и DHT11 для дома.  Ну или другие какие, по желанию/кошельку. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Для улицы я бы взял DHT21 - он внутри выглядит более устойчивым к outdoor. Обвязка помощнее (DHT22 не ломал, но чую, что там меньше деталек) и всё под лаком. Опять же разъем уже на плате датчика есть (внутри корпуса) - не нужно с пайкой при замене сенсора страдать. Однако, если в наличии NodeMCU с 3.3 V, то далеко датчик не унесешь.

BMЕ внутри маленькой коробки будет подогреваться, если заюзать неудачную схему питания с линейными стабилизаторами или типа того. Так что на влажности он будет привирать изрядно. И на температуре. А давление будет показывать нормально.

Несколько BMP/BME спокойно работают с SoftwareWire, но с библиотекой придется повозиться. 

Пара вынесенных из коробки DHT-шек, посаженные на разные пины и один BMP, думаю, закроет вопрос даже при неудачном корпусировании.

negavoid
Offline
Зарегистрирован: 09.07.2016

Все DHT - тормоза и привиралы (на 10-20%). Китайские BME280 тоже косячат, на несколько градусов температуры и 5-10% влажности, но BMP на удивление довольно точно показывает что температуру, что давление. Для измерения влажности лучший датчик - HDC1080.

katava
Offline
Зарегистрирован: 18.04.2012

Про DHT тоже читал что не очень точные, поэтому не использую. 

С библиотеками тоже не смогу повозится, чтобы повестить два одинаковых датчика на одну линию, мозгов не хватит. 

Bmp280 /bme280 сможет, интересно, на улице работать? Осилит влажность, холод, ветер, жару? В другой (не вайфай) метеостанции используется ds18b20 в виде микросхемы защищеной кембриком в течении 5 лет, используется в жестких условия, пока жива. На счёт bmp280 уже сомнения и кембрик уже не натянешь. 

HDC1080 нашел на просторах алиэкспресса, наверно закажу для тестов... 

Давление будет мерится одним из датчиков, дом/улица разницы нет. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Для метеостанции скорость работы DHT более, чем достаточна - сложно себе представить человека, которому нужно узнавать что там на улице чаще, чем раз в 1-2 сек. По точности - да, проблемы есть в измерении влажности. Но тут вопрос - с чем сравнивать? С китайской метеостанцией за $30, у которой вообще неизвестно какой датчик стоит или с местной станцией гидрометеоцентра, которая находится в совершенно других условиях на расстоянии в 20 км... Так же не совсем понятно, что произойдет на уровне решения человека, если он с утра увидит, что влажность на улице не 60%, а 70%. и через десять минут уже 65% (например). Ну или на метеостанции будет 5.8C, а DHT покажет 6.2C (реальный пример, только что посмотрел на своем девайсе). Корпуса выносных датчиков обоих устройств расположены в одном месте.

Насчет точности и HDC1080 не знаю, но по виду то, что есть на алиэкспрессе, явно не в уличном исполнении. И, к тому же, есть огромный вопрос насчет того, насколько стабильно шина I2C будет работать на проводе метров в пять, например, без специальных действий по согласованию ёмкости линии. DHT21 я легко вынес на 15 метров без каких либо извращений на первом найденном куске кабеля от ОПС.

Словом, для начала нужно хорошо подумать - какая точность и скорость реакции достаточна, а так же какое влияние будут оказывать эти данные на процесс принятия решений. Затем уже датчики выбирать. Так-то можно, конечно, и до Honeywell дойти, вывалить кучу денег и пытаться потом жить с тем, что показания каждую секунду разные из-за повышенной точности датчиков.

katava
Offline
Зарегистрирован: 18.04.2012

Hdc1080 точность по даташиту 0.2%

Ds18b20 точность по даташиту 0.5%

Bme280 точность по даташиту 3% влажность, 1% температура 

Bmp280 точность по даташиту 1%

Точности хватает с головой. Уличный датчик подключиться метровым кабельком. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

katava пишет:

Давление будет мерится одним из датчиков, дом/улица разницы нет. 

Надажэ, внял-таки. 

sadman41
Offline
Зарегистрирован: 19.10.2016

katava пишет:

Точности хватает с головой. Уличный датчик подключиться метровым кабельком. 

Если вы внимательно посмотрите даташит, к примеру, на DS18B20 (стр. 3, график Typical Perfomance Curve), то увидите, что 0,5% - это усредненная ошибка, сам коридор отклонений гораздо шире. У HDC 0.2% только для температуры. В даташите на BME вообще указано, что 3% - это при 25C, а не на всём диапазоне.  В интернетах есть статьи, в которых приводятся графики натурных испытаний этих датчиков на измеряемом диапазоне - там картинка вообще так себе.

Но суть не в том. Не знаю, конечно, где у вас будет датчик висеть, но судя по длине провода - явно не в метеобудке. Скорее всего он будет выкинут за окно, где будет подогреваться теплом от дома, обдуваться ветром на высоте четвертого этажа. Таким образом разница показаний между ним и улицей, в той интерпретации, в которой она рассматривается в задаче о самодельной метеостанции - посмотреть на температуру, чтобы знать, какой толщины трусы одеть для похода в магазин - будет градусов пять, если касаться температуры. Что вам дадут высокоточные датчики в такой ситуации мне абсолютно непонятно. Ну, разве что позволят излишние деньги потратить и больше времени провести в конструировании девайса. Да еще и будет возможность менять сгнившие indoor сенсоры каждые полтора года.

Все это пишу не холивара ради, а чтобы понять - может я что-то не учитываю, выбирая датчик для себя.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

полностью поддерживаю предыдущего аратара. :)

katava
Offline
Зарегистрирован: 18.04.2012

Ну тогда остается :

BME280 - температура и влажность на улице (пока не сгниет) подключить по i2c. Когда сгниет - ds18b20 (только температура) 

Bme280 - температура, влажность, давление дома подключить по spi. 

alex_r61
Offline
Зарегистрирован: 20.06.2012

На улицу можно установить SI7021, внутри BME280. Всё повесить на I2C.

a5021
Offline
Зарегистрирован: 07.07.2013

katava пишет:

Bmp280 /bme280 сможет, интересно, на улице работать? Осилит влажность, холод, ветер, жару?

Подозреваю, что да, если от воды хорошо защитить. За 280-е не скажу, а 180-й у меня живет полтора года на открытом воздухе в компании с si7021  и bh1750.

katava
Offline
Зарегистрирован: 18.04.2012

a5021 пишет:

.. а 180-й у меня живет полтора года на открытом воздухе в компании с si7021  и bh1750.

si7021 влажность и bmp180 давление с температурой? По i2c? 

a5021
Offline
Зарегистрирован: 07.07.2013

Все так.

avr4
Offline
Зарегистрирован: 24.12.2015

Если подключить 2 датчика, то можно замутить например перепад давления на фильтах вентустановки или на диафрагме вентилятора. Много где можно приткнуть для контроля самоделку такую... А если более двух датчиков давления подключить, то можно мониторить систему одновременно во многих точках...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Столкнулся с проблемой инициализации датчика DHT22, с тестовым скетчем не хотел работать при включении на ESP8266, вопрос решился включением питания датчика через цифровой пин.
 

  dht.begin();
  pinMode(D5, OUTPUT);
  delay(500);
  digitalWrite(D5, HIGH);
  // D0 - GPIO6
  // D1 - GPIO5  // SDA I2C
  // D2 - GPIO4  // SCL I2C
  // D3 - GPIO0
  // D4 - GPIO2

 

avr4
Offline
Зарегистрирован: 24.12.2015

Может кто даст мне мудрый совет, почему у меня датчик DHT11 при питании 5V выдает влажность воздуха 17% а при питании 3.3V выдает 27% ?

Скетч у меня такой

#include <Wire.h>              // Подключение библиотеки I2C
#include <SFE_BMP180.h>        // Подключение библиотеки датчика давления
#include <LiquidCrystal_I2C.h> // Подключение библиотеки ЖК табло
#include <DHT.h>               // Подключение библиотеки датчика температуры и влажности
#define DHTPIN 2              // Номер пина для влажности и температуры 
 
SFE_BMP180 pressure;
LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 - 2 строки по 16 символов в каждой 
DHT dht(DHTPIN, DHT11                                                  ); 
void setup(){
    Serial.begin(9600);
    pressure.begin();
    dht.begin();
  lcd.init();                      // Инициализация дисплея  
  lcd.backlight();                 // Подключение подсветки 
  lcd.setCursor(0,0);              // Установка курсора в начало первой строки
  lcd.print("Hello !!!");          // Набор текста на первой строке
  lcd.setCursor(0,1);              // Установка курсора в начало второй строки
  lcd.print("ArduinoMaster !!!");  // Набор текста на второй строке
 
}
 
void loop(){
    double P;
    P = getPressure();
    Serial.print("Давление: ");
    //Serial.print(P, 1);
    //Serial.print(" гПа     "); 
    P = getPressure()/1.333; //если поделить на 1,333  (P = getPressure()/1.333;) то получим не гектопаскали, а мм.р.ст.
    Serial.print(P, 1); 
    Serial.print(" мм.рт.ст.     ");
    delay(4000);
float h = dht.readHumidity(); //Измеряем влажность 
float t = dht.readTemperature(); //Измеряем температуру 
if (isnan(h) || isnan(t)) {   // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу 
Serial.println("Ошибка считывания"); 
 return; } 
  Serial.print("Влажность: "); 
  Serial.print(h,1); 
  Serial.print(" %\t     "); 
  Serial.print("Температура: "); 
  Serial.print(t,1); 
  Serial.println(" *C");           //Вывод показателей на экран } 
  Serial.println();   
  lcd.clear();                      // Инициализация дисплея  
  lcd.setCursor(0,0);               // Установка курсора в начало первой строки
  lcd.print("P=");
  lcd.print(P,0);                    // Набор текста на первой строке
  lcd.print(" mm.Hg");
  lcd.setCursor(0,1);
  delay(4000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("H=");
  lcd.print(h,0);                  // Набор текста на первой строке
  lcd.print(" %");
  lcd.setCursor(0,1);              // Набор текста во второй строке
  lcd.print("T=");
  lcd.print(t,0);
  lcd.print(" C");
}
 
double getPressure(){
    char status;
    double T,P,p0,a;
 
    status = pressure.startTemperature();
    if (status != 0){
        // ожидание замера температуры
        delay(status);
        status = pressure.getTemperature(T);
        if (status != 0){
            status = pressure.startPressure(3);
            if (status != 0){
                // ожидание замера давления
                delay(status);
                status = pressure.getPressure(P,T);
                if (status != 0){
                    return(P);
                }
            }
        }
    }
}

 

Ralgxi
Offline
Зарегистрирован: 16.08.2021

Возможно не актуально, но есть же TCA9548A - расширитель I2c.