Ви не увійшли.
Сторінки 1
Вітаю. Хочу зробити проєкт на датчиках 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)
Неактивний
на довжині кабеля 20м. У мене ~4-5м
А як він себе веде на столі? DHT11 самий г-й датчик
Резистор подтяжки между data и питанием есть?
Спробуйте зменшити до 4,7-5 кОм
Справа в тім, що -(мінус живлення) датчика має бути спільним з платою Ардуіно.
Хоча датчик підключений кабелем FTP(витою екранованою парою) і з резистором 5-10к і конденсатором 0,1мФ довжина кабелю 4-7м все одно іноді чомусь іноді датчики не зчитують вологість.
Неактивний
Справа в тім, що -(мінус живлення) датчика має бути спільним з платою Ардуіно.
І що, хтось забороняє це зробити?
Заради експерименту дістав з загашника свій dht11 і 15 м витої пари. Датчик припаяний, без будь якої підтяжки, інші кінці жил просто вставлені в гнізда arduino uno. Ваш код, мій датчик: https://ibb.co/Jzn9TMw
Перекладена цитата з даташиті:"У типовій схемі застосування рекомендується використовувати навантажувальний резистор 4,7 К, якщо довжина з’єднувальної лінії коротша за 5 м. Якщо довжина навантажувального резистора перевищує 5 м, зменшіть опір навантажувального резистора відповідно до реальної ситуації." У мене на одному датчику резистор ~5к довжина кабеля~4-5м, на інших двох 10к довжина кабелю 5-10м. Контролер з Китаю Мега2560. Крім цього ще 11 датчиків Mh-z19b підключено. Закрадається думки про навідні магнітні поля, але кабель екранований, і датчикі не аналогові, а цифрові.
Неактивний
кабель екранований
І заземлений?
Якщо потрібно підключити датчик вологості на великій відстані (100м і навіть 300м), подивіться ось цей мій варіант:
https://github.com/honechko/DS2450/tree … amples/SPI
Там bme680 підключається по 1-wire, є приклад коду для зчитування на Ардуіно.
Той однодротовий інтерфейс, який використовується в датчиках типу DHT11, AM2320 і подібних, це не Maxim/Dallas 1-wire, він менш завадозахищений.
Доречі, якраз сьогодні спаяв ще один такий датчик)
Згодом напишу і викладу коротеньку статтю про виготовлення і підключення до 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
Неактивний
Нарисуйте схему, как и что у Вас подключено (в т.ч. и экран)
ivvi30 пише:кабель екранований
І заземлений?
Пробував і одного з них заземляв. Проблема як на мене напевне в контактах підключення до ардуіни чи й сам не знаю що ще може бути. Бо щось поперепідключаю поворушу, і працює. Побачимо як стабільно це буде працювати.
Неактивний
Якщо потрібно підключити датчик вологості на великій відстані (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м.
Неактивний
Сторінки 1