Go Down

Topic: Trouble with DHT22. (Read 383 times) previous topic - next topic


I am trying to use the information from the dht22 sensor to control other pins, and can't seem to get it to work. I have an Arduino Uno attached to a relay board and am trying to get it to switch on circuits when the temp/humidity drops below a certain level. As of right now both circuits stay on no matter what. Here is my code, and any help is appreciated.

Code: [Select]

int heat = 4; // set heat circuit to pin 4
int humid = 8; // set humidity circuit to pin 8

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT22   // DHT 22  (AM2302)

// 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 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor for normal 16mhz Arduino
// NOTE: For working with a faster chip, like an Arduino Due or Teensy, you
// might need to increase the threshold for cycle counts considered a 1 or 0.
// You can do this by passing a 3rd parameter for this threshold.  It's a bit
// of fiddling to find the right value, but in general the faster the CPU the
// higher the value.  The default for a 16mhz AVR is a value of 6.  For an
// Arduino Due that runs at 84mhz a value of 30 works.
// Example to initialize DHT sensor for Arduino Due:

void setup() {
  pinMode (heat , OUTPUT);
  pinMode (humid , OUTPUT);
  Serial.println("DHTxx test!");

void loop() {
  // Wait a few seconds between measurements.
  // 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
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  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("Failed to read from DHT sensor!");

  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);

if ('Humidity' <= 90) // declare function if humidity drops below 90%
  digitalWrite , humid , HIGH ; // Turn humidity circuit on
  digitalWrite , humid , LOW; //if humidity is above 90% keep circuit off

if ('Temperature' <= 25)// declare function if temp drops below 25 Celsius
  digitalWrite , heat , HIGH; //turn heat circuit on
  digitalWrite , heat , LOW; // if heat is above 25 Celsius keep heat circuit off

  Serial.print("Humidity: "); //send info to monitor to visually verify data
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(" *C ");
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.println(" *F");




if ('Humidity' <= 90) // declare function if humidity drops below 90%

Here you compare a character constant and a numeric constant, what will yield always a constant result - in ASCII either TRUE since 'H'<90, or FALSE since 'Hu'>90. You want something like

if (h <= 90) // declare function if humidity drops below 90%

to compare the actual humidity, supposedly stored in the variable h, against a constant threshold value.


Thank you. I changed the characters accordingly and still seem to have the same problem though.


please try

digitalWrite , humid , HIGH ; // Turn humidity circuit on


digitalWrite(humid , HIGH) ; // Turn humidity circuit on
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)


Working perfectly now!! Thank you both so much for your help! I'm really looking forward to doing this project now.

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131