Problemas con el delay

Hola amigos, soy nuevo en esto; la verdad que no se nada sobre programar y me lance con un proyecto de riego automatizado. El proyecto consiste en una arduino uno r3, el modulo sensor de humedad de la tierra, una bomba que funciona a 5v y un relé.
La idea es que cuando el sensor pase un determinado valor (450) accione el pin del relé por un determinado tiempo (5000 mili segundos) asi la bomba comienza a pasar agua de un deposito a las macetas. Por último que haya un tiempo (no me acuerdo que puse pero era como media hora) de espera antes de volver a sensar, para que la tierra haya absorbido la humedad.
En la teoría esta todo bien pero al pasar los 450 del sensor, la bomba hace lo que quiere, se prende mas o menos tiempo (a veces ni se prende) y no se sinceramente que pasa.

const int PinSensor = A0;          //Pin en el que está conectado el sensor
const int PinRelay = 7;            //Pin en en que está conectado el Relay            
int SensorHumedad;
int ContadorRiegos;
unsigned long TiempoRiego = 5000;            //Tiempo de regado  en milisegundos                                   //AJUSTAR
unsigned long EsperaSinSensar = 120000;      //Tiempo espera en milisegundos                                       //AJUSTAR
const int ResistenciaRiego = 450;               //Resistencia a partir de la cual empieza a regar   //AJUSTAR

void setup() {
  Serial.begin(9600);             //inicia comunicación serial
  pinMode (PinRelay,OUTPUT);         //Configurar relay como salida
}

void loop() {
  SensorHumedad = analogRead(PinSensor);        //leer sensor
  
  Serial.print(ContadorRiegos); Serial.println(" riegos. ");  //contador para ver en serial cuantas veces se ha regado
Serial.print(" Valor medido: "); Serial.print(SensorHumedad); Serial.println(" escala ");   //escribir en serial el valor de la resistencia
  delay(500);

 if (SensorHumedad>ResistenciaRiego){
  
  digitalWrite(PinRelay,HIGH);       //activar relay
  delay(TiempoRiego);              // Espera Tiempo de regado con relay activado
  digitalWrite(PinRelay,LOW);        //desactivar relay
  delay(EsperaSinSensar);         // Espera Tiempo de espera entre regados con relay desactivado para que el agua se filtre a la tierra y llegue al sensor
  ContadorRiegos = ContadorRiegos + 1 ;   
  }}

Mil gracias desde ya al que me de una mano

Tu problema es el de todo el mundo que usa delay.

lee aqui porque no debes usar delay

Ve a Documentación => Indice de temas tutoriales => millis()

He modificado tu código, espero funcione.

const int PinSensor = A0;          //Pin en el que está conectado el sensor
const int PinRelay  = 7;            //Pin en en que está conectado el Relay           
int SensorHumedad;
int ContadorRiegos;
unsigned long TiempoRiego     = 5000;            //Tiempo de regado  en milisegundos                                   //AJUSTAR
unsigned long EsperaSinSensar = 120000;      //Tiempo espera en milisegundos                                       //AJUSTAR
unsigned long start, presentoDatos;                         // variable para contar tiempo de millis() milisegundos
const int ResistenciaRiego    = 450;               //Resistencia a partir de la cual empieza a regar   //AJUSTAR
byte estado = 0;

void setup() {
  Serial.begin(9600);             //inicia comunicación serial
  pinMode (PinRelay,OUTPUT);         //Configurar relay como salida
}

void loop() {
  SensorHumedad = analogRead(PinSensor);        //leer sensor
 
  if (millis() - presentoDatos > 500UL) {
      Serial.print(ContadorRiegos); 
      Serial.println(" riegos. ");  //contador para ver en serial cuantas veces se ha regado
      Serial.print(" Valor medido: "); 
      Serial.print(SensorHumedad); 
      Serial.println(" escala ");   //escribir en serial el valor de la resistencia
      presentoDatos = millis();
  }

  if (SensorHumedad > ResistenciaRiego){
      switch(estado) {
        case 0: digitalWrite(PinRelay, LOW);       // activar relay
                start = millis();
                estado = 1; // paso al siguiente estado de la máquina de esados
                break;
        case 1: if (millis() - start > TiempoRiego) { // Espera Tiempo de regado con relay activado
                    digitalWrite(PinRelay, HIGH);        // desactivar relay
                    start = millis();
                    estado = 2; // paso al siguiente estado de la máquina de esados
                }
                break;
        case 2: if (millis() - start > EsperaSinSensar) {
                    ContadorRiegos = ContadorRiegos + 1 ;   
                    estado = 0;
                }
                break;
      }
  }
}

Gracias @surbyte, te agradezco muchisimo el tiempo que te tomaste!! Voy a investigar un poco sobre la funcion millis para lograr entender lo que hiciste y en breve la estoy compliando a ver si funciona... De nuevo muchas gracias!