#1 2023-09-27 13:10:57

ivvi30
Учасник
Зареєстрований: 2023-09-27
Повідомлень: 16

DHT11 помилка читання.

Вітаю. Хочу зробити проєкт на датчиках DHT11 і MH-z19b. Проблема в тому що з датчиків DHT11 не можу зчитати вологість(температура мало важлива). Купував у Китаї, купував і на Аадуіно.юа, і з резистором і без, не зчитується вологість. На бібліотеці DHT.h іноді показує якісь неправдиві показники рідко раз в 10-60с і різнились 10% через 30с-60с може 80% бути. В даташиті Asair dht11 пишіть що можуть працювати і на довжині кабеля 20м. У мене ~4-5м FTP(вита пара) 8 жил, +, -, і на один на data(думав можливо січення мале, додавав спаював 2-6 жил, нічого не допомогло. Не можу зрозуміти в чому справа. Думав наводки але 1 це цифровий датчик, 2 є один провід до якого під'єднаний тільки 1 датчик DHT11.

#include <DHT.h>

#define DHTPIN_1 2
#define DHTTYPE DHT11

DHT dht_vanna_1p(DHTPIN_1, DHTTYPE);

#define FAN_PIN_1 22 // Пін для управління vent_vanna_1p

bool fanState_1 = false;

unsigned long lastHumidityCheckTime_1 = 0;
unsigned long lastHumidityPrintTime = 0;

unsigned long lastFanOffTime_1 = 0;

const int maxSavedHumidityReadings = 30;
int savedHumidityReadings_1[maxSavedHumidityReadings];
int savedHumidityIndex_1 = 0;

int lastValidHumidity_1 = 0;

const unsigned long humidityCheckInterval = 5000;
const unsigned long fanOffDelay = 60000;
const int minHumidity = 5;
const int maxHumidity = 95;

void setup() {
  Serial.begin(9600);
  delay(3000); // Затримка 3 секунди при першому завантаженні
  dht_vanna_1p.begin();

  pinMode(FAN_PIN_1, OUTPUT);

  digitalWrite(FAN_PIN_1, HIGH);
}

void loop() {
  unsigned long currentMillis = millis();

  // Перевіряємо вологість для vent_vanna_1p
  if (currentMillis - lastHumidityCheckTime_1 >= humidityCheckInterval) {
    lastHumidityCheckTime_1 = currentMillis;
    int humidity_1 = round(dht_vanna_1p.readHumidity());

    if (!isnan(humidity_1) && humidity_1 >= minHumidity && humidity_1 <= maxHumidity) {
      lastValidHumidity_1 = humidity_1;
      saveHumidityReading(savedHumidityReadings_1, savedHumidityIndex_1, humidity_1);

      if (currentMillis - lastHumidityPrintTime >= 10000) {
        Serial.print("Вологість vent_vanna_1p: ");
        Serial.print(humidity_1);
        Serial.println(" %");
        lastHumidityPrintTime = currentMillis;
      }

      if (humidity_1 > 65 && !fanState_1) {
        digitalWrite(FAN_PIN_1, LOW);
        fanState_1 = true;
      } else if (humidity_1 <= 65 && fanState_1 && currentMillis - lastFanOffTime_1 >= fanOffDelay) {
        digitalWrite(FAN_PIN_1, HIGH);
        fanState_1 = false;
        lastFanOffTime_1 = currentMillis;
      }
    } else {
      Serial.println("Помилка зчитування вологості vent_vanna_1p! Використовуємо останнє дійсне значення: " + String(lastValidHumidity_1) + " %");
      humidity_1 = getLastValidHumidity(savedHumidityReadings_1, savedHumidityIndex_1);
      lastValidHumidity_1 = humidity_1;
    }
  }
}

void saveHumidityReading(int readings[], int &index, int humidity) {
  readings[index] = humidity;
  index = (index + 1) % maxSavedHumidityReadings;
}

int getLastValidHumidity(int readings[], int index) {
  int sum = 0;
  int count = 0;

  for (int i = 0; i < maxSavedHumidityReadings; i++) {
    if (readings[i] >= minHumidity && readings[i] <= maxHumidity) {
      sum += readings[i];
      count++;
    }
  }

  if (count > 0) {
    return sum / count;
  } else {
    return 0;
  }
}

Остання редакція ivvi30 (2023-09-27 13:12:39)

Неактивний

#2 2023-09-27 13:19:46

г0cть
Гість

Re: DHT11 помилка читання.

ivvi30 пише:

на довжині кабеля 20м. У мене ~4-5м

А як він себе веде на столі? DHT11 самий г-й датчик

#3 2023-09-27 16:04:45

ivvi30
Учасник
Зареєстрований: 2023-09-27
Повідомлень: 16

Re: DHT11 помилка читання.

г0cть пише:
ivvi30 пише:

на довжині кабеля 20м. У мене ~4-5м

А як він себе веде на столі? DHT11 самий г-й датчик

На макетній платі працює ніби добре.

Неактивний

#4 2023-09-27 18:59:49

г0cть
Гість

Re: DHT11 помилка читання.

Резистор подтяжки между data и питанием есть?

#5 2023-09-28 11:28:53

ivvi30
Учасник
Зареєстрований: 2023-09-27
Повідомлень: 16

Re: DHT11 помилка читання.

г0cть пише:

Резистор подтяжки между data и питанием есть?

Ставив і резистор 10к і щось нічого не допомогло.

Неактивний

#6 2023-09-28 12:09:33

г0cть
Гість

Re: DHT11 помилка читання.

Спробуйте зменшити до 4,7-5 кОм

#7 2023-10-01 13:48:57

ivvi30
Учасник
Зареєстрований: 2023-09-27
Повідомлень: 16

Re: DHT11 помилка читання.

Справа в тім, що -(мінус живлення) датчика має бути спільним з платою Ардуіно.
Хоча датчик підключений кабелем FTP(витою екранованою парою) і з резистором 5-10к і конденсатором 0,1мФ довжина кабелю 4-7м все одно іноді чомусь іноді датчики не зчитують вологість.

Неактивний

#8 2023-10-01 14:05:34

г0cть
Гість

Re: DHT11 помилка читання.

ivvi30 пише:

Справа в тім, що -(мінус живлення) датчика має бути спільним з платою Ардуіно.

І що, хтось забороняє це зробити?

#9 2023-10-01 15:25:48

г0cть
Гість

Re: DHT11 помилка читання.

Заради експерименту дістав з загашника свій dht11 і 15 м витої пари. Датчик припаяний, без будь якої підтяжки, інші кінці жил просто вставлені в гнізда arduino uno. Ваш код, мій датчик: https://ibb.co/Jzn9TMw

#10 2023-10-01 15:57:46

ivvi30
Учасник
Зареєстрований: 2023-09-27
Повідомлень: 16

Re: DHT11 помилка читання.

Перекладена цитата з даташиті:"У типовій схемі застосування рекомендується використовувати навантажувальний резистор 4,7 К, якщо довжина з’єднувальної лінії коротша за 5 м. Якщо довжина навантажувального резистора перевищує 5 м, зменшіть опір навантажувального резистора відповідно до реальної ситуації." У мене на одному датчику резистор ~5к довжина кабеля~4-5м, на інших двох 10к довжина кабелю 5-10м. Контролер з Китаю Мега2560. Крім цього ще 11 датчиків Mh-z19b підключено. Закрадається думки про навідні магнітні поля, але кабель екранований, і датчикі не аналогові, а цифрові.

Неактивний

#11 2023-10-01 16:07:37

г0cть
Гість

Re: DHT11 помилка читання.

ivvi30 пише:

кабель екранований

І заземлений?

#12 2023-10-01 17:07:28

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 433

Re: DHT11 помилка читання.

Якщо потрібно підключити датчик вологості на великій відстані (100м і навіть 300м), подивіться ось цей мій варіант:
https://github.com/honechko/DS2450/tree … amples/SPI
Там bme680 підключається по 1-wire, є приклад коду для зчитування на Ардуіно.
Той однодротовий інтерфейс, який використовується в датчиках типу DHT11, AM2320 і подібних, це не Maxim/Dallas 1-wire, він менш завадозахищений.
Доречі, якраз сьогодні спаяв ще один такий датчик)
front2.jpg
Згодом напишу і викладу коротеньку статтю про виготовлення і підключення до Linux. Там підключення в одну стрічку:
# echo 0 bme680 >/sys/devices/w1_bus_master1/20-594e480f4245/spi_bind
# cat /sys/devices/w1_bus_master1/20-594e480f4245/spi_master/spi0/spi0.0/iio\:device0/in_humidityrelative_input
37.518000000
# cat /sys/devices/w1_bus_master1/20-594e480f4245/spi_master/spi0/spi0.0/iio\:device0/in_temp_input             
25560
# cat /sys/devices/w1_bus_master1/20-594e480f4245/spi_master/spi0/spi0.0/iio\:device0/in_pressure_input         
999.640000000

