Anschluss des HC-SR04 an den TTGO
Der Anschluss erfolgt nach der folgenden Tabelle:
| HC-SR04 | TTGO |
| GND | G |
| VCC | 5 V |
| Trig | Pin 32 |
| Echo | Pin 38 (Pegelanpassung s. u.) |
Beachten Sie: Der HC-SR04 arbeitet mit 5V-Signalen (Eine Messung ergab, dass das ausgegebene Echo-Signal im 1-Zustand eine Spannung von ca. 4,5 V hat , vgl. Abb. 1). Hingegen arbeitet der ESP-32 mit 3,3V-Signalen. Werden höhere Spannungen als 3,6 V an seinen Eingang gelegt, kann dieser dadurch zerstört werden. Deswegen sollte man eine Pegel-Anpassung vornehmen.
Eine solche Pegel-Anpassung kann folgendermaßen durchgeführt werden, wobei die 3. Maßnahme eher fragwürdig ist:
- durch einen Pegelwandler
- durch eine Potentiometer-Schaltung (Spannungsteiler)
- durch einen Widerstand R = 1 kOhm zwischen Echo und Pin 38 (?)
Ein eigener Versuch zeigt übrigens tatsächlich, dass auch der von mir benutzte Eingangs-Pin 38 keinen Schaden genommen hat, wenn ich ihn direkt mit dem Echo-Ausgang verbunden habe. Sicherheitshalber benutze ich aber sonst eine Potentiometer-Schaltung zur Pegel-Anpassung.
Programm
Das Programm ist recht einfach:
Code: Alles auswählen
# HC_SR04_Main_1.py
# 26.10.2025
# www.g-heinrichs.de
from hcsr04_esp32 import HCSR04
from time import sleep
import vga1_bold_16x32 as font1
import st7789
from machine import SPI, Pin
# HC-SR04-Sensor instanziieren:
# sensor = HCSR04(trigger_pin=32, echo_pin=38, echo_timeout_us=30_000) # Standardwert für echo_timeout_us ist 30_000 us, also kürzer:
sensor = HCSR04(trigger_pin=32, echo_pin=38)
time_between_2_measurements = 1 # in s
# Display instanziieren:
spi = SPI(1, baudrate=20000000, polarity=1, sck=Pin(18), mosi=Pin(19))
display = st7789.ST7789(spi, 135, 240, reset=Pin(23, Pin.OUT), cs=Pin(5, Pin.OUT), dc=Pin(16, Pin.OUT), backlight=Pin(4, Pin.OUT), rotation=3)
# Landscape
display.init()
display.fill(st7789.BLUE)
display.text(font1, 'HC-SR04', 70, 15, st7789.WHITE, st7789.BLUE)
while True:
distance = round(sensor.distance_cm(), 1)
print('Distance:', distance, 'cm')
display.text(font1, 'd = ' + str(distance) + ' cm ', 20, 70, st7789.WHITE, st7789.BLUE)
sleep(time_between_2_measurements)
Der eigentliche Messvorgang erfolgt durch die Methode sensor.distance_cm; sie liefert den aktuellen Abstand (in cm). sensor ist eine Instanz von der Klasse HCSR04:
Code: Alles auswählen
sensor = HCSR04(trigger_pin=32, echo_pin=38)Wie der Messvorgang nun im Prinzip funktioniert, kann man dem Dokument HC-SR04_Manual.pdf aus dem Anhang entnehmen: Zunächst muss unser Mikrocontroller ein Trigger-Signal (10 ms Dauer) an den HC-SR04-Baustein senden. Dieser sendet daraufhin einen Ultraschallimpuls aus und wartet auf das Echo dieses Signals; dabei setzt der HC-SR04-Baustein den Echo-Ausgang solange auf 1 wie das Ultraschall-Signal für den Hin- und Rückweg braucht. Die Dauer dieses Echo-Signals wird mit der Methode time_pulse_us bestimmt: Diese Methode stellt Micropython durch das machine-Modul zur Verfügung; die Zeitdauer wird - wie der Name der Methode schon andeutet - in us angegeben. Aus dieser Laufzeit berechnet die Methode distance_cm schließlich mit Hilfe der Schallgeschwindigkeit den gesuchten Abstand (in cm).
Messungen
Der HC-SR04 kann Entfernungen bis zu ca. 4 m erkennen. Bei größeren Entfernungen kann meist kein Echo-Signal gebildet werden; in diesem Fall wird als "Ergebnis" 500 cm angezeigt. Mit der Variablen time_between_2_measurements können Sie übrigens das Messintervall Ihren Wünschen entsprechend abändern. Diese Wartezeit sollte größer als 60 ms betragen.
.