De HC_SR04 stuurt een Ultrasound geluidspuls uit en wacht tot het geluid terugkomt. De tijd tussen het zenden en ontvangen is dan te berekenen tot afstand tot een object.
Nu heb ik de ervaring dat het met de Arduino op 5V probleemloos werkt. Helaas gaat dat met mijn ESP8266 met dezelfde sketch niet werken. Volgens GitHub kan dat komen door de lagere voedingspanning. Simpelweg een ESP8266 op 5V aansluiten is een oplossing maar vermoedelijk gaat de ESP8266 ECHOIN poort(voorbeeld poort 13) het dan na een tijdje begeven. Die mag maar max 3.3V in hebben. Op http://www.esp8266learning.com/wemos-mini-hc-sr04-ultrasonic-sensor.php wordt dus de 5V echo spanning gewoon aan de ESP8266 zonder bescherming aangeboden.

Op https://github.com/loiphin/ESP8266 wordt dat opgelost met een 1kOhm weerstand, dat voorkomt een hoge stroom maar geen hogere spanning.

Bij https://hackaday.io/project/19950/instructions lossen ze het op met een transistor, is een mooiere oplossing.

Ik heb een levelshifter op ebay gekocht. Bidirectioneel dus wat ik op 5V aanbiedt zie ik op de 3Vkant en vicaVersa.
Na wat problemen met de ESP8266 en de levelshifter heb ik uiteindelijk de HC_SR04 op 3.3V laten werken zonder levelshifter en dat gaat beter.
Bij mij werkt dat.
Sluit de gnd aan de min van de Arduino
Sluit de Vcc aan de 5V plus van de Arduino
De Trig aan pin 12 van de Arduino
De Echo aan pin 13 van de Arduino



De namen Vcc Gnd Echo en trig staan bij mijn versie op de HC-SR04 bijdezijde bij de pinnen.
Onderstaande sketch vond ik via voorbeeld sensors Ping die vermoedeljk van http://trollmaker.com/article3/arduino-and-hc-sr04-ultrasonic-sensor komt. Ik heb de sketch samengevoegd/aangepast met de sketch van instructables. (zie bronnen)

/*
HC-SR04 Ping distance sensor]
VCC to arduino 5v GND to arduino GND
Echo to Arduino pin 13 Trig to Arduino pin 12
More info at: http://goo.gl/kJ8Gl
http://trollmaker.com/article3/arduino-and-hc-sr04-ultrasonic-sensor
The Theory Behind It:

In the program above, we want to calculate the distance of an object in front of the ultrasonic sensor. This sensor can send a "ping" at a given moment and receive the ping bouncing back on an object at another given moment.
A ping is nothing but a sound that is inaudible for the human hear and this is why this sensor is called "ultrasonic".
The sensor send a ping at a time t1 and receive the bouncing ping at a time t2.
Knowing the speed of sound, the time difference ?t = t2 - t1 can give us an idea of the distance of an object.

Example, if ?t = 500 microseconds, we know it took 250 microseconds for the ping to hit an object and another 250 microseconds to come back.
The approximate speed of sound in dry air is given by the formula:
c = 331.5 + 0.6 * [air temperature in degrees Celsius]
At 20C, c = 331.5 + 0.6 * 20 = 343.5 m/s
If we convert the speed in centimetres per microseconds we get:
c = 343.5 * 100 / 1000000 = 0.03435 cm/?s
The distance is therefore, D = (?t/2) * c
or D = 250 * 0.03435 = 8.6 cm

Instead of using the Speed of Sound, we can also use the "Pace of Sound".
The Pace of Sound = 1 / Speed of Sound = 1 / 0.03435 = 29.1 ?s/cm
In this case the equation to calculate the distance become: D = (?t/2) / Pace of sound
and for the example above: D = 250 / 29.1 = 8.6 cm
*/

#define trigPin 13
#define echoPin 12

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}

void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance >= 200 || distance <= 0)
{
Serial.println("Out of range");
}else {
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
}

bronnen:
Google op hc-sr04 arduino
mijn favoriet instructables
op de ESP8266 aangesloten
GitHub ESP8266 ervaring