Arduino Mega se congela pasado unos minutos

Estimados
Quería ver si me pueden ayudar, estoy creando un fermentador para pan el cual lo estoy controlando con un arduino mega pero pasados 8 minutos aproximadamente se congela y no responde ademas de que cuando lo desconecto de la corriente eléctrica y lo vuelvo a conectar no arranca, estoy usando como hardware:
1 Arduino Mega
2 sensores de humedad y temperatura dht11 con pcb.
1 LCD de 20x4 con el modulo I2C.
1 Rele de dos salidas para 30 A
2 pulsadores con resistencia de 10 K
1 boton con resistencia de 10 k.

Anexo mi codigo.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <DHT11.h>

LiquidCrystal_I2C lcd(0x27,20,4);

const int inputPin1 = 2;      //Sensor Arriba
const int inputPin2 = 3;      //Sensor Abajo
const int inputPin4 = 4;      //Pulsador Inferior
const int inputPin5 = 5;      //Pulsador Superior
const int inputPin6 = 6;      //Boton Encendido
const int outputPin7 = 7;     //Rele Calor
const int outputPin8 = 8;     //Rele Frio

int valuePin4 = 0;
int valuePin5 = 0;
int valuePin6 = 0;
int valuePin7 = 0;
int valuePin8 = 0;
int selectProgram = 0;
int salirSelect = 0;
float temp, hum;
float temp2, hum2;

float periodoSensor = 5000;
unsigned long tiempoSensor = -5000;
long periodoCalor = 60000;
unsigned long inicioProgramCalor = 0;

DHT11 dht11(inputPin1);
DHT11 dht12(inputPin2);


void setup()
{
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  pinMode(inputPin4,INPUT);
  pinMode(inputPin5,INPUT);
  pinMode(inputPin6,INPUT);
  pinMode(outputPin7,OUTPUT);
  pinMode(outputPin8,OUTPUT);
}


void loop()
{  
  valuePin4 = digitalRead(inputPin4);
  valuePin5 = digitalRead(inputPin5);
  valuePin6 = digitalRead(inputPin6);
  if(valuePin6 == HIGH){
    if(millis() > tiempoSensor + periodoSensor){
      dht11.read(hum, temp);
      dht12.read(hum2, temp2);
      Serial.print("Temperatura 1: ");
      Serial.print(temp);
      Serial.print(" Humedad 1: ");
      Serial.print(hum);
      Serial.print("Temperatura 2: ");
      Serial.print(temp2);
      Serial.print(" Humedad 2: ");
      Serial.print(hum2);
      Serial.println();
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Humedad: ");
      lcd.setCursor(9,0);
      lcd.print(hum);
      lcd.setCursor(15,0);
      lcd.print(hum2);
      lcd.setCursor(0,1);
      lcd.print("Temp:");
      lcd.setCursor(6,1);
      lcd.print(temp);
      lcd.setCursor(12,1);
      lcd.print(temp2);
      tiempoSensor = millis();
    }
    
    if(valuePin5 == HIGH && valuePin4 == LOW){
      lcd.clear();
      Serial.print("Hola Soy Sistema");
      Serial.println();
      if(selectProgram == 0){
        lcd.setCursor(0,0);
        lcd.print("Seleccione Sistema  ");
        lcd.setCursor(0,2);
        lcd.print("Fermentar ahora <");
        do{
          valuePin4 = digitalRead(inputPin4);
          valuePin5 = digitalRead(inputPin5);
          if(valuePin4 == HIGH){
            salirSelect = 1;
            Serial.print("Salgo del Do");
            Serial.println();
            selectProgram = 1;
            if(selectProgram == 1){
              inicioProgramCalor = millis();
              Serial.print(selectProgram);
              Serial.println();
            }
          }     
        }while(salirSelect == 0);
        salirSelect = 0;
      }else{
        lcd.setCursor(0,0);
        lcd.print("Seleccione Sistema  ");
        lcd.setCursor(0,2);
        lcd.print("Enfriar Ahora <");
        do{
          valuePin4 = digitalRead(inputPin4);
          valuePin5 = digitalRead(inputPin5);
          if(valuePin4 == HIGH){
            salirSelect = 1;
            Serial.print("Salgo del Do");
            Serial.println();
            selectProgram = 0;
            if(selectProgram == 0){
              inicioProgramCalor = 0;
              Serial.print(selectProgram);
              Serial.println();
            }
          }     
        }while(salirSelect == 0);
        salirSelect = 0;
      } 
    }
    if(selectProgram == 1){
      if(millis() < inicioProgramCalor + periodoCalor){
        lcd.setCursor(0,2);
        lcd.print("Ciclo Calor    ");
        if(temp <= 25){
          digitalWrite(outputPin7, HIGH);
          digitalWrite(outputPin8, LOW); 
          //Serial.print(inicioProgramCalor);
          //Serial.println();
        }else{
          digitalWrite(outputPin7, LOW);
          digitalWrite(outputPin8, LOW);   
        }
      }else{
        digitalWrite(outputPin7, LOW);
        selectProgram = 0;
        inicioProgramCalor = 0;
      } 
    }else{
      lcd.setCursor(0,2);
      lcd.print("Ciclo Frio    ");
      if(temp2 >= 4 || temp >= 2){
        digitalWrite(outputPin8, HIGH);
      }else{
        digitalWrite(outputPin8, LOW);  
      }
    }
  }else{
    Serial.print("El sistema esta apagado");
    Serial.println();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Apagado");
    digitalWrite(outputPin8, LOW);
  }
}

Comprueba la placa con otro código, por ejemplo blink a ver si también se congela.