Controlar un motoreductor con un sensor ultrasonico

Lo que pasa es que estoy usando un sensor ultrasonico para controlar un motoreductor que hace esto:
al detectar precensia, el motor se enciende durante 5 segundos pero si sige detectando precensia el motor sige girando

lo que yo quiero que haga es que el sensor al detectar el motor gire solo por 5 segundos aunque siga detenctando

#include <Servo.h>
#include <Ultrasonic.h>
Ultrasonic ultrasonic(3,4); // (Trig PIN,Echo PIN)

int motor=6;
int distancia,cm; 

void setup(){ 
   pinMode(motor, OUTPUT);// determinamos que nuestra variable led será de salida
}

void loop(){  
 
   distancia = ultrasonic.Ranging(CM); //Lectura sensor de ultrasonidos
    
   if(distancia <= 20){  //si la distancia es menor de 20...
       digitalWrite(motor, HIGH);   // enciende el LED (HIGH)
       delay(5000);   
       
          
       
   }else{  //si no hay nada
   digitalWrite(motor, LOW);   // apagamos el LED (LOW)
   }  
 
   delay(500);  
}

Si es tu priimer pregunta porque la repites dos veces?
Segundo: no has leído las normas del foro ya que el código esta sin etiquetas.
Primer hilo de esta sección o de cualquier sección, Normas del foro y luego editalo para que se vea con etiquetas.

Hola Uriel.

Prueba agregar después del delay (5000); digitalWrite(motor, LOW);

Saludos.