Ratgeber · 8 Min. Lesezeit

Arduino Abstandssensoren: HC-SR04, IR, VL53L0X und LiDAR

Arduino-Abstandssensoren im Vergleich: HC-SR04, JSN-SR04T, Sharp IR, VL53L0X/VL53L1X, TF-Luna und TCRT5000; Reichweite, Genauigkeit, Winkel, Oberflächen, Code.

Die Wahl zwischen den Arduino-Abstandssensoren wirkt zunächst wie die Frage „Welcher misst am weitesten?“, entscheidend sind aber die Oberfläche, die du misst, die nötige Genauigkeit, wie schmal der Messstrahl sein muss und die Umgebung. Derselbe HC-SR04, der den Abstand zur Wand zentimetergenau misst, kann am weichen Stoff eines Sofas unruhig werden, und ein günstiger Lasersensor mit Millimeterauflösung verliert in der Sonne womöglich die Hälfte seiner Reichweite. In dieser Anleitung stellen wir die sechs in Arduino-Projekten am häufigsten genutzten Sensoren nebeneinander.

Wir vergleichen den Ultraschallsensor HC-SR04 und seinen wasserdichten Bruder JSN-SR04T, den Infrarot-Triangulationssensor Sharp GP2Y0A21, die Laser-Laufzeitsensoren (ToF) VL53L0X und VL53L1X, das kleine LiDAR TF-Luna und den Nahbereichssensor TCRT5000. Zu jedem erklären wir Messprinzip, Reichweite, Genauigkeit, Abstrahlwinkel, Verhalten auf Oberflächen und Schnittstelle und geben einen kompilierten Beispiel-Sketch. Zum Schluss fasst eine Tabelle zusammen, welcher Sensor zu welchem Projekt passt.

Ultraschall-Abstandssensor HC-SR04
HC-SR04: zwei Ultraschallwandler, einer sendet, der andere lauscht auf das Echo; der verbreitetste Abstandssensor der Arduino-Welt.

Wie messen Abstandssensoren? Drei Grundprinzipien

Fast alle Abstandssensoren am Arduino nutzen eines von drei Verfahren. Laufzeitmessung (Time of Flight): Der Sensor sendet einen Schall- oder Lichtimpuls und misst, wie lange die Reflexion für den Rückweg braucht; der Abstand ist das halbe Produkt aus Zeit und Geschwindigkeit. Ultraschallsensoren arbeiten mit Schall, VL53L0X und TF-Luna mit Licht. Weil Licht etwa eine Million Mal schneller ist als Schall, stecken in ToF-Sensoren spezielle Chips mit Zeitauflösung im Pikosekundenbereich. Triangulation: Sharp-IR-Sensoren senden einen Infrarotstrahl auf das Ziel und schauen, wo das reflektierte Licht auf einem positionsempfindlichen Detektor (PSD) landet; bei nahen Objekten wandert der Punkt an ein Ende, bei fernen ans andere. Reflexionsstärke: Einfache Sensoren wie der TCRT5000 messen nur, wie stark das zurückkommende Licht ist; da das stark von der Oberflächenfarbe abhängt, ist das eher Näherungserkennung als echte Abstandsmessung.

PrinzipSensorenVorteileNachteile
Laufzeit mit SchallHC-SR04, JSN-SR04TGünstig, unabhängig von Farbe und LichtBreiter Strahl, schwach bei weichen und schrägen Flächen, temperaturabhängig
Laufzeit mit LichtVL53L0X, VL53L1X, TF-LunaSchnell, schmaler Strahl, gute GenauigkeitSonnenlicht und Glas machen Probleme
Infrarot-TriangulationSharp GP2Y0A21Wenig farbabhängig, einfacher AnalogausgangNichtlinearer Ausgang, kleiner Bereich, unter 10 cm irreführend
ReflexionsstärkeTCRT5000Sehr günstig, sehr schnellNur wenige mm bis cm, stark farbabhängig

Die große Vergleichstabelle

Die folgende Tabelle fasst typische Modulwerte der Sensoren zusammen. Die Reichweiten sind Herstellerangaben; im echten Projekt können sie je nach Oberfläche und Umgebung kürzer ausfallen. Da Preise von Land zu Land schwanken, sind sie relativ angegeben.

