Bemerkung
Hallo und herzlich willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauche gemeinsam mit anderen Enthusiasten tiefer in die Welt von Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Löse Probleme nach dem Verkauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tausche Tipps und Tutorials aus, um deine Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalte frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezielle Rabatte: Genieße exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nimm an Gewinnspielen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu erkunden und zu kreieren? Klicke auf [hier] und trete noch heute bei!
25. Rückfahr-Radarsystem
Beim Rückwärtsfahren eines Autos ist es entscheidend, sich der Hindernisse hinter dem Fahrzeug bewusst zu sein, insbesondere in Situationen mit eingeschränkter Sicht. Um die Sicherheit zu erhöhen, sind viele moderne Fahrzeuge mit Rückfahr-Radarsystemen ausgestattet.
Heute lernen wir, wie man ein Ultraschall-Radarsystem mit Arduino baut und programmiert. Dieses System verwendet einen Ultraschallsensor, um Entfernungen zu messen, und gibt Rückmeldungen über ein LCD-Display und einen Summer. Wir gehen jeden Abschnitt des Codes durch und erklären, was er bewirkt und warum er wichtig ist.
Entwicklung des Rückfahr-Radarsystems
Die Entwicklung von Rückfahr-Radarsystemen, auch bekannt als Einparksensoren, begann im späten 20. Jahrhundert, um den Bedarf an sichererem Fahrzeugparken zu decken. Ursprünglich in den 1970er Jahren unter Verwendung von Ultraschalltechnologie, ähnlich der von Marinesonaren, entwickelt, nutzten diese Systeme Schallwellen, um Objekte zu erkennen und Entfernungen zu berechnen.
Erhebliche Fortschritte gab es in den 1990er Jahren mit der Einführung von mikrocontrollerbasierten Systemen und elektromagnetischen Sensoren, die präzisere Messungen und eine bessere Integration in Fahrzeuge ermöglichten. In dieser Zeit fanden diese Sensoren ihren Weg in Luxusfahrzeuge, was sowohl die Sicherheit als auch den luxuriösen Charme steigerte.
Bis Anfang der 2000er Jahre hatten sich Rückfahr-Radarsysteme so weit entwickelt, dass sie visuelles, akustisches und haptisches Feedback sowie digitale Anzeigen und die Integration in Navigationssysteme boten, um Fahrern Echtzeitinformationen über ihre Umgebung zu liefern.
Heute entwickelt sich die Technologie weiter mit der Integration von KI und IoT, indem eine Mischung aus Kameras, Radar- und Ultraschallsensoren verwendet wird, um einen detaillierten Überblick über die Umgebung des Fahrzeugs zu bieten, das Unfallrisiko zu verringern und das Parken zu erleichtern. Diese Technologie ist mittlerweile ein wesentlicher Bestandteil der autonomen Fahrsysteme, die die Automobilindustrie revolutionieren sollen.

Aufbau der Schaltung
Benötigte Komponenten
1 * Arduino Uno R3 |
1 * Ultraschall-Modul |
1 * Aktiver Summer |
1 * I2C LCD1602 |
1 * USB-Kabel |
1 * Steckbrett |
Verbindungskabel |
|
Schritt-für-Schritt-Anleitung
Folge dem Schaltplan oder den unten aufgeführten Schritten, um die Schaltung aufzubauen.

Setze das Ultraschall-Modul in das Steckbrett ein.

Verbinde den VCC-Pin des Ultraschall-Moduls mit der positiven Seite des Steckbretts, den Trig-Pin mit Pin 8 auf dem Arduino-Board, den Echo-Pin mit Pin 7 und GND mit der negativen Seite des Steckbretts.

Setze den aktiven Summer (mit weißem Aufkleber) in das Steckbrett ein. Verbinde den „+“-Pin mit Pin 9 und den „-“ Pin mit GND.

Schließe das I2C LCD1602-Modul an: GND an die negative Schiene des Steckbretts, VCC an die positive Schiene des Steckbretts, SDA an Pin A4 und SCL an Pin A5.

Schließe abschließend die GND- und 5V-Pins des Arduino Uno R3 an die negative bzw. positive Schiene des Steckbretts an.

