Психрометр из двух ds12b20

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
Здравствуйте.Подскажите,измерения влажности на основе различия температур двух термометров,один из которых (мокрый),можно реализовать на
ESP8266 microcontroller NodeMCU.Это нужно для метеостанции на винограднике,просто мне кажется надежнее измерять влажность двумя термометрами чем DHT22.
В интернете нечего толком так и не нашел.
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
В интернете нечего толком так и не нашел.
а что там искать? как измерить температуру датчиком ds12b20 - есть в примерах.
Далее находите в любом справочнике психрометрическую табличку и по ней вычисляете влажность исходя из разницы двух термометров.

На мой взгляд. в данном случае куда большую проблему будет представлять надежное увлажнение одного из датчиков
 
  • Лойс +1
Реакции: alleat

Un_ka

★★✩✩✩✩✩
13 Июл 2020
243
77
других форумов.
надежное увлажнение одного из датчиков
Причём дистиллированной водой. Хотя для такого можно и не дистиллированную.
Я так понимаю, что прибор будет либо под открытым небом, либо в будке, но всё равно открыт всем ветрам. Это может повлиять на точность.
Обеспечить подачу воды можно так.
IMG_20200910_191848.jpg
 
Изменено:

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
Причём дистиллированной водой. Хотя для такого можно и не дистиллированную.
Я так понимаю, что прибор будет либо под открытым небом, либо в будке, но всё равно открыт всем ветрам. Это может повлиять на точность.
Обеспечить подачу воды можно так.
Посмотреть вложение 16086
Та как один мочить,а второй нет вариантов множество,меня интересовал вопрос по поводу,это возможно реализовать на этом контроллере или какой другой нужен?
Ещё вопрос про передатчики на 433МГц,к ним можно много датчиков цеплять или ограниченное число?
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
то возможно реализовать на этом контроллере или какой другой нужен?
на каком "этом" - есп8266 ? - можно
Ещё вопрос про передатчики на 433МГц,к ним можно много датчиков цеплять или ограниченное число?
вопрос не понятен. Сами по себе передатчики умеют только передавать информацию, обрабатывать сигнал с датчиков должен микроконтроллер. Так что строго говоря ответ - к передатчикам нельзя цеплять ни одного датчика
 

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
на каком "этом" - есп8266 ? - можно

вопрос не понятен. Сами по себе передатчики умеют только передавать информацию, обрабатывать сигнал с датчиков должен микроконтроллер. Так что строго говоря ответ - к передатчикам нельзя цеплять ни одного датчика
А как же тогда делают выносные датчики температуры? Один контроллер дома,а температура по радиоканалу передается в дом,а сигнал полученный приемником подключенным к домашнему контроллеру уже обрабатывает сырые полученные данные с уличного датчика.Или ставится связка датчик+контроллер+передатчик на улице и приемник+контроллер дома?
 

ТехнарьКто

★★★★★✩✩
13 Янв 2020
270
438
Здравствуйте.Подскажите,измерения влажности на основе различия температур двух термометров,один из которых (мокрый),можно реализовать на
ESP8266 microcontroller NodeMCU.
Так может Вам просто нужно более точное, чем DHT22 измерение влажности и передача по радиоканалу полученных значений?

Это нужно для метеостанции на винограднике,просто мне кажется надежнее измерять влажность двумя термометрами чем DHT22.
В интернете нечего толком так и не нашел.
DHT22 можно использовать для обучения. Как датчик для измерения влажности использовать в виду крайне низкой точности, не рекомендуется.
Купите si7021.
2-si7021.jpg
У Китайцев он дешевый и конечно тоже наверняка отбраковка, но поддающаяся коррекции с получением хорошей точности. Подключаете si7021 к ESP8266 для получения данных с датчика. Калибруете показания. Для калибровки в герметично закрываемый пластиковый контейнер например для еды, насыпаете обычной пищевой соли. Соль обязательно без добавок с максимально возможным процентным содержанием соли, например для засолки, а лучше для посудомоечных машин так как там меньше всего примесей. В соль наливаете воды либо фильтрованной, а лучше дистиллированную воду которая продается для заливки в аккумуляторы автомобилей.
Воды налить так, чтобы соль с водой представляли из себя кашу. Датчик поместить в контейнер так, чтобы он не контактировал с солью. Подвесить над этой кашей. Дополнительно герметизировать пластиковый контейнер, например обмотав пленкой. Провода от датчика выводите наружу так, чтобы внутрь не попадал воздух извне. Поместить конструкцию в тепло изолированный контейнер, пенопластовую коробку ;). Пенопластовый ящик позволит снизить воздействие внешних перепадов температур, например сквозняк из форточки. Выдерживаете сутки. Записываете значение влажности. Затем считаете коэффициент корректировки.
Ожидаемая влажность
Безымянный.jpg
Ожидаемая влажность при 25 градусах Цельсия составляет 75,45. Грубо говоря 75.
Записное значение влажности например 83. Значит коррекция наклона характеристики будет 75/83=0,9 примерно 0,9.
Полученное с датчика значение умножать на посчитанный коэффициент. Получается дешево и достаточно точно.
Например в сравнении с точными датчиками SHT71 и SHT85 после корректировки показания у si7021 близки в достаточно большом диапазоне.
Screenshot.png