SensorReichweiteGenauigkeitAbstrahlwinkelSchnittstelleVersorgungRelativer Preis
HC-SR042–400 cmEtwa ±0,3–1 cmEtwa 15°Trig/Echo-Impuls5 V (HC-SR04P: 3,3–5 V)Sehr günstig
JSN-SR04TEtwa 25–450 cmEtwa ±1 cmBreit (etwa 45° und mehr)Trig/Echo, bei manchen Versionen UART5 VGünstig
Sharp GP2Y0A2110–80 cmNah gut, fern schwachSchmal (wenige Grad)Analogspannung4,5–5,5 VMittel
VL53L0X3 cm – 2 m (Standard ~1,2 m)Etwa ±3 %25°I2C (0x29)Modul 3,3–5 VGünstig
VL53L1X4 cm – 4 mEtwa ±3 %, mm-Auflösung27° (auf 15° einengbar)I2C (0x29)Modul 3,3–5 VMittel
TF-Luna0,2–8 m±6 cm (bis 3 m), ±2 % (3–8 m)2°UART oder I2C5 V, 3,3-V-LogikTeuer
TCRT5000Etwa 0,2–15 mm (am besten 2,5 mm)Kein Abstand, nur da/nicht daSchmalDigital (DO) + analog (AO)3,3–5 VSehr günstig

HC-SR04: der Ultraschall-Klassiker

Der HC-SR04 sendet acht Schallimpulse mit 40 kHz und hält seinen ECHO-Pin auf HIGH, bis das Echo zurückkommt. Der Arduino misst die Länge dieses Impulses mit pulseIn() in Mikrosekunden. Schall legt bei 20 °C etwa 343 Meter pro Sekunde zurück, also 0,0343 cm pro Mikrosekunde; da der Schall hin und zurück läuft, gilt Abstand = Zeit × 0,0343 / 2. Die Schallgeschwindigkeit hängt von der Temperatur ab (etwa 331,3 + 0,606 × T m/s): Zwischen 0 °C und 35 °C liegen etwa 6 %, also bis zu 12 cm Fehler auf 2 Meter. Der folgende Code korrigiert das und nimmt den Median aus fünf Messungen, um gelegentliche Fehlechos auszusortieren.

C++ (Arduino IDE)
1const int TRIG_PIN = 9;
2const int ECHO_PIN = 10;
3const float SICAKLIK = 20.0;     // ortam sıcaklığı, °C / ambient temperature, °C
4float sesHizi;                   // cm/µs
5
6float mesafeOlc() {
7  digitalWrite(TRIG_PIN, LOW);
8  delayMicroseconds(2);
9  digitalWrite(TRIG_PIN, HIGH);  // 10 µs tetik darbesi / 10 µs trigger pulse
10  delayMicroseconds(10);
11  digitalWrite(TRIG_PIN, LOW);
12  unsigned long sure = pulseIn(ECHO_PIN, HIGH, 30000UL);   // 30 ms ≈ 5 m sınırı / ~5 m limit
13  if (sure == 0) return -1;      // yankı yok / no echo
14  return sure * sesHizi / 2.0;   // gidiş-dönüş / round trip
15}
16
17void setup() {
18  Serial.begin(9600);
19  pinMode(TRIG_PIN, OUTPUT);
20  pinMode(ECHO_PIN, INPUT);
21  sesHizi = (331.3 + 0.606 * SICAKLIK) / 10000.0;   // m/s -> cm/µs (20 °C: 0,0343)
22}
23
24void loop() {
25  float olcum[5];
26  for (int i = 0; i < 5; i++) {  // 5 ölçüm, aralarında 60 ms / 5 readings, 60 ms apart
27    olcum[i] = mesafeOlc();
28    delay(60);
29  }
30  for (int i = 1; i < 5; i++) {  // sırala / sort
31    float x = olcum[i];
32    int j = i - 1;
33    while (j >= 0 && olcum[j] > x) { olcum[j + 1] = olcum[j]; j--; }
34    olcum[j + 1] = x;
35  }
36  float d = olcum[2];            // ortanca / median
37  if (d < 0) Serial.println("Menzil disi / out of range");
38  else { Serial.print(d, 1); Serial.println(" cm"); }
39}
40
  • Mindestens 60 ms zwischen den Messungen: Misst du, während Echos des vorigen Impulses noch durch den Raum hallen, bekommst du falsche Werte.
  • Weiche und schräge Flächen: Stoff, Schaumstoff und Vorhänge schlucken Schall; Flächen mit mehr als 45 Grad Neigung lenken das Echo vom Sensor weg.
  • Breiter Strahl: Der etwa 15-Grad-Kegel deckt in 2 Metern eine Fläche von fast 50 cm ab; in einem schmalen Flur sieht er auch die Seitenwände.
  • 3,3-V-Boards: Der klassische HC-SR04 braucht 5 V und sein ECHO liefert 5 V; an ESP32 und Pico gehört ein Spannungsteiler an ECHO, oder du nimmst den HC-SR04P, der mit 3,3 V läuft.
  • Mehrere Sensoren: Zwei gleichzeitig ausgelöste HC-SR04 hören gegenseitig ihre Echos; löse sie nacheinander aus.

Anschluss des HC-SR04 sowie Nutzung mit seriellem Monitor und LCD erklärt der Beitrag Abstandssensor HC-SR04 ausführlich; hier konzentrieren wir uns auf den Vergleich.

JSN-SR04T: Ultraschall wasserdicht

