Buen día a todos, amigos estoy mas enredado que un kilo de estopa, como los suponía, me encuentro metido en un dilema el cual espero solucionar Dios mediante con la ayuda des ustedes.
tengo 4 sensores de temperatura Dht11, los cuales tomaran la temperatura en el galpón en distintos sitios y mediante una formula aritmética yo les saque un promedio de los 4 sensores, Pongo una imagen de ejemplo:
como se ve en esta imagen hay sensores a varias temperaturas, y aunque el sensor2 esta bajo el promedio de los otros tres se sigue contabilizando para el nuevo promedio.
mi problema radica en que en la zona donde vivo se pueden alcanzar muy pero muy altas temperaturas y si en un galpón cerrado fallara algún sensor el promedio me estaría dando lecturas erróneas, ya que la temperatura estará mucho mas elevada de lo que el promedio me indica y debido a eso no se activarían los dispositivos para bajar dicha temperatura.
yo creo que los sensor debería estar dando una lectura temperatura ± el 10%, (tal vez un poco más) para que sea tomado en el promedio total de lo contrario quedara deshabilitado hasta que su temperatura entre nuevamente en el rango del promedio.
como ustedes se imaginaran el primer promedio consta de t1+t2+t3+t4/4 hasta aquí bien, pero cuando debo deshabilitar el sensor que esta fallando o que no forme parte de promedio debo aplicar t1+t2+t3/3 después de esto debo aplicar un nuevo promedio con tres cantidades solamente para luego volver a verificar si todo se cumple. UFF estoy realmente atascado
#include <DHT.h>
#define DHTPIN 44 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 44
#define DHT2PIN 45 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 45
#define DHT3PIN 46 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 46
#define DHT4PIN 47 //Seleccionamos el pin en el que se conectará el sensor, en nuestro caso el pin Digital 47
#define DHTTYPE DHT11 //Se selecciona el DHT11(hay otros DHT)
DHT dht(DHTPIN, DHTTYPE); //se inician los sensores
DHT dht2(DHT2PIN, DHTTYPE); //se inician los sensores
DHT dht3(DHT3PIN, DHTTYPE); //se inician los sensores
DHT dht4(DHT4PIN, DHTTYPE); //se inician los sensores
//////Definimos las Variables: Temperatura 1y2 Max y Min, Humedad 1y2 Max y Min, Indice de calos 1y2, Promedio h y t/////
float t = 0, h = 0, t2 = 0, h2 = 0, t3 = 0, t4 = 0, h3 = 0, h4 = 0, hmin = 20, hmax = 60, tmin = 20, tmax = 28;
float indicecalor = 0, indicecalor2 = 0, indicecalor3 = 0, indicecalor4 = 0, indicecalorp = 0, promediot = 0 , promedioh = 0;
const float topt = 28;
int hact, hant, hact2, hant2, hact3, hant3, hact4, hant4, tact, tant, tact2, tant2, tact3, tant3, tact4, tant4, ptact, ptant, phact, phant, icact, icant, ptinf, ptsup, promantt, promanth;
void setup() {
Serial.begin(9600); //Se inicia la comunicación serial
dht.begin(); //Se inicia el sensor de humedad y temperatura
dht2.begin(); //Se inicia el sensor de humedad y temperatura
dht3.begin(); //Se inicia el sensor de humedad y temperatura
dht4.begin(); //Se inicia el sensor de humedad y temperatura
}
void loop() {
//////// sensores de Temperatura y humedad/////
h = dht.readHumidity(); //se guarda el valor de la humedad en la variable h
t = dht.readTemperature(); //se guarda la temperatura en la variable t
h2 = dht2.readHumidity(); //se guarda el valor de la humedad en la variable h2
t2 = dht2.readTemperature(); //se guarda la temperatura en la variable t2
h3 = dht3.readHumidity(); //se guarda el valor de la humedad en la variable h3
t3 = dht3.readTemperature(); //se guarda la temperatura en la variable t3
h4 = dht4.readHumidity(); //se guarda el valor de la humedad en la variable h4
t4 = dht4.readTemperature(); //se guarda la temperatura en la variable t4
hact = h, hact2 = h2, hact3 = h3, hact4 = h4, tact = t, tact2 = t2, tact3 = t3, tact4 = t4;
promantt = (t + t2 + t3 + t4) / 4;
promanth = (h + h2 + h3 + h4) / 4;
promediot = promantt;
promedioh = promanth;
ptact = promediot;
phact = promedioh;
ptinf = promantt - (promantt * 0.1); //para calcular el promedio - 10%
ptsup = promantt + (promantt * 0.1); //para calcular el promedio + 10%
icact = indicecalor;
indicecalor = dht.computeHeatIndex(t, h, false);
indicecalor2 = dht2.computeHeatIndex(t2, h2, false);
indicecalor2 = dht3.computeHeatIndex(t3, h3, false);
indicecalor2 = dht4.computeHeatIndex(t4, h4, false);
indicecalorp = (indicecalor + indicecalor2 + indicecalor3 + indicecalor4 ) / 4;
if (t <= ptinf && t >= ptsup || t2 <= ptinf && t2 >= ptsup || t3 <= ptinf && t3 >= ptsup || t4 <= ptinf || t4 >= ptsup) {
if (ptact != ptant) {
ptant = t + t2 + t3 + t4 / 4;
}
} else if (t >= ptinf && t <= ptsup || t2 <= ptinf && t2 >= ptsup || t3 <= ptinf && t3 >= ptsup || t4 <= ptinf && t4 >= ptsup) {
if (ptact != ptant) {
ptant = t2 + t3 + t4 / 3;
}
} else if (t <= ptinf && t >= ptsup || t2 >= ptinf && t2 <= ptsup || t3 <= ptinf && t3 >= ptsup || t4 <= ptinf && t4 >= ptsup) {
if (ptact != ptant) {
ptant = t + t3 + t4 / 3;
}
} else if (t <= ptinf && t >= ptsup || t2 <= ptinf && t2 >= ptsup || t3 >= ptinf && t3 <= ptsup || t4 <= ptinf && t4 >= ptsup) {
if (ptact != ptant) {
ptant = t + t2 + t4 / 3;
}
} else if (t <= ptinf && t >= ptsup || t2 <= ptinf && t2 >= ptsup || t3 <= ptinf && t3 >= ptsup || t4 >= ptinf && t4 <= ptsup) {
if (ptant != ptant) {
promediot = t + t2 + t3 / 3;
}
ptant = ptact;
}
delay(500);
//////////////se muestra en el monitor serial si el valor de alguna variable cambia///////
if (tact2 != tant2 || hact2 != hant2 || icact != icant || tact != tant || hact != hant || ptact != ptant || icact != icant) {
Serial.println(); //esta linea me organiza las nuevas lecturas en una nueva linea en el monitor serial
// Mostrar en monitor serial la temperatura
Serial.print(" Temp1: "); Serial.print(String ((int)tact)); Serial.print("ºC"); //indica un cambio de temperatura o un cambio en la humedad
Serial.print(" Temp2: "); Serial.print(String ((int)tact2)); Serial.print("ºC"); //indica un cambio de temperatura o un cambio en la humedad
Serial.print(" Temp3: "); Serial.print(String ((int)tact3)); Serial.print("ºC"); //indica un cambio de temperatura o un cambio en la humedad
Serial.print(" Temp4: "); Serial.print(String ((int)tact4)); Serial.print("ºC"); //indica un cambio de temperatura o un cambio en la humedad
// Mostrar en monitor serial la humedad relativa
Serial.print(" Hum1: "); Serial.print(String ((int)hact)); Serial.print(" %"); //indica un cambio de la humedad1
Serial.print(" Hum2: "); Serial.print(String ((int)hact2)); Serial.print(" %"); //indica un cambio de la humedad1
Serial.print(" Hum3: "); Serial.print(String ((int)hact3)); Serial.print(" %"); //indica un cambio de la humedad1
Serial.print(" Hum4: "); Serial.print(String ((int)hact4)); Serial.print(" %"); //indica un cambio de la humedad1
// Mostrar en monitor serial el promedio de temperatura y humedad
Serial.print(" promt: "); Serial.print(String ((int)ptact)); Serial.write(byte(0)); Serial.print("ºC"); Serial.print(" promh: "); Serial.print(String ((int)phact));
Serial.print(" %");
Serial.print(" Ind Calor: "); Serial.print(String ((int)icact)); Serial.print("ºC"); // Mostrar en monitor serial el indice de caloren ºC
icant = icact, icant = icact, tant = tact, hant = hact, tant2 = tact2, hant2 = hact2, tant3 = tact3, hant3 = hact3, tant4 = tact4, hant4 = hact4, ptant = ptact, phant = phact;
}
delay(500);
}
He estado escribiendo un código para eso pero no logro hacerlo funcionar, pero lo he cambiado tantas veces que ya estoy muy atascado, dicho código lo tomare como ejemplo para mi proyecto principal, me gustaría si está en sus posibilidades me ayudaran en eso. Talvez no a realizarme el programa (no es lo que quiero) pero si una perspectiva de enfoque diferente.
Saludos desde Cumaná / Venezuela