Skip to Content

Parkdistanzsensor mit CrowPanel ESP32 Display

Parkdistanzsensor mit CrowPanel ESP32 Display

In diesem Tutorial lernst du, wie man einen Parksensor mit dem TOF10120 IR Laser Distance Sensor und einem CrowPanel 3.5″ ESP32 Display baut. Ein Parksensor hilft Fahrern, Hindernisse beim Einparken zu vermeiden, indem er beispielsweise den Abstand zwischen Auto und Garagenwand misst.

Der kurze Videoclip unten zeigt den Parksensor in Aktion. Er demonstriert, wie Entfernungen in Zentimetern gemessen werden und wie man den Abstand für den Annäherungsalarm (rote Farbe) einstellt:

Demo Parksensor auf CrowPanel Display mit TOF10120

Der TOF10120 Sensor verwendet Time-of-Flight-Technologie. Er sendet einen Infrarot-Laserstrahl aus und misst, wie lange es dauert, bis der Strahl nach dem Auftreffen auf ein Objekt zurückkehrt. Diese Zeit wird in eine Entfernung umgerechnet.

Der ESP32 Mikrocontroller im CrowPanel Display verarbeitet dann die Daten des TOF10120 Sensors. Er berechnet die Entfernung und bereitet die Informationen für die Anzeige vor.

Schließlich zeigt das CrowPanel TFT-Display die Entfernung in Echtzeit an. Es liefert die visuelle Ausgabe, sodass der Fahrer sehen kann, wie weit er von Hindernissen entfernt ist.

In den nächsten Abschnitten lernst du, wie du den TOF10120 Sensor mit dem CrowPanel Display verbindest und wie du ihn programmierst, um Entfernungsinformationen anzuzeigen. Fangen wir mit den benötigten Teilen an.

Benötigte Teile

Abgesehen vom TOF10120 Sensor benötigst du das CrowPanel 3.5″ ESP32 Display von ELECROW und die Arduino IDE. Außerdem sind einige Dupont-Kabel zum Verbinden von Sensor und Display sehr hilfreich.

TOF10120 Distanzsensor

CrowPanel 3.5″ ESP32 Display

Dupont wire set

Dupont-Kabelsatz

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Eigenschaften des CrowPanel 3.5″ ESP32 Displays

Das CrowPanel 3.5″ ESP32 Display ist ein resistiver Touchscreen mit einem TFT-Display mit 480*320 Auflösung und einem eingebauten ESP32-WROVER-B als Steuerprozessor. Du kannst das Display mit einem Acrylgehäuse (siehe Bild unten) bekommen, sodass du kein eigenes Gehäuse bauen musst.

CrowPanel 3.5" ESP32 Display with Housing
CrowPanel 3.5″ ESP32 Display mit Gehäuse (source)

Darüber hinaus verfügt das Board über einen TF-Kartensteckplatz, eine UART-Schnittstelle, eine I2C-Schnittstelle, eine Lautsprecherschnittstelle, einen Batterieanschluss mit Ladefunktion und einen kleinen GPIO-Port mit zwei GPIO-Pins. Siehe das Pinout unten:

Pinout of CrowPanel 3.5" ESP32 Display
Pinbelegung des CrowPanel 3.5″ ESP32 Displays

Die folgende Tabelle zeigt, welche GPIO-Pins den drei IO-Schnittstellen zugeordnet sind.

GPIO_DIO25; IO32
UARTRX(IO16); TX(IO17)
I2CSDA(IO22); SCL(IO21)

Das Board kann über den USB-Port (5V, 2A) oder durch Anschluss einer Standard-3,7V-LiPo-Batterie an den BAT-Anschluss mit Strom versorgt werden. Achte dabei auf die Polarität des Steckers und der Batterie. Wenn USB-Kabel und Batterie gleichzeitig angeschlossen sind, lädt das Board die Batterie (maximaler Ladestrom 500mA).

Du kannst das Board mit verschiedenen Entwicklungsumgebungen programmieren, wie Arduino IDE, Espressif IDF, Lua RTOS und Micro Python, und es ist kompatibel mit dem LVGL graphics library. In diesem Tutorial verwenden wir jedoch die Arduino IDE und die TFT_eSPI graphics library.

Eigenschaften des TOF10120

