Einparkhilfe für die Garage
Autoren: Frederik Baune und Matthias Hernzel
Betreuer: Prof. Schneider
→ zurück zur Übersicht: WS 20/21: Angewandte Elektrotechnik (BSE)
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)
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 UNO, 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)
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.
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 Mittelwert von fünf 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
-
Abb.5 Einparkhilfe
-
Abb.6 Steuerbox
-
Abb.7 Rote Warnung
-
Abb.8 Gelbe Warnung
-
Abb.9 Grüne Warnung
-
Abb.10 Verkablung Steuerbox
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:
-
Abb.11 Deckelunterseite
-
Abb.12 Kasten
-
Abb.13 Innenleben
-
Abb.14 Gesamtbaugruppe
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
1. Bestellung des LED-Lichtbands und dem passenden Netzteil um sichere Spannungsversorgung zu gewährleisten. (19.11.21)
2. Verdrahtung eines Prototypen mithilfe des Arduino UNO und dem dazugehörigen Ultraschallsensor. (02.12.21)
3. Einarbeitung in die Software und Programmieren eines ersten Programmcodes. (04.12.21)
4. Erster Test des Prototyps auf korrekte Funktion. (09.12.21)
5. Überarbeitung des Programmcodes hinsichtlich der Effizients und Schnelligkeit. (09.12.21)
6. Erneute Tests auf verbesserte Funktionsweise. (09.12.21)
7. Erstellung eines CAD Modells und anschließender Druck des Gehäuses zwecks Einhausung des LED Bands und der Elektronik. (26.12.21)
8. Montage der Mechanik (27.12.21)
9. Montage der Elektrik (27.12.21)
10. Abschlusstest des gesamten Systems (28.12.21)
11. Ergebnisdokumentation in SVN und Wiki (26.12.21-10.01.22)
YouTube Video
Weblinks
Literatur
→ zurück zur Übersicht: WS 21/22: Angewandte Elektrotechnik (BSE)