Hinderniswarnsystem für Fahrzeug: Unterschied zwischen den Versionen
Zeile 112: | Zeile 112: | ||
{| class="wikitable" | {| class="wikitable" | ||
! colspan="5" | BOM | ! colspan="5" | Stückliste (BOM) | ||
|- | |- | ||
| '''Nr.''' || '''Anzahl''' || '''Bezeichnung''' || '''Link''' || '''Modulzuordnung''' | | '''Nr.''' || '''Anzahl''' || '''Bezeichnung''' || '''Link''' || '''Modulzuordnung''' |
Version vom 6. Dezember 2020, 10:27 Uhr
Autoren: Matthias Rassenhövel, Lars Vienenkötter
Betreuer: Prof. Schneider
→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)
Einleitung
Im Rahmen des Praktikums WS 20/21: Angewandte Elektrotechnik (BSE) wollen wir ein ferngesteuertes Fahrzeug mit zusätzlichen Funktionen zur Hinderniserkennung ausstatten. Es sollen visuelle wie auch akustische Warnsignale in drei verschiedenen Stufen entsprechend der Distanz zum Hindernis ausgegeben werden. Detaillierte Angaben hierzu sind im nachfolgenden Kapitel (s. Anforderungen) zu finden.
Falls es der zeitliche Rahmen des Projektes zulässt wollen wir zusätzlich eine automatische Beleuchtung der Fahrbahn bei Dunkelheit (vom Fahrzeug aus) ergänzen. Weiterhin könnten wir die optische Warnleuchte als Rundumleuchte umsetzen.
Anforderungen
Ausstattung eines ferngesteuerten Fahrzeugs mit folgenden zusätzlichen Funktionen:
1) Warnung bei Annäherung des Fahrzeugs an Hindernisse in Form von:
- Akustischem Signal (mit Buzzer)
- niedrige Frequenz (bei großer Distanz)
- mittlere Frequenz (bei mittler Distanz)
- hohe Frequenz (bei kurzer Distanz)
- Optischem Signal (mit RGB-LED)
- grün (bei großer Distanz)
- gelb (bei mittler Distanz)
- rot (bei kurzer Distanz)
2) Anzeige der Distanz des Fahrzeugs zum Hindernis auf einem Display
3) Die Hindernisbewegung wird mit einem Konstante-Beschleunigung-Modell modelliert und die Zustände Position, Geschwindigkeit Beschleunigung werden mittels Zustandsschätzer (Kalman-Filter) geschätzt.
Zusätzliche Anforderungen:
- Alle benötigten Komponenten sollen im/am Fahrzeug verbaut werden.
Ausblick - Mögliche Ergänzungen:
- Optisches Signal als Rundumleuchte (mit Servomotor)
- Automatische Beleuchtung der Fahrbahn bei Dunkelheit (mit Fotowiderstand und LED's)
Funktionaler Systementwurf/Technischer Systementwurf
Komponentenspezifikation
Unser Gesamtsystem besteht aus den drei Modulen Hinderniswarnsystem, Lichtautomatik und Zustandsschätzer. Die einzelnen Komponenten der Module werden in den folgenden Tabellen spezifiziert.
Hinderniswarnsystem
Komponente: | Eingänge: | Ausgänge: | Aufgaben: |
---|---|---|---|
Distanzsensor | Distanz zu Objekt | Spannungssignal an Microcontroller | Messung der Distanz zum nächstliegenden Objekt in Fahrtrichtung |
Microcontroller | Spannungssignal von Distanzsensor | Spannungssignale an Warnleuchte, Buzzer, Display | Steuerung der Komponenten und Signale |
Warnleuchte | Spannungssignal von Microcotroller | Lichtsignal an Fahrer | Erzeugen eines Lichtssignals in definierten Farben und Blinkfrequenzen |
Automatisches Ändern der Farbe und Blinkfrequenz in Abhängigkeit der gemessenen Distanz (D) nach folgenden Bedingungen: - D > 50 cm: Grün ohne Blinken - D <= 50 cm & > 30 cm: Gelb ohne Blinken - D <= 30 cm & > 10 cm: Rot ohne Blinken - D <= 10 cm: Rot mit Blinken (0,5 sec an, 0,5 sec aus) | |||
Buzzer | Spannungssignal von Microcontroller | Tonsignal an Fahrer | Erzeugen eines Tonsignals mit definierten Tonfrequenzen und -dauern |
Automatisches Ändern der Tonfrequenz und -dauer in Abhängigkeit der gemessenen Distanz (D) nach folgenden Bedingungen: - D > 50 cm: kein Ton - D <= 50 cm & > 30 cm: Tonfrequenz 1000 Hz (1 sec an, 1 sec aus) - D <= 30 cm & > 10 cm: Tonfrequenz 1500 Hz (0,5 sec an, 0,5 sec aus) - D <= 10 cm: Tonfrequenz 2000 Hz (durchgängig) | |||
Display | Spannungssignal von Microcontroller | Text an Fahrer | Anzeige der aktuell gemessenen Distanz in Zentimeter |
Lichtautomatik
Komponente: | Eingänge: | Ausgänge: | Aufgaben: |
---|---|---|---|
Lichtsensor | Lichtstärke der Umgebung | Spannungssignal an Microcontroller | Messung der Lichtstärke der direkten Umgebung des Fahrzeugs |
Microcontroller | Spannungssignal von Lichtsensor | Spannungssignal an Scheinwerfer | Steuerung der Komponenten und Signale |
Scheinwerfer | Spannungssignal von Microcotroller | Lichtsignal an Umgebung | Automatische Frontbeleuchtung (links und rechts) in Fahrtrichtung ab definierter Lichtstärke der Umgebung: - Einschalten der Scheinwerfer bei Dämmerung/Dunkelheit - Ausschalten der Scheinwerfer bei Tageslicht |
Zustandsschätzer
Komponente: | Eingänge: | Ausgänge: | Aufgaben: |
---|---|---|---|
Datenaufnahme | Positionsmessdaten von Microcontroller | formatierte Positionsmessdaten an Kalman-Filter | Einlesen der gespeicherten Positionsmessdaten des Distanzsensors |
Kalman-Filter | Formatierte Positionsmessdaten von Datenaufnahme | Fahrzeugposition, Fahrzeuggeschwindigkeit, Fahrzeugposition an Visualisierung | Schätzung der Fahrzeugposition |
Schätzung der Fahrzeuggeschwindigkeit | |||
Schätzung der Fahrzeugbeschleunigung | |||
Visualisierung | Fahrzeugposition, Fahrzeuggeschwindigkeit, Fahrzeugposition von Kalman-Filter | Graphische Darstellung | Visualisierung der Fahrzeugposition, -geschwindigkeit und -beschleunigung der Schätzung in einem Diagramm: - X-Achse: Zeit - Y-Achse: Position, Geschwindigkeit, Beschleunigung |
Umsetzung (HW/SW)
Die Umsetzung der drei Module wird im Folgenden so dokumentiert, dass es für jeden einfach nachzubauen ist. Die Module Hinderniswarnsystem und Lichtautomatik bestehen jeweils aus Hardware und Software. Das Herzstück der Hardware bildet ein Arduino Uno R3, welcher beide Module steuert. Die Software wurde mit der Arduino eigenen Entwicklungsumgebung IDE erstellt, die auf Wiring IDE basiert. Beide Module wurden auf einem ferngesteuerten Fahrzeug verbaut. Die Komponente Zustandsschätzer besteht nur aus Software, welche mit Matlab erstellt wurde und auf einem PC ausgeführt wird.
Die Umsetzung der Hardware wird anhand eines Beschaltungsplans, welcher mit der Software Fritzing erstellt wurde, dargestellt. Zudem werden für jede Komponente die jeweilige BOM dargestellt, damit für einen Nachbau leicht alle Bauteile beschafft werden können. Für die Umsetzung der Software wird der Quellcode der Arduino-IDE abgebildet.
Hardware
Der Beschaltungsplan beinhaltet die Darstellung der Bauelemente auf dem Breadboard, um die Zusammenhänge und Funktionen übersichtlich darzustellen. Die Umsetzung in der Realität erfolgt an einem ferngesteuerten Fahrzeug. Dazu werden die Bauteile direkt am Fahrzeug befestigt.
Stückliste (BOM) | ||||
---|---|---|---|---|
Nr. | Anzahl | Bezeichnung | Link | Modulzuordnung |
1. | 1 | ferngesteuertes Fahrzeug | Beispiel | Hinderniswarnsystem + Lichtautomatik |
2. | 1 | UNO R3 Mikrocontroller-Board | individuelles Lernset der HSHL | Hinderniswarnsystem + Lichtautomatik |
3. | 1 | USB-Kabel für Arduino Mikrocontrollerboards | individuelles Lernset der HSHL | Hinderniswarnsystem + Lichtautomatik |
4. | 1 | Breadboard | individuelles Lernset der HSHL | Hinderniswarnsystem + Lichtautomatik |
5. | 1 | 9 V Batterieklemme | individuelles Lernset der HSHL | Hinderniswarnsystem + Lichtautomatik |
6. | 1 | 9 V Blockbatterie | Beispiel | Hinderniswarnsystem + Lichtautomatik |
7. | ca. 30 | Breadboard Jumperkabel (m/m, m/f, f/f) | individuelles Lernset der HSHL | Hinderniswarnsystem + Lichtautomatik |
8. | 1 | Ultraschallsensor HC-SR04 | individuelles Lernset der HSHL | Hinderniswarnsystem |
9. | 1 | Piezo Speaker | individuelles Lernset der HSHL | Hinderniswarnsystem |
10. | 1 | LCD Modul mit I2C Ansteuerung | individuelles Lernset der HSHL | Hinderniswarnsystem |
11. | 1 | RGB LED | individuelles Lernset der HSHL | Hinderniswarnsystem |
12. | 3 | Widerstand 200 Ohm | individuelles Lernset der HSHL | Hinderniswarnsystem |
13. | 1 | Fotowiderstand 1K Ohm | individuelles Lernset der HSHL | Lichtautomatik |
14. | 4 | LED weiß | individuelles Lernset der HSHL | Lichtautomatik |
15. | 1 | Widerstand 100 Ohm | individuelles Lernset der HSHL | Lichtautomatik |
16. | 1 | Widerstand 2,2 kOhm | individuelles Lernset der HSHL | Lichtautomatik |
Hinderniswarnsystem
Das Hinderniswarnsystem besteht aus den im Kapitel Komponentenspezifikation beschriebenen Komponenten Distanzsensor, Microcontroller, Warnleuchte, Buzzer und Display. Wie in dem Beschaltungsplan (siehe Abbildung) dargestellt, wird der Distanzsensor durch einen Ultraschallsensor realisiert. Dazu wird der Ultraschallsensor HC-SR04 verwendet. Dieser ist für die Messung von Distanzen zwischen 3 cm und 400 cm ausgelegt und weist eine maximale Abweichung von 0,3 mm auf. Der Sensor besitzt die vier Anschlüsse GND, VCC, Trigger und Echo. Mit Hilfe des Trigger-Pins wird ein Schallwellensignal ausgesendet. Der Echo-Pin dient zum Empfang des Signals. Der Sensor arbeitet mit einer Frequenz von 40 Hz.
Das Sensorsignal wird an den Analogeingang des Microcontrollers gesendet. Als Microcontroller wird der Arduino Uno R3 verwendet. Dieser verarbeitet das Analogsignal des Ultraschallsensors und gibt diese Informationen über die digitalen I/O-Ports an die Aktoren weiter.
Als Aktor für das optische Warnsignal wird eine RGB-LED verwendet. Mit Hilfe der RGB-LED kann das Warnsignal die unterschiedlichen Distanzen nach dem Ampelprinzip darstellen. Das gelbe Signal wird als Kombination aus roter und grüner LED realisiert (siehe Quellcode). Für geringe Distanzen wird das rote Signal als Blinklicht umgesetzt. Die Blinkfrequenz wird über die Programmierung vorgegeben. Die RGB-LED besitzt vier Anschlüsse, von denen ein Anschluss für GND dient und die weiteren Anschlüsse jeweils das Signal des Arduinos für die rote, die grüne oder die blaue LED empfangen.
Das akustische Signal wird durch den Buzzer realisiert. Um unterschiedliche Töne ausgeben zu können, wird ein Piezo-Buzzer verwendet, da hier die Frequenz variiert werden kann. Daher wird der Piezo-Buzzer an den PWM-Pin des Arduino angeschlossen. Der zweite Pin dient als Anschluss für GND.
Für die Text-Ausgabe der Distanz wird ein LC-Display verwendet. Für das Projekt wird ein I2C-Display genutzt, da der I2C-Kommunikations-Adapter die Anzahl der Anschlüsse auf die vier I/O-Leitungen GND, VCC, SDA, SCL reduziert. Die Leitungen SDA und SCL dienen als Datenleitungen und sind mit den Analogeingängen des Arduino verbunden. Das Display kann 32 Zeichen auf 2 Zeilen und 16 Spalten ausgeben.
Lichtautomatik
Software
Hinderniswarnsystem
Definition der Pins
const int trigPin = 2; // Trigger-Pin des Ultraschallsensors const int echoPin = 3 ; // Echo-Pin des Ultraschallsensors const int sdaPin = A4; // SDA-Pin des I2C-LCD const int sclPin = A5; // SCL-Pin des I2C-LCD const int buzzPin = 9; // Buzzer-Pin (PWM für verschiedene Frequenzen) const int redPin = 10; // Pin für Rot der RGB-LED (PWM für verschiedene Lichtstärken) const int greenPin = 6; // Pin für Grün der RGB-LED (PWM für verschiedene Lichtstärken) const int bluePin = 5; // Pin für Blau der RGB-LED (PWM für verschiedene Lichtstärken)
Definition der globalen Variablen:
double Dauer = 0.0; double Distanz = 0.0;
Weitere Einstellungen:
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4); // Initialisierung LCD-Display
Setup starten:
void setup() {
Definition der Eingänge:
pinMode(echoPin, INPUT);
Definition der Ausgänge:
pinMode(trigPin, OUTPUT); pinMode(buzzPin, OUTPUT); pinMode(bluePin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(redPin, OUTPUT);
Initialisierung LCD:
lcd.init(); // LCD via I2C verbinden und initialisieren lcd.backlight(); // Hintergrundbeleuchtung LCD anschalten
Setup beenden:
}
Loop starten:
void loop() {
Berechnung der Distanz:
digitalWrite(trigPin, LOW); // Signal am Trigger-Pin auf LOW(0) setzen delayMicroseconds(5); // 5 µs warten digitalWrite(trigPin, HIGH); // Aktivierung: Signal am Trigger-Pin auf HIGH (1) setzen delayMicroseconds(10); // 5 µs warten digitalWrite(trigPin, LOW); // Signal am Trigger-Pin auf LOW (0) setzen Dauer = pulseIn(echoPin, HIGH); // Einlesen des Signals (Schallimpuls) am Echo-Pin [in s] Distanz = Dauer * 0.034 / 2; // Berechnung der Distanz [in cm]
Anzeige der Distanz auf dem LCD:
lcd.setCursor(0, 0); // Cursor auf Zeile 1, Spalte 1 setzten lcd.print("Distanz: "); // Anzeige von "Distanz: " auf LCD lcd.setCursor(0, 1); // Cursor auf Zeile 2, Spalte 1 setzten lcd.print(Distanz); // Anzeige von berechneter Distanz auf LCD lcd.print(" cm "); // Anzeige von " cm" auf LCD delay(50); // 10 ms warten
Erzeugen der verschiedenen Buzzer-Töne abhängig von der Distanz:
if (Distanz > 50 || Distanz < 0) { noTone(buzzPin); // kein Ton } if (Distanz > 30 && Distanz <= 50) { tone(buzzPin, 1000, 1000); // Ton an (mit Frequenz: 1000 Hz & Dauer: 1000 ms) delay(1000); // Ton aus für 1000 ms } if (Distanz > 10 && Distanz <= 30) { tone(buzzPin, 1500, 500); // Ton an (mit Frequenz: 1500 Hz & Dauer: 500 ms) delay(500); // Ton aus für 500 ms } if (Distanz <= 10 && Distanz >= 0) { tone(buzzPin, 2000); // durchgängiger Ton an (mit Frequenz: 2000 Hz) }
Erzeugen der verschiedenen LED-Farben abhängig von der Distanz:
if (Distanz > 50 || Distanz < 0) { digitalWrite(bluePin, LOW); // Blau 0% an digitalWrite(redPin, LOW); // Rot 0% an digitalWrite(greenPin, HIGH); // Grün 100% an } if (Distanz > 30 && Distanz <= 50) { analogWrite(bluePin, 0); // Blau 0% an analogWrite(redPin, 255); // Rot 100% an analogWrite(greenPin, 30); // Grün (30/255*100)% an } if (Distanz > 10 && Distanz <= 30) { digitalWrite(bluePin, LOW); // Blau 0% an digitalWrite(redPin, HIGH); // Rot 100% an digitalWrite(greenPin, LOW); // Grün 0% an } if (Distanz <= 10 && Distanz >= 0) { digitalWrite(bluePin, LOW); // Blau 0% an digitalWrite(redPin, HIGH); // Rot 100% an digitalWrite(greenPin, LOW); // Grün 0% an delay(500); // 500 ms warten digitalWrite(bluePin, LOW); // Blau 0% an digitalWrite(redPin, LOW); // Rot 0% an digitalWrite(greenPin, LOW); // Grün 0% an }
Loop beenden:
}
Lichtautomatik
Definition der Pins:
const int ldrPin = A1; // Pin für LDR-Sensor const int ledPin = 8; // Pin LED-Scheinwerfer für rechts und links
Definition der globalen Variablen:
double ldrWert = 0.0;
Setup starten:
void setup() {
Definition der Eingänge:
pinMode(ldrPin, INPUT);
Definition der Ausgänge:
pinMode(ledPin, OUTPUT);
Setup beenden:
}
Loop starten:
void loop() {
Anschalten der Scheinwerfer-LEDs bei Dunkelheit:
ldrWert = analogRead(ldrPin); // Einlesen des aktuellen Wert des LDR-Sensors if (ldrWert > 900) // Ein-/Ausschalten der LEDs { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); }
Loop beenden:
}
Zustandsschätzer
tbd
Komponententest
Hinderniswarnsystem
Lichtautomatik
Zustandsschätzer
Ergebnis
Zusammenfassung
Lessons Learned
Projektunterlagen
Projektplan
Projektdurchführung
YouTube Video
Weblinks
Literatur
→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)