Hinderniswarnsystem für Fahrzeug: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 74: Zeile 74:


=== Lichtautomatik ===
=== Lichtautomatik ===
{| class="wikitable"
 
! Aufgaben: !! Aufbau:
|-
| Messung der Lichtstärke der direkten Umgebung des Fahrzeugs || Lichtsensor, Widerstand
|-
| Einschalten der Front-Scheinwerfer (links, rechts) bei Dämmerung/Dunkelheit || rowspan="2" | LEDs, Widerstände
|-
| Ausschalten der Front-Scheinwerfer (links, rechts) bei Tageslicht
|}


=== Zustandsschätzer ===
=== Zustandsschätzer ===
{| class="wikitable"
{| class="wikitable"
! Aufgaben: !! Aufbau:
! Komponente: !! Eingänge: !! Ausgänge: !! Aufgaben:
|-
|-
| Einlesen von Positionsmessdaten des Distanzsensors || Programm (Matlab)
| Datenaufnahme || Positionsmessdaten von Microcontroller || formatierte Positionsmessdaten an Kalman-Filter || Einlesen der gespeicherten Positionsmessdaten des Distanzsensors
|-
|-
| Schätzung der Fahrzeugposition mit Kalman-Filter || rowspan="3" | Kalman-Filter (Matlab)
| rowspan="3" | Kalman-Filter || rowspan="3" | Formatierte Positionsmessdaten von Datenaufnahme || rowspan="3" | Fahrzeugposition, Fahrzeuggeschwindigkeit, Fahrzeugposition an Visualisierung || Schätzung der Fahrzeugposition
|-
|-
| Schätzung der Fahrzeuggeschwindigkeit mit Kalman-Filter
| Schätzung der Fahrzeuggeschwindigkeit
|-
|-
| Schätzung der Fahrzeugbeschleunigung mit Kalman-Filter
| Schätzung der Fahrzeugbeschleunigung
|-
|-
| Visualisierung der Daten der Schätzung in einem Diagramm || Scope (Matlab)
| Visualisierung || Fahrzeugposition, Fahrzeuggeschwindigkeit, Fahrzeugposition von Kalman-Filter || Graphische Darstellung || Visualisierung der Fahrzeugposition, -geschwindigkeit und -beschleunigung der Schätzung in einem Diagramm:<br />- X-Achse: Zeit<br />- Y-Achse: Position, Geschwindigkeit, Beschleunigung
|}
|}



Version vom 5. Dezember 2020, 13:07 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

Systementwurf



Komponentenspezifikation

Unser Gesamtsystem besteht aus den drei Modulen Hinderniswarnsystem, Lichtautomatik und Zustandsschätzer.

Hinderniswarnsystem

Komponente: Eingänge: Ausgänge: Aufgabe:
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

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)

Hardware

Hinderniswarnsystem

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)