Der TOF10120 Time-of-Flight Distanzsensor ist ein sehr kleiner (10mm x 13mm), hochpräziser Sensor, der Infrarotlicht zur Abstandsmessung nutzt.

Dimensions of TOF10120
Abmessungen des TOF10120 (source)

Er basiert auf dem Time-of-Flight (ToF) Prinzip, bei dem der Sensor Lichtimpulse aussendet und die Zeit misst, bis das Licht reflektiert zurückkehrt, um die Entfernung zu berechnen. Der TOF10120 hat eine Reichweite von bis zu 180 cm und arbeitet bei einer Wellenlänge von 940nm. Das Bild unten zeigt den Kegel der Laser-LED, die den Lichtimpuls aussendet, und den Sichtkegel des Detektors, der das reflektierte Licht registriert.

Working Principle of TOF10120
Funktionsprinzip des TOF10120 (source)

Der TOF10120 arbeitet mit 3V bis 5V und hat einen niedrigen durchschnittlichen Stromverbrauch von nur 35 mA. Die folgende Liste fasst seine Hauptmerkmale zusammen:

  • Arbeitsbereich: 100-1800mm
  • Messfehler: bis zu 5%
  • Hohe Messgeschwindigkeit: max. 30ms
  • Kommunikationsschnittstelle: UART / I2C
  • UART-Übertragungsparameter: 9600 8n1
  • Wellenlänge: 940 nm
  • Sichtfeld: 25°
  • Umgebungslichtunempfindlichkeit: 50k lux
  • Spannungsbereich: 3V bis 5V
  • Durchschnittlicher Stromverbrauch: 35 mA

Die obigen Spezifikationen und das Datenblatt geben an, dass die minimale messbare Entfernung 100mm beträgt. Ich habe jedoch festgestellt, dass man tatsächlich Messungen bis auf 10mm und bis zu 2000mm erhalten kann, wobei die Werte unter 30mm sehr ungenau werden.

Der TOF10120 kommuniziert mit Mikrocontrollern über eine I2C- oder UART-Schnittstelle. Das Bild unten zeigt die Pinbelegung. SDA und SCL sind für die I2C-Schnittstelle, RxD und TxD für die UART-Kommunikation.

Pinout of TOF10120
Pinbelegung des TOF10120

Im nächsten Abschnitt lernst du, wie du den TOF10120 mit dem CrowPanel Display verbindest.

Anschluss des TOF10120 an das CrowPanel Display

Das CrowPanel Display verfügt über einen I2C-Port und wird mit einem farbcodierten Stecker geliefert. Masse ist schwarz, 3,3V Versorgungsspannung ist rot, SCL ist weiß (grau) und SDA ist gelb. Verbinde Masse mit Pin 1, 3,3V mit Pin 2, SDA mit Pin 5 und SCL mit Pin 6 des TOF10120 wie unten gezeigt:

Connecting TOF10120 to CrowPanel Display
Anschluss des TOF10120 an CrowPanel Display

Beachte, dass Pin 3 und 4 (RxD, TxD) des TOF10120 nicht verbunden sind, da wir nicht die UART-Schnittstelle, sondern I2C verwenden.

Das Bild unten zeigt die, zugegeben unordentliche, Verkabelung des TOF10120 mit CrowPanel unter Verwendung der mitgelieferten Stecker und einiger Dupont-Kabel.

Wiring of TOF10120 with CrowPanel
Verkabelung des TOF10120 mit CrowPanel

Die gute Nachricht ist, dass du kein Breadboard brauchst und keine Kabel löten musst.

Testen des TOF10120 Sensors

Bevor wir etwas Komplexes implementieren, sollten wir testen, ob der Sensor korrekt angeschlossen ist und funktioniert. Dazu müssen wir zuerst eine Bibliothek installieren, um Distanzmessungen vom TOF10120 Sensor auszulesen.

TOF10120 Bibliothek installieren

Um die TOF10120 Bibliothek zu installieren, gehe zum tof10120_arduino_lib repo here und klicke auf den grünen „Code“-Button. Dann klicke auf „Download Zip“ wie unten gezeigt:

Download TOF10120 library
TOF10120 Bibliothek herunterladen

Erstelle im Arduino IDE folgenden Testcode:

#include "TOF10120.h"

TOF10120 sensor = TOF10120();

void setup() {
  Serial.begin(9600);
  sensor.init();
}

void loop() {
  Serial.print("distance:");
  Serial.println(sensor.distance());
  delay(100);
}

Dann gehe zu „Sketch“ -> „Include Library“ -> „Add .Zip Library..“ und wähle die zuvor heruntergeladene Datei „tof10120_arduino_lib-main.zip“ aus:

Adding TOF10120 library to sketch
TOF10120 Bibliothek zum Sketch hinzufügen

Der Testcode ist sehr einfach. Zuerst wird die TOF10120 Bibliothek eingebunden und das TOF10120 sensor Objekt erstellt. In der setup() Funktion wird der Sensor initialisiert und in der loop() Funktion rufen wir schließlich sensor.distance() auf, um die vom Sensor gemessene Entfernung auszulesen.

Testcode für TOF10120 ausführensensor

Wähle im Arduino IDE „ESP32 Dev Module“ als Board aus und stelle sicher, dass das CrowPanel Display mit dem USB-Port verbunden und im Arduino IDE sichtbar ist.

ESP32 Dev Module selected as board
ESP32 Dev Module als Board ausgewählt

Lade nun den Code auf dein CrowPanel Display hoch und du solltest Entfernungswerte im Serial Monitor sehen. Wenn kein Objekt vor dem Sensor ist, wird eine Entfernung von 2000mm angezeigt, und wenn der Sensor nicht gefunden wird, erscheint eine -1.

Distances printed on Serial Monitor
Entfernungen im Serial Monitor ausgegeben

Falls Probleme auftreten und der Sensor nicht zu funktionieren scheint, überprüfe die Verkabelung und ob die richtigen SDA- und SCL-Pins verwendet werden. Du kannst auch die Laserdiode des Sensors mit einer Digitalkamera (Handy) überprüfen. Während IR-Licht für das menschliche Auge unsichtbar ist, kann die Kamera es sehen. Das Bild unten zeigt den TOF10120 mit deutlich leuchtender IR-Diode:

Illuminated IR Diode of TOF10120
Leuchtende IR-Diode des TOF10120

Wenn der TOF10120 Sensor funktioniert und du Entfernungswerte angezeigt bekommst, können wir mit der Projektstruktur für den Hauptcode beginnen.

Projektstruktur erstellen

In diesem Abschnitt erstellen wir die Projektstruktur und das Setup für das TFT_eSPI library, das benötigt wird, um das TFT-Display zu steuern.

Öffne deine Arduino IDE und erstelle ein Projekt „parking_sensor_display“ und speichere es (Speichern unter …). Dadurch wird ein Ordner „parking_sensor_display“ mit der Datei „parking_sensor_display.ino“ darin erstellt. In diesem Ordner erstelle eine weitere Datei namens „tft_setup.h„. Dein Projektordner sollte so aussehen

Project Folder Structure
Projektordnerstruktur

und in deiner Arduino IDE solltest du nun zwei Tabs mit den Namen „parking_sensor_display.ino“ und „tft_setup.h“ sehen.

Arduino IDE with two Tabs
Arduino IDE mit zwei Tabs

Klicke auf den Tab „tft_setup.h„, um die Datei zu öffnen, und kopiere den folgenden Code hinein:

// tft_setup.h
#define ILI9488_DRIVER
#define TFT_HEIGHT  480
#define TFT_WIDTH   320 

#define TFT_BACKLIGHT_ON HIGH
#define TFT_BL   27 
#define TFT_MISO 12
#define TFT_MOSI 13
#define TFT_SCLK 14
#define TFT_CS   15
#define TFT_DC    2 
#define TFT_RST  -1
#define TOUCH_CS 33

#define SPI_FREQUENCY        27000000
#define SPI_TOUCH_FREQUENCY   2500000
#define SPI_READ_FREQUENCY   16000000

#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

Dieser Code teilt dem TFT_eSPI library mit, welches Display wir verwenden. Konkret geben wir der Bibliothek die Abmessungen des Displays (TFT_WIDTH, TFT_WIDTH), den Display-Treiber (ILI9488_DRIVER), welche SPI-Pins zur Steuerung verwendet werden und welche Schriftarten geladen werden sollen. Ohne diese Einstellungen kannst du nichts auf dem Display anzeigen.

Für detailliertere Informationen sieh dir das Tutorial CrowPanel 2.8″ ESP32 Display : Easy Setup Guide an. Dort erklären wir, wie man das 2,8″ Display einrichtet. Die Schritte und Beschreibungen gelten aber genauso für das 3,5″ Display, nur die Einstellungen für Bildschirmgröße und Treiber sind unterschiedlich.

Touchscreen kalibrieren

Das CrowPanel 3,5″ Display hat einen resistiven Touchscreen, den du zuerst kalibrieren musst, bevor du ihn mit der TFT_eSPI Bibliothek verwenden kannst. Kopiere den Code unten in die Datei „parking_sensor_display.ino„, kompiliere ihn und lade ihn auf das CrowPanel 3,5“ Display hoch. Verwende wie zuvor das ESP32 Dev Module als Board.

#include "tft_setup.h"
#include "TFT_eSPI.h"

TFT_eSPI tft = TFT_eSPI();

void setup() {
  Serial.begin(9600);
  tft.begin();
  tft.setRotation(3);
}

void loop() {
  uint16_t cal[5];
  tft.fillScreen(TFT_BLACK);
  tft.setCursor(20, 0);
  tft.setTextFont(2);
  tft.setTextSize(1);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.print("Touch corners ... ");
  tft.calibrateTouch(cal, TFT_MAGENTA, TFT_BLACK, 15);
  tft.println("done.");

  Serial.printf("cal: {%d, %d, %d, %d, %d}\n",
                cal[0], cal[1], cal[2], cal[3], cal[4]);
  delay(10000);
}

Wenn der Code läuft, zeigt das Display einen Pfeil und fordert dich auf, die Ecke zu berühren, auf die er zeigt. Das wird für alle vier Ecken wiederholt. Verwende den kleinen gelben Stift, der mit dem Display geliefert wird, und versuche, die Ecken so genau wie möglich zu treffen.

Calibration of touch screen
Kalibrierung des Touchscreens

Am Ende des Kalibrierungsprozesses gibt der Code die 5 Kalibrierungsparameter (Eckkoordinaten und Bildschirmausrichtung) im Serial Monitor aus. Du solltest so etwas sehen:

cal: { 273, 3534, 286, 3615, 4 }

Kopiere die Parameter irgendwohin, da du sie im Hauptcode benötigen wirst. Die Kalibrierung wiederholt sich alle 10 Sekunden, sodass du mehrere Versuche hast, die genauesten Werte zu erhalten. Für detailliertere Informationen zur Kalibrierung siehe das CrowPanel 2.8″ ESP32 Display : Easy Setup Guide Tutorial.

Code für Parksensor

In diesem Abschnitt schreiben wir den Hauptcode für das Parksensor-System mit dem CrowPanel ESP32 Display und dem TOF10120 Laser-Distanzsensor. Das System misst kontinuierlich die Entfernung zu einem Objekt und zeigt sie auf dem Bildschirm an, wobei die Farbe je nach Nähe des Objekts wechselt. Ein Button auf dem Display ermöglicht es dem Benutzer, einen Mindestabstand festzulegen.

Der folgende Screenshot zeigt die Hauptelemente der Benutzeroberfläche:

User Interface for Parking Sensor
Benutzeroberfläche für Parksensor

Sieh dir zuerst den kompletten Code an, dann gehen wir auf die Details ein:

#include "stdarg.h"
#include "tft_setup.h"
#include "TFT_eSPI.h"
#include "TOF10120.h"

TFT_eSPI tft = TFT_eSPI();
TOF10120 sensor = TOF10120();

uint16_t cal[5] = { 273, 3534, 286, 3615, 4 };
int minDist = 50;


int getDistance() {
  return sensor.distance() / 10;
}

void drawString(int16_t x, int16_t y, uint8_t font, const char* format, ...) {
  static char buf[64];
  va_list args;
  va_start(args, format);
  vsnprintf(buf, 64, format, args);
  tft.setTextDatum(MC_DATUM);
  tft.drawString(buf, x, y, font);
}

void drawDistance() {
  static char buf[32];
  int dist = getDistance();
  uint32_t color = TFT_GREEN;
  if (dist < minDist * 1.5) color = TFT_YELLOW;
  if (dist < minDist) color = TFT_RED;
  tft.setTextColor(color, TFT_BLACK);
  tft.setTextSize(3);
  drawString(tft.width() / 2, 120, 7, "   %d   ", dist);
}

void drawButton() {
  static bool oldTouch = true;
  int cx = tft.width() / 2;
  int bw = 140, bh = 50, bt = 3;
  int x = cx - bw / 2, y = tft.height() - bh - 10;

  uint16_t tx, ty;
  bool isTouch = tft.getTouch(&tx, &ty);
  isTouch = isTouch && (abs(tx - cx) < bw / 2) && (ty > y);
  if (isTouch == oldTouch) return;
  oldTouch = isTouch;

  tft.fillSmoothRoundRect(x, y, bw, bh, 10, TFT_WHITE);
  if (isTouch) {
    tft.setTextColor(TFT_BLACK, TFT_WHITE, true);
    minDist = getDistance();
  } else {
    tft.fillSmoothRoundRect(x + bt, y + bt, bw - 2 * bt, bh - 2 * bt, 10, TFT_BLACK);
    tft.setTextColor(TFT_WHITE, TFT_BLACK, true);
  }
  drawString(cx, y + bh / 2, 1, "set");
  tft.setTextColor(TFT_SILVER, TFT_BLACK, true);
  drawString(cx, y - 30, 1, "  %d  ", minDist);
}

void setup(void) {
  sensor.init();
  tft.init();
  tft.setRotation(3);
  tft.fillScreen(TFT_BLACK);
}

void loop() {
  drawDistance();
  drawButton();
  delay(100);
}

Lass uns den Code in seine Komponenten aufteilen, um ihn besser zu verstehen.

Bibliothekseinbindungen

Wir beginnen mit dem Einbinden der notwendigen Bibliotheken für unser Projekt. Diese Bibliotheken bieten die Funktionen, um mit dem Display und dem Distanzsensor zu arbeiten.

#include "stdarg.h"
#include "tft_setup.h"
#include "TFT_eSPI.h"
#include "TOF10120.h"

Objektinitialisierung

Als nächstes erstellen wir Instanzen für das Display und den Sensor. Das TFT_eSPI Objekt tft steuert das Display, während das TOF10120 Objekt sensor für die Interaktion mit dem Laser-Distanzsensor zuständig ist.

TFT_eSPI tft = TFT_eSPI();
TOF10120 sensor = TOF10120();

Kalibrierung und Mindestabstand

Wir definieren ein Array cal für Kalibrierungswerte und eine Ganzzahl minDist, die den Mindestabstand für den Sensor festlegt. Dieser Schwellenwert wird verwendet, um die Farbe der angezeigten Entfernung je nach Nähe eines Objekts zu ändern. Die Kalibrierungswerte stammen aus dem zuvor beschriebenen Touchscreen-Kalibrierungsprozess.

uint16_t cal[5] = { 273, 3534, 286, 3615, 4 };
int minDist = 50;

Entfernung auslesen Funktion

Die getDistance() Funktion liest die vom Sensor gemessene Entfernung aus und wandelt sie von Millimetern in Zentimeter um, indem sie durch 10 geteilt wird.

int getDistance() {
  return sensor.distance() / 10;
}

Text zeichnen Funktion

Die drawString() Funktion ist ein Hilfswerkzeug, um formatierten Text auf dem Bildschirm anzuzeigen. Sie verwendet variable Argumente, um den String zu formatieren, und zeichnet ihn zentriert an angegebenen Koordinaten mit einer bestimmten Schriftart.

void drawString(int16_t x, int16_t y, uint8_t font, const char* format, ...) {
  static char buf[64];
  va_list args;
  va_start(args, format);
  vsnprintf(buf, 64, format, args);
  tft.setTextDatum(MC_DATUM);
  tft.drawString(buf, x, y, font);
}

Entfernung zeichnen Funktion

In der drawDistance() Funktion holen wir zuerst die aktuelle Entfernung mit getDistance(). Dann bestimmen wir die Textfarbe basierend auf der Entfernung: grün für sichere Abstände, gelb für Vorsicht und rot für Gefahr.

void drawDistance() {
  static char buf[32];
  int dist = getDistance();

  uint32_t color = TFT_GREEN;
  if (dist < minDist * 1.5) color = TFT_YELLOW;
  if (dist < minDist) color = TFT_RED;

  tft.setTextColor(color, TFT_BLACK);
  tft.setTextSize(3);
  drawString(tft.width() / 2, 120, 7, "   %d   ", dist);
}

Schließlich zeigen wir die Entfernung in großer Schrift auf dem Bildschirm an. Die folgenden drei Screenshots zeigen drei Entfernungen (in Zentimeter) in den drei verschiedenen Farben:

Screen shots of Display
Screenshots der Anzeige

Button zeichnen Funktion

Die drawButton() Funktion kümmert sich um die Anzeige eines Buttons auf dem Bildschirm. Sie prüft Berührungen und aktualisiert den Mindestabstand, wenn der Button gedrückt wird.

void drawButton() {
  static bool oldTouch = true;
  int cx = tft.width() / 2;
  int bw = 140, bh = 50, bt = 3;
  int x = cx - bw / 2, y = tft.height() - bh - 10;

  uint16_t tx, ty;
  bool isTouch = tft.getTouch(&tx, &ty);
  isTouch = isTouch && (abs(tx - cx) < bw / 2) && (ty > y);
  if (isTouch == oldTouch) return;
  oldTouch = isTouch;

  tft.fillSmoothRoundRect(x, y, bw, bh, 10, TFT_WHITE);
  if (isTouch) {
    tft.setTextColor(TFT_BLACK, TFT_WHITE, true);
    minDist = getDistance();
  } else {
    tft.fillSmoothRoundRect(x + bt, y + bt, bw - 2 * bt, bh - 2 * bt, 10, TFT_BLACK);
    tft.setTextColor(TFT_WHITE, TFT_BLACK, true);
  }
  drawString(cx, y + bh / 2, 1, "set");
  tft.setTextColor(TFT_SILVER, TFT_BLACK, true);
  drawString(cx, y - 30, 1, "  %d  ", minDist);
}

Das Aussehen des Buttons ändert sich je nachdem, ob er gedrückt ist oder nicht. Das Bild unten zeigt den „set“-Button, wenn er nicht gedrückt ist:

"set" button
„set“-Button

Setup Funktion

In der setup() Funktion initialisieren wir den Sensor und das Display, setzen die Display-Rotation und füllen den Bildschirm mit schwarzem Hintergrund.

void setup(void) {
  sensor.init();
  tft.init();
  tft.setRotation(3);
  tft.fillScreen(TFT_BLACK);
}

Loop Funktion

Schließlich ruft die loop() Funktion kontinuierlich drawDistance() und drawButton() auf, um das Display mit der aktuellen Entfernung zu aktualisieren und Button-Interaktionen zu verarbeiten. Eine kurze Verzögerung verhindert zu häufige Updates.

void loop() {
  drawDistance();
  drawButton();
  delay(100);
}

Fazit

In diesem Tutorial hast du gelernt, wie man einen Parksensor mit dem TOF10120 IR Laser Distance Sensor und einem CrowPanel 3.5″ ESP32 Display baut. Es gibt viele mögliche Erweiterungen für dieses Projekt. Zum Beispiel könntest du eine helle LED an den GPIO-Port anschließen und sie aktivieren, wenn der Mindestabstand erreicht ist.

Ebenso könntest du den Lautsprecheranschluss des CrowPanel Displays nutzen, um einen Alarm auszulösen, wenn ein Objekt zu nah kommt. Es gibt tatsächlich ein RP2040-basiertes CrowPanel Pico 4.3″ Display mit eingebautem Summer, den du stattdessen verwenden könntest, oder natürlich kannst du einen Summer an den GPIO-Port anschließen. Siehe das Scribble on CrowPanel Pico 4.3″ Display für weitere Details.

Statt des TOF10120 könntest du auch andere Infrarot-Abstandssensoren wie den verbreiteten GP2Y0A710K0F oder den GP2Y0A21YK0F verwenden. Ebenfalls häufig genutzt wird der Ultraschall-Abstandssensor HC-SR04, der Schallwellen zur Abstandsmessung verwendet. IR-Lasersensoren sind jedoch präziser und haben eine größere Reichweite als Ultraschallsensoren.

Wenn du Fragen hast, kannst du sie gerne im Kommentarbereich stellen.

Viel Spaß beim Tüfteln ; )