Der JSN-SR04T arbeitet mit derselben Trigger-Echo-Logik wie der HC-SR04, sein Wandler sitzt aber in einer wasserdichten Kapsel am Kabel, getrennt von der Elektronikplatine. Deshalb ist er die Wahl für feuchte Orte wie Wassertanks, Brunnen, Regenwasserzisternen und Parksensoren im Freien. Zwei Unterschiede sind wichtig: Weil ein einziger Wandler sendet und lauscht, gibt es im Nahbereich eine Totzone (etwa 20–25 cm), und der Strahl ist breiter als beim HC-SR04. Montiere den Sensor im Tankdeckel, mindestens 25 cm über dem höchsten Wasserstand. Der folgende Code rechnet den Abstand in einen Füllstand in Prozent um.

C++ (Arduino IDE)
1// JSN-SR04T ile su deposu doluluğu / water tank level with a JSN-SR04T
2const int TRIG_PIN = 9;
3const int ECHO_PIN = 10;
4const float SENSOR_BOSLUK = 25.0;  // sensörden en yüksek su seviyesine, cm (ölü bölge) / sensor to max level (blind zone)
5const float DEPO_DERINLIK = 120.0; // en yüksek seviyeden depo dibine, cm / max level to tank bottom
6
7float mesafeOlc() {
8  digitalWrite(TRIG_PIN, LOW);
9  delayMicroseconds(5);
10  digitalWrite(TRIG_PIN, HIGH);
11  delayMicroseconds(20);           // JSN-SR04T 10 µs'den uzun darbeyi sever / likes a longer pulse
12  digitalWrite(TRIG_PIN, LOW);
13  unsigned long sure = pulseIn(ECHO_PIN, HIGH, 40000UL);
14  if (sure == 0) return -1;
15  return sure * 0.0343 / 2.0;      // 20 °C ses hızı / speed of sound at 20 °C
16}
17
18void setup() {
19  Serial.begin(9600);
20  pinMode(TRIG_PIN, OUTPUT);
21  pinMode(ECHO_PIN, INPUT);
22}
23
24void loop() {
25  float d = mesafeOlc();
26  if (d < 0) {
27    Serial.println("Yanki yok / no echo");
28  } else {
29    float suYuksekligi = DEPO_DERINLIK - (d - SENSOR_BOSLUK);   // dipten su yüksekliği / water height
30    float yuzde = constrain(suYuksekligi / DEPO_DERINLIK * 100.0, 0, 100);
31    Serial.print("Mesafe / distance: ");
32    Serial.print(d, 1);
33    Serial.print(" cm  Doluluk / fill: %");
34    Serial.println(yuzde, 0);
35  }
36  delay(1000);                     // su yüzeyi dalgalanır, sık ölçme / water ripples, measure slowly
37}
38
Leitern, Rohre oder Schwimmer im Tank können wegen des breiten Strahls Echos liefern; setz den Sensor von ihnen entfernt in die Nähe der Tankmitte. Sammeln sich Kondenstropfen auf dem Wandler, stimmt die Messung nicht mehr; leicht schräg montiert laufen die Tropfen ab. Ist die Wasseroberfläche unruhig, nimm den Median mehrerer Messungen.

Sharp GP2Y0A21: analoges Infrarot

Der Sharp GP2Y0A21YK0F ist ein Infrarotsensor für 10 bis 80 cm, der abhängig vom Abstand eine Analogspannung ausgibt. Weil er trianguliert, ist er weniger farbempfindlich als Sensoren, die auf Reflexionsstärke beruhen. Sein Ausgang ist nicht linear: etwa 2,3 V bei 10 cm, 0,4 V bei 80 cm und dazwischen eine umgekehrte Potenzkurve. Der Code rechnet diese Kurve mit der Näherung Abstand = 29,988 × V^-1,173 um. Die größte Falle liegt unter 10 cm: Kommt das Ziel näher, fällt die Spannung wieder, und ein Objekt in 5 cm kann aussehen wie in 20 cm. Bau den Sensor so ein, dass das Ziel nie näher als 10 cm kommen kann.

C++ (Arduino IDE)
1// Sharp GP2Y0A21YK0F (10–80 cm), analog / analog output
2const int SHARP_PIN = A0;
3
4float sharpCm() {
5  long toplam = 0;
6  for (int i = 0; i < 20; i++) {          // 20 okumanın ortalaması / average of 20 readings
7    toplam += analogRead(SHARP_PIN);
8    delay(2);
9  }
10  float volt = toplam / 20.0 * 5.0 / 1023.0;
11  if (volt < 0.35) return -1;             // 80 cm'den uzak / farther than 80 cm
12  float cm = 29.988 * pow(volt, -1.173);  // ters güç eğrisi / inverse power curve
13  if (cm > 80) return -1;
14  return cm;                              // 10 cm altı yanıltıcı / misleading below 10 cm
15}
16
17void setup() {
18  Serial.begin(9600);
19}
20
21void loop() {
22  float cm = sharpCm();
23  if (cm < 0) Serial.println("Menzil disi / out of range");
24  else { Serial.print(cm, 1); Serial.println(" cm"); }
25  delay(100);
26}
27

