I get this error every time. I used the DHT tester file from this library. Which gives me an error.
And then I realized that in my code Arduino recognizes only the readTemperature
function, not readHumidity
, but it doesn't give any compile error. Also, when I read the sensor, this is the output:
Humidity Sensor Test
Temp: 0C, Humidity: 0%
Temp: 0C, Humidity: 0%
Temp: 0C, Humidity: 0%
My code is here:
//DHT11 Sensor:
#include "DHT.h"
#define DHTPIN 5 // which digital pin we're connected to
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//I2C LCD:
#include <Wire.h> // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>
// Set the LCD I2C address
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() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
int h = dht.readHumidity();
int t = dht.readTemperature();
// set the cursor to (0,0):
lcd.setCursor(0, 0);
// print from 0 to 9:
lcd.print("Temp: ");
lcd.print(t);
lcd.print("C");
// set the cursor to (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);
}
Also I have the 10k resistor between data and Vcc pins. Data is connected to digital pin 5. Has anyone had this problem before?
1 Answer 1
There are several versions of the DHT11 library for Arduino out there. This is the one that worked for me: https://github.com/adidax/dht11. Here is a simple sketch to test the sensor with the output going to the serial monitor.
// 5k ohm pull up resistor is used on the data line.
// Sensor operates at 5VDC.
// Data line connects to Arduino Uno pin 3.
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 3
// Sensor calibration. Start with 0 for each.
const int HumidityCorrection = -10; // -10 worked with my sensor.
const int CelsiusTemperatureCorrection = 2; // 2 worked with my sensor.
const float FahrenheitTemperatureCorrection = CelsiusTemperatureCorrection * 1.8;
// Update the serial display every 60 seconds.
const float UpdateSerialDisplay = 60000;
// Celsius to Fahrenheit conversion.
double Fahrenheit(double celsius){
return 1.8 * celsius + 32;
}
void setup(){
Serial.begin(9600);
// Minimum wait for good data recommended is 1 second.
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("OK");
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);
}
Once you get this working you can add the LCD code to it. Here is a link to the DHT 11 Humidity & Temperature Sensor manual / data sheet: http://www.micropik.com/PDF/dht11.pdf
lcd
declaration is wrong.