DHT11 values fly off the rails when activating 8 relays


hello everyone. 1st post here.

i have small project arduino uno r3, soft 1.6.13, 1 push button, 1 dht11 , strip of 8 relays.

everything works fine. when press button, 8 relays kick in. when release, 8 relays go sleep.

my problem dht. when relays disengaged, temperatures showing 20c , humidity @ 19%. when press button , engage relays, temperature increases instantly 24c , humidity 30%.

the ultimate goal trigger more , more relay temperature rises... 1 relay per deg celsius. , see it, have 4 relay problem here...

i've tested series of ifs , blowing on dht11, breath can temperature high enough trigger relays. thing when let cool slowly... temperature goes this: 30, 29, 28, 27 (1st relay shutting down), 26 (second relay), 22 (4 relays in snap turn off), 21, 20... never range 25, 24, 23... puzzles me.


here code:
code: [select]

#include <dht.h>

dht dht;

#define dht11_pin 11
int relaypin1 = 2;                 // in1 connected digital pin 2
int relaypin2 = 3;                 // in2 connected digital pin 3
int relaypin3 = 4;                 // in3 connected digital pin 4
int relaypin4 = 5;                 // in4 connected digital pin 5
int relaypin5 = 6;                 // in5 connected digital pin 6
int relaypin6 = 7;                 // in6 connected digital pin 7
int relaypin7 = 8;                 // in7 connected digital pin 8
int relaypin8 = 9;                 // in8 connected digital pin 9

void setup() {
  // put setup code here, run once:
  pinmode(12, input_pullup);
  serial.begin(115200);
  pinmode(relaypin1, output);      // sets digital pin output
  pinmode(relaypin2, output);      // sets digital pin output
  pinmode(relaypin3, output);      // sets digital pin output
  pinmode(relaypin4, output);      // sets digital pin output
  pinmode(relaypin5, output);      // sets digital pin output
  pinmode(relaypin6, output);      // sets digital pin output
  pinmode(relaypin7, output);      // sets digital pin output
  pinmode(relaypin8, output);      // sets digital pin output
  digitalwrite(relaypin1, high);        // prevents relays starting engaged
  digitalwrite(relaypin2, high);        // prevents relays starting engaged
  digitalwrite(relaypin3, high);        // prevents relays starting engaged
  digitalwrite(relaypin4, high);        // prevents relays starting engaged
  digitalwrite(relaypin5, high);        // prevents relays starting engaged
  digitalwrite(relaypin6, high);        // prevents relays starting engaged
  digitalwrite(relaypin7, high);        // prevents relays starting engaged
  digitalwrite(relaypin8, high);        // prevents relays starting engaged
}

void loop() {
  // put main code here, run repeatedly:

  const int ctrlpin=14; // use whichever pin wish.  i have used a0 maps d14.
  pinmode(ctrlpin, output);

  // read data
  int chk = dht.read11(dht11_pin);
  serial.print("temperature = ");
  serial.println(dht.temperature);
  serial.print("humidity = ");
  serial.println(dht.humidity);


  if (digitalread(12) == low) {
  digitalwrite(relaypin1, low);        // turn relay on
  digitalwrite(relaypin2, low);        // turn relay on
  digitalwrite(relaypin3, low);        // turn relay on
  digitalwrite(relaypin4, low);        // turn relay on
  digitalwrite(relaypin5, low);        // turn relay on
  digitalwrite(relaypin6, low);        // turn relay on
  digitalwrite(relaypin7, low);        // turn relay on
  digitalwrite(relaypin8, low);        // turn relay on
  } else {
  digitalwrite(relaypin1, high);        // turn relay off
  digitalwrite(relaypin2, high);        // turn relay off
  digitalwrite(relaypin3, high);        // turn relay off
  digitalwrite(relaypin4, high);        // turn relay off
  digitalwrite(relaypin5, high);        // turn relay off
  digitalwrite(relaypin6, high);        // turn relay off
  digitalwrite(relaypin7, high);        // turn relay off
  digitalwrite(relaypin8, high);        // turn relay off
  }    
}



here serie of ifs test it:
code: [select]
if (dht.temperature > 20) {
    digitalwrite(relaypin1, low);
}
if (dht.temperature > 21) {
    digitalwrite(relaypin2, low);
}
if (dht.temperature > 22) {
    digitalwrite(relaypin3, low);
}
if (dht.temperature > 23) {
    digitalwrite(relaypin4, low);
}
if (dht.temperature > 24) {
    digitalwrite(relaypin5, low);
}
if (dht.temperature > 25) {
    digitalwrite(relaypin6, low);
}
if (dht.temperature > 26) {
    digitalwrite(relaypin7, low);
}
if (dht.temperature > 27) {
    digitalwrite(relaypin8, low);
}


more research has lead me try relays 1 1. pin4 has increased 1 degc itself. , using more 5 leads same issue. tried 3 boards total. same results. tried other dht11s. same result.

i tried removing jumper in corner deactivating solenoids. temperature reading got normal , lights working relays should have been. put jumper in... tried connecting jd-vcc relay board atx power supply's 12v. apart relays clacking harder... no change. proceeded using 5v 1 of molex... same thing.

no matter do, once i've gotten dht sense hot activate many relays... skip 3-4 degc.

it seems inherent design problem way arduino works... more power drawn... more erratic readings. possible?

doing yet more research, stumbled across post: http://forum.arduino.cc/index.php?topic=83642.msg626948#msg626948 i've tried solutions has worked original op no avail. i've tried seggregating power , ground analog , digital pins... without success.

i've run out of ideas , i'm not experienced enough more ideas on own.

can please?

"it seems inherent design problem way arduino works... more power drawn... more erratic readings. possible?" points source of problem, without knowing how have things connected , using power, it's bit hard know.

a drawing of connections , tell power supply parameters are.

paul


Arduino Forum > Using Arduino > Sensors > DHT11 values fly off the rails when activating 8 relays


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor