Skip to Content

TFmini-S Distanzsensor mit Arduino

TFmini-S Distanzsensor mit Arduino

In diesem Tutorial lernst du, wie du den TFmini-S Laser-Entfernungssensor mit einem Arduino verwendest, um Entfernungen zu messen.

Der TFmini-S ist ein kleiner LiDAR-/Nähe-Sensor, der Entfernungen von bis zu 12 Metern messen kann. Er verwendet infrarotes Laserlicht und das Time-of-Flight (ToF)-Prinzip. Durch die Messung der Zeit, die das Licht benötigt, um von einem Objekt reflektiert zu werden, kann er Entfernungen mit hoher Genauigkeit und Geschwindigkeit berechnen.

In dieser Anleitung behandeln wir die Einrichtung, Verkabelung und Programmierung, die nötig sind, um deinen TFmini-S mit Arduino zum Laufen zu bringen.

Benötigte Teile

Du benötigst einen TFmini-S Sensor (siehe unten). Als Mikrocontroller habe ich für dieses Projekt einen Arduino Uno verwendet, aber jeder andere Arduino funktioniert ebenfalls. Außerdem verwenden wir ein OLED-Display, um die vom TFmini-S gemessenen Entfernungen anzuzeigen.

TFmini-S Entfernungssensor

Arduino

Arduino Uno

USB Data Sync cable Arduino

USB-Kabel für Arduino UNO

Dupont wire set

Dupont-Kabelset

Half_breadboard56a

Breadboard

OLED display

OLED-Display

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 TFmini-S

Der TFmini-S ist ein Infrarot-Laser-Entfernungssensor, der das ToF (Time of Flight)-Prinzip zur Distanzmessung verwendet. Der Sensor sendet periodisch Infrarotlichtimpulse aus, die bei Kontakt mit einem Objekt reflektiert werden. Die Flugzeit wird durch Berechnung der Rundlauf-Phasendifferenz Δφ gemessen:

ToF Principle
ToF-Prinzip (source)

Der TFmini-S kann Entfernungen von 0,1 bis 12 Meter mit einer Genauigkeit von ±6 cm im Bereich 0,1-6 m und ±1 % im Bereich 6-12 m messen. Die Totzone des Sensors beträgt 10 cm. Die Auflösung liegt bei 1 cm und die Messgeschwindigkeit (Bildrate) ist zwischen 1 und 1000 Hz einstellbar.

Reichweite und Genauigkeit hängen von der Reflexionsfähigkeit des Objekts und den Lichtverhältnissen ab. Im Freien ist die Reichweite generell deutlich kürzer als drinnen. Für weitere Details siehe das Produktmanual und das Datenblatt des TFmini-S, die unten verlinkt sind:

Pinbelegung des TFmini-S

Der TFmini-S kann je nach Softwarekonfiguration über UART oder I2C kommunizieren. Wir verwenden den Sensor mit UART. Das folgende Bild zeigt die Pinbelegung des TFmini-S mit seiner UART/I2C-Schnittstelle und den Stromversorgungs-Pins.

Pinout of TFmini-S
Pinbelegung des TFmini-S

Pin 3 und 4 fungieren entweder als RX und TX für UART oder als SDA und SCL für I2C. Pin 1 ist Masse (GND) und Pin 2 die Versorgungsspannung von 5V±0,1V. Der durchschnittliche Strom liegt bei ≤140mA mit einem Spitzenstrom von 200mA.

TFmini-S vs TFmini

Nebenbei: Der TFmini-S ist eine verbesserte Version des TFmini. Sie sehen sehr ähnlich aus, aber ihre Leistungsmerkmale unterscheiden sich. Siehe den Vergleich unten:

Comparison TFmini vs TFmini-S

Wenn du einen TFmini kaufst, achte darauf, dass es der TFmini-S und nicht die ältere TFmini-Version ist, da der TFMini-Plus Library, den wir verwenden, nicht mit dem TFmini kompatibel ist (aber mit dem TFmini-S und dem TFmini Plus).

Anschluss des TFmini-S an Arduino