Sharp-Sensoren ziehen beim Messen kurze, hohe Stromspitzen, die auf der Versorgung Störungen erzeugen. Ein Kondensator von etwa 10 µF nahe an VCC und GND des Sensors beruhigt die Werte deutlich. Die Familie hat auch Mitglieder mit anderen Bereichen: Der GP2Y0A41SK0F arbeitet von 4 bis 30 cm, der GP2Y0A02YK0F von 20 bis 150 cm; jeder hat andere Kurvenkoeffizienten.

VL53L0X und VL53L1X: Laser-ToF-Sensoren

VL53L0X und VL53L1X sind winzige Laser-Laufzeitsensoren von STMicroelectronics. Sie senden einen unsichtbaren 940-nm-Laserimpuls, messen mit Photonenzählern die Rückkehrzeit der Reflexion und liefern das Ergebnis direkt in Millimetern über I2C. Sie sind nahezu farbunabhängig, ihr Strahl ist schmaler als beim Ultraschall, und eine Messung dauert 20–50 ms. Der VL53L0X misst im Standardmodus bis etwa 1,2 Meter, im Langstreckenmodus bis 2 Meter; der VL53L1X schafft 4 Meter, und sein Sichtfeld (ROI) lässt sich per Software einengen. Beide haben die Standard-I2C-Adresse 0x29. Der Code nutzt die VL53L0X-Bibliothek von Pololu; such im Bibliotheksverwalter nach „VL53L0X“ und installiere die Pololu-Version.

C++ (Arduino IDE)
1#include <Wire.h>
2#include <VL53L0X.h>              // Pololu VL53L0X kütüphanesi / library
3
4VL53L0X sensor;
5
6void setup() {
7  Serial.begin(9600);
8  Wire.begin();                    // Uno: SDA A4, SCL A5 / ESP32: SDA 21, SCL 22
9  sensor.setTimeout(500);
10  if (!sensor.init()) {
11    Serial.println("VL53L0X bulunamadi / not found");
12    while (true) {}
13  }
14  // Uzun menzil modu (2 m'ye kadar, daha gürültülü) / long range mode (up to 2 m, noisier):
15  // sensor.setSignalRateLimit(0.1);
16  // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
17  // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
18  sensor.setMeasurementTimingBudget(50000);   // 50 ms: daha kararlı ölçüm / steadier reading
19  sensor.startContinuous();
20}
21
22void loop() {
23  uint16_t mm = sensor.readRangeContinuousMillimeters();
24  if (sensor.timeoutOccurred()) {
25    Serial.println("Zaman asimi / timeout");
26  } else if (mm >= 8190) {         // 8190-8191: hedef yok / no target
27    Serial.println("Menzil disi / out of range");
28  } else {
29    Serial.print(mm);
30    Serial.println(" mm");
31  }
32}
33

Das Messzeitbudget (Timing Budget) bestimmt das Verhältnis von Genauigkeit und Tempo: 20 ms sind schnell, aber verrauscht, 200 ms langsam, aber stabil. Sonnenlicht und starke Infrarotquellen verkürzen die Reichweite deutlich; berücksichtige das bei Messungen im Freien. Willst du zwei VL53L0X an einen I2C-Bus hängen, hältst du einen per XSHUT-Pin abgeschaltet und gibst dem anderen eine neue Adresse (setAddress), weil beide 0x29 haben; I2C-Details im Beitrag Was ist I2C.

TF-Luna: 8 Meter mit einem kleinen LiDAR

Das TF-Luna ist das kleine Einpunkt-LiDAR von Benewake: Es misst die Laufzeit mit moduliertem Infrarotlicht (850 nm), arbeitet von 0,2 bis 8 Meter mit einem sehr schmalen Strahl von nur 2 Grad und schafft bis zu 250 Messungen pro Sekunde. Standardmäßig sendet es jede Messung per UART mit 115200 Baud als 9-Byte-Paket: zwei Kopfbytes 0x59, Abstand (cm), Signalstärke, Innentemperatur und eine Prüfsumme. Liegt die Signalstärke unter 100 oder bei 65535 (Übersteuerung), gilt die Messung als unzuverlässig. Es wird mit 5 V versorgt, der UART-Pegel ist aber 3,3 V; deshalb passt es direkt an einen ESP32. Da SoftwareSerial am Uno bei 115200 Baud nicht zuverlässig ist, nimm ein Board mit Hardware-UART wie ESP32 oder Mega; die Logik zum Auswerten von UART-Paketen erklärt der Beitrag serielle UART-Kommunikation.

C++ (Arduino IDE)
1// TF-Luna LiDAR, UART (115200), ESP32 Serial2
2// TF-Luna TX -> GPIO 16, RX -> GPIO 17, VCC 5V, GND
3const int RXD2 = 16, TXD2 = 17;
4
5uint8_t kare[9];                   // 0x59 0x59 DistL DistH AmpL AmpH TempL TempH Checksum
6int konum = 0;
7
8void setup() {
9  Serial.begin(115200);
10  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
11}
12
13void loop() {
14  while (Serial2.available()) {
15    uint8_t b = Serial2.read();
16    if (konum < 2) {               // iki 0x59 başlık baytını bekle / wait for two 0x59 header bytes
17      if (b == 0x59) kare[konum++] = b;
18      else konum = 0;
19      continue;
20    }
21    kare[konum++] = b;
22    if (konum < 9) continue;
23    konum = 0;
24
25    uint8_t toplam = 0;
26    for (int i = 0; i < 8; i++) toplam += kare[i];
27    if (toplam != kare[8]) continue;             // sağlama toplamı hatalı / bad checksum
28
29    uint16_t mesafe = kare[2] | (kare[3] << 8);  // cm
30    uint16_t guc = kare[4] | (kare[5] << 8);     // sinyal gücü / signal strength
31    float derece = (kare[6] | (kare[7] << 8)) / 8.0 - 256.0;
32
33    if (guc < 100 || guc == 65535) {             // zayıf ya da aşırı sinyal / weak or saturated
34      Serial.println("Guvenilmez / unreliable");
35    } else {
36      Serial.print(mesafe);
37      Serial.print(" cm  guc / amp: ");
38      Serial.print(guc);
39      Serial.print("  ic sicaklik / chip temp: ");
40      Serial.println(derece, 1);
41    }
42  }
43}
44

TCRT5000: Annäherung und Linienerkennung

Infrarot-Reflexsensor TCRT5000
TCRT5000: Infrarot-LED und Fototransistor nebeneinander; auf der Modulplatine sitzen Komparator, Schwellwert-Poti sowie Digital- und Analogausgang.

Der TCRT5000 ist kein Abstandsmesser, sondern ein Reflexsensor: Das Licht der Infrarot-LED wird von der Oberfläche zurückgeworfen, und der Fototransistor daneben misst, wie viel ankommt. Am besten arbeitet er bei etwa 2,5 mm, ab 1,5 cm wird das Signal schnell schwach. Weil Weiß viel und Schwarz kaum reflektiert, liefert er schon im selben Abstand je nach Farbe völlig andere Werte; deshalb dient er in Linienfolger-Robotern zur Schwarz-Weiß-Unterscheidung, zum Zählen von Löchern in Encoderscheiben und zur Erkennung sehr naher Objekte. Der Komparator auf dem Modul schaltet den Digitalausgang, sobald die per Poti eingestellte Schwelle überschritten wird. Details im Beitrag Infrarotsensor TCRT5000.

C++ (Arduino IDE)
1// TCRT5000 modülü: DO dijital, AO analog / TCRT5000 module: DO digital, AO analog
2const int DO_PIN = 7;
3const int AO_PIN = A1;
4const int LED_PIN = 13;
5
6void setup() {
7  Serial.begin(9600);
8  pinMode(DO_PIN, INPUT);
9  pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13  bool nesneVar = (digitalRead(DO_PIN) == LOW);  // çoğu modülde LOW = yansıma var / LOW = reflection on most modules
14  int yansima = analogRead(AO_PIN);              // düşük değer = güçlü yansıma / low value = strong reflection
15  digitalWrite(LED_PIN, nesneVar);
16  Serial.print(nesneVar ? "Nesne VAR / object  " : "Nesne yok / none  ");
17  Serial.println(yansima);
18  delay(100);
19}
20

Einfluss von Oberfläche und Umgebung

Die Reichweite auf dem Papier ändert sich, sobald der Sensor auf die zu messende Oberfläche trifft. Ultraschallsensoren glänzen bei harten, schallreflektierenden Flächen, haben aber Mühe mit schallschluckendem Stoff; lichtbasierte Sensoren reagieren auf Farbe, Glanz und Sonnenlicht. Die Tabelle zeigt, welcher Sensor in welcher Situation zuverlässig bleibt.

Oberfläche / UmgebungUltraschall (HC-SR04)Sharp IRLaser-ToF (VL53, TF-Luna)TCRT5000
Harte, glatte WandSehr gutGutSehr gutGut (nur ganz nah)
Stoff, Schaumstoff, VorhangSchwach (Schall wird geschluckt)GutGutMittel
Matt-schwarze FlächeGutMittelReichweite sinktSehr schwach
Glas, Spiegel, glänzendes MetallGut (Schall wird reflektiert)IrreführendIrreführend (Licht geht durch oder wird abgelenkt)Irreführend
Schräge FlächeSchwach (Echo wird abgelenkt)MittelGutMittel
Sonnenlicht, draußenUnbeeinflusstBeeinflusstReichweite sinkt deutlichBeeinflusst
WasseroberflächeGut (Tankmessung)SchwachSchwankendUngeeignet
TemperaturänderungSchallgeschwindigkeit ändert sich, Korrektur nötigWenig beeinflusstWenig beeinflusstWenig beeinflusst

Anschluss im Überblick: Uno, ESP32 und Pico

SensorArduino UnoESP32Raspberry Pi PicoHinweis
HC-SR04 / JSN-SR04TTRIG D9, ECHO D10, 5VTRIG 5, ECHO 18 (mit Teiler), VIN 5VTRIG GP14, ECHO GP15 (mit Teiler), VBUSECHO liefert 5 V
Sharp GP2Y0A21A0, 5VGPIO 34 (mit Teiler), VIN 5VGP26 (mit Teiler), VBUSAusgang erreicht bis 3,1 V
VL53L0X / VL53L1XSDA A4, SCL A5SDA 21, SCL 22SDA GP4, SCL GP5Adresse 0x29
TF-LunaSoftwareSerial nicht empfohlenTX → GPIO 16, RX → GPIO 17TX → GP1 (uart0 RX), RX → GP05-V-Versorgung, 3,3-V-Logik
TCRT5000-ModulDO D7, AO A1DO 27, AO 34DO GP16, AO GP273,3–5 V
Schließt du Ausgänge von 5-V-Sensoren (HC-SR04 ECHO, Sharp-Analogausgang) an ESP32 oder Pico an, vergiss den Spannungsteiler nicht; deren Pins sind nicht 5-V-tolerant. Weil der Sharp-Ausgang bis 3,1 V reicht, bringt er einen ADC mit 3,3-V-Referenz an die Grenze; sicherer misst du über einen Teiler wie 10 kΩ + 20 kΩ und multiplizierst das Ergebnis mit 1,5.

Ultraschallmessung mit dem Raspberry Pi Pico

In MicroPython misst machine.time_pulse_us() die Impulslänge; die Funktion entspricht pulseIn() am Arduino und liefert bei Zeitüberschreitung einen negativen Wert. Versorge den HC-SR04 über den VBUS-Pin (USB 5 V) des Pico und setz einen Teiler aus 1 kΩ + 2 kΩ in die ECHO-Leitung, oder nimm den HC-SR04P, der direkt mit 3,3 V läuft. Für VL53L0X und TF-Luna gibt es ebenfalls MicroPython-Treiber; das UART-Paket des TF-Luna wertest du mit machine.UART nach derselben Logik wie im Arduino-Code aus.

MicroPython
1from machine import Pin, time_pulse_us
2import time
3
4trig = Pin(14, Pin.OUT)
5echo = Pin(15, Pin.IN)             # 5 V ECHO için gerilim bölücü şart / divider required for a 5 V ECHO
6SES_HIZI = 0.0343                  # cm/µs, 20 °C
7
8def mesafe_olc():
9    trig.low()
10    time.sleep_us(2)
11    trig.high()
12    time.sleep_us(10)              # 10 µs tetik / 10 µs trigger
13    trig.low()
14    sure = time_pulse_us(echo, 1, 30000)   # zaman aşımında eksi döner / negative on timeout
15    if sure < 0:
16        return None
17    return sure * SES_HIZI / 2
18
19while True:
20    d = mesafe_olc()
21    print("Menzil disi" if d is None else "{:.1f} cm".format(d))
22    time.sleep_ms(100)
23

Welcher Abstandssensor für welches Projekt?

ProjektEmpfohlener SensorWarum?
Hindernisvermeidender RoboterHC-SR04 (günstig) oder VL53L0XDer breite Strahl übersieht keine Hindernisse; der VL53L0X ist schneller und kleiner
Füllstand von Wassertank oder BrunnenJSN-SR04TWasserdichte Sonde, erkennt die Wasseroberfläche gut
EinparkhilfeJSN-SR04T oder HC-SR04Wetterfest, 2–3 m Reichweite genügen
Linienfolger-RoboterTCRT5000Für die Schwarz-Weiß-Erkennung gemacht
Mini-Sumo, präzise Messung auf dem TischVL53L0X / VL53L1XMillimeterauflösung, schmaler Strahl, klein
Arduino-Radar (Servo-Schwenk)HC-SR04 oder TF-LunaHC-SR04 ist günstig; der 2°-Strahl des TF-Luna zeichnet eine viel schärfere Karte
Körpergrößenmesser, TürzählerVL53L1X oder TF-LunaGroße Reichweite und stabile Werte
Drohne, große EntfernungTF-Luna8 m Reichweite, bis 250 Hz
Berührungsloser Wasserhahn, HanderkennungSharp GP2Y0A21Bereich 10–80 cm und einfacher Analogausgang