Code-Erstellung
In einem Rückfahr-Radarsystem spielt jede Komponente eine entscheidende Rolle, um eine genaue Entfernungsmessung und effektives Feedback zu gewährleisten:
Der Ultraschallsensor wird verwendet, um die Entfernung zu Objekten vor ihm zu erkennen.
Das I2C LCD1602 wird verwendet, um die vom Ultraschallsensor erkannte Entfernung anzuzeigen.
Der aktive Summer wird verwendet, um das Piepsintervall basierend auf der gemessenen Entfernung durch den Ultraschallsensor zu ändern.
So reagiert das System basierend auf verschiedenen Entfernungsbereichen:
Weniger als 10 cm: Der Summer piept in einem schnellen Intervall von 100 Millisekunden.
Zwischen 10 cm und 20 cm: Das Piepsintervall erhöht sich auf 500 Millisekunden.
Zwischen 20 cm und 50 cm: Das Intervall verlängert sich weiter auf 1000 Millisekunden (1 Sekunde).
Größer als 50 cm: Der Summer piept in einem entspannten Intervall von 2000 Millisekunden (2 Sekunden).
Nun lasst uns mit der Codierung beginnen, um zu sehen, wie wir die oben beschriebene Funktionalität implementieren können.
Bemerkung
Wenn du mit dem Ultraschallsensor, dem I2C LCD1602 oder dem aktiven Summer nicht vertraut bist, kannst du deren grundlegende Verwendung in den folgenden Projekten erlernen:
Öffne die Arduino IDE und starte ein neues Projekt, indem du „New Sketch“ aus dem Menü „File“ auswählst.
Speichere deinen Sketch unter dem Namen
Lesson25_Reverse_Radar_System
mitCtrl + S
oder durch Klicken auf „Save“.Zunächst binden wir die erforderlichen Bibliotheken zur Verwendung des LCDs ein und initialisieren es mit der richtigen I2C-Adresse und Größe.
Bemerkung
Hier wird die LiquidCrystal I2C
-Bibliothek verwendet, die du über den Library Manager installieren kannst.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Initialisiere das LCD mit der I2C-Adresse 0x27 und der Größe 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
Definiere als Nächstes die Pins am Arduino, die mit dem Trigger, Echo des Ultraschallsensors und dem Summer verbunden sind.
#define TRIGGER_PIN 8 // Pin zum Auslösen des Ultraschallpulses
#define ECHO_PIN 7 // Pin zum Empfangen des Echos
#define BUZZER_PIN 9 // Pin für den Summer
Lege Variablen fest, um zu steuern, wie häufig der Summer basierend auf der gemessenen Entfernung piept.
// Zeitsteuerungsvariablen zur Kontrolle der Piepsfrequenz basierend auf der Entfernung
unsigned long intervals = 1000; // Standardintervall für das Piepsen
unsigned long previousMillis = 0; // Speichert die letzte Zeit, zu der der Summer piepte
// Variable zur Entfernungsmesung
long distance = 0;
In der Funktion
void setup()
, konfiguriere die Pin-Modi und initialisiere das LCD sowie die serielle Kommunikation.
void setup() {
pinMode(TRIGGER_PIN, OUTPUT); // Setze den Trigger-Pin als Ausgang
pinMode(ECHO_PIN, INPUT); // Setze den Echo-Pin als Eingang
pinMode(BUZZER_PIN, OUTPUT); // Setze den Summer-Pin als Ausgang
lcd.init(); // Initialisiere das LCD
lcd.backlight(); // Schalte die LCD-Hintergrundbeleuchtung ein
Serial.begin(9600); // Starte die serielle Kommunikation mit 9600 Baud
}
Die Hauptschleife misst kontinuierlich die Entfernung, passt das Piepsintervall an und aktualisiert das LCD-Display.
void loop() {
distance = measureDistance(); // Messe die Entfernung
// Passe die Intervalle basierend auf der Entfernung an
adjustBeepingInterval();
unsigned long currentMillis = millis(); // Hole die aktuelle Zeit
// Überprüfe, ob es Zeit ist zu piepen
if (currentMillis - previousMillis >= intervals) {
Serial.println("Beeping!");
beep();
previousMillis = currentMillis; // Aktualisiere previousMillis direkt hier
}
updateLCD(); // Aktualisiere das LCD-Display
delay(100); // Kurze Verzögerung zur Stabilisierung der Messwerte
}
Zuerst verwenden wir die Funktion
measureDistance()
, um die Entfernung mit dem Ultraschallsensor zu bestimmen.
distance = measureDistance(); // Messe die Entfernung
Als Nächstes passen wir die Piepsfrequenz basierend auf der neu gemessenen Entfernung mit der Funktion
adjustBeepingInterval()
an. Dies ändert dynamisch, wie oft der Summer ertönt, je nachdem, wie nah das erkannte Objekt ist.
// Passe die Intervalle basierend auf der Entfernung an
adjustBeepingInterval();
Die Funktion
millis()
wird dann aufgerufen, um die aktuelle Zeit in Millisekunden zu erfassen, seitdem das Arduino-Board das Programm gestartet hat.
unsigned long currentMillis = millis();
Überprüfe, ob die seit dem letzten Piepsen vergangene Zeit größer oder gleich dem eingestellten Intervall ist. Falls ja, wird eine Nachricht an den seriellen Monitor ausgegeben, der Summer aktiviert und
previousMillis
zurückgesetzt. Dies stellt sicher, dass der Summer in Abständen piept, die der gemessenen Entfernung entsprechen, und die Warnintervalle konsistent bleiben.
if (currentMillis - previousMillis >= intervals) {
Serial.println("Beeping!");
beep();
previousMillis = currentMillis; // Aktualisiere previousMillis direkt hier
}
Schließlich wird die Funktion
updateLCD()
aufgerufen, um das LCD-Display mit der aktuellen Entfernungsanzeige zu aktualisieren.
updateLCD(); // Aktualisiere das LCD-Display
Zur Funktion
adjustBeepingInterval()
: Diese passt das Piepsintervall basierend auf der gemessenen Entfernung an. Die Funktion setzt die Variableintervals
. Je näher das Objekt ist, desto kürzer wird das Intervall, wodurch der Summer häufiger piept, je näher sich Objekte befinden.
// Funktion zur Anpassung der Intervalle basierend auf der Entfernung
void adjustBeepingInterval() {
if (distance <= 10) {
intervals = 100;
} else if (distance <= 20) {
intervals = 500;
} else if (distance <= 50) {
intervals = 1000;
} else {
intervals = 2000;
}
}
Über die
beep()
-Funktion: Schaltet den Summer ein und nach einer kurzen Pause wieder aus.
// Funktion, um den Summer piepen zu lassen
void beep() {
digitalWrite(BUZZER_PIN, HIGH); // Schaltet den Summer EIN
delay(100); // Piepdauer: 100 Millisekunden
digitalWrite(BUZZER_PIN, LOW); // Schaltet den Summer AUS
}
Über die Funktion
measureDistance()
: Misst die Entfernung mithilfe des Ultraschallsensors. Diese Funktion sendet Ultraschallwellen aus und misst, wie lange es dauert, bis das Echo zurückkehrt. Diedistance
wird basierend auf der Laufzeit dieser Wellen berechnet.
// Funktion zur Messung der Entfernung mithilfe des Ultraschallsensors
long measureDistance() {
digitalWrite(TRIGGER_PIN, LOW); // Sicherstellen, dass der Trigger-Pin niedrig ist
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH); // Sende einen hohen Impuls
delayMicroseconds(10); // Impulsdauer
digitalWrite(TRIGGER_PIN, LOW); // Beende den Impuls
long duration = pulseIn(ECHO_PIN, HIGH); // Messe die Dauer des hohen Pegels am Echo-Pin
long distance = duration * 0.034 / 2; // Berechne die Entfernung in cm
return distance;
}
Über die Funktion
updateLCD()
: Aktualisiert das LCD nur, wenn sich die gemessene Entfernung ändert, um unnötige Updates zu vermeiden. Es zeigt die aktuelle Entfernung auf dem LCD an.
// Funktion zum Aktualisieren des LCD-Displays mit der Entfernung
void updateLCD() {
static float lastDistance = -1; // Speichert die zuletzt angezeigte Entfernung
if (distance != lastDistance) {
lcd.clear(); // Lösche das LCD-Display
lcd.setCursor(0, 0); // Setze den Cursor an den Anfang
lcd.print("Dis: ");
lcd.print(distance);
lcd.print(" cm");
lastDistance = distance; // Aktualisiere die zuletzt angezeigte Entfernung
}
}
Jetzt, da du alle Teile des Codes geschrieben hast, lade ihn auf dein Arduino-Board hoch, um zu sehen, ob alles wie erwartet funktioniert.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Initialisiere das LCD mit der I2C-Adresse 0x27 und der Größe 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define TRIGGER_PIN 8 // Pin zum Auslösen des Ultraschallpulses
#define ECHO_PIN 7 // Pin zum Empfangen des Echos
#define BUZZER_PIN 9 // Pin für den Summer
// Zeitsteuerungsvariablen zur Kontrolle der Piepsfrequenz basierend auf der Entfernung
unsigned long intervals = 1000; // Standardintervall für das Piepsen
unsigned long previousMillis = 0; // Speichert die letzte Zeit, zu der der Summer piepte
// Variable zur Entfernungsmesung
long distance = 0;
void setup() {
pinMode(TRIGGER_PIN, OUTPUT); // Setze den Trigger-Pin als Ausgang
pinMode(ECHO_PIN, INPUT); // Setze den Echo-Pin als Eingang
pinMode(BUZZER_PIN, OUTPUT); // Setze den Summer-Pin als Ausgang
lcd.init(); // Initialisiere das LCD
lcd.backlight(); // Schalte die LCD-Hintergrundbeleuchtung ein
Serial.begin(9600); // Starte die serielle Kommunikation mit 9600 Baud
}
void loop() {
distance = measureDistance(); // Messe die Entfernung
// Passe die Intervalle basierend auf der Entfernung an
adjustBeepingInterval();
unsigned long currentMillis = millis(); // Hole die aktuelle Zeit
// Überprüfe, ob es Zeit ist zu piepen
if (currentMillis - previousMillis >= intervals) {
Serial.println("Beeping!");
beep();
previousMillis = currentMillis; // Aktualisiere previousMillis direkt hier
}
updateLCD(); // Aktualisiere das LCD-Display
delay(100); // Kurze Verzögerung zur Stabilisierung der Messwerte
}
// Funktion zur Anpassung der Intervalle basierend auf der Entfernung
void adjustBeepingInterval() {
if (distance <= 10) {
intervals = 100;
} else if (distance <= 20) {
intervals = 500;
} else if (distance <= 50) {
intervals = 1000;
} else {
intervals = 2000;
}
}
// Funktion, um den Summer piepen zu lassen
void beep() {
digitalWrite(BUZZER_PIN, HIGH); // Schaltet den Summer EIN
delay(100); // Piepdauer: 100 Millisekunden
digitalWrite(BUZZER_PIN, LOW); // Schaltet den Summer AUS
}
// Funktion zur Messung der Entfernung mithilfe des Ultraschallsensors
long measureDistance() {
digitalWrite(TRIGGER_PIN, LOW); // Sicherstellen, dass der Trigger-Pin niedrig ist
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH); // Sende einen hohen Impuls
delayMicroseconds(10); // Impulsdauer
digitalWrite(TRIGGER_PIN, LOW); // Beende den Impuls
long duration = pulseIn(ECHO_PIN, HIGH); // Messe die Dauer des hohen Pegels am Echo-Pin
long distance = duration * 0.034 / 2; // Berechne die Entfernung in cm
return distance;
}
// Funktion zum Aktualisieren des LCD-Displays mit der Entfernung
void updateLCD() {
static float lastDistance = -1; // Speichert die zuletzt angezeigte Entfernung
if (distance != lastDistance) {
lcd.clear(); // Lösche das LCD-Display
lcd.setCursor(0, 0); // Setze den Cursor an den Anfang
lcd.print("Dis: ");
lcd.print(distance);
lcd.print(" cm");
lastDistance = distance; // Aktualisiere die zuletzt angezeigte Entfernung
}
}
Speichere abschließend deinen Code und räume deinen Arbeitsplatz auf.
Frage
In diesem Projekt haben wir einen aktiven Summer als Alarmsystem verwendet, aber auch ein passiver Summer könnte ähnliche Funktionen erfüllen. Wie müsste der Code angepasst werden, wenn du den aktiven durch einen passiven Summer ersetzt?
Zusammenfassung
Im Laufe dieses Kurses haben wir den Weg von der konzeptionellen Erfassung bis zur praktischen Implementierung eines Rückfahr-Radarsystems durchlaufen. Beginnend mit dem Aufbau der Schaltung auf einem Breadboard, haben wir einen Ultraschallsensor, einen aktiven Summer und ein LCD-Display mit einem Arduino-Board verbunden. Nach der Hardware-Einrichtung haben wir uns dem Codieren gewidmet, wobei du gelernt hast, Sensordaten zu verarbeiten, um akustische und visuelle Rückmeldungen basierend auf der Entfernung von Hindernissen hinter einem Fahrzeug auszulösen.
Du hast nun erfolgreich dein Arduino so programmiert, dass es Entfernungen misst und Alarme durch einen Summer und visuelle Rückmeldungen über ein LCD ausgibt, ähnlich wie bei fortschrittlichen Rückfahrradarsystemen moderner Autos. Dies zeigt nicht nur deine Fähigkeit, verschiedene elektronische Komponenten zu integrieren, sondern auch deine Kompetenz, ein System zu erstellen, das die Fahrzeugsicherheit verbessern könnte.