Wie erwähnt, verwenden wir die UART-Schnittstelle des TFmini-S. Zuerst schließen wir aber die Stromversorgung an.

Verbinde das schwarze Kabel (Pin 1) des TFmini-S mit GND des Arduino. Dann verbinde das rote Kabel (Pin 2) des TFmini-S mit dem 5V-Ausgang des Arduino.

Für UART verbinde das weiße Kabel (TX, Pin 3) des TFmini-S mit Pin 3 des Arduino. Schließlich verbinde das grüne Kabel (RX, Pin 4) des TFmini-S mit Pin 2 des Arduino. Siehe das vollständige Schaltbild unten:

Connecting TFmini-S to Arduino
Anschluss TFmini-S an Arduino

Beachte, dass die TX- und RX-Pins des TFmini und die vom Arduino verwendeten TX- und RX-Pins vertauscht sind, da die serielle Kommunikation so verdrahtet sein muss. Lass dich davon nicht verwirren.

TX and RX wiring
TX- und RX-Verkabelung

Im nächsten Abschnitt schreiben wir einfachen Code, um den Sensor zu testen.

Code zum Messen von Entfernungen mit TFmini-S

Um Entfernungen mit dem TFmini-S zu messen, ist es am besten, eine Bibliothek zu verwenden. Ich habe mehrere ausprobiert und mochte die TFMPlus library by Bud Ryerson. Trotz des Namens funktioniert diese Bibliothek mit dem TFmini-S und dem TFmini-Plus. Um sie zu installieren, öffne den Library Manager, suche nach „tfmini“, finde die TFMPlus Bibliothek von Bud Ryerson und installiere sie mit dem „INSTALL“-Button.

Install TFMPlus library
Installiere TFMPlus library

Mit der installierten Bibliothek testen wir den Sensor. Der folgende Code liest die vom TFmini-S gemessenen Entfernungen aus und gibt sie im Serial Monitor aus.

#include "TFMPlus.h" 
#include "SoftwareSerial.h"

TFMPlus tfmini;       
SoftwareSerial TFSerial(2, 3);

void setup() {
  Serial.begin(9600);
  TFSerial.begin(115200);
  tfmini.begin(&TFSerial);
}

void loop() {
  int16_t dist = 0;
  int16_t strength = 0;
  int16_t temp = 0;

  if (tfmini.getData(dist, strength, temp)) {
    Serial.print("Distance ");
    Serial.print(dist);
    Serial.println(" cm");
    delay(200);
  }
}

Lass uns den Code aufschlüsseln, um seine Bestandteile im Detail zu verstehen.

Bibliothekseinbindung

Wir beginnen mit dem Einbinden der notwendigen Bibliotheken für unser Projekt. Die TFMPlus.h Bibliothek wird verwendet, um mit dem TFmini-S Sensor zu kommunizieren, während die SoftwareSerial.h Bibliothek es ermöglicht, serielle Kommunikation über andere digitale Pins als die Standard-Hardware-Pins zu erstellen.

#include "TFMPlus.h" 
#include "SoftwareSerial.h"

Objekterstellung

Als nächstes erstellen wir Instanzen der benötigten Klassen. Das TFMPlus Objekt tfmini wird verwendet, um mit dem TFmini-S Sensor zu interagieren. Wir erstellen außerdem ein SoftwareSerial Objekt namens TFSerial, das über die digitalen Pins 2 (RX) und 3 (TX) mit dem Sensor kommuniziert.

TFMPlus tfmini;       
SoftwareSerial TFSerial(2, 3);

Setup-Funktion

In der setup() Funktion initialisieren wir die serielle Kommunikation. Der Serial.begin(9600) Befehl richtet den Standard-Seriell-Port mit einer Baudrate von 9600 bps für die Ausgabe im Serial Monitor ein. Der TFSerial.begin(115200) Befehl initialisiert den Software-Serial-Port mit einer höheren Baudrate von 115200 bps, die vom TFmini-S Sensor benötigt wird. Schließlich rufen wir tfmini.begin(&TFSerial) auf, um den Sensor mit dem Software-Serial-Port zu initialisieren.

void setup() {
  Serial.begin(9600);
  TFSerial.begin(115200);
  tfmini.begin(&TFSerial);
}

Loop-Funktion

In der loop() Funktion deklarieren wir drei Integer-Variablen: dist, strength und temp. Diese speichern die Distanzmessung, Signalstärke und Temperaturdaten vom Sensor.

Wir prüfen dann, ob der Sensor erfolgreich Daten mit der tfmini.getData(dist, strength, temp) Methode abruft. Wenn Daten verfügbar sind, geben wir die Entfernung mit Serial.print() im Serial Monitor aus. Die Entfernung wird in Zentimetern angezeigt. Nach der Ausgabe folgt eine Verzögerung von 200 Millisekunden vor der nächsten Messung.

void loop() {
  int16_t dist = 0;
  int16_t strength = 0;
  int16_t temp = 0;

  if (tfmini.getData(dist, strength, temp)) {
    Serial.print("Distance ");
    Serial.print(dist);
    Serial.println(" cm");
    delay(200);
  }
}

In diesem Beispiel geben wir nur die Entfernung aus, aber du könntest auch die Signalstärke und Temperaturdaten ausgeben. Die Signalstärke zeigt an, wie viel des Infrarotsignals vom erfassten Objekt reflektiert wird, und die Temperatur ist die interne Sensor-Temperatur, die für die Temperaturkompensation verwendet wird.

Wenn du den Code hochlädst und ausführst, solltest du die gemessenen Entfernungen in Zentimetern im Serial Monitor sehen:

Distances measured with TFmini-S printed on Serial Monitor
Mit TFmini-S gemessene Entfernungen im Serial Monitor ausgegeben

Im nächsten Abschnitt fügen wir unserem Schaltkreis ein OLED hinzu und zeigen die Entfernungen darauf an, anstatt sie im Serial Monitor auszugeben.

OLED hinzufügen, um TFmini-S Entfernungsdaten anzuzeigen

Das Hinzufügen eines OLED ist einfach. Verbinde einfach SDA und SCL des OLED mit den entsprechenden Pins des Arduino. Für die Stromversorgung: Da das OLED mit 5V betrieben werden kann, können wir die Stromversorgungsleitungen teilen. Verbinde VCC mit 5V und GND mit GND. Das Bild unten zeigt die vollständige Verkabelung:

Connecting OLED and TFmini-S with Arduino
Anschluss von OLED und TFmini-S an Arduino

Beachte, dass der TFmini-S nicht mit 3,3V funktioniert.

Code zur Anzeige der vom TFmini-S gemessenen Entfernungen auf OLED

Der folgende Code liest Distanzmessungen vom TFmini-S Sensor aus und zeigt sie auf dem OLED an. Der Code ist eine einfache Erweiterung des obigen Codes. Schau dir zuerst den kompletten Code an, dann besprechen wir die Details.

#include "TFMPlus.h" 
#include "SoftwareSerial.h"
#include "Adafruit_SSD1306.h"

TFMPlus tfmini;       
SoftwareSerial TFSerial(2, 3);
Adafruit_SSD1306 oled(128, 64, &Wire, -1);

void oled_init() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.setTextSize(2);
  oled.setTextColor(WHITE);
}

void display() {
  static char text[30];
  static int16_t dist, strength, temp;

  if (tfmini.getData(dist, strength, temp)) {
    sprintf(text, "%4d cm", dist);
    oled.clearDisplay();
    oled.setCursor(20, 25);
    oled.print(text);
    oled.display();
  }
}

void setup() {
  TFSerial.begin(115200);
  tfmini.begin(&TFSerial);
  oled_init();
}

void loop() {
  display();
  delay(20);
}

Bibliotheken und Display-Initialisierung

Wir beginnen mit dem Einbinden der TFMPlus.h Bibliothek zur Kommunikation mit dem TFmini-S Sensor. Die SoftwareSerial.h Bibliothek wird für die serielle Kommunikation verwendet und die Adafruit_SSD1306 Library ist für das OLED-Display zuständig.

Wir erstellen dann das tfmini Sensorobjekt, das TFSerial Objekt und das oled Objekt für das Display:

#include "TFMPlus.h" 
#include "SoftwareSerial.h"
#include "Adafruit_SSD1306.h"

TFMPlus tfmini;       
SoftwareSerial TFSerial(2, 3);
Adafruit_SSD1306 oled(128, 64, &Wire, -1);

Falls du die Adafruit_SSD1306 Library noch nicht installiert hast, musst du das tun. Einfach wie gewohnt mit dem Library Manger installieren:

Adafruit_SSD1306 library installed in Library Manager
Adafruit_SSD1306 Bibliothek im Library Manager installiert

oled_initFunktion

Die oled_init() Funktion initialisiert das Display, löscht es, setzt die Textgröße und die Textfarbe.

void oled_init() {
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setTextColor(WHITE);
}

Beachte, dass die I2C-Adresse für das OLED-Display in 0x3C auf oled.begin() gesetzt ist. Die meisten dieser kleinen OLEDs verwenden diese Adresse, aber deine könnte anders sein. Wenn du nichts auf dem OLED siehst, hat es wahrscheinlich eine andere I2C-Adresse und du musst die Adresse ändern. Wenn du die I2C-Adresse nicht kennst, schau dir das How to Interface the SSD1306 I2C OLED Graphic Display With Arduino Tutorial an.

Display-Funktion

Die display() Funktion ruft tfmini.getData auf, um die Distanzmessung vom TFmini-S Sensor zu erhalten. Dann löscht sie das Display und gibt die Entfernung aus. Die sprintf() Funktion wird verwendet, um den Distanzwert in formatierten Text umzuwandeln.

void display() {
  static char text[30];
  static int16_t dist, strength, temp;
  if (tfmini.getData(dist, strength, temp)) {
    sprintf(text, "%4d cm", dist);

    oled.clearDisplay();
    oled.setCursor(20, 25);
    oled.print(text);

    oled.display();
  }
}

Wenn du ein Objekt vor den Sensor hältst, sollte das Display die gemessene Entfernung in Zentimetern anzeigen. Siehe das folgende Beispielausgabe unten.

Measured Distance shown on OLED
Gemessene Entfernung auf OLED angezeigt

Setup-Funktion

In der setup() Funktion rufen wir zuerst TFSerial.begin() auf, um die serielle UART-Kommunikation zu initialisieren, dann tfmini.begin(), um den Sensor zu initialisieren, und schließlich oled_init(), um das OLED zu initialisieren.

void setup() {
  TFSerial.begin(115200);
  tfmini.begin(&TFSerial);
  oled_init();
}

Loop-Funktion

Die loop() Funktion ruft einfach alle 20 ms die display() Funktion auf.

void loop() {
  display();
  delay(20);
}

Und das war’s. Mit diesem Code und dem TFmini-S kannst du Entfernungen von 0,1 bis 12 Metern messen.

Fazit

In diesem Tutorial hast du gelernt, wie du den TFmini-S Entfernungssensor mit einem Arduino verwendest, um Entfernungen zu messen und sie auf einem OLED anzuzeigen.

Der TFmini-S ist dem TF-Luna ähnlich, aber der TFmini-S ist etwas größer und kann Entfernungen bis zu 12 Meter messen, während der TF-Luna auf 8 Meter begrenzt ist. Der TFmini-S ist auch etwas genauer (und teurer), aber beide Sensoren haben eine Auflösung von 1 cm.

Wenn dir eine kürzere Reichweite reicht, du aber Millimeterauflösung brauchst, schau dir den VL53L0X, den VL53L1X oder den TOF10120 an. Sie haben außerdem den Vorteil, dass sie mit 3,3V betrieben werden können und viel günstiger sind.

Andere gängige Infrarot-Entfernungssensoren wie der GP2Y0A710K0F oder der GP2Y0A21YK0F sind ähnlich groß, verwenden aber Triangulation zur Distanzbestimmung basierend auf dem Winkel des reflektierten IR-Lichts. Sie sind noch günstiger, haben aber auch eine noch kürzere Reichweite.

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

Viel Spaß beim Tüfteln ; )