Noch ein paar Projektideen: Schwenk einen HC-SR04 auf einem Servo und baue ein Arduino-Radar; nutze bei deinem hindernisvermeidenden Roboter vorn einen HC-SR04 und seitlich zwei VL53L0X; öffne den Deckel eines smarten Mülleimers, wenn sich eine Hand nähert; bau mit einem OLED-Display ein tragbares digitales Maßband, oder schick mit einem JSN-SR04T den Füllstand deines Wassertanks über einen ESP32 aufs Handy.

Häufige Fehler und Lösungen

SymptomMögliche UrsacheLösung
HC-SR04 zeigt immer 0 oder außer ReichweiteKein Echo, Verdrahtungs- oder Versorgungsproblem5-V-Versorgung und TRIG/ECHO prüfen, pulseIn ein Timeout geben
Ultraschallwerte springen gelegentlichEcho des vorigen Impulses oder Seitenwand60 ms zwischen Messungen warten, Medianfilter nutzen
JSN-SR04T misst nicht im NahbereichTotzone (20–25 cm)Sensor mindestens 25 cm vom Ziel montieren
Sharp zeigt ganz nah einen großen, falschen WertDie Kennlinie kehrt unter 10 cm umVerhindern, dass das Ziel näher als 10 cm kommt
Sharp-Werte verrauschtStromspitzen stören die Versorgung10-µF-Kondensator an VCC-GND, Werte mitteln
VL53L0X nicht gefundenI2C-Verdrahtung oder AdresskonfliktSDA/SCL und Adresse 0x29 mit I2C-Scanner prüfen
Lasersensor misst draußen zu kurzInfrarotanteil des SonnenlichtsAbschatten, Timing Budget erhöhen oder Ultraschall nutzen
TF-Luna liefert UnsinnFalsche Baudrate oder SoftwareSerial zu langsam115200 Baud und Hardware-UART nutzen, Prüfsumme kontrollieren
Denk vor der Sensorwahl an das Ziel: Für ein großes, hartes, nahes Ziel reicht meist ein HC-SR04. Musst du eine schmale Stelle präzise messen oder weiche Flächen erfassen, wechsle zu ToF; für feuchte Orte oder draußen zum JSN-SR04T; brauchst du mehr als ein paar Meter oder sehr schnelle Messungen, zum TF-Luna.

Abstandssensoren sind der einfachste Weg, Arduino-Projekten ein Gespür für ihre Umgebung zu geben, und der richtige Sensor entscheidet darüber, ob ein Projekt ruhig läuft oder nervt. Die Tabellen und Codes dieses Vergleichs helfen dir, Budget und Leistung passend abzuwägen. In der BlueGrays-App findest du Projekte zur Abstandsmessung mit dem HC-SR04, zur Einparkhilfe, zur Körpergrößenmessung, zum hindernisvermeidenden Roboter, zur ESP32-Einparkhilfe und zur Abstandsmessung mit dem TCRT5000, jeweils Schritt für Schritt mit Schaltplan und Code.

Häufige Fragen

Welcher Abstandssensor ist der beste für Arduino?

Den einen besten gibt es nicht; die Wahl hängt von Ziel und Umgebung ab. Der HC-SR04 passt für allgemeine, günstige Anwendungen, VL53L0X oder VL53L1X für Millimetergenauigkeit und schmalen Strahl, der JSN-SR04T für feuchte Orte und das TF-Luna für schnelle Messungen über mehrere Meter.

Wie weit misst der HC-SR04?

Laut Hersteller von 2 cm bis 4 Meter, in der Praxis reichen zuverlässige Messungen meist 2–3 Meter. An die Grenze kommst du bei großen, harten Zielen, die senkrecht zum Sensor stehen; bei weichen, kleinen oder schrägen Zielen sinkt die Reichweite deutlich.

Was ist der Unterschied zwischen Ultraschall- und Infrarot-Abstandssensor?

Ein Ultraschallsensor misst die Echolaufzeit eines Schallimpulses; Farbe und Licht stören ihn nicht, aber sein Strahl ist breit und weiche Flächen machen ihm Mühe. Infrarotsensoren nutzen Licht, haben schmalere Strahlen und sind schnell, doch Sonnenlicht, Glas und manche dunklen Flächen können die Messung verfälschen.

Was unterscheidet VL53L0X und VL53L1X?

Beide sind Laser-ToF-Sensoren mit I2C. Der VL53L0X misst bis etwa 2 Meter, der VL53L1X bis 4 Meter, kann schneller messen und sein Sichtfeld per Software einengen. Für kleine Roboter mit kurzer Distanz passt der VL53L0X, für größere und präzisere Messungen der VL53L1X.

Welcher Abstandssensor eignet sich für den Füllstand eines Wassertanks?

Am häufigsten wird der JSN-SR04T mit wasserdichter Sonde genutzt; er sitzt im Tankdeckel, mindestens 25 cm über dem höchsten Wasserstand. Der HC-SR04 funktioniert in trockenen, geschlossenen Tanks ebenfalls, doch Feuchtigkeit und Kondenswasser können ihn schnell beschädigen.

Funktionieren Abstandssensoren mit ESP32 und Raspberry Pi Pico?

Ja, aber den ECHO-Ausgang der 5-V-Sensoren HC-SR04 und JSN-SR04T sowie den Analogausgang des Sharp musst du mit einem Spannungsteiler auf 3,3 V bringen. VL53L0X-Module und das TF-Luna arbeiten bereits mit 3,3-V-tauglicher Logik, der HC-SR04P läuft direkt mit 3,3 V.

Alle Projekte ansehen
HC-SR04 Abstandsmessung (serielle Anzeige)
#27Anfänger

HC-SR04 Abstandsmessung (serielle Anzeige)

Der Sensor HC-SR04 funktioniert wie eine Fledermaus, die im Dunkeln ihren Weg findet: Er sendet einen Ton, den du nicht hörst, lauscht auf das Echo und misst, wie weit der Gegenstand vor ihm entfernt

4.6(46)
71
Parksensor mit HC-SR04
#28Mittel
Premium

Parksensor mit HC-SR04

Eine Mini-Ausgabe der Einparkhilfe im Auto: Je näher etwas kommt, desto schneller piept es. Der Abstandssensor misst das Hindernis vor ihm; ist es weiter als 20 Zentimeter entfernt, leuchtet die grüne

4.8(64)
85
Projekt Körpergrößenmessung
#33Mittel
Premium

Projekt Körpergrößenmessung

Ein Größenmesser für den Türrahmen, der dir in Zentimetern sagt, wie groß die Person darunter ist. Zuerst drückst du den ersten Knopf, während niemand darunter steht, und der Abstandssensor misst die

4.5(25)
34
Roboter zur Hindernisvermeidung
#81Fortgeschritten
Premium

Roboter zur Hindernisvermeidung

Wie wäre es, ein intelligentes Fahrzeug zu bauen, das seinen Weg selbst findet? Der Obstacle Avoiding Robot scannt dank des Ultraschallsensors vor ihm ständig seine Umgebung. Wenn er auf ein Hindernis

5.0(38)
49
ESP32 HC-SR04 Ultraschall-Entfernungsmesser
#116Mittel

ESP32 HC-SR04 Ultraschall-Entfernungsmesser

Der Ultraschallsensor HC-SR04 berechnet die Entfernung, indem er die Zeit misst, die die von ihm ausgesendete Schallwelle benötigt, um auf ein Objekt zu treffen und zurückzukehren (Time of Flight). In diesem Projekt senden wir mit dem ESP32 einen 10-Mikrosekunden-Impuls an den TRIG-Pin und lesen die vom ECHO-Pin kommende Echozeit mit pulseIn(). Die berechnete Entfernung geben wir in cm auf einem 16x2-I2C-LCD aus. Da der HC-SR04 mit 5 V betrieben wird, ist ein Spannungsteiler am ECHO-Pin zw

4.9(28)
45
ESP32-Parksensor (HC-SR04 + 5-LED-Leiste + Summer + OLED)
#142Fortgeschritten
Premium

ESP32-Parksensor (HC-SR04 + 5-LED-Leiste + Summer + OLED)

Die ESP32-Version des Parkhilfesensors für Autos! Mit dem Ultraschallsensor HC-SR04 messen wir den Abstand zum Objekt vor dem Fahrzeug. Je weiter sich das Objekt nähert, desto mehr leuchten die 5 LEDs der Leiste auf (grün → gelb → rot) und die Intervalle der Summer-Signaltöne werden kürzer. Wenn das Objekt sehr nahe kommt (unter 10 cm), ertönt ein Daueralarm und alle LEDs leuchten. Auf dem SSD1306-OLED-Display werden der aktuelle Wert in cm in großer Schrift, ein Statustext (NICHT / VORSICHT / N

0.0(0)
14
Reflexion (Nähe) mit TCRT5000 messen
#77Mittel
Premium

Reflexion (Nähe) mit TCRT5000 messen

Mit einem kleinen Sensor, der unsichtbares Licht aussendet und misst, wie viel davon zurückkommt, erkennst du die Fläche vor ihm. Je näher ein Gegenstand oder eine helle Fläche kommt, desto mehr Licht

4.6(33)
43
Abstandsmessung mit LCD-Display
#31Fortgeschritten
Premium

Abstandsmessung mit LCD-Display

Ein Gerät, das ohne Lineal Abstände misst: Beweg deine Hand vor dem Sensor vor und zurück und sieh zu, wie sich die Zahl ändert. Der HC-SR04 sendet eine Schallwelle aus und horcht auf ihr Echo, der Ar

4.6(45)
59