Einparkhilfe für die Garage: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(246 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Projekte]]  
[[Kategorie:Projekte]]  
[[Kategorie:ProjekteET MTR BSE WS2020]]
[[Kategorie:ProjekteET MTR BSE WS2021]]
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird.  -->
<!-- Kopieren Sie diesen Header in Ihren Artikel, damit er aufgelistet wird.  -->
'''Autoren: Frederik Baune und Matthias Hernzel''' <br/>
'''Autoren: Frederik Baune und Matthias Hernzel''' <br/>
'''Betreuer: Prof. Göbel & Prof. Schneider''' <br/>
'''Gruppe: MTR 1.1 '''<br/>
'''Betreuer: [[Benutzer:Ulrich_Schneider|Prof. Schneider]] <br/>




→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2020|WS 20/21: Angewandte Elektrotechnik (BSE)]]
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2020|WS 20/21: Angewandte Elektrotechnik (BSE)]]
[[Datei:Projektbild.png|650px|thumb|right|Projektbild]]




== Einleitung ==
== Einleitung ==
Wem ist es noch nicht passiert? Schnell in der Tiefgarage oder der privaten Garage eingeparkt; für einen Moment nicht aufmerksam gewesen und schon ist ein fieser Kratzer oder sogar mehr passiert. Gerade in alten Garagagen, welche schlecht beleuchtet sind ist dieses Problem noch präsenter und längst nicht alle PKW haben heutzutage einen eigenen Abstandssensor vorne sowie hinten. Zudem wird mit dem zunehmenden Anteil an SUV’s auf deutschen Straßen das unfallfreie einparken ohnehin erschwert.
Dieser Artikel bezüglich des Projektes "Einparkhilfe für die Garage" wurde von Matthias Hernzel und Frederik Baune verfasst.


Aus diesem Grund möchten wir eine einerseits visuelle als auch akustische Einparkhilfe für den alltäglichen Gebrauch entwickeln. Diese soll farblich und anzahlmäßig mithilfe von LED’s den Abstand vom Auto zur Garagenwand anzeigen und ab einer gewissen gefählich nahen Unterschreitung einen akustischen Warnton ausgeben.
Wem ist es noch nicht passiert? Schnell in der Tiefgarage oder der privaten Garage eingeparkt; für einen Moment nicht aufmerksam gewesen und schon ist ein fieser Kratzer oder sogar mehr passiert. Gerade in alten Garagen, welche schlecht beleuchtet sind ist dieses Problem noch präsenter und längst nicht alle PKWs haben heutzutage einen eigenen Abstandssensor vorne, sowie hinten. Zudem wird mit dem zunehmenden Anteil an SUVs auf deutschen Straßen das unfallfreie einparken ohnehin erschwert.
 
Aus diesem Grund haben wir eine einerseits visuelle als auch akustische Einparkhilfe für den privaten Gebrauch entwickelt. Diese zeigt farblich und anzahlmäßig mithilfe von LEDs den Abstand vom Auto zur Garagenwand und warnt ab einer gewissen gefählich nahen Unterschreitung mit einen akustischen Warnton. Ebenso wird die gesamte Zeit über mit einer Vierstelligen 7 Segmentanzeige die absolute Distanz vom Fahrzeug bis zur Wand dem Fahrer angezeigt.
 
Das System arbeitet mit einem Ultraschallsensor zur Bestimmung der Entfernung. Ein Arduino UNO hilft bei der Steuerung und Auswertung der Signale und mit mehreren LEDs, einem Lautsprecher und der Entfernungsanzeige wird der Autofahrer in die Garage gelotst.


== Anforderungen ==
== Anforderungen ==
1. Abstandsmessung mit Ultraschallsensor zwischen 5 cm und 250 cm
2. sichere Erkennung vieler Fahrzeugtypen
3. Ausgabe des Abstands zur Wand über eine LED-Bar (3 verschiedene Farben):
- grün: große Entfernung, 250 cm - 150 cm
- gelb: mittle Entfernung, <150 cm - 50 cm
- rot: niedrige Entfernung, <50 cm
4. Akustisches Warnsignal kurz vor erreichen der Wand über Piezospeaker (ab minimal eingestellten Arbeitsbereich)
5. Einstellung des Arbeitsbereiches (minimale Entfernung zur Wand  5cm - 50 cm) über Taster und der vierstelligen 7-Segment Anzeige
Mögliche Erweiterungen:
- Ein- und Ausschalten über Fernbedienung
- Einschalten über Bewegungsmelder (Garagentor)


== Funktionaler Systementwurf/Technischer Systementwurf ==
== Funktionaler Systementwurf/Technischer Systementwurf ==
Die Einparkhilfe soll zur optimalen Funktion auf dem folgenden Entwurf/Prinzip beruhen.
Mithilfe eines Ultraschallsensors soll zyklisch in einem Abstand von 0,1 Sekunden die Entfernung des sich annähernden Fahrzeuges gemessen werden.
Mittels dieser Information, welche dem Arduino Uno zur Verfügung gestellt wird, werden dann die Aktoren gesteuert. Es wird entschieden ob bestimmte LED's ein- oder ausgeschaltet bleiben, ob die akustische Warnung in Form von einem Piezospeaker ertönt und es wird ein Signal zur 7-Segmentanzeige ausgegeben, sodass diese die Entfernung zur Wand ausgeben und für den Fahrer sichtbar machen kann. Des Weiteren soll sich aber auch das System von selbst deaktivieren wenn für eine festgelegte Zeit (von beispielsweise 30 Sekunden) keine Entferungsänderung >5cm gemessen werden kann und ebenso wieder reaktivieren wenn diese Änderung überschritten wird. (siehe Abbildung 1&2)
[[Datei:Grundschema Einparkhilfe.PNG|800px|thumb|left|Abb. 1 Grundschema Einparkhilfe]][[Datei:Ablaufschema Einparkhilfe.png|400px|thumb|left|Abb. 2 Ablaufschema Einparkhilfe]]
[[Datei:Skizze.jpg|550px|thumb|left|Abb. 3 Skizze]]




Zeile 22: Zeile 111:


== Komponentenspezifikation ==
== Komponentenspezifikation ==
'''Ultraschallsensor:'''
Arduino, Typ HC-SR04
''Funktionsweise:'' Der Ultraschallsensor sendet mit einem Lautsprecher eine Ultraschall Signal aus und empfängt dieses abhängig von der Entfernung des Gegenstandes wieder. Danach gibt dieser dann die verstrichene Zeit aus, mit welcher die Entfernung bestimmt werden kann.
:<math>Entfernung=0,5 \cdot Zeit \cdot Schallgeschwindigkeit</math>
:<math>Schallgeschwindigkeit in Luft=343,2m/s</math>
'''LED-Lichtband:'''
BTF-Lighting, 1m, 60 LEDs, IP65
'''Mikrocontroller:'''
Arduino UNO
'''Spannungsversorgung:'''
Outtag Ladegerät AC -> DC  20W, 5V, 4A,
'''Piezospeaker:'''
Arduino, Typ KXG 1203C
''Funktionsweise:'' Der Piezospeaker beinhaltet dem Namen entsprechend einen Piezokristall, welcher an beiden Seiten mit Elektroden verbunden ist. Wenn Spannung angelegt wird, wird die Auslenkung auf einen Membran übertragen, welche dadurch den Ton erzeugt.
'''Bewegungsmelder :'''
Arduino, Typ HW-416


== Umsetzung (HW/SW) ==
== Umsetzung (HW/SW) ==
===Hardware===
Im Bereich der Hardware wurde einerseits ein LED-Lichtband benutzt, welches in der Lage ist 60 Led's in verschiedenen Farbtönen und Helligkeiten die visuelle Warnung auszugeben. Das LED-Band wird mittels WS2812b programmiert. Für die Ansteuerung der LED´s und dem Piezospeaker mittels des Arduino UNO und weiteren Bauelementen, wie Widerständen zur Strombegrenzung und einem externen Netzteil wurde die Hardware entsprechend verdrahtet. Zur genauen Entfernungsmessung wurde der im Aduino UNO Paket enthaltene Ultraschallsensor verwendet. Des Weiternen wurde der ebenfalls vorhandene Bewegungsmelder verwendet um das Modell ein- und auszuschalten. Zur akustischen Warnung wurde zusätzlich noch ein Piezospeaker verbaut. Die Verschaltung dieser Bauelement wurde hierbei folglich dem Schaltplan in Abbildung 4 vorgenommen.
===Software===
[[Datei:Schaltplan_Einparkhilfe.PNG|250px|thumb|right|Abb. 4 Schaltplan ]]
Im Softwarebereich wird nun mithilfe des Programmierprogramms Arduino IDE die Entfernungsmessung in eine entsprechende visuelle Ausgabe des Lichtbandes ausgegeben. Hierbei wird um ein Rauschen der Messwerte zu vermindern, immer der Medianwert von 60 Messwerten als Messergebnis verwendet. Mithilfe eines Algoryhtmus der nun die Entfernung in die Bereiche Rot(nah) gelb (mittelnah) und grün (fern) unterteilt, wird das LED-Band dann in entsprechender LED Anzahl und LED Farbe aktiviert. Um eine dynamische Funktion zu gewährleisten wird dieser Algoryhtmus mehrmals die Sekunde wiederholt.


== Komponententest ==
== Komponententest ==
Der Test der verschiedenen Komponenten lief jeweils nacheinander und immer im Einzelnen statt.
Als erste wurde der Ultraschallsensor auf korrekte Funktion überprüft. Dafür wurde der Sensor über den Arduino UNO mit dem PC verbunden und es wurden sich die erzeugten Messwerte in dem Softwareprogramm ausgegeben. Mit einem flachen Gegenstand wurden verschiedenen Entfernungen simuliert.
1. Für das LED Band wurde eine vom Hersteller zur Verfügung gestelltes Testprogramm auf das Band übertragen. Hierbei konnte man beim Ablauf dessen erkennen, ob alle LEDs in sämtlichen Farbtönen fähig waren zu leuchten.
2. Ebenfalls der Piezospeaker wurde einem kleinen Test unterzogen. Dafür wurde ein kleines Testprogramm programmiert, welches diesen mehrmals hintereinander einschaltete.
3. Für den Bewegungsmelder wurden die erzeugten Daten in der Software ausgegeben. Die Bewegung wurde dabei mit einem Gegenstand simuliert. Die Bewegungen und die ausgegebene Signale wurde dann verglichen. Hierbei wurde die Empfindlichkeit sehr niedrig eingestellt, sodass das Fahrzeug frühzeitig erkannt wird.


== Ergebnis ==
== Ergebnis ==
Nach Fertigstellung der Hardware und Software und der entsprechenden Einhausung des LED Bands und der Verstauung der Elektronik war aus dem anfänglich sehr nach Prototyp aussehendem Modells ein schickes alltagtaugliches System enstanden, welches in hohem Maße die Anforderungen einer modernen Einparkhilfe erfüllt. Auch mithilfe der verbesserten Software konnte die Echtzeitfähigkeit des Systems ernorm gesteigert werden, was die Nutzbarkeit für den Anwender maßgeblich erhöhen konnte.
Das Modell funktioniert nun nach dem folgendem System:
Der Ultraschallsensor misst die Entfernung mehrmals, woraus der Arduino UNO einen Mittelwert berechnet. Dies dient zur Unterdrückung von Fehlmessungen. Anschließend an diese Berechnung gibt der Arduino UNO jeweils die entsprechenden Signale an das LED Band, welches rot, gelb oder grün leuchtet. Ebenso an den Piezospeaker, welcher ein akustisches Warnsignal ausgibt, wenn das Auto sehr nah an die Wand kommt. Aktiviert und deaktiviert wird das ganze System von einem Bewegungsmelder. Dieser sorgt somit dafür, dass die Bauteile nicht unnötig lange arbeiten, wenn das Auto schon längst eingeparkt ist.
== Zusammenstellung der Projektergebnisse ==
<gallery widths="300" heights="300"> 
  Bild:Einparkhilfe.JPG| Abb.5 Einparkhilfe
  Bild:Steuerbox.JPG|Abb.6 Steuerbox
  Bild:Rot.JPG|Abb.7 Rote Warnung
  Bild:Gelb.JPG|Abb.8 Gelbe Warnung
  Bild:Grün.JPG|Abb.9 Grüne Warnung
  Bild:Verkablung_Steuerbox.JPG|Abb.10 Verkablung Steuerbox
 
</gallery>
Das fertige Modell zeichnet sich durche ein schlankes Design aus Edelstahl aus. Ebenso ist das Modell Plug and Play fähig was die Nutzerfreundlichkeit erhöht. Des Weiteren beinhaltet eine zentrale Steuerbox die gesamte Elektronik, sowie den Ultraschallsensor und den Piezospeaker, was die Komplexität des Geräts reduziert. Montiert wird das Produkt direkt an die Wand mittels dafür vorgesehende Bohrungen am Edelstahlrahmen. Auf Seiten des LED Bands gibt es drei verschiedenen Farbtöne mit unterschiedlichen LED Anzahlen. (siehe YouTube Video)


== Zusammenfassung ==
== Zusammenfassung ==
Nach der vollständigen Inbetriebnahme der Hardware und Software lässt sich sagen, dass die anfänglichen Überlegungen zur Umsetzung des Projekts im Großen und Ganzen recht effizient zu einem funktionsfähigen System geführt haben. Eine klare Planung und zu Beginn intensive Überlegungen haben dazu beigetragen, dass sich das Projekt relativ strukturiert und effizient umsetzten lassen hat.
=== Lessons Learned ===
=== Lessons Learned ===
Während der Projektphase haben sich natürlicherweise einige Hindernisse ergeben. Hauptsächlich waren die Auswahl des LED-Lichtstreifens und der Ansteuerung mithilfe der vorhandenen Software. Hierbei war es wichtig die richtigen Bibliotheken einzubinden um das Lichtband wie gewünscht anzusteuern.
1. Des Weiteren stellte sich auch das Problem der Spannungsversorgung der vielen LED's. Hierbei war es nicht möglich diese vollständig mit dem Arduino UNO mit stabilen Spannungen zu versorgen. Deshalb wurde auf eine externe Spannungsquelle mit genügend Leistung zurückgegriffen.
2. Darüberhinaus war auch die effiziente und schlanke Programmierung von Bedeutung. Der zunächst entworfene Programmcode stellte sich als zu ineffizient heraus was die Dynamik des Systems drosselte. Ein anderer Algoryhtmus brachte dann die nötige Leistung das Lichtband dynamisch zu betreiben.
3. Ein weiterer Punkt war die Justierung des Abstandes mit dem der Ultraschallsensor misst. Hierbei wurde schnell klar, dass auf große Entfernungen eine strak schwankende Unsicherheit der Messergebnisse bestand. Daher wurde die maximale Entferung die der Ultraschallsensor messen soll reduziert, sodass seine Messwerte deutlich reproduzierbarer waren.
4. Als Letztes wurde jedoch auch ein zunächst geplantes Bauelement aus dem Projekt entfernt. Hierbei handelt es sich um die 7-Segmentanzeige, welche die aktuelle Entfernung visuell ausgeben sollte. Es wurde deshalb verzichtet, weil einerseits die Anzeige vom Fahrzeug aus zu schlecht sichtbar war und es keinen merklichen Vorteil diente, da das LED Band einen viel besseren Eindruck vom aktuellen Entfernungszusatnd vermitteln konnte.


== Projektunterlagen ==
== Projektunterlagen ==
'''1. CAD-Dateien (Bilder)'''
'''Galerie der CAD-Dateien als Bilder: '''
<gallery widths="275" heights="275"> 
  Bild:Deckelunterseite.png|Abb.11 Deckelunterseite
  Bild:Kasten.png|Abb.12 Kasten
  Bild:Innenleben.png|Abb.13 Innenleben
  Bild:Gesamtbaugruppe.png|Abb.14 Gesamtbaugruppe
 
</gallery>
Um die Gehäuse und weitere Teile des Systems zu fertigen wurden 3D-Modelle mit CAD angefertigt (siehe Abbildung 11,12,13,14). Zur Fertigung dieser wurde hauptsächlich auf das 3D-Druck Verfahren in Form des Fused Layer Modelling zurückgegriffen.
'''2. CAD-Dateien'''
Link zu den CAD-Dateien: https://www.thingiverse.com/thing:5192063
==== Programmcode ====
<div style="width:950px; height:500px; overflow:auto; border: 1px solid #000">
/******************************************************************************************************
* PROJEKT Einparkhilfe für die Garage                                                                     
******************************************************************************************************
* Im Rahmen des Eltrotechnikfachpraktikums 2021/2022 wurde ein System zur optischen Unterstützung beim
* Einparken in einer Garage entwickelt
******************************************************************************************************
* Autor:        Matthias Hernzel, Frederik Baune                                           
* Datum:        02.01.2022                                                                                                                         
* Hardware:      - Arduino UNO R3                                                                   
*                - LED Band mit WS2812b Schnitstelle
*                - Ultraschallsensor
*                - PIR Sensor
*                -Piezospeaker
* Bibliotheken:  - FastLED.h                                                                           
*                - QuickStats.
*
*/
// Biliotheken einpflegen
#include <FastLED.h>
#include <QuickStats.h>
QuickStats stats;
// defines anlegen
#define LED_PIN    5 // Pin für Ansteuerung der LEDs
#define NUM_LEDS    60 // Anzahl der LEDs
#define Hupe 4 // Pin für Ansteuerung der Hupe
#define Bewegungsmelder 3 // Pin für den Bewegungsmelder
// Variablen festlegen
const int trigPin = 7; //Trig Pin für den Ultraschallsensor
const int echoPin = 6; // Echo Pin für den Ultraschallsensor
float duration; // Variable für das Messsignal des Ultraschallsensors
float durationarray[60]; // Array um mehrere Werte für die Entfernung aufzunehmen
float distance; // Variable für die berechnete Distanz aus der Zeit
float stopdistance = 40; // Parkabstand (cm)
float startdistance = 160; //Startabstand (cm)
float increment = ((startdistance - stopdistance) / 60); // Zunahme für pro LED
int Bewegungsstatus = 0; // Variable zum zurücksetzen des Bewegungsmelders
int Ton =1; // Variable zum Zurücksetzten des Piezospeakers
//LED Band mit Anzahl der LED konfigurieren
CRGB leds[NUM_LEDS];
void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  pinMode(Hupe, OUTPUT); // Sets the Hupe as an Output
  pinMode(Bewegungsmelder, INPUT); // Sets the echoPin as an Input
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  Serial.begin(9600); // Starts the serial communication
}
void loop() {
  for (int i = 0; i <= 59; i++) {
    // Löscht den trigPin
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    // Setzt den TrigPin auf HIGH für 10 ms
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    // ließt den EchoPin aus und schreibt Wert ins Array
    durationarray[i] = pulseIn(echoPin, HIGH);
    //Berechnung von Zeit in Abstand mit Schallgeschwindigkeit
    distance = durationarray[i] * 0.034 / 2;
   
  }
  //Median Wert des Arrays annehmen
  duration = (stats.median(durationarray, 60));
  //Berechnung von Zeit in Abstand mit Schallgeschwindigkeit
  distance = duration * 0.034 / 2;
  // Darstellung der Distanz
  Serial.print("Distance: ");
  Serial.println(distance);
  // Abfrage des Bewegungsmelders
  Bewegungsstatus = digitalRead(Bewegungsmelder);
  Serial.print("Status: ");
  Serial.println(Bewegungsstatus);
  if (Bewegungsstatus == HIGH) {
    // Ausgabe der roten Farbe und des Warnsignals
    if (distance < stopdistance) {
      for (int i = 0; i <= 59 ; i++) {
        leds[i] = CRGB ( 255, 0, 0);
        FastLED.show();
      }
      if(Ton==1){
            digitalWrite(Hupe, HIGH);
      delay(2000);
      digitalWrite(Hupe, LOW);
      Ton=0;
      }
   
    }
   
    //Ausgabe der organgen Warnfarbe
    else if (distance < stopdistance + increment) {
      for (int i = 1; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 0; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 2) {
      for (int i = 2; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 1; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 3) {
      for (int i = 3; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 2; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 4) {
      for (int i = 4; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 3; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 5) {
      for (int i = 5; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 4; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 6) {
      for (int i = 6; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 5; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 7) {
      for (int i = 7; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 6; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 8) {
      for (int i = 8; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 7; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 9) {
      for (int i = 9; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 8; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 10) {
      for (int i = 10; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 9; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 11) {
      for (int i = 11; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 10; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 12) {
      for (int i = 12; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 11; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 13) {
      for (int i = 13; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 11; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 14) {
      for (int i = 14; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 14; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 15) {
      for (int i = 15; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 14; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 16) {
      for (int i = 16; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 15; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 17) {
      for (int i = 17; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 16; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 18) {
      for (int i = 18; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 17; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 19) {
      for (int i = 19; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 18; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 20) {
      for (int i = 20; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 19; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 21) {
      for (int i = 21; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 20; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 22) {
      for (int i = 22; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 21; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 23) {
      for (int i = 23; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 22; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 24) {
      for (int i = 24; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 23; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 25) {
      for (int i = 25; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 24; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 26) {
      for (int i = 26; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 25; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 27) {
      for (int i = 27; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 26; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 28) {
      for (int i = 28; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 27; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 29) {
      for (int i = 29; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 28; i++) {
        leds[i] = CRGB ( 255, 80, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    // Ausgabe des grünen Warnsignals
    else if (distance < stopdistance + increment * 30) {
      for (int i = 30; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 29; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 31) {
      for (int i = 31; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 30; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 32) {
      for (int i = 32; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 31; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 33) {
      for (int i = 33; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 32; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 34) {
      for (int i = 34; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 33; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 35) {
      for (int i = 35; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 34; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 36) {
      for (int i = 36; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 35; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 37) {
      for (int i = 37; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 36; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 38) {
      for (int i = 38; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 37; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 39) {
      for (int i = 39; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 38; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 40) {
      for (int i = 40; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 39; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 41) {
      for (int i = 41; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 40; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 42) {
      for (int i = 42; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 41; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 43) {
      for (int i = 43; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 42; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 44) {
      for (int i = 44; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 43; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 45) {
      for (int i = 45; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 44; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 46) {
      for (int i = 46; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 45; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 47) {
      for (int i = 47; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 46; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 48) {
      for (int i = 48; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 47; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 49) {
      for (int i = 49; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 48; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 50) {
      for (int i = 50; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 49; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 51) {
      for (int i = 51; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 50; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 52) {
      for (int i = 52; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 51; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 53) {
      for (int i = 53; i <= 59; i++) {
        leds[i] = CRGB ( 0, 0, 0);
      }
      for (int i = 0; i <= 52; i++) {
        leds[i] = CRGB ( 0, 255, 0);
      }
      Ton=1;
      FastLED.show();
      delay(10);
    }
    else if (distance < stopdistance + increment * 54) {
        for (int i = 54; i <= 59; i++) {
          leds[i] = CRGB ( 0, 0, 0);
        }
        for (int i = 0; i <= 53; i++) {
          leds[i] = CRGB ( 0, 255, 0);
        }
        Ton=1;
        FastLED.show();
        delay(10);
      }
      else if (distance < stopdistance + increment * 55) {
        for (int i = 55; i <= 59; i++) {
          leds[i] = CRGB ( 0, 0, 0);
        }
        for (int i = 0; i <= 54; i++) {
          leds[i] = CRGB ( 0, 255, 0);
        }
        Ton=1;
        FastLED.show();
        delay(10);
      }
      else if (distance < stopdistance + increment * 56) {
        for (int i = 56; i <= 59; i++) {
          leds[i] = CRGB ( 0, 0, 0);
        }
        for (int i = 0; i <= 55; i++) {
          leds[i] = CRGB ( 0, 255, 0);
        }
        Ton=1;
        FastLED.show();
        delay(10);
      }
      else if (distance < stopdistance + increment * 57) {
        for (int i = 57; i <= 59; i++) {
          leds[i] = CRGB ( 0, 0, 0);
        }
        for (int i = 0; i <= 56; i++) {
          leds[i] = CRGB ( 0, 255, 0);
        }
        Ton=1;
        FastLED.show();
        delay(10);
      }
      else if (distance < stopdistance + increment * 58) {
        for (int i = 58; i <= 59; i++) {
          leds[i] = CRGB ( 0, 0, 0);
        }
        for (int i = 0; i <= 57; i++) {
          leds[i] = CRGB ( 0, 255, 0);
        }
        Ton=1;
        FastLED.show();
        delay(10);
      }
      else if (distance < stopdistance + increment * 59) {
        for (int i = 59; i <= 59; i++) {
          leds[i] = CRGB ( 0, 0, 0);
        }
        for (int i = 0; i <= 58; i++) {
          leds[i] = CRGB ( 0, 255, 0);
        }
        Ton=1;
        FastLED.show();
        delay(10);
      }
      else if (distance >= stopdistance + increment * 59) {
        for (int i = 0; i <= 59; i++) {
          leds[i] = CRGB ( 0, 255, 0);
        }
        Ton=1;
        FastLED.show();
        delay(10);
      }
  }
  else {
    for (int i = 0; i <= 59 ; i++) {
      leds[i] = CRGB ( 0, 0, 0);
      FastLED.show();
    }
  }
}
<pre></pre>
</div>
=== Projektplan ===
=== Projektplan ===
'''Bewertung der Anforderungen:'''
1. Abstandsmessung mit Ultraschallsensor zwischen 5cm und 250cm
''-> Ultraschallsensor findet Anwendung, jedoch aufgrund zu großer Unsicherheit nur im Bereich von 30cm bis 150cm''
2. Sichere Erkennung vieler Fahrzeugtypen
''-> Aufgrund der optimalen Befestigungshöhe und des kegelförmigen Detektionsberech des Ultraschallsensors ist die Erkennung nahezu unabhängig vom Fahrzeugtyp''
3.Ausgabe des Abstandes zur Wand über eine LED-BAr (3 verschiedene Farben)
''-> Die Ausgabe des LED Bands erfolgt in rot (nah/<30cm), orange(mittel/30cm bis <90cm) und grün (fern/90cm bis <150cm). Abweichungen von der Planung aufgrund Messungenauigkeit des Ultraschallsensors.''
4.Akustisches Warnsignal kurz vor erreichen der Wand über Piezospeaker
''-> Piezospeaker gibt akustischen Warnton ab Unterschreitung von 30cm was roter visueller Warnung entspricht.''
5.Ausgabe der Entfernung über 7 Segmentanzeige
''-> Aufgrund der schlechten visuellen Warnehmbarkeit und der Ablenkung vom LED Band wurde die 7 Segmentanzeige als störend eingestuft und aus dem Projekt entfernt.
''
'''Projektplanung:'''
1. Beschaffung der benötigten Hardware 
                                                                                       
2. Erste Verdrahtung der Komponenten
3. Programmierung der Software
4. Funktionstest der Komponeten in Verbindung mit der Hardware
5. Fehlerbehebung
6. Konstruktion und Produktion eines Gehäuses mittels 3D-Druck nach dem Fused Layer Modelling Verfahren
=== Projektdurchführung ===
=== Projektdurchführung ===
[[Datei:Zeitplan_Einparkhilfe.png|1000px|thumb|left|Abb. 15 Zeitplan Einparkhilfe]]
<br clear = all>


== YouTube Video ==
== YouTube Video ==
Hier sehen Sie die Einparkhilfe in Aktion [https://youtu.be/EgDKHFpaCOc YouTube-Video]
{{#ev:youtube|https://youtu.be/EgDKHFpaCOc| 600 | | Video 1: Einparkhilfe für die Garage |frame}}


== Weblinks ==
== Weblinks ==
*[https://www.arduino.cc/en/Main/arduinoBoardUno&gt; Arduino.cc]
*[https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/KIT-18U1; Starterset Arduino]
*[https://www.thingiverse.com/thing:5192063; CAD-Dateien zum Download]


== Literatur ==
== Literatur ==

Aktuelle Version vom 8. Februar 2022, 13:01 Uhr

Autoren: Frederik Baune und Matthias Hernzel
Gruppe: MTR 1.1
Betreuer: Prof. Schneider


→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)

Projektbild


Einleitung

Dieser Artikel bezüglich des Projektes "Einparkhilfe für die Garage" wurde von Matthias Hernzel und Frederik Baune verfasst.

Wem ist es noch nicht passiert? Schnell in der Tiefgarage oder der privaten Garage eingeparkt; für einen Moment nicht aufmerksam gewesen und schon ist ein fieser Kratzer oder sogar mehr passiert. Gerade in alten Garagen, welche schlecht beleuchtet sind ist dieses Problem noch präsenter und längst nicht alle PKWs haben heutzutage einen eigenen Abstandssensor vorne, sowie hinten. Zudem wird mit dem zunehmenden Anteil an SUVs auf deutschen Straßen das unfallfreie einparken ohnehin erschwert.

Aus diesem Grund haben wir eine einerseits visuelle als auch akustische Einparkhilfe für den privaten Gebrauch entwickelt. Diese zeigt farblich und anzahlmäßig mithilfe von LEDs den Abstand vom Auto zur Garagenwand und warnt ab einer gewissen gefählich nahen Unterschreitung mit einen akustischen Warnton. Ebenso wird die gesamte Zeit über mit einer Vierstelligen 7 Segmentanzeige die absolute Distanz vom Fahrzeug bis zur Wand dem Fahrer angezeigt.

Das System arbeitet mit einem Ultraschallsensor zur Bestimmung der Entfernung. Ein Arduino UNO hilft bei der Steuerung und Auswertung der Signale und mit mehreren LEDs, einem Lautsprecher und der Entfernungsanzeige wird der Autofahrer in die Garage gelotst.

Anforderungen

1. Abstandsmessung mit Ultraschallsensor zwischen 5 cm und 250 cm

2. sichere Erkennung vieler Fahrzeugtypen

3. Ausgabe des Abstands zur Wand über eine LED-Bar (3 verschiedene Farben):

- grün: große Entfernung, 250 cm - 150 cm
- gelb: mittle Entfernung, <150 cm - 50 cm
- rot: niedrige Entfernung, <50 cm

4. Akustisches Warnsignal kurz vor erreichen der Wand über Piezospeaker (ab minimal eingestellten Arbeitsbereich)

5. Einstellung des Arbeitsbereiches (minimale Entfernung zur Wand 5cm - 50 cm) über Taster und der vierstelligen 7-Segment Anzeige

Mögliche Erweiterungen:

- Ein- und Ausschalten über Fernbedienung

- Einschalten über Bewegungsmelder (Garagentor)

Funktionaler Systementwurf/Technischer Systementwurf

Die Einparkhilfe soll zur optimalen Funktion auf dem folgenden Entwurf/Prinzip beruhen. Mithilfe eines Ultraschallsensors soll zyklisch in einem Abstand von 0,1 Sekunden die Entfernung des sich annähernden Fahrzeuges gemessen werden. Mittels dieser Information, welche dem Arduino Uno zur Verfügung gestellt wird, werden dann die Aktoren gesteuert. Es wird entschieden ob bestimmte LED's ein- oder ausgeschaltet bleiben, ob die akustische Warnung in Form von einem Piezospeaker ertönt und es wird ein Signal zur 7-Segmentanzeige ausgegeben, sodass diese die Entfernung zur Wand ausgeben und für den Fahrer sichtbar machen kann. Des Weiteren soll sich aber auch das System von selbst deaktivieren wenn für eine festgelegte Zeit (von beispielsweise 30 Sekunden) keine Entferungsänderung >5cm gemessen werden kann und ebenso wieder reaktivieren wenn diese Änderung überschritten wird. (siehe Abbildung 1&2)

Abb. 1 Grundschema Einparkhilfe
Abb. 2 Ablaufschema Einparkhilfe
Abb. 3 Skizze






























Komponentenspezifikation

Ultraschallsensor: Arduino, Typ HC-SR04

Funktionsweise: Der Ultraschallsensor sendet mit einem Lautsprecher eine Ultraschall Signal aus und empfängt dieses abhängig von der Entfernung des Gegenstandes wieder. Danach gibt dieser dann die verstrichene Zeit aus, mit welcher die Entfernung bestimmt werden kann.


LED-Lichtband: BTF-Lighting, 1m, 60 LEDs, IP65

Mikrocontroller: Arduino UNO

Spannungsversorgung: Outtag Ladegerät AC -> DC 20W, 5V, 4A,

Piezospeaker: Arduino, Typ KXG 1203C

Funktionsweise: Der Piezospeaker beinhaltet dem Namen entsprechend einen Piezokristall, welcher an beiden Seiten mit Elektroden verbunden ist. Wenn Spannung angelegt wird, wird die Auslenkung auf einen Membran übertragen, welche dadurch den Ton erzeugt.

Bewegungsmelder : Arduino, Typ HW-416

Umsetzung (HW/SW)

Hardware

Im Bereich der Hardware wurde einerseits ein LED-Lichtband benutzt, welches in der Lage ist 60 Led's in verschiedenen Farbtönen und Helligkeiten die visuelle Warnung auszugeben. Das LED-Band wird mittels WS2812b programmiert. Für die Ansteuerung der LED´s und dem Piezospeaker mittels des Arduino UNO und weiteren Bauelementen, wie Widerständen zur Strombegrenzung und einem externen Netzteil wurde die Hardware entsprechend verdrahtet. Zur genauen Entfernungsmessung wurde der im Aduino UNO Paket enthaltene Ultraschallsensor verwendet. Des Weiternen wurde der ebenfalls vorhandene Bewegungsmelder verwendet um das Modell ein- und auszuschalten. Zur akustischen Warnung wurde zusätzlich noch ein Piezospeaker verbaut. Die Verschaltung dieser Bauelement wurde hierbei folglich dem Schaltplan in Abbildung 4 vorgenommen.

Software

Abb. 4 Schaltplan

Im Softwarebereich wird nun mithilfe des Programmierprogramms Arduino IDE die Entfernungsmessung in eine entsprechende visuelle Ausgabe des Lichtbandes ausgegeben. Hierbei wird um ein Rauschen der Messwerte zu vermindern, immer der Medianwert von 60 Messwerten als Messergebnis verwendet. Mithilfe eines Algoryhtmus der nun die Entfernung in die Bereiche Rot(nah) gelb (mittelnah) und grün (fern) unterteilt, wird das LED-Band dann in entsprechender LED Anzahl und LED Farbe aktiviert. Um eine dynamische Funktion zu gewährleisten wird dieser Algoryhtmus mehrmals die Sekunde wiederholt.

Komponententest

Der Test der verschiedenen Komponenten lief jeweils nacheinander und immer im Einzelnen statt. Als erste wurde der Ultraschallsensor auf korrekte Funktion überprüft. Dafür wurde der Sensor über den Arduino UNO mit dem PC verbunden und es wurden sich die erzeugten Messwerte in dem Softwareprogramm ausgegeben. Mit einem flachen Gegenstand wurden verschiedenen Entfernungen simuliert.

1. Für das LED Band wurde eine vom Hersteller zur Verfügung gestelltes Testprogramm auf das Band übertragen. Hierbei konnte man beim Ablauf dessen erkennen, ob alle LEDs in sämtlichen Farbtönen fähig waren zu leuchten.

2. Ebenfalls der Piezospeaker wurde einem kleinen Test unterzogen. Dafür wurde ein kleines Testprogramm programmiert, welches diesen mehrmals hintereinander einschaltete.

3. Für den Bewegungsmelder wurden die erzeugten Daten in der Software ausgegeben. Die Bewegung wurde dabei mit einem Gegenstand simuliert. Die Bewegungen und die ausgegebene Signale wurde dann verglichen. Hierbei wurde die Empfindlichkeit sehr niedrig eingestellt, sodass das Fahrzeug frühzeitig erkannt wird.

Ergebnis

Nach Fertigstellung der Hardware und Software und der entsprechenden Einhausung des LED Bands und der Verstauung der Elektronik war aus dem anfänglich sehr nach Prototyp aussehendem Modells ein schickes alltagtaugliches System enstanden, welches in hohem Maße die Anforderungen einer modernen Einparkhilfe erfüllt. Auch mithilfe der verbesserten Software konnte die Echtzeitfähigkeit des Systems ernorm gesteigert werden, was die Nutzbarkeit für den Anwender maßgeblich erhöhen konnte. Das Modell funktioniert nun nach dem folgendem System: Der Ultraschallsensor misst die Entfernung mehrmals, woraus der Arduino UNO einen Mittelwert berechnet. Dies dient zur Unterdrückung von Fehlmessungen. Anschließend an diese Berechnung gibt der Arduino UNO jeweils die entsprechenden Signale an das LED Band, welches rot, gelb oder grün leuchtet. Ebenso an den Piezospeaker, welcher ein akustisches Warnsignal ausgibt, wenn das Auto sehr nah an die Wand kommt. Aktiviert und deaktiviert wird das ganze System von einem Bewegungsmelder. Dieser sorgt somit dafür, dass die Bauteile nicht unnötig lange arbeiten, wenn das Auto schon längst eingeparkt ist.

Zusammenstellung der Projektergebnisse


Das fertige Modell zeichnet sich durche ein schlankes Design aus Edelstahl aus. Ebenso ist das Modell Plug and Play fähig was die Nutzerfreundlichkeit erhöht. Des Weiteren beinhaltet eine zentrale Steuerbox die gesamte Elektronik, sowie den Ultraschallsensor und den Piezospeaker, was die Komplexität des Geräts reduziert. Montiert wird das Produkt direkt an die Wand mittels dafür vorgesehende Bohrungen am Edelstahlrahmen. Auf Seiten des LED Bands gibt es drei verschiedenen Farbtöne mit unterschiedlichen LED Anzahlen. (siehe YouTube Video)

Zusammenfassung

Nach der vollständigen Inbetriebnahme der Hardware und Software lässt sich sagen, dass die anfänglichen Überlegungen zur Umsetzung des Projekts im Großen und Ganzen recht effizient zu einem funktionsfähigen System geführt haben. Eine klare Planung und zu Beginn intensive Überlegungen haben dazu beigetragen, dass sich das Projekt relativ strukturiert und effizient umsetzten lassen hat.

Lessons Learned

Während der Projektphase haben sich natürlicherweise einige Hindernisse ergeben. Hauptsächlich waren die Auswahl des LED-Lichtstreifens und der Ansteuerung mithilfe der vorhandenen Software. Hierbei war es wichtig die richtigen Bibliotheken einzubinden um das Lichtband wie gewünscht anzusteuern.

1. Des Weiteren stellte sich auch das Problem der Spannungsversorgung der vielen LED's. Hierbei war es nicht möglich diese vollständig mit dem Arduino UNO mit stabilen Spannungen zu versorgen. Deshalb wurde auf eine externe Spannungsquelle mit genügend Leistung zurückgegriffen.

2. Darüberhinaus war auch die effiziente und schlanke Programmierung von Bedeutung. Der zunächst entworfene Programmcode stellte sich als zu ineffizient heraus was die Dynamik des Systems drosselte. Ein anderer Algoryhtmus brachte dann die nötige Leistung das Lichtband dynamisch zu betreiben.

3. Ein weiterer Punkt war die Justierung des Abstandes mit dem der Ultraschallsensor misst. Hierbei wurde schnell klar, dass auf große Entfernungen eine strak schwankende Unsicherheit der Messergebnisse bestand. Daher wurde die maximale Entferung die der Ultraschallsensor messen soll reduziert, sodass seine Messwerte deutlich reproduzierbarer waren.

4. Als Letztes wurde jedoch auch ein zunächst geplantes Bauelement aus dem Projekt entfernt. Hierbei handelt es sich um die 7-Segmentanzeige, welche die aktuelle Entfernung visuell ausgeben sollte. Es wurde deshalb verzichtet, weil einerseits die Anzeige vom Fahrzeug aus zu schlecht sichtbar war und es keinen merklichen Vorteil diente, da das LED Band einen viel besseren Eindruck vom aktuellen Entfernungszusatnd vermitteln konnte.

Projektunterlagen

1. CAD-Dateien (Bilder)


Galerie der CAD-Dateien als Bilder:



Um die Gehäuse und weitere Teile des Systems zu fertigen wurden 3D-Modelle mit CAD angefertigt (siehe Abbildung 11,12,13,14). Zur Fertigung dieser wurde hauptsächlich auf das 3D-Druck Verfahren in Form des Fused Layer Modelling zurückgegriffen.

2. CAD-Dateien

Link zu den CAD-Dateien: https://www.thingiverse.com/thing:5192063


Programmcode

/******************************************************************************************************
* PROJEKT Einparkhilfe für die Garage                                                                       
******************************************************************************************************
* Im Rahmen des Eltrotechnikfachpraktikums 2021/2022 wurde ein System zur optischen Unterstützung beim
* Einparken in einer Garage entwickelt
******************************************************************************************************
* Autor:         Matthias Hernzel, Frederik Baune                                            
* Datum:         02.01.2022                                                                                                                          
* Hardware:      - Arduino UNO R3                                                                    
*                - LED Band mit WS2812b Schnitstelle
*                - Ultraschallsensor
*                - PIR Sensor
*                -Piezospeaker
* Bibliotheken:  - FastLED.h                                                                            
*                - QuickStats.
*
*/
// Biliotheken einpflegen
#include <FastLED.h>
#include <QuickStats.h>
QuickStats stats; 
// defines anlegen
#define LED_PIN     5 // Pin für Ansteuerung der LEDs
#define NUM_LEDS    60 // Anzahl der LEDs
#define Hupe 4 // Pin für Ansteuerung der Hupe
#define Bewegungsmelder 3 // Pin für den Bewegungsmelder
// Variablen festlegen
const int trigPin = 7; //Trig Pin für den Ultraschallsensor
const int echoPin = 6; // Echo Pin für den Ultraschallsensor
float duration; // Variable für das Messsignal des Ultraschallsensors
float durationarray[60]; // Array um mehrere Werte für die Entfernung aufzunehmen
float distance; // Variable für die berechnete Distanz aus der Zeit
float stopdistance = 40; // Parkabstand (cm)
float startdistance = 160; //Startabstand (cm)
float increment = ((startdistance - stopdistance) / 60); // Zunahme für pro LED
int Bewegungsstatus = 0; // Variable zum zurücksetzen des Bewegungsmelders
int Ton =1; // Variable zum Zurücksetzten des Piezospeakers
//LED Band mit Anzahl der LED konfigurieren
CRGB leds[NUM_LEDS];

void setup() {

 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
 pinMode(echoPin, INPUT); // Sets the echoPin as an Input
 pinMode(Hupe, OUTPUT); // Sets the Hupe as an Output
 pinMode(Bewegungsmelder, INPUT); // Sets the echoPin as an Input
 FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS); 
 Serial.begin(9600); // Starts the serial communication

} void loop() {

 for (int i = 0; i <= 59; i++) {
   // Löscht den trigPin
   digitalWrite(trigPin, LOW);
   delayMicroseconds(2);
   // Setzt den TrigPin auf HIGH für 10 ms
   digitalWrite(trigPin, HIGH);
   delayMicroseconds(10);
   digitalWrite(trigPin, LOW);
   // ließt den EchoPin aus und schreibt Wert ins Array
   durationarray[i] = pulseIn(echoPin, HIGH);
   //Berechnung von Zeit in Abstand mit Schallgeschwindigkeit
   distance = durationarray[i] * 0.034 / 2;
   
 }
 //Median Wert des Arrays annehmen
 duration = (stats.median(durationarray, 60));
 //Berechnung von Zeit in Abstand mit Schallgeschwindigkeit
 distance = duration * 0.034 / 2;
 // Darstellung der Distanz
 Serial.print("Distance: ");
 Serial.println(distance);


 // Abfrage des Bewegungsmelders
 Bewegungsstatus = digitalRead(Bewegungsmelder);
  Serial.print("Status: ");
 Serial.println(Bewegungsstatus);
 if (Bewegungsstatus == HIGH) {
   // Ausgabe der roten Farbe und des Warnsignals
   if (distance < stopdistance) {
     for (int i = 0; i <= 59 ; i++) {
       leds[i] = CRGB ( 255, 0, 0);
       FastLED.show();
     }
     if(Ton==1){
           digitalWrite(Hupe, HIGH);
     delay(2000);
     digitalWrite(Hupe, LOW);
     Ton=0;
      }
    
   }


   //Ausgabe der organgen Warnfarbe
   else if (distance < stopdistance + increment) {
     for (int i = 1; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 0; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 2) {
     for (int i = 2; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 1; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 3) {
     for (int i = 3; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 2; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 4) {
     for (int i = 4; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 3; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 5) {
     for (int i = 5; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 4; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 6) {
     for (int i = 6; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 5; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 7) {
     for (int i = 7; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 6; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 8) {
     for (int i = 8; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 7; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 9) {
     for (int i = 9; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 8; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 10) {
     for (int i = 10; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 9; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 11) {
     for (int i = 11; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 10; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 12) {
     for (int i = 12; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 11; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 13) {
     for (int i = 13; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 11; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 14) {
     for (int i = 14; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 14; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 15) {
     for (int i = 15; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 14; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 16) {
     for (int i = 16; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 15; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 17) {
     for (int i = 17; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 16; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 18) {
     for (int i = 18; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 17; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 19) {
     for (int i = 19; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 18; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 20) {
     for (int i = 20; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 19; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 21) {
     for (int i = 21; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 20; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 22) {
     for (int i = 22; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 21; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 23) {
     for (int i = 23; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 22; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 24) {
     for (int i = 24; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 23; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 25) {
     for (int i = 25; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 24; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 26) {
     for (int i = 26; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 25; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 27) {
     for (int i = 27; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 26; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 28) {
     for (int i = 28; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 27; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 29) {
     for (int i = 29; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 28; i++) {
       leds[i] = CRGB ( 255, 80, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }


   // Ausgabe des grünen Warnsignals
   else if (distance < stopdistance + increment * 30) {
     for (int i = 30; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 29; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 31) {
     for (int i = 31; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 30; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 32) {
     for (int i = 32; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 31; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 33) {
     for (int i = 33; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 32; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 34) {
     for (int i = 34; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 33; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 35) {
     for (int i = 35; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 34; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 36) {
     for (int i = 36; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 35; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 37) {
     for (int i = 37; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 36; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 38) {
     for (int i = 38; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 37; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 39) {
     for (int i = 39; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 38; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 40) {
     for (int i = 40; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 39; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 41) {
     for (int i = 41; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 40; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 42) {
     for (int i = 42; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 41; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 43) {
     for (int i = 43; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 42; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 44) {
     for (int i = 44; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 43; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 45) {
     for (int i = 45; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 44; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 46) {
     for (int i = 46; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 45; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 47) {
     for (int i = 47; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 46; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 48) {
     for (int i = 48; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 47; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 49) {
     for (int i = 49; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 48; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 50) {
     for (int i = 50; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 49; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 51) {
     for (int i = 51; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 50; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 52) {
     for (int i = 52; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 51; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 53) {
     for (int i = 53; i <= 59; i++) {
       leds[i] = CRGB ( 0, 0, 0);
     }
     for (int i = 0; i <= 52; i++) {
       leds[i] = CRGB ( 0, 255, 0);
     }
     Ton=1;
     FastLED.show();
     delay(10);
   }
   else if (distance < stopdistance + increment * 54) {
       for (int i = 54; i <= 59; i++) {
         leds[i] = CRGB ( 0, 0, 0);
       }
       for (int i = 0; i <= 53; i++) {
         leds[i] = CRGB ( 0, 255, 0);
       }
       Ton=1;
       FastLED.show();
       delay(10);
     }
     else if (distance < stopdistance + increment * 55) {
       for (int i = 55; i <= 59; i++) {
         leds[i] = CRGB ( 0, 0, 0);
       }
       for (int i = 0; i <= 54; i++) {
         leds[i] = CRGB ( 0, 255, 0);
       }
       Ton=1;
       FastLED.show();
       delay(10);
     }
     else if (distance < stopdistance + increment * 56) {
       for (int i = 56; i <= 59; i++) {
         leds[i] = CRGB ( 0, 0, 0);
       }
       for (int i = 0; i <= 55; i++) {
         leds[i] = CRGB ( 0, 255, 0);
       }
       Ton=1;
       FastLED.show();
       delay(10);
     }
     else if (distance < stopdistance + increment * 57) {
       for (int i = 57; i <= 59; i++) {
         leds[i] = CRGB ( 0, 0, 0);
       }
       for (int i = 0; i <= 56; i++) {
         leds[i] = CRGB ( 0, 255, 0);
       }
       Ton=1;
       FastLED.show();
       delay(10);
     }
     else if (distance < stopdistance + increment * 58) {
       for (int i = 58; i <= 59; i++) {
         leds[i] = CRGB ( 0, 0, 0);
       }
       for (int i = 0; i <= 57; i++) {
         leds[i] = CRGB ( 0, 255, 0);
       }
       Ton=1;
       FastLED.show();
       delay(10);
     }
     else if (distance < stopdistance + increment * 59) {
       for (int i = 59; i <= 59; i++) {
         leds[i] = CRGB ( 0, 0, 0);
       }
       for (int i = 0; i <= 58; i++) {
         leds[i] = CRGB ( 0, 255, 0);
       }
       Ton=1;
       FastLED.show();
       delay(10);
     }
     else if (distance >= stopdistance + increment * 59) {
       for (int i = 0; i <= 59; i++) {
         leds[i] = CRGB ( 0, 255, 0);
       }
       Ton=1;
       FastLED.show();
       delay(10);
     }
 }
 else {
   for (int i = 0; i <= 59 ; i++) {
     leds[i] = CRGB ( 0, 0, 0);
     FastLED.show();
   }
 }


}

Projektplan

Bewertung der Anforderungen:

1. Abstandsmessung mit Ultraschallsensor zwischen 5cm und 250cm

-> Ultraschallsensor findet Anwendung, jedoch aufgrund zu großer Unsicherheit nur im Bereich von 30cm bis 150cm

2. Sichere Erkennung vieler Fahrzeugtypen

-> Aufgrund der optimalen Befestigungshöhe und des kegelförmigen Detektionsberech des Ultraschallsensors ist die Erkennung nahezu unabhängig vom Fahrzeugtyp

3.Ausgabe des Abstandes zur Wand über eine LED-BAr (3 verschiedene Farben)

-> Die Ausgabe des LED Bands erfolgt in rot (nah/<30cm), orange(mittel/30cm bis <90cm) und grün (fern/90cm bis <150cm). Abweichungen von der Planung aufgrund Messungenauigkeit des Ultraschallsensors.

4.Akustisches Warnsignal kurz vor erreichen der Wand über Piezospeaker

-> Piezospeaker gibt akustischen Warnton ab Unterschreitung von 30cm was roter visueller Warnung entspricht.

5.Ausgabe der Entfernung über 7 Segmentanzeige

-> Aufgrund der schlechten visuellen Warnehmbarkeit und der Ablenkung vom LED Band wurde die 7 Segmentanzeige als störend eingestuft und aus dem Projekt entfernt.


Projektplanung:

1. Beschaffung der benötigten Hardware

2. Erste Verdrahtung der Komponenten

3. Programmierung der Software

4. Funktionstest der Komponeten in Verbindung mit der Hardware

5. Fehlerbehebung

6. Konstruktion und Produktion eines Gehäuses mittels 3D-Druck nach dem Fused Layer Modelling Verfahren

Projektdurchführung

Abb. 15 Zeitplan Einparkhilfe


YouTube Video

Hier sehen Sie die Einparkhilfe in Aktion YouTube-Video

Video 1: Einparkhilfe für die Garage

Weblinks

Literatur


→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik (BSE)