Один esp8266 использовать для подключения датчика. Второй esp8266 как контроллер с дисплеем и если нужно и логикой управления.
Между собой esp8266 можно объединить с помощью беспроводной сети по UDP протоколу. В прошивке ESP Easy есть возможность передачи данных с одного устройства на другое. Можно организовать UDP сеть между ESP8266. ESP8266 будет и контроллером и приемопередатчиком.
Идея измерения психометрическим методом интересна, но для Вашего случая прямое измерение откалиброванным более точным датчиком наверное будет лучше.

Но если очень хочется то Психрометрический измеритель влажности на ардуино там даже скетч есть для двух датчиков температуры из DHT22. Вам остается только подправить скетч под Ваши датчики температуры.

Успехов.
 

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
Вообщим приехало вот это борохло)) термодатчик обычный далас работает,АМ2320 пока не пробовал,так как второй день *бусь с BME280.Все в интернете перерыл все скетчи перепробовал,редоктировал файлы библиотек,толку нет.Не видет его ардуинка и все.Поиск адресов запускаю i2C но фонд.
 

Вложения

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
при заливке этого выдает







C++:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

void setup() {
    Serial.begin(115200);
    while(!Serial);    // time to get serial running
    Serial.println(F("BME280 test"));

    unsigned status;
    
    // default settings
    status = bme.begin();  
    // You can also pass in a Wire library object like &Wire2
    // status = bme.begin(0x76, &Wire2)
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
        Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
        Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
        Serial.print("        ID of 0x60 represents a BME 280.\n");
        Serial.print("        ID of 0x61 represents a BME 680.\n");
        while (1) delay(10);
    }
    
    Serial.println("-- Default Test --");
    delayTime = 1000;

    Serial.println();
}


void loop() { 
    printValues();
    delay(delayTime);
}


void printValues() {
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);
    Serial.println(" hPa");

    Serial.print("Approx. Altitude = ");
    Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
    Serial.println(" m");

    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");

    Serial.println();
}
}
 

Вложения

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1

Вложения

Изменено:

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
А сканер тот что в 12 посту ? А тот сканер, что в примерах к wire что то показывает?
C++:
#include <Wire.h>

void setup(){
    Wire.begin();

    Serial.begin(115200);
    while (!Serial);
    Serial.println("\nI2C Scanner");
}

void loop(){
    byte error, address;
    int nDevices;

    Serial.println("Scanning...");

    nDevices = 0;
    for(address = 8; address < 127; address++ ){
        Wire.beginTransmission(address);
        error = Wire.endTransmission();

        if (error == 0){
            Serial.print("I2C device found at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.print(address,HEX);
            Serial.println(" !");

            nDevices++;
        }
        else if (error==4) {
            Serial.print("Unknow error at address 0x");
            if (address<16)
                Serial.print("0");
            Serial.println(address,HEX);
        }
    }
    if (nDevices == 0)
        Serial.println("No I2C devices found\n");
    else
        Serial.println("done\n");

    delay(5000);
}

Выдает
Scanning...
No I2C devices found
 

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
Кстати, не вижу стабилизатора на плате. Ты на датчик случайно не 5В подаёшь? Может он уже того...
Нет,не 5))) Короче переключил на пин 2 и1 и сканер показал адрес 0x76.
Но при коде
C++:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

