Hi, I am new to Arduino. I am trying to read the temperature and humidity values of the DHT11 sensor through the serial monitor. However, instead of outputting a value the sensor is outputting "nan" (not a number). I have double checked the pinout, checked continuity between the Nano and the sensor pins, and have adding a 5k pull-up resistor between the data pin and five volts according to the data sheet. Additionally, I have checked my code and have also ran it through Chat GPT. Still the same result. When troubleshooting I used a power supply to power to sensor and noticed there was very little current draw from the sensor (0-6mA). Could my sensor be faulty? Does anyone have any suggestions? Thank you.
Below is my code and what the serial monitor is outputting:
# include <DHT.h> // using the Adafruit library
# define Type DHT11
int sensePin = A7;
DHT HT(sensePin, DHT11);
float humidity;
float tempC;
float tempF;
int setTime = 500;
int dt = 1000;
void setup() {
Serial.begin(9600);
HT.begin();
delay(setTime);
}
void loop() {
humidity = HT.readHumidity();
tempC = HT.readTemperature();
tempF = HT.readTemperature(true);
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" Temperature C: ");
Serial.print(tempC);
Serial.print(" C ");
Serial.print(" Temperature F: ");
Serial.print(tempF);
Serial.println(" F ");
delay(dt);
}
Have you tried the library sample code that we know works? They use a digital pin. They use 8 bit humidity and 16 bit temperature integers, NOT float.
Make sure the sample works first.
Thank you. I just tried the example code and the serial monitor read "failed to read from DHT sensor "
here is the code if it helps:
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
#include "DHT.h"
#define DHTPIN 12 // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
}
Also check your wiring, A7 is an analog pin not a digital pin, all DHT models are digital not analog. It can be as easy as not having the right pin connected.
Thanks for the reply. I tried your code and I still got the same "nan" reading from the serial monitor. (I am using digital pin 12 on the Arduino Nano every).
No, the code is the sample code. It is either working but you are not understanding the output, or the sensor is bad (very common and why many of us don't use that sensor anymore)
The BMP180 Temperature Pressure sensor and the AHT10 Temperature/Humidity sensor.
They are both I2C so can be read from the same I2C connections if you want Temp/Humid/Pressure, otherwise just the AHT10 is needed. IIRC, the pins are mirrored so just plug them in back to back in a breadboard. If you need code examples it will take me a bit more time.