Датчик Arduino Uno DHT11 Не удалось прочитать данные с датчика DHT
Я получаю эту ошибку каждый раз. Я использовал файл тестера DHT из этой библиотеки. Который выдает мне ошибку.
И тут я понял, что в моем коде Arduino распознает только функцию readTemperature
, а не readHumidity
, но не выдает никаких ошибок компиляции. Кроме того, когда я считываю показания датчика, вот такой вывод:
Тест датчика влажности
Температура: 0C, Влажность: 0%
Температура: 0C, Влажность: 0%
Температура: 0C, Влажность: 0%
Мой код здесь:
//Датчик DHT11:
#include "DHT.h"
#define DHTPIN 5 // к какому цифровому выводу мы подключены
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//ЖК-дисплей I2C:
#include <Wire.h> // Поставляется с Arduino IDE
#include <LiquidCrystal_I2C.h>
// Установите адрес I2C ЖК-дисплея
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup() {
Serial.begin(9600);
delay(300);
lcd.begin(16,2);
Serial.println("Humidity Sensor Test");
dht.begin();
delay(300);
}
void loop() {
// Измерение температуры или влажности занимает около 250 миллисекунд!
// Показания датчика также могут быть «старыми» до 2 секунд (это очень медленный датчик)
int h = dht.readHumidity();
int t = dht.readTemperature();
// устанавливаем курсор на (0,0):
lcd.setCursor(0, 0);
// распечатать от 0 до 9:
lcd.print("Temp: ");
lcd.print(t);
lcd.print("C");
// устанавливаем курсор на (16,1):
lcd.setCursor(0,1);
lcd.print("Humidity: ");
lcd.print(h);
lcd.print("%");
Serial.print("Temp: ");
Serial.print(t);
Serial.print("C, Humidity: ");
Serial.print(h);
Serial.println("%");
delay(2500);
}
Также у меня есть резистор 10k между контактами данных и Vcc. Данные подключены к цифровому контакту 5. У кого-нибудь была такая проблема раньше?
1 ответ
Существует несколько версий библиотеки DHT11 для Arduino. Вот та, которая сработала у меня: https://github.com/adidax/dht11. Вот простой скетч для проверки датчика с выводом на последовательный монитор.
// На линии данных используется подтягивающий резистор сопротивлением 5 кОм.
// Датчик работает при напряжении 5 В постоянного тока.
// Линия данных подключается к контакту 3 Arduino Uno.
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 3
// Калибровка датчика. Начните с 0 для каждого.
const int HumidityCorrection = -10; // -10 сработало с моим датчиком.
const int CelsiusTemperatureCorrection = 2; // 2 сработало с моим датчиком.
const float FahrenheitTemperatureCorrection = CelsiusTemperatureCorrection * 1.8;
// Обновлять последовательный дисплей каждые 60 секунд.
const float UpdateSerialDisplay = 60000;
// Перевод градусов Цельсия в градусы Фаренгейта.
double Fahrenheit(double celsius){
return 1.8 * celsius + 32;
}
void setup(){
Serial.begin(9600);
// Минимальное рекомендуемое время ожидания для получения качественных данных — 1 секунда.
delay(2000);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
}
void loop(){
Serial.println("");
int chk = DHT11.read(DHT11PIN);
switch(chk){
case DHTLIB_OK:
//Serial.println("ОК");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Read sensor: Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Read sensor: Time out error");
break;
default:
Serial.println("Read sensor: Unknown error");
break;
}
Serial.print("Humidity: ");
Serial.print("\t");
Serial.print(DHT11.humidity + HumidityCorrection);
Serial.println(" %");
Serial.print("Temperature: ");
Serial.print("\t");
Serial.print(DHT11.temperature + CelsiusTemperatureCorrection);
Serial.println(" C");
Serial.print("Temperature: ");
Serial.print("\t");
Serial.print(round(Fahrenheit(DHT11.temperature) + FahrenheitTemperatureCorrection));
Serial.println(" F");
delay(UpdateSerialDisplay);
}
Как только вы заработаете, вы сможете добавить к нему код ЖК-дисплея. Вот ссылка на руководство/паспорт датчика влажности и температуры DHT 11: http://www.micropik.com/PDF/dht11.pdf
- Датчик освещенности BH1750 всегда дает выходной сигнал 54612 лк
- Ошибка повторного объявления библиотеки Arduino
- Тензодатчик Arduino HX711 сильно дрейфует
- Мой ультразвуковой датчик показывает диапазон только 4 см?
- Попытка прочитать разные уровни газа с помощью датчика газа MQ2
- Почему вывод отправки влияет на вывод приема с помощью библиотеки емкостных датчиков Arduino
- Соответствие шаблону вибрации
- Библиотека клавиатуры не работает или я где-то ошибаюсь