Неактивний

#13 2023-10-02 06:42:29

гоcть
Гість

Re: DHT11 помилка читання.

Нарисуйте схему, как и что у Вас подключено (в т.ч. и экран)

#14 2023-10-06 10:36:54

ivvi30
Учасник
Зареєстрований: 2023-09-27
Повідомлень: 16

Re: DHT11 помилка читання.

г0cть пише:
ivvi30 пише:

кабель екранований

І заземлений?

Пробував і одного з них заземляв. Проблема як на мене напевне в контактах підключення до ардуіни чи й сам не знаю що ще може бути. Бо щось поперепідключаю поворушу, і працює. Побачимо як стабільно це буде працювати.

Неактивний

#15 2023-10-06 10:37:57

ivvi30
Учасник
Зареєстрований: 2023-09-27
Повідомлень: 16

Re: DHT11 помилка читання.

Honey пише:

Якщо потрібно підключити датчик вологості на великій відстані (100м і навіть 300м), подивіться ось цей мій варіант:
https://github.com/honechko/DS2450/tree … amples/SPI
Там bme680 підключається по 1-wire, є приклад коду для зчитування на Ардуіно.
Той однодротовий інтерфейс, який використовується в датчиках типу DHT11, AM2320 і подібних, це не Maxim/Dallas 1-wire, він менш завадозахищений.
Доречі, якраз сьогодні спаяв ще один такий датчик)
https://forum.arduino.ua/img/members/2940/front2.jpg
Згодом напишу і викладу коротеньку статтю про виготовлення і підключення до Linux. Там підключення в одну стрічку:
# echo 0 bme680 >/sys/devices/w1_bus_master1/20-594e480f4245/spi_bind
# cat /sys/devices/w1_bus_master1/20-594e480f4245/spi_master/spi0/spi0.0/iio:device0/in_humidityrelative_input
37.518000000
# cat /sys/devices/w1_bus_master1/20-594e480f4245/spi_master/spi0/spi0.0/iio:device0/in_temp_input             
25560
# cat /sys/devices/w1_bus_master1/20-594e480f4245/spi_master/spi0/spi0.0/iio:device0/in_pressure_input         
999.640000000

Підключаю на ~4-10м.

Неактивний

#16 2023-10-06 10:40:30

ivvi30
Учасник
Зареєстрований: 2023-09-27
Повідомлень: 16

Re: DHT11 помилка читання.

гоcть пише:

Нарисуйте схему, как и что у Вас подключено (в т.ч. и экран)

Тяжкого просите. 3 датчика DHT11, 11 MH-Z19b, до Mega 2560. Також 2 релє 4, 8 каналів.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму