Code:
while ( digitalRead(ECHO_PIN) == 0 );

t1 = micros();
while ( digitalRead(ECHO_PIN) == 1);
t2 = micros();
pulse_width = t2 - t1;
Warum wird die Zeit gesmessen wo der Sender sendet ??
Absolut unnötig, du fragst den Echopin auf 0 ab und machst gar nix in dieser Zeit. Sind nun die 8x40kHz durch,
wird der Echopin auf 1 gesetzt dieser bleibt solange 1 bis ein Echo empfangen wird.

Interrupts GLOBAL deaktivieren
Trigger = 1
warte 50µs
Trigger = 0

EchoPin = 0
warte bis Echopin = 1
starte Timer wenn Echopin = 1
warte bis Echopin = 0
Interrupts GLOBAL aktivieren

Auslesen des Zeitwertes.

Nun kommt der zweite Kasusknacksus

Entweder wird jetzt die gemessene Zeit (in µs) mal Schallgeschwindigkeit(343 m/s) genommen = Weg (in µm)
welcher nur noch halbiert werden muss. SKALIERUNG beachten m/cm/mm/µm
Ebenso kann auch erst die Zeit halbiert werden so das der Weg gleich ein absolutes Endergebnis ist

ODER

man setzt den Timer so das ein Timerbit 58µs entspricht damit kann man die Rechnung umgehen. Auflösung beträgt dann nur 1cm/bit.
Wird der Timer auf 5,8µs / Bit gesetzt beträgt die Auflösung 1mm/bit.

Hier ist auf eine Wiederholrate zu achten vom Messungsabstand von mindestens 20ms

Solltest du den hc-sr04 direkt an eine Versorgungspannung angeschloßen haben die mehr als 5V lieferte besteht die Möglichkeit das dieser defekt ist