Hello all.
So, I have a sketch that I've been running for a few years now that runs the environmental equipment for a greenhouse. I've been using a DHT22 sensor but I've never been happy with the humidity inaccuracies. It runs on a Mega 2560 board with a 1602 LCD shield.
Recently, I upgraded to an SHT31 sensor from Keyestudio. At first, it was great but after a week or so it just sort of stopped reading. It appears that the Arduino itself is still running, but I'm not entirely sure. Maybe it's the sensor itself? The I2C bus?
Here's the sketch...
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define Addr 0x44
#define RELAY_ON 0
#define RELAY_OFF 1
#define Relay_1 25 // Relay 1/Pin 25 Dehumidifier
#define Relay_2 27 // Relay 2/Pin 27 Unused
#define Relay_3 29 // Relay 3/Pin 29 Fogger
#define Relay_4 31 // Relay 4/Pin 31 Unused
#define Relay_5 33 // Relay 5/Pin 33 A/C
#define Relay_6 35 // Relay 6/Pin 35 Unused
#define Relay_7 37 // Relay 7/Pin 37 Heat
#define Relay_8 39 // Relay 8/Pin 39 Unused
int page = 1;
boolean repeat = false;
int on_time [] = {0, 0, 0, 0};
float on_time_value = 0;
int off_time[] = {0, 0, 0, 0};
float off_time_value = 0;
boolean hold = false;
int cur_x = 13;
int cur_y = 0;
boolean toggle = 0;
float count = 0;
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
Wire.begin();
Serial.begin(9600);
delay(300);
digitalWrite(Relay_1, RELAY_OFF);
digitalWrite(Relay_2, RELAY_OFF);
digitalWrite(Relay_3, RELAY_OFF);
digitalWrite(Relay_4, RELAY_OFF);
digitalWrite(Relay_5, RELAY_OFF);
digitalWrite(Relay_6, RELAY_OFF);
digitalWrite(Relay_7, RELAY_OFF);
digitalWrite(Relay_8, RELAY_OFF);
pinMode(Relay_1, OUTPUT);
pinMode(Relay_2, OUTPUT);
pinMode(Relay_3, OUTPUT);
pinMode(Relay_4, OUTPUT);
pinMode(Relay_5, OUTPUT);
pinMode(Relay_6, OUTPUT);
pinMode(Relay_7, OUTPUT);
pinMode(Relay_8, OUTPUT);
delay(400);//Changed from 4000 on 2/11/22
//void(* resetFunc) (void) = 0;//declare reset function at address 0
}
void loop()
{
unsigned int data[6];
Wire.beginTransmission(Addr);
Wire.write(0x2C);
Wire.write(0x06);
Wire.endTransmission();
delay(500);
Wire.requestFrom(Addr, 6);
if (Wire.available() == 6)
{
data[0] = Wire.read();
data[1] = Wire.read();
data[2] = Wire.read();
data[3] = Wire.read();
data[4] = Wire.read();
data[5] = Wire.read();
}
float cTemp = ((((data[0] * 256.0) + data[1]) * 175) / 65535.0) - 45;
//float fTemp = (cTemp * 1.8) + 32;
float fTemp = ((((data[0] * 256.0) + data[1]) * 315) / 65535.0) - 49;
float humidity = ((((data[3] * 256.0) + data[4]) * 100) / 65535.0);
Serial.print("Relative Humidity : ");
Serial.print(humidity);
Serial.println(" %RH");
Serial.print("Temperature in Celsius : ");
Serial.print(cTemp);
Serial.println(" C");
Serial.print("Temperature in Fahrenheit : ");
Serial.print(fTemp);
Serial.println(" F");
lcd.setCursor(0, 0);
lcd.print("Temp - ");
lcd.print(fTemp);
lcd.print(" F");
lcd.setCursor(0, 1);
lcd.print("Hum - ");
lcd.print(humidity);
lcd.print(" %");
delay(500);
//Dehuey trigger on Relay_1 at Pin 25
if (humidity > 80)//No Correction
{
digitalWrite(Relay_1, RELAY_ON);
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("\t");
Serial.print("Dehuey ON");
Serial.print("\t");
}
if (humidity < 70)//No Correction
{
digitalWrite(Relay_1, RELAY_OFF);
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("\t");
Serial.print("Dehuey OFF");
Serial.print("\t");
}
//Fogger trigger on Relay_3 at Pin 29
if (humidity < 65)//No Correction
{
digitalWrite(Relay_3, RELAY_ON);
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("\t");
Serial.print("Fogger ON");
Serial.print("\t");
}
if (humidity > 72)//No Correction
{
digitalWrite(Relay_3, RELAY_OFF);
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("\t");
Serial.print("Fogger OFF");
Serial.print("\t");
}
//A/C trigger on Relay_5 at Pin 33
if (fTemp > 82)//No Correction
{
digitalWrite(Relay_5, RELAY_ON);
Serial.print("Temperature: ");
Serial.print(fTemp);
Serial.print("\t");
Serial.print("A/C ON");
Serial.print("\t");
}
//A/C trigger on Relay_6 at Pin 33
if (fTemp > 82)//No Correction
{
digitalWrite(Relay_6, RELAY_ON);
Serial.print("Temperature: ");
Serial.print(fTemp);
Serial.print("\t");
Serial.print("A/C ON");
Serial.print("\t");
}
if (fTemp < 76)//No Correction
{
digitalWrite(Relay_5, RELAY_OFF);
Serial.print("Temperature: ");
Serial.print(fTemp);
Serial.print("\t");
Serial.print("A/C OFF");
Serial.print("\t");
}
if (fTemp < 76)//No Correction
{
digitalWrite(Relay_6, RELAY_OFF);
Serial.print("Temperature: ");
Serial.print(fTemp);
Serial.print("\t");
Serial.print("A/C OFF");
Serial.print("\t");
}
//Heat trigger on Relay_7 at Pin 37
if (fTemp < 66)//No Correction
{
digitalWrite(Relay_7, RELAY_ON);
Serial.print("Temperature: ");
Serial.print(fTemp);
Serial.print("\t");
Serial.print("Heat ON");
Serial.print("\t");
}
if (fTemp > 72)//No Correction
{
digitalWrite(Relay_7, RELAY_OFF);
Serial.print("Temperature: ");
Serial.print(fTemp);
Serial.print("\t");
Serial.print("Heat OFF");
Serial.print("\t");
}
}