DC Motor's don't stop immediately
As already stated, your problem is in the use of delay(), which
blocks the program until the delay is over. When your program needs to
be responsive, you have to write everything in a non-bloking manner.
The basics of non-blocking management of time are covered in the
Blink Without Delay Arduino
tutorial, which I
strongly encourage you to read. Applying the technique of the tutorial
to your printing of the distance gives something like this:

static uint32_t last_time_printed;
uint32_t now = millis();
if (now - last_time_printed &gt;= 1000) {
    Serial.println(Distance);
    last_time_printed = now;
}


I think the code is quite straightforward: you record the last time you
printed the value and, if it has been one second since last time, you
print it again.

You also have some other blocking calls in the section where you operate
the sonar. I would not worry too much about delayMicroseconds(): these
are really tiny delays, and your robot does not need to be that
responsive. I would worry about pulseIn() though: this function blocks
until it sees the end of the pulse, or until it reaches a timeout. The
default timeout is one second, which is way too large for this
application. Instead of relying on the default, you should specify a
timeout as a third parameter, as in

duration = pulseIn(echoPin, HIGH, 50000);  // timeout: 50 ms


This would limit the range to about 8&nbsp;m, which I think should be
more than enough.

Reading the sonar pulse in a completely non-blocking fashion is
possible, by using either an input capture unit or an interrupt, but I
guess it is not worth the trouble, as your robot can probably cope well
with being blocked for 50&nbsp;ms.