Acionamento de Carga com Sensor (E18-d80nk)

Estou tentando usar um sensor, para fazer o desacionamento e acionamento de carga (rele).

Objetivo: Quando um objeto estiver na frente do sensor, ele deve desacionar o rele(aciona um motor de uma esteira), e logo apos fazer isso, ele deve fazer Delay, e logo após fazer novamente o acionamento desse rele.

Problemas: Ele faz a contagem do tempo, porem, quando vai fazer o acionamento do rele novamente, como o objeto esta na frente dele ainda, não da tempo para a esteira se movimentar, para tirar o objeto da frente.

Como poderia ser frente, para que tivesse um Delay, para fazer com que a esteira(rele), faça esse movimento, e retire o objeto da frente do sensor, antes que ele desligue novamente o rele ?

Codigo que estou usando:

Lembrando que ao conectar, o motor já se movimenta, por conta desse codigo.

void setup() {
Serial.begin(9600);
//Pino do Sensor
pinMode(pinSensor, INPUT);

pinMode(rele4, OUTPUT);

//Inicia os Reles Ligados os Desligados - HIGH (Desligado) - LOW (Ligado).
digitalWrite(rele4, LOW); //Rele 4 Inicia Ligado
}

if(!sensor) {
digitalWrite(rele4, HIGH); //Desliga o Rele
tempo4 = millis();
} if (millis() - tempo4 >= 20000) { //Faz o Delay
digitalWrite(rele4, LOW); // Aciona Novamente o Rele
}

Não sei se estou a perceber bem o que pretendes.

Antes de mais, esse código está todo na função setup? Não tens nada na função loop()?

O que tu precisas de fazer é um encravamento, se entendi o problema. Ou seja, tu queres saber quando o sensor muda de estado, não quando o objecto está em frente ao sensor.

Então podes:

unsigned char sensor = digitalRead(pinSensor);
unsigned char sensor_anterior = 0; //poderás ter de alterar este valor para funcionar.

if(!sensor && sensor != sensor_anterior) {//este if apenas vai funcionar se houver uma mudança de estado. 
      digitalWrite(rele4, HIGH); //Desliga o Rele
       tempo4 = millis();
  } 

if (millis() - tempo4 >= 20000) { //Faz o Delay
      digitalWrite(rele4, LOW);  // Aciona Novamente o Rele
  }
sensor_anterior = sensor;

O codigo que mandei esta no Loop sim, pode ficar tranquilo, vou testar esse programa que mandou