Temperature & Humidity Not Averaging

Hi All, I am having issues with a sketch I have created to average 3 x DHT11 readings.
It appears to be only reading the one sensor as I can put a heat gun on one or completely remove a sensor and the average doesn’t adjust. I am using Arduino Uno boards. Any Ideas

Code:

 
// * following line will display the thinger library info for debuging.
 * comment this line if does not need the debug info.
 */

/*
 * adding all the libraries that are required for this code
 */
#include <SPI.h>
#include <Ethernet.h>
#include <ThingerEthernet.h>
#include <dht.h>



/*
 * Defining the pins for sensors and additional PSU Pin..
 */
#define sens1 7
#define sens2 6
#define sens3 5
#define relay 8
#define psu 2

/*
 * Creating objects for sensors, lcd and thinger connection
 */
ThingerEthernet thing("minibeasts", "MB_CRK_GROW_RM2", "A6iK1qFSV1m@" );
dht dht3;
dht dht2;
dht dht1;


/*
 * Declaring and initializing the different variables to store sensor and 
 * other info. 
 */
int val = 0;
unsigned long tim_sec = 0;
unsigned long tim_sens = 0;

double temp1  = 0;
double temp2  = 0;
double temp3  = 0;
double avgtemp = 0;

double humi1 = 0;
double humi2 = 0;
double humi3 = 0;
double avghumi = 0;

void setup()
{
  Serial.begin(115200);
  pinMode(relay, OUTPUT);
  pinMode(psu, OUTPUT);
  digitalWrite(psu, HIGH);

  thing["data"] >> [](pson & out) {
    out["humi1"] = humi1;
    out["humi2"] = humi2;
    out["humi3"] = humi3;
    out["temp1"] = temp1;
    out["temp2"] = temp2;
    out["temp3"] = temp3;
    out["avgtemp"] = avgtemp;
    out["avghumi"] = avghumi;
  };

  tim_sec = millis();
  tim_sens = millis();
}

void loop()
{
  thing.handle();
  read_sensors();
}

void read_sensors()
{
  if (millis() - tim_sens > 3000)
  {
    tim_sens = millis();

    dht1.read11(sens1);
    humi1 = dht1.humidity;
    temp1 = dht1.temperature;

    delay(50);
    dht2.read11(sens2);
    humi2 = dht1.humidity;
    temp2 = dht1.temperature;

    delay(50);
    dht3.read11(sens3);
    humi3 = dht1.humidity;
    temp3 = dht1.temperature;

    avgtemp = temp1 + temp2 + temp3;
    avgtemp /= 3.0;

    avghumi = humi1 + humi2 + humi3;
    avghumi /= 3.0;

    //if (avgtemp > 26)
    if (avgtemp > 26 && avgtemp < 34)
      digitalWrite(relay, HIGH);
    else
      digitalWrite(relay, LOW);

    print_sensor();
  }
}

void print_sensor()
{
  Serial.print("\n\n\n\nSensor 1 temperature:");
  Serial.println(temp1);
  Serial.print("Sensor 2 temperature:");
  Serial.println(temp2);
  Serial.print("Sensor 3 temperature:");
  Serial.println(temp3);
  Serial.print("Average temperature:");
  Serial.println(avgtemp);

  Serial.print("\nSensor 1 humidity:");
  Serial.println(humi1);
  Serial.print("Sensor 2 humidity:");
  Serial.println(humi2);
  Serial.print("Sensor 3 humidity:");
  Serial.println(humi3);
  Serial.print("Average humidity:");
  Serial.println(avghumi);
}

Check your code. You read all 3 sensors but only use the reading from sensor 1.

e.g. humi2 = dht1.humidity;

Easy to miss.

1 Like

Thanks totally missed that.