void setup() {
    Serial.begin(9600);
    while(!Serial);    // time to get serial running
    Serial.println(F("BME280 test"));

    unsigned status;
    
    // default settings
    status = bme.begin(); 
    // You can also pass in a Wire library object like &Wire2
    // status = bme.begin(0x76, &Wire2)
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
        Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
        Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
        Serial.print("        ID of 0x60 represents a BME 280.\n");
        Serial.print("        ID of 0x61 represents a BME 680.\n");
        while (1) delay(10);
    }
    
    Serial.println("-- Default Test --");
    delayTime = 1000;

    Serial.println();
}


void loop() {
    printValues();
    delay(delayTime);
}


void printValues() {
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);
    Serial.println(" hPa");

    Serial.print("Approx. Altitude = ");
    Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
    Serial.println(" m");

    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");

    Serial.println();
}
Выдает
⸮txW⸮⸮,⸮⸮lb8⸮BME280 test
Could not find a valid BME280 sensor, check wiring, address, sensor ID!
SensorID was: 0xFF
ID of 0xFF probably means a bad address, a BMP 180 or BMP 085
ID of 0x56-0x58 represents a BMP 280,
ID of 0x60 represents a BME 280.
ID of 0x61 represents a BME 680.
 

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
А вот тут что?

C++:
// You can also pass in a Wire library object like &Wire2
// status = bme.begin(0x76, &Wire2)
А что разве так нужно вписать
// default settings
status = bme.begin(0x76);
Оно тогда выдает следущее

Could not find a valid BME280 sensor, check wiring, address, sensor ID!
SensorID was: 0x58
ID of 0xFF probably means a bad address, a BMP 180 or BMP 085
ID of 0x56-0x58 represents a BMP 280,
ID of 0x60 represents a BME 280.
ID of 0x61 represents a BME 680.
 

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1

alleat

✩✩✩✩✩✩✩
10 Сен 2020
23
1
Сделай проще, посмотри другую библиотеку под этот датчик, благо их море. У меня стоит вот такая https://www.github.com/finitespace/BME280 , но я уже не помню что проверял )

Пардону просим , эта под ESP 8266
Temp: 22.25°C Humidity: 0.00% RH Pressure: 101907.84Pa

))))

C++:
/*
BME280 I2C Test.ino

This code shows how to record data from the BME280 environmental sensor
using I2C interface. This file is an example file, part of the Arduino
BME280 library.

GNU General Public License

Written: Dec 30 2015.
Last Updated: Oct 07 2017.

Connecting the BME280 Sensor:
Sensor              ->  Board
-----------------------------
Vin (Voltage In)    ->  3.3V
Gnd (Ground)        ->  Gnd
SDA (Serial Data)   ->  A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro
SCK (Serial Clock)  ->  A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro

 */

#include <BME280I2C.h>
#include <Wire.h>

#define SERIAL_BAUD 115200

BME280I2C bme;    // Default : forced mode, standby time = 1000 ms
                  // Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,

//////////////////////////////////////////////////////////////////
void setup()
{
  Serial.begin(SERIAL_BAUD);

  while(!Serial) {} // Wait

  Wire.begin();

  while(!bme.begin())
  {
    Serial.println("Could not find BME280 sensor!");
    delay(1000);
  }

  switch(bme.chipModel())
  {
     case BME280::ChipModel_BME280:
       Serial.println("Found BME280 sensor! Success.");
       break;
     case BME280::ChipModel_BMP280:
       Serial.println("Found BMP280 sensor! No Humidity available.");
       break;
     default:
       Serial.println("Found UNKNOWN sensor! Error!");
  }
}

//////////////////////////////////////////////////////////////////
void loop()
{
   printBME280Data(&Serial);
   delay(500);
}

//////////////////////////////////////////////////////////////////
void printBME280Data
(
   Stream* client
)
{
   float temp(NAN), hum(NAN), pres(NAN);

   BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
   BME280::PresUnit presUnit(BME280::PresUnit_Pa);

   bme.read(pres, temp, hum, tempUnit, presUnit);

   client->print("Temp: ");
   client->print(temp);
   client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
   client->print("\t\tHumidity: ");
   client->print(hum);
   client->print("% RH");
   client->print("\t\tPressure: ");
   client->print(pres);
   client->println("Pa");

   delay(1000);
}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Да я аж сам подключил аналогичный датчик и получил ту же фигню в порт. запустил через скетч примера advancedsettings.ino
А потом зашел в код библиотеки и руками сменил адрес 77 на 76 и заработали остальные примеры адафрутов.