Bike Safety Assistent: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
(Projektunterlagen hinzugefügt)
 
(77 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
'''Autoren:''' [[Benutzer:Pia_Noreen_Kostede|Pia Kostede]]; [[Benutzer:Gerrit_Wurth| Gerrit Wurth]]; [[Benutzer:Andreas_Mentrup|Andreas Mentrup]] <br/>
'''Autoren:''' [[Benutzer:Pia_Noreen_Kostede|Pia Kostede]]; [[Benutzer:Gerrit_Wurth| Gerrit Wurth]]; [[Benutzer:Andreas_Mentrup|Andreas Mentrup]] <br/>
'''Betreuer:''' [[Benutzer:Marc Ebmeyer|Marc Ebmeyer]]
'''Betreuer:''' [[Benutzer:Marc Ebmeyer|Marc Ebmeyer]]
[[Datei:Bike Safety Assistent 2.JPG|700px|mini|right|Abb. 1: Symbolbild Bike Safety Assistent]]


<!-- Dies hier wird nicht angezeigt -->
<!-- Dies hier wird nicht angezeigt -->
[[Datei:Bike Safety Assistent 2.JPG|600px|thumb|right|Absatz|Abb. 1: Symbolbild Bike Safety Assistent]]


== Einleitung ==
== Einleitung ==
Zeile 12: Zeile 12:
Da auch die Politik dieses Problem erkannt hat, wurde reagiert und die StVO hinsichtlich der geltenden Abstandsregelungen beim Überholen von Fahrrädern mit Kraftfahrzeugen geändert. Seit April 2020 gilt nun ein Mindestabstand innerorts von 1,5 Metern und außerorts von 2 Metern.
Da auch die Politik dieses Problem erkannt hat, wurde reagiert und die StVO hinsichtlich der geltenden Abstandsregelungen beim Überholen von Fahrrädern mit Kraftfahrzeugen geändert. Seit April 2020 gilt nun ein Mindestabstand innerorts von 1,5 Metern und außerorts von 2 Metern.
Diese Vorschrift trägt dazu bei, das Radfahren ein wenig sicherer zu machen. Allerdings wird dieser Abstand von den Autofahrern in den meisten Fällen nicht eingehalten.
Diese Vorschrift trägt dazu bei, das Radfahren ein wenig sicherer zu machen. Allerdings wird dieser Abstand von den Autofahrern in den meisten Fällen nicht eingehalten.
Daher ist es als Fahrradfahrer notwendig, sich zusätzlich selbst zu schützen. Eine Möglichkeit wird der Bike Safety Assistent, ein Abstandsmesssystem für das Fahrrad, sein. Dieser misst den zu erwartenden Seitenabstand und zeigt diesen dem Fahrradfahrer an. Der Bike Safety Assistent soll im Rahmen dieses Projektes im Fach Angewandte Elektrotechnik im Masterstudiengang Business and Systems Engineering entwickelt und realisiert werden.
Daher ist es notwendig, sich als Fahrradfahrer zusätzlich selbst zu schützen. Hierbei hilft der Bike Safety Assistent, ein Abstandsmesssystem für das Fahrrad. Dieser misst den zu erwartenden Seitenabstand und zeigt diesen dem Fahrradfahrer an. Der Bike Safety Assistent soll im Rahmen dieses Projektes im Fach Angewandte Elektrotechnik im Masterstudiengang Business and Systems Engineering entwickelt und realisiert werden.


<br clear = all>
<br clear = all>
== Projektplanung ==
== Projektplanung ==
Um das Projekt strukturiert anzugehen, wurde im ersten Schritt ein Gantt-Diagramm erstellt, welches die verschiedenen Aufgaben der einzelnen Phasen das Projektes zeigt und Fristen für die Erledigung setzt.  
=== Projektplan ===
[[Datei:Gantt BSA.JPG|left|mini|1000px|Abb. 2: Projektplanung als Gantt-Diagramm <ref>https://www.vertex42.com/ExcelTemplates/simple-gantt-chart.html?utm_source=ms&utm_medium=file&utm_campaign=office&utm_content=text</ref> ]] <br clear=all>
Um das Projekt strukturiert anzugehen, wurde im ersten Schritt ein Gantt-Diagramm erstellt. Abbildung 2 zeigt die verschiedenen Aufgaben der einzelnen Phasen und setzt Fristen für die Erledigung. Das Gantt-Diagramm wurde während der Durchführung des Projektes regelmäßig aktualisiert. Zudem wurde ein Ressourcendiagramm (Abbildung 3) erstellt und so die Aufgaben unter den Projektteilnehmern aufgeteilt.
Der aktuelle Stand der Projektplanung ist in  [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/126-150/140_Bike_Safety_Assistent/00_Projektplanung/Gantt-Diagramm.gan dieser Datei] zu finden.


=== Projektplan ===
[[Datei:Gantt BSA.JPG|left|mini|x400px|Abb. 2: Projektplanung als Gantt-Diagramm ]]
Der aktuelle Stand der Projektplanung ist in  [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/126-150/140_Bike_Safety_Assistent/00_Projektplanung/BSA%20Projektplanung.xlsx dieser Excel-Tabelle] zu finden
<!-- <ref>https://www.vertex42.com/ExcelTemplates/simple-gantt-chart.html?utm_source=ms&utm_medium=file&utm_campaign=office&utm_content=text</ref> -->
<div class="tleft" style="clear:none"> [[Datei:BSE Ressourcendiagramm.jpg |mini|ohne|x400px|Abb. 3: Ressourcendiagramm ]] </div>
 
<br clear=all>


=== Stufenplan ===
=== Stufenplan ===
Zeile 26: Zeile 31:
Zudem wurde ein Stufenplan erstellt, welcher bei der Erarbeitung des Prototypen Orientierung geben soll. Dabei werden in der ersten Stufe die "Grundfunktionen" realisiert und diese in den Stufen zwei und drei erweitert. Durch dieses Vorgehen wird die Aufgabe in mehrere kleine Teilabschnitte gegliedert und strukturiert somit die Arbeit.
Zudem wurde ein Stufenplan erstellt, welcher bei der Erarbeitung des Prototypen Orientierung geben soll. Dabei werden in der ersten Stufe die "Grundfunktionen" realisiert und diese in den Stufen zwei und drei erweitert. Durch dieses Vorgehen wird die Aufgabe in mehrere kleine Teilabschnitte gegliedert und strukturiert somit die Arbeit.


[[Datei:Stufenplan.JPG|left|mini|800px|Abb. 3: Stufenplan]]
[[Datei:Stufenplan.JPG|left|mini|500px|Abb. 4: Stufenplan]]


<br clear = all>
<br clear = all>
== Anforderungen==
== Anforderungen==
Die nachfolgenden Anforderungen wurden zusammengestellt und ist der Grundstein dieses Projektes. Die Anforderungsliste definiert die Ausgangssituation dieses Projektes.
Die nachfolgenden Anforderungen wurden zusammengestellt und sind der Grundstein dieses Projektes. Die Anforderungsliste, in Abbildung 5 zu sehen, definiert die Ausgangssituation dieses Projektes.
[[Datei:Anforderungsliste BSA.JPG|left|mini|800px|Abb. 4: Anforderungsliste]] <br clear=all>
Die komplette Anforderungsliste ist in  [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/126-150/140_Bike_Safety_Assistent/01_Anforderungsdefinition/BSA_Anforderungsliste.xlsx dieser Excel-Tabelle]  zu finden.
[[Datei:Anforderungsliste BSA.JPG|left|mini|600px|Abb. 5: Anforderungsliste]] <br clear=all>


<br clear = all>
<br clear = all>
== Funktionaler Systementwurf ==
== Funktionaler Systementwurf ==
Ein funktionale Systementwurf soll grundsätzlich die Systemstruktur ermitteln und dabei lösungsneutral sein.
Ein funktionaler Systementwurf soll die grundsätzliche Systemstruktur veranschaulichen und dabei lösungsneutral sein.
Den funktionale Systementwurf zu diesem Projekt wird in die vier Module "Sensorik", "Benutzereingaben", "Berechnung" und "Darstellung" unterteilt.
Der funktionale Systementwurf zu diesem Projekt ist in die vier Module "Sensorik", "Benutzereingaben", "Berechnung" und "Darstellung" unterteilt.
[[Datei:Funktionaler Systementwurf BSE WS21-22 1.2.JPG|800px|left|Absatz|Abb. 5: Funktionaler Systementwurf]]
Der funktionale Systementwurf für den Bike Safety Assistent ist in Abbildung 6 zu sehen.
[[Datei:Funktionaler Systementwurf BSE WS21-22 1.2.JPG|600px|left|mini|Abb. 6: Funktionaler Systementwurf]]


<br clear = all>
<br clear = all>
===Sensorik===
===Sensorik===
Die Sensorik erfasst die Messwerte und bildet somit die Berechnungsgrundlage der Ausgangsvariablen des Mikrocontrollers. Es werden drei Ultraschallsensoren und ein Induktiver Näherungssensor verwendet, dessen primäre Funktion es ist, Abstandswerte zu ermitteln und diese Messwerte und Messgrößen zyklisch an den Mikrocontroller zu übergeben.
Die Sensorik erfasst die Messwerte und bildet somit die Berechnungsgrundlage der Ausgangsvariablen des Mikrocontrollers. Es werden drei Ultraschallsensoren und ein Hall-Sensor verwendet, dessen primäre Funktion es ist, Abstandswerte zu ermitteln und diese Messwerte und Messgrößen zyklisch an den Mikrocontroller zu übergeben.


===Benutzereingaben===
===Benutzereingaben===
Das Module "Benutzereingaben" wurde im Projektverlauf mit Abstand am häufigsten angepasst und mit der Zeit immer weiter ausgedünnt. Dies war vor allem der knappen Zeit geschuldet. Letztlich wurde festgelegt, dass als einzige Benutzereingaben das An- und Ausschalten des Systems realisiert werden soll.
Das Modul "Benutzereingaben" wurde im Projektverlauf mit Abstand am häufigsten angepasst und mit der Zeit immer weiter ausgedünnt. Dies war vor allem der knappen Zeit geschuldet. Letztlich wurde festgelegt, dass als einzige Benutzereingaben das An- und Ausschalten des Systems realisiert werden soll.


===Berechnung===
===Berechnung===
Die Berechnung erfolgt im Mikrocontroller und wird über den Programmablauf im Arduino IDE gesteuert. Nachdem die Eingangsvariablen (Messgrößen) in den Mikrocontroller übergeben, werden die Ausgangsvariablen auf Formelbasis berechnet. Die Ausgangsvariablen sind die Distanz zum überholendem Kraftfahrzeug, die Geschwindigkeit des Fahrrads und die Geschwindigkeit des überholenden Kraftfahrzeugs.
Die Berechnung erfolgt im Mikrocontroller und wird über den Programmablauf im Arduino IDE gesteuert. Nachdem die Eingangsvariablen (Messgrößen) in den Mikrocontroller übergeben wurden, werden die Ausgangsvariablen auf Formelbasis berechnet. Die Ausgangsvariablen entsprechen der Distanz zum überholendem Kraftfahrzeug, der Geschwindigkeit des Fahrrads und der Geschwindigkeit des überholenden Kraftfahrzeugs.


===Darstellung===
===Darstellung===
Die Darstellung erfolgt auf einem Display. Dort erfolgt die Ausgabe der berechneten Größen. Diese wurden in dem Mikrocontroller berechnet.
Die Darstellung übernimmt ein Display. Dort erfolgt die Anzeige der vom Mikrocontroller berechneten Werte.
Die Ausgabewerte variieren im Sekundentakt.
Die Ausgabe der Werte setzt sich aus der eigenen Geschwindigkeit, der Überholdistanz und der Geschwindigkeit des überholenden Kraftfahrzeugs zusammen.
Ausgabegrößen sind die eigene Geschwindigkeit, die Überholdistanz und die Geschwindigkeit des überholenden Kraftfahrzeuges.


<br clear = all>
<br clear = all>
== Technischer Systementwurf ==
== Technischer Systementwurf ==
Der funktionale Systementwurf besteht folglich ebenfalls aus vier Modulgruppen. Die Modulgruppe "Sensorik" beinhaltet die 3 Ultraschallsensoren welche zwischen 3cm und 5m betrieben werden. Der Induktive Näherungssensor misst am Vorderrad die Drehzahl des Rades. Die zweite Modulgruppe "Benutzereingabe" ist für das Ein- und Ausschalten des Systems zuständig. Dies wird denkbar simpel über das An- und Abklemmen der Batterie realisiert.
Der technische Systementwurf besteht folglich ebenfalls aus den vier Modulgruppen. Die Modulgruppe "Sensorik" beinhaltet die 3 Ultraschallsensoren, welche zwischen 30mm und 5000mm betrieben werden. Der Hall-Sensor misst am Vorderrad die Drehzahl des Rades. Die zweite Modulgruppe "Benutzereingabe" ist für das Ein- und Ausschalten des Systems zuständig. Dies wird denkbar simpel über das An- und Abklemmen der Batterie realisiert.
In der Modulgruppe "Berechnung" befindet sich der Mikrocontroller, welcher für die Berechnung der Ausgangsvariablen zuständig ist. Die letzte Modulgruppe "Darstellung" gibt die berechneten Variablen auf dem Display aus.
In der Modulgruppe "Berechnung" sorgt der Mikrocontroller für die Berechnung der Ausgangsvariablen. Die letzte Modulgruppe "Darstellung" gibt die berechneten Variablen auf dem Display aus.
Abbildung 7 zeigt den technischen Systementwurf.


[[Datei:Funktionaler Systementwurf BSA 2.JPG|800px|left|Absatz|Abb. 6: Technischer Systementwurf]]
[[Datei:Funktionaler Systementwurf BSA 2.JPG|600px|left|mini|Abb. 7: Technischer Systementwurf]]


<br clear = all>
<br clear = all>


===Sensoren===
== Komponentenspezifikation ==
====Ultraschallsensoren====
Die Komponentenspezifikation bricht die Module in ihre einzelnen Komponenten herunter und beschreibt detailliert die Funktionsweisen der einzelnen Komponenten. Abbildung 8 zeigt das Deckblatt der Komponentenspezifikation.
Mit den drei Ultraschallsensoren wird die Distanz zum überholenden KFZ gemessen. Ergänzend dazu wird über Sensor 1 und Sensor 3 die Zeit des Überholvorganges erfasst.
Die komplette Komponentenspezifikation ist in  [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/126-150/140_Bike_Safety_Assistent/03_Komponentenspezifikation/Komponentenspezifikation_BSA.xlsx dieser Excel-Tabelle]  zu finden.
Dazu strahlen die Ultraschallsensoren zyklisch einen kurzen und hochfrequenten Schalimpuls aus. Wenn dieser von einem Objekt reflektiert wird, gelangt der Schallimpuls als Echo zu dem Ultraschallsensor zurück. Entscheidend für die Ermittlung der Entfernung des Objektes ist die Zeitspanne zwischen dem Aussenden des Schallimpulses und dem Empfangen des Echos <ref>https://www.microsonic.de/de/service/ultraschallsensoren/prinzip.htm</ref>. Damit sich die drei verwendeten Ultraschallsensoren nicht gegenseitig stören, ist es wichtig, das Aussenden der Schallimpulse zeitlich versetzt auszulösen und ein entsprechendes Delay zu definieren.
[[Datei:Komponentenliste BSA.JPG|left|mini|600px|Abb. 8: Deckblatt Komponentenspezifikation]]<br clear = all>


[[Datei:Ultraschallsensor_Bike_Safety_Assistent.jpg|left|mini|200px|Abb. 7: Ultraschallsensor]]
<br clear = all>


<br clear = all>
==Hardware==


====Induktiver Näherungssensor====
===Stückliste===
Mit den Induktiven Näherungssensor werden die Umdrehungen am Vorderrad gemessen. Mit dem Umfang des Vorderrades wird daraus die eigene Geschwindigkeit ermittelt. Der Induktive Näherungssensor wird am Vorderrad montiert.
{| class="mw-datatable"
! style="font-weight: bold;" | ID
! style="font-weight: bold;" | Anzahl
! style="font-weight: bold;" | Kosten pro Stück €
! style="font-weight: bold;" | Summe
! style="font-weight: bold;" | Bezeichnung / Komponente
! style="font-weight: bold;" | technische Bezeichnung
! style="font-weight: bold;" | Beschreibung
! style="font-weight: bold;" | Datenblatt
! style="font-weight: bold;" | Abbildung
|-
|1
|3x
|3,20 €
|9,60 €
|Ultraschallsensoren
|HY-SRF05 <ref>https://www.reichelt.de/entwicklerboards-ultraschall-abstandssensor-hc-srf05-debo-sen-ultra2-p282590.html?&trstct=pos_0&nbc=1</ref>
|Mit den drei Ultraschallsensoren wird die Distanz zum überholenden KFZ gemessen. Ergänzend dazu wird über Sensor 1 und Sensor 3 die Zeit des Überholvorganges erfasst. Dazu strahlen die Ultraschallsensoren zyklisch einen kurzen und hochfrequenten Schallimpuls aus. Wenn dieser von einem Objekt reflektiert wird, gelangt der Schallimpuls als Echo zu dem Ultraschallsensor zurück. Entscheidend für die Ermittlung der Entfernung des Objektes ist die Zeitspanne zwischen dem Aussenden des Schallimpulses und dem Empfangen des Echos <ref>https://www.microsonic.de/de/service/ultraschallsensoren/prinzip.htm</ref>. Damit sich die drei verwendeten Ultraschallsensoren nicht gegenseitig stören, ist es wichtig, das Aussenden der Schallimpulse zeitlich versetzt auszulösen und ein entsprechendes Delay zu definieren.
|[[Media:HY-SRF05-ETC.pdf | Datenblatt Ultraschallsensor]]
|[[Datei:Ultraschallsensor_Bike_Safety_Assistent.jpg|left|mini|125px|Abb. 9: Ultraschallsensor]]
|-
|-
|2
|1x
|3,50€
|3,50€
|Hall Sensor
|Honeywell 2SS52M Series <ref>https://www.reichelt.de/hallsensor-omnipolar-resistiv-digital-2ss-52m-p151351.html?&trstct=pos_0&nbc=1</ref>
|Mit dem Hall-Sensor werden die Umdrehungen am Vorderrad gemessen. Mit dem Umfang des Vorderrades wird daraus die eigene Geschwindigkeit ermittelt. Der Hall-Sensor ist an der Vorderradgabel montiert.
|[[Media:SINGLEDATASHEET 2SS52M.pdf | Datenblatt Hall-Sensor]]
|[[Datei:Induktiver_Näherungssensor.jpg|left|mini|125px|Abb. 10: Hall-Sensor]]
|-
|-
|3
|1x
|0,00€
|0,00€
|Mikrocontroller
|Funduino UNO R3 <ref>https://www.funduinoshop.com/UHL</ref>
|Als Mikrocontroller wird ein Funduino UNO R3 benutzt, welcher die Sensordaten von den Ultraschallsensoren sowie des Hall-Sensors erhält. Diese werden anschließend verarbeitet. Mit dem Programmcode, welcher in der Arduino IDE geschrieben wurde, werden verschiedene Variablen nach Formeln berechnet, anschließend erfolgt die Ausgabe am Display. Der Mikrocontroller ist in dem Funduino Lernset für die HSHL enthalten.
|[[Media:ATmega328P Datasheet.pdf | Datenblatt ATmega328P]]
|[[Datei:Mikrocontroller_BSA.jpg|left|mini|125px|Abb. 11: Mikrocontroller Funduino Uno]]
|-
|-
|4
|1x
|0,00€
|0,00€
|Anzeige
|LCD-Display <ref>https://www.funduinoshop.com/UHL</ref>
|Auf einem LCD-Display kann die eigene Geschwindigkeit, die zurückgelegte Strecke, die Durchschnittsgeschwindigkeit der letzten 2 Kilometer und die Dauer der Fahrt angezeigt werden. Wird ein Überholvorgang erkannt, werden diese Werte durch die Überholdistanz sowie die Geschwindigkeit des überholenden KFZ ergänzt. Das LCD_Display ist in dem Funduino Lernset für die HSHL enthalten.
|[[Media:1602LCD.pdf | Datenblatt LCD-Display]]
|[[Datei:Display_Bike_Safety_Assistent.jpg|left|mini|125px|Abb. 12: LCD-Display]]
|-
|-
|5
|1x
|0,00€
|0,00€
|Elektronik
|10 kΩ Widerstand <ref>https://www.funduinoshop.com/UHL</ref>
|Der Pull-Up-Widerstand für den Hall-Sensor (siehe Schaltplan), ist in dem Funduino Lernset für die HSHL enthalten.
|<!--[[Media:SINGLEDATASHEET 2SS52M.pdf | Datenblatt Hall-Sensor]]-->
|<!--[[Datei:Display_Bike_Safety_Assistent.jpg|left|mini|125px|Abb. 12: LCD-Display]]-->
|-
|-
|6
|1x
|2,99€
|2,99€
|Elektronik
|Alkaline Batterie 9-V-Block <ref>https://www.reichelt.de/de/de/red-alkaline-batterie-9-v-block-2er-pack-ans-red-2x9v-p100562.html?r=1</ref>
|Für die mobile Spannungsversorgung des Bike Safety Assistenten werden 9-V-Block Alkaline Batterien verwendet.
|<!--[[Media:SINGLEDATASHEET 2SS52M.pdf | Datenblatt Hall-Sensor]]-->
|[[Datei:9-V-Block.jpg|left|mini|125px|Abb. 13: Alkaline Batterie 9-V-Block]]
|-
|-
|7
|x
|0,00€
|0,00€
|Elektronik
|Klingeldraht
|Für die Verkabelung am Fahrrad wurde Klingeldraht verwendet. Der Klingeldraht ist aus eigenem Bestand.
|<!--[[Media:SINGLEDATASHEET 2SS52M.pdf | Datenblatt Hall-Sensor]]-->
|[[Datei:Klingeldraht.jpg|left|mini|125px|Abb. 14: Klingeldraht]]
|-
|-
|8
|x
|0,00€
|0,00€
|Montagematerial
|Diverse Kabelbinder
|Zum Befestigen einiger Bauteile und Komponenten wurden Kabelbinder verwendet. Die Kabelbinder sind aus eigenem Bestand.
|<!--[[Media:SINGLEDATASHEET 2SS52M.pdf | Datenblatt Hall-Sensor]]-->
|[[Datei:Kabelbinder.jpg|left|mini|125px|Abb. 15: Diverse Kabelbinder]]
|-
|-
|9
|x
|0,00€
|0,00€
|Montagematerial
|Diverse Schrauben
|Zum Befestigen einiger Bauteile und Komponenten wurden Schrauben verwendet. Die Schrauben sind aus eigenem Bestand.
|<!--[[Media:SINGLEDATASHEET 2SS52M.pdf | Datenblatt Hall-Sensor]]-->
|[[Datei:Diverse_Schrauben.jpg|left|mini|125px|Abb. 16: Diverse Schrauben]]
|-
|-
|10
|x
|0,00€
|0,00€
|Montagematerial
|Diverse Holzreste
|Für die Montage der Komponenten wurden Montageplatten aus Holz angefertigt und mit Kabelbindern am Fahrrad befestigt. Für das LCD-Display wurde ein kleines Gehäuse aus Leimholzplatten gefertigt. Die Holzreste sind aus eigenem Bestand.
|<!--[[Media:SINGLEDATASHEET 2SS52M.pdf | Datenblatt Hall-Sensor]]-->
|[[Datei:Holzreste.jpg|left|mini|125px|Abb. 17: Diverse Holzreste]]
|-
|-
|11
|2x
|48,55€
|97,10€
|Diverse Komponenten
|Funduino Lernset für die HSHL <ref>https://www.funduinoshop.com/UHL</ref>
|Inhalt siehe [https://www.funduinoshop.com/UHL Webseite des Funduino Shops].
|(Kein Datenblatt vorhanden)
|[[Datei:Funduino Lernset HSHL.jpg|left|mini|125px|Abb. 18: Funduino Lernset für die HSHL <ref>https://www.funduinoshop.com/UHL</ref>]]
|-
|}


[[Datei:Induktiver_Näherungssensor.jpg|left|mini|200px|Abb. 9: Induktiver Näherungssensor]]
==Schaltplan==
Die Schaltpläne wurden mit der Software Eplan P8 Education Version 2.7 erstellt. Dargestellt wird der Anschluss der Sensoren und des LCD-Displays am Funduino UNO R3.


<br clear = all>


===Mikrocontroller===
[[Datei:BSA SP LCD.JPG|left|mini|x250px|Abb. 19: Schaltplan LCD-Display]]
Als Mikrocontroller wird ein Funduino Uno benutzt, welcher die Sensordaten von den Ultraschallsensoren sowie den Induktiven Näherungssensor erhält. Diese werden anschließend verarbeitet. Mit dem Programmablauf Code, welcher in Arduino IDE geschrieben wurde, werden verschiedene Variablen nach Formeln berechnet und anschließend erfolgt die Ausgabe auf dem Display.


[[Datei:Mikrocontroller_BSA.jpg|left|mini|200px|Abb. 10: Mikrocontroller Funduino Uno]]
<div class="tleft" style="clear:none">[[Datei:BSA SP US.JPG|mini|ohne|x250px|Abb. 20: Schaltplan Ultraschallsensoren]]</div>


<br clear = all>
<div class="tleft" style="clear:none">[[Datei:BSA SP Hall.JPG|mini|ohne|x250px|Abb. 21: Schaltplan Hall-Sensor]]</div>


===Anzeige===
<!--
Auf einem Display kann die eigene Geschwindigkeit, die zurückgelegte Strecke, die Durchschnittsgeschwindigkeit der letzten 2 Kilometer und die Dauer der Fahrt angezeigt werden.
<gallery mode="packed" heights="250">
Wird ein Überholvorgang erkannt, werden diese Werte durch die Überholdistanz sowie die Geschwindigkeit des überholenden KFZ ergänzt.


[[Datei:Display_Bike_Safety_Assistent.jpg|left|mini|200px|Abb. 11: Display]]
Datei:BSA SP LCD.JPG  | Abb. 19: Schaltplan LCD-Display
Datei:BSA SP US.JPG    | Abb. 20: Schaltplan Ultraschallsensoren
Datei:BSA SP Hall.JPG  | Abb. 21: Schaltplan Hall-Sensor


<br clear = all>
</gallery>
-->


== Komponentenspezifikation ==


[[Datei:Komponentenliste BSA.JPG|left|mini|1000px|Abb. 13: Deckblatt Komponentenspezifikation]]<br clear = all>
Die komplette Komponentenspezifikation ist in  [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/126-150/140_Bike_Safety_Assistent/03_Komponentenspezifikation/Komponentenspezifikation_BSA.xlsx dieser Excel-Tabelle]  zu finden
<br clear = all>
<br clear = all>


==Programmierung==
==Programmierung==


===Programmablaufpläne===
===Programmablaufpläne===
Die nachfolgenden Programmablaufpläne zeigen die Vorgelagerten und Nachgelagerten Prozesse der einzelnen Modulgruppen um die Abläufe zu visualisieren.
Die nachfolgenden Programmablaufpläne veranschaulichen die Struktur des Programmcodes.
Die 3 Modulgruppen lassen sich in Sensoren, Benutzereingabe, Mikrocontroller und Anzeige unterteilen.  
Zuerst wird der gesamte Programmablauf und danach die Unterprogramme dargestellt.
Anhand der Unterteilungen lassen sich Eingaben und Ausgaben darstellen, welche auf die jeweilige Baugruppe wirken.
 
====Modulgruppe: Sensoren====
{| class="mw-datatable"
In der Modulgruppe Sensoren liefern die Sensoren als Eingabe die Messwerte, welche als Ausgabe an den verarbeitenden Mikrocontroller weitergegeben werden.
!  style="font-weight: bold;" | Gesamter Programmablaufplan
[[Datei:Modulgruppe Sensoren.png|800px|thumb|left|Absatz|Abb. 14: Modulgruppe Sensoren]]
!  style="font-weight: bold;" | Fahrrad Geschwindigkeit berechnen
!  style="font-weight: bold;" | Ultraschallsensoren
!  style="font-weight: bold;" | Geschwindigkeit des überholenden KFZ berechnen
!  style="font-weight: bold;" | Ausgabe am Display
 
|- style="vertical-align:top;"
 
| [[Datei:Programmablauf_komplett.png                |300px|thumb|left|Absatz|Abb. 22: Gesamter Programmablaufplan]]
| [[Datei:Geschwindigkeit des Fahrrades berechnen.jpg |300px|thumb|left|Absatz|Abb. 23: Programmablaufplan Fahrrad Geschwindigkeit berechnen]]
| [[Datei:Modulgruppe Sensoren3.png                  |300px|thumb|left|Absatz|Abb. 24: Programmablaufplan Ultraschallsensoren]]
| [[Datei:KFZ Geschwindigkeit berechnen.jpg          |300px|thumb|left|Absatz|Abb. 25: Programmablaufplan Geschwindigkeit des überholenden KFZ berechnen]]
| [[Datei:Modulgruppe_Anzeige2.png                    |300px|thumb|left|Absatz|Abb. 26: Programmablaufplan Ausgabe am Display]]
 
|-
 
|}
<!--
====Gesamter Programmablaufplan====
[[Datei:Programmablauf_komplett.png|300px|thumb|left|Absatz|Abb. 22: Gesamter Programmablaufplan]]
<br clear = all>
 
====Fahrrad Geschwindigkeit berechnen====
In der nachfolgenden Abbildung wird die Berechnung der Geschwindigkeit des Fahrrades dargestellt.
 
[[Datei:Geschwindigkeit des Fahrrades berechnen.jpg|300px|thumb|left|Absatz|Abb. 23: Programmablaufplan Fahrrad Geschwindigkeit berechnen]]
<br clear = all>
<br clear = all>


====Modulgruppe: Mikrocontroller====
====Ultraschallsensoren====
In der nachfolgenden Abbildung erkennt man die Eingaben sowie Ausgaben die im Rahmen der Verarbeitung auf den Mikrocontroller wirken. Der Mikrocontroller erhält Eingaben in Form von Messwerten aus den Sensoren und manuelle Eingaben welche in die Verarbeitung mit einfließen. Anschließend werden im Mikrocontroller Variablen / Ausgangsvariablen berechnet, welche dann über das Display ausgegeben werden.
In dem Unterprogramm Ultraschallsensoren werden zuerst die Trigger Signale erzeugt und danach die Sensoren eingelesen (Echo). Aus der Zeitdifferenz zwischen Trigger Signal und Echo wird die Distanz berechnet, welche als Ausgabe an des Programm weitergegeben werden.
[[Datei:Modulgruppe Sensoren3.png|300px|thumb|left|Absatz|Abb. 24: Programmablaufplan Ultraschallsensoren]]


[[Datei:Modulgruppe Mikrocontroller.png|600px|thumb|left|Absatz|Abb. 15: Programmablaufplan Mikrocontroller]]
<br clear = all>
<br clear = all>


====Modulgruppe: Anzeige====
====Geschwindigkeit des überholenden KFZ berechnen====
In der Modulgruppe Anzeige wirken die Ausgangsvariablen des Mikrocontrollers als Eingabe des Displays. Die Darstellung erfolgt permanent. Es werden drei Variablen (Fahrradgeschwindigkeit, Distanzberechnung und KFZ Geschwindigkeit) ausgegeben im Display.
In der nachfolgenden Abbildung wird die Berechnung der Geschwindigkeit des überholenden KFZ dargestellt.


[[Datei:Modulgruppe_Anzeige.png|250px|thumb|left|Absatz|Abb. 16: Programmablaufplan Anzeige]]
[[Datei:KFZ Geschwindigkeit berechnen.jpg|300px|thumb|left|Absatz|Abb. 25: Programmablaufplan Geschwindigkeit des überholenden KFZ berechnen]]
<br clear = all>
<br clear = all>


====Ausgabe am Display====
In dem Unterprogramm Ausgabe am Display werden die Ausgangsvariablen nacheinander ausgegeben. Die Darstellung von Fahrradgeschwindigkeit, den ermittelten Distanzen und der KFZ Geschwindigkeit erfolgt nacheinander jeweils für 5 Sekunden. Dies wurde über eine Switch...Case Abfrage realisiert, welche nach der Initialisierung des Systems automatisch von einer Anzeige zur nächsten wechselt.


<!-- [[Datei:BSA Programmablaufplan.svg|600px|thumb|left|Absatz|Abb. 18: Programmablaufplan]] -->
[[Datei:Modulgruppe_Anzeige2.png|300px|thumb|left|Absatz|Abb. 26: Programmablaufplan Ausgabe am Display]]
<!-- <br clear = all> -->
<br clear = all>


-->
===Programmcode===
===Programmcode===
====Header und Variablendeklaration====
 
<div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088">
<div style="width:1000px; height:600px; overflow:auto; border: 2px solid #080">
<pre>
<pre>
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
Zeile 170: Zeile 335:
//                    Wire.h                                          //
//                    Wire.h                                          //
//                                                                    //
//                                                                    //
// Letzte Änderung  : 28.12.2021                                     //
// Letzte Änderung  : 09.01.2022                                     //
//                                                                    //
//                                                                    //
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
Zeile 236: Zeile 401:
char Anzeige = Anzeige1;    // Anzeige1 (Willkommen und Initialisierung) als Startzustand festgelegt
char Anzeige = Anzeige1;    // Anzeige1 (Willkommen und Initialisierung) als Startzustand festgelegt


</pre>
</div>
<br clear = all>
====Initialisierung====
<div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088">
<pre>
// Initialisierung
// Initialisierung
void setup()
void setup()
Zeile 264: Zeile 420:
}
}


</pre>
</div>
<br clear = all>
====Programmschleife====
<div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088">
<pre>
// Programmschleife
// Programmschleife
void loop() {
void loop() {
Zeile 291: Zeile 437:
   if (HallStatus == LOW && Merker == 1)        // Realisierung der Flankenerkennung
   if (HallStatus == LOW && Merker == 1)        // Realisierung der Flankenerkennung
   {
   {
     //digitalWrite(LED, HIGH);                  // LED zum debuggen
     digitalWrite(LED, HIGH);                  // LED zum debuggen
     delay(10);                                  // Verzögerung zum entprellen
     delay(10);                                  // Verzögerung zum entprellen
     n = n+1;                                    // Zähler für die Umdrehungen
     n = n+1;                                    // Zähler für die Umdrehungen
     //digitalWrite(LED, LOW);                  // LED zum debuggen
     digitalWrite(LED, LOW);                  // LED zum debuggen
     //Serial.print("Anzahl Umdrehungen: ");    // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.print("Anzahl Umdrehungen: ");    // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.println(n);                        // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.println(n);                        // Ausgabe auf dem Seriellen Monitor zum debuggen
Zeile 312: Zeile 458:
     n=0;                          // Zähler für die Umdrehungen zurücksetzen
     n=0;                          // Zähler für die Umdrehungen zurücksetzen
   }
   }
   v1 = 20;                       // Konstante geschwindigkeit zum debuggen
   //v1 = 20;                     // Konstante geschwindigkeit zum debuggen
   //_________________________________________________________________
   //_________________________________________________________________
   // Trigger Signal Sensor 3 Hinten bei -45 Grad
   // Trigger Signal Sensor 3 Hinten bei -45 Grad
Zeile 345: Zeile 491:
   //_________________________________________________________________
   //_________________________________________________________________
   // Trigger Signal Sensor 2 Mitte bei 0 Grad
   // Trigger Signal Sensor 2 Mitte bei 0 Grad
   delay(100);
   delay(50);
   digitalWrite(trigger0,LOW);
   digitalWrite(trigger0,LOW);
   delay(5);
   delay(5);
Zeile 376: Zeile 522:
   //_________________________________________________________________
   //_________________________________________________________________
   // Trigger Signal Sensor 1 Vorne bei +45 Grad
   // Trigger Signal Sensor 1 Vorne bei +45 Grad
   delay(100);
   delay(50);
   digitalWrite(triggerPlus45,LOW);
   digitalWrite(triggerPlus45,LOW);
   delay(5);
   delay(5);
Zeile 430: Zeile 576:
     //Serial.print("s_kfz: ");                    // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.print("s_kfz: ");                    // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.println(s_kfz);                      // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.println(s_kfz);                      // Ausgabe auf dem Seriellen Monitor zum debuggen
     v2 = (s_kfz / dt2) * 3.6 + v1;               // Geschwindigkeit des KFZ berechnen
     v2 = (s_kfz / dt2) * 3.6;                     // Geschwindigkeit des KFZ berechnen
     //Serial.print("Fahrrad Geschwindigkeit: ");  // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.print("Fahrrad Geschwindigkeit: ");  // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.println(v1);                        // Ausgabe auf dem Seriellen Monitor zum debuggen
     //Serial.println(v1);                        // Ausgabe auf dem Seriellen Monitor zum debuggen
Zeile 492: Zeile 638:
         lcd.setCursor(0, 1);
         lcd.setCursor(0, 1);
          
          
         if (entfernung0 >= 5000 || entfernung0 <= 30)
         if (Distanz0 >= 5000 || Distanz0 <= 30)
         {
         {
           lcd.print("NAN");
           lcd.print("NAN");
Zeile 502: Zeile 648:
         lcd.print(", ");
         lcd.print(", ");
          
          
         if (entfernungPlus45 >= 5000 || entfernungPlus45 <= 30)
         if (DistanzPlus45 >= 5000 || DistanzPlus45 <= 30)
         {
         {
           lcd.print("NAN");
           lcd.print("NAN");
Zeile 512: Zeile 658:
         lcd.print(", ");
         lcd.print(", ");
          
          
         if (entfernungMinus45 >= 5000 || entfernungMinus45 <= 30)
         if (DistanzMinus45 >= 5000 || DistanzMinus45 <= 30)
         {
         {
           lcd.print("NAN");
           lcd.print("NAN");
Zeile 554: Zeile 700:
   v2 = 0;
   v2 = 0;
}
}
</pre>
</pre>
</div>
</div>
<br clear = all>
<br clear = all>


<!--
====Initialisierung====
<div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088">
<pre>


</pre>
</div>
<br clear = all>
-->


== Aufbau ==
== Aufbau ==


Der Bike Safety Assistent setzt sich aus verschiedenen Komponenten zusammen, die am Fahrrad an verschiedenen Stellen montiert werden. Die drei Ultraschallsensoren werden vorne, mittig und hinten in dem entsprechenden Winkel montiert.
Der Bike Safety Assistent setzt sich aus verschiedenen Komponenten zusammen, die am Fahrrad an verschiedenen Stellen montiert werden. Die drei Ultraschallsensoren werden vorne (+45°), mittig (0°) und hinten (-45°) entsprechend Abbildung 1 montiert.
Für die Montage wurde für den mittigen und den hinteren Sensor eine Holzleiste neben dem Gepäckträger montiert. Das Ende der Holzleiste wurde für den entsprechenden Winkel von 45 Grad zugeschnitten und bildet so die Montagegrundlage für den hinteren Ultraschallsensor. Der mittige Ultraschallsensor wurde am anderen Ende der Holzleiste parallel zum Fahrrad montiert, welcher sich in Höhe der Sitzposition befindet.
Bei der Montage wurde für den mittigen und den hinteren Sensor eine Holzleiste mit Kabelbindern neben dem Gepäckträger montiert. Das Ende der Holzleiste wurde im Winkel von 45 Grad zugeschnitten und bildet so die Montagegrundlage für den hinteren Ultraschallsensor. Der mittige Ultraschallsensor wurde am anderen Ende der Holzleiste parallel zum Fahrrad montiert, welcher sich in Höhe der Sitzposition befindet.
Das nachfolgende Bild visualisiert die Montagepunkte.
Das nachfolgende Bild visualisiert die Montagepunkte.


Bild 1


Auf der Holzleiste erkennt man die zwei Plastikdosen, welche den Mikrocontroller (im hinteren Bereich) sowie das Steckbrett (vorderer Bereich) vor Witterungseinflüsse schützen.
[[Datei:Montage1.0.JPG|600px|thumb|left|Absatz|Abb. 27: Montage hinten]]
<br clear = all>
 
Auf der Holzleiste erkennt man die zwei angeschraubten Plastikdosen, welche den Mikrocontroller (im hinteren Bereich) sowie das Steckbrett (vorderer Bereich) vor Witterungseinflüssen schützen. Die Verkabelung wird durch kleine Bohrlöcher aus den Gehäusen herausgeführt.
 
Der dritte Ultraschallsensor befindet sich an der Vorderachse des Fahrrades und ist dort ebenfalls mit einer Holzleiste befestigt, die einen Winkel von 45 Grad aufweist.


Der dritte Ultraschallsensor befindet sich an der Vorderachse des Fahrrades und ist dort ebenfalls mit einer Holzleiste befestigt, die den entsprechenden Winkel von 45 Grad aufweist und zugeschnitten wurde.


Bild 2
[[Datei:Montage2.0.JPG|600px|thumb|left|Absatz|Abb. 28: Montage vorne]]
<br clear = all>


Der induktive Näherungssensor (Hall Sensor) ist an der Achse des Vorderrades montiert und ein entsprechender Magnet an der Speiche der Vorderades, um die entsprechenden Umdrehungen zu messen.
Der Hall-Sensor ist an der Vorderradgabel und zwei Magnete sind an den Speichen des Vorderades montiert. Hiermit werden die Umdrehungen des Vorderrades erfasst.
Das Display befindet sich am Lenker und ist dort mittig angebracht, um während der Fahrt problemlos draufzuschauen.  
Das Display befindet sich am Lenker und ist dort mittig angebracht, um während der Fahrt problemlos die Werte ablesen zu können.  
Die Kabel der drei vorderen Einheiten werden über die Mittelachse mit dem hinten liegenden Mikrocontroller verbunden.
Die Verkabelung der drei vorderen Komponenten wird, um das Oberrohr des Fahrradrahmens gewickelt, mit dem hinten liegenden Mikrocontroller verbunden.




Zeile 583: Zeile 740:


== Komponententest ==
== Komponententest ==
Beim Komponententest werden die in der Komponentenspezifikation definierten Komponenten nach speziellen festgelegten Verfahren getestet. Abbildung 29 zeigt das Deckblatt des Komponententests. Die Tabelle selbst ist in [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/126-150/140_Bike_Safety_Assistent/05_Testprotokolle/BSA_Komponententest.xlsx dieser Excel-Tabelle] zu finden.
[[Datei:BSA Komponententest.JPG|600px|mini|left|Absatz|Abb. 29: Deckblatt Komponententest]]
<br clear = all>
Im Folgenden werden die Testmethoden zu den einzelnen Komponenten kurz erläutert. Die konkreten Testfälle mit den jeweiligen Parametern können der oben verlinkten Tabelle entnommen werden.
===Test der Ultraschallsensoren===
Hier sollte geprüft werden, ob die Ultraschallsensoren plausible Werte messen. Dazu wurden für jeden Test eine andere Distanz zwischen dem Messobjekt und dem Sensor definiert und im Voraus mit einem Maßband abgemessen. Anschließend wurde eine Messung mit den Ultraschallsensoren durchgeführt und der ausgegebene Wert mit dem zuvor gemessenen Wert verglichen. Hierbei wurde eine Abweichung von unter einem Prozent als akzeptabel eingestuft.
===Test des Hall-Sensors===
Der Hall-Sensor wurde schon in einem sehr frühen Stadium des Prototypenbaus getestet. Dafür wurde lediglich ein Magnet an den Hall-Sensor angenähert. Sobald der Sensor durchschaltet, leuchtet eine LED, worüber der Schaltvorgang visualisiert wurde.
===Test des Ein- und Ausschaltens===
Auch das Ein- und Ausschalten des Systems mittels Ab- und Anklemmen der Batterie wurde getestet. Unter der Voraussetzung, dass das System und vor allem das Display bereits einwandfrei funktioniert, wurde die Batterie angeklemmt und beobachtet, ob die Display-Anzeige erscheint. Beim Abklemmen der Batterie sollte das Display wieder ausschalten. Dies war bei dem Test der Fall und somit wurde der Komponententest als bestanden eingestuft.
===Test der Distanzberechnung===
Hier musste getestet werden, ob bei den äußeren beiden Ultraschallsensoren die Umrechnung der im 45-Grad-Winkel gemessenen Werte in die senkrechten Abstände funktioniert. Bei dem mittleren Abstandssensor musste für die korrekte Berechnung lediglich ein Offset für die Lenkerbreite abgezogen werden. Diese Aspekte wurden mit einer ähnlichen Methode wie der Test der Ultraschallsensoren validiert. Es wurde also ein Objekt in einem vorher definierten und gemessenen Abstand zu den Ultraschallsensoren positioniert und der korrekte senkrechte Abstand errechnet. Anschließend wurde die Messung mittels des Bike Safety Assistenten durchgeführt und die durch das Programm errechneten Werte und die im Voraus händisch ermittelten Werte miteinander verglichen.
===Test der Ermittlung der Fahrradgeschwindigkeit===
Für diesen Test wurde ein schlichter Vergleich als Validierung durchgeführt. Zum einen wurde die Fahrradgeschwindigkeit mittels des Bike Safety Assistenten ermittelt und zum anderen zeitgleich mit einem herkömmlichen Fahrrad-Tacho gemessen. Die ermittelten Werte wurden verglichen, wobei nur geringe Abweichungen festgestellt werden konnten. Daher wurde der Test als bestanden eingestuft.
===Test der Ermittlung der KFZ-Geschwindigkeit===
Für diesen Test wurde eine konstante Fahrrad-Geschwindigkeit von 20 km/h angenommen, da das Fahrrad für diesen Test nicht bewegt wurde, sondern statisch an einer Stelle stand. Anschließend wurden die Ultraschallsensoren nacheinander durch das Vorbeigehen einer Person ausgelöst und die Zeit des simulierten Überholvorgangs mittels einer Handystoppuhr gemessen. Die von dem System so ermittelte KFZ-Geschwindigkeit wurde dann auf Plausibilität überprüft.
===Test der permanenten Darstellung===
Für diesen Test wurde eine optische Bewertung der Anzeige durchgeführt. Hier wurde jeweils überprüft, ob die Fahrrad-Geschwindigkeit, die Überholdistanz und die KFZ-Geschwindigkeit in gewünschter Weise dargestellt werden.


<br clear = all>
<br clear = all>
Zeile 588: Zeile 771:
== Projektvideo ==
== Projektvideo ==


<br clear = all>
{{#ev:youtube|https://www.youtube.com/watch?v=FQH2O61g1do|500px|left}}
<br clear=all>


== Zusammenfassung ==
== Zusammenfassung ==
<br clear = all>
===Lessons Learned===
Das Projekt des Bike Safety Assistenten konnte erfolgreich umgesetzt werden. Das System funktioniert für einen Prototypen hinreichend genau und könnte, mit einigen Verbesserungen, zur Sicherheit des Fahrradfahrers im Straßenverkehr beitragen. Die Schwierigkeiten bei der Umsetzung des Projektes lagen vor allem in der knappen Zeit. So wurde bspw. nicht genügend Puffer für die Genehmigung des Projektes und für die Vorbereitung der parallel laufenden Praktika eingeplant, was zum Ende hin Zeitdruck erzeugte.
Eine weitere Schwierigkeit/Verzögerung wurde durch die anfängliche Verwendung eines Touch-Displays hervorgerufen. Um die Ausgabe der Distanzen und Geschwindigkeiten übersichtlich zu gestalten, sollte nicht das im Funduino-Set beinhaltete LCD-Display, sondern ein größeres Touch-Display verwendet werden. Allerdings wurde hier die Bauteilkompatibilität im Voraus nicht gewissenhaft geprüft, sodass es im Weiteren zu diversen Problemen gekommen ist. Unter anderem waren bei dem verwendeten Funduino UNO nicht genügend Ports vorhanden, um sowohl das Touch-Display als auch alle benötigten Sensoren zu betreiben. Dies hätte im Vorfeld durch eine umfassendere Recherche umgangen werden können. So hätte bspw. direkt mit einem anderen Microcontroller gearbeitet werden können.
Letztlich wurde anstatt des Touch-Displays das dem Funduino-Set beiliegenden LCD-Display verwendet, welches für die Anzeige der ermittelten Distanzen und Geschwindigkeiten vollkommen ausreicht. Jedoch könnte durch die Verwendung eines Touch-Display die Anwenderfreundlichkeit gesteigert werden.
Ein weiterer Aspekt bezüglich des Zeitmanagements war die Kommunikation zwischen den Projektbeteiligten. Diese wurde zum Ende hin immer weiter verbessert, da Aufgaben klarer verteilt wurden und dies bspw. durch To-Do-Listen verschriftlicht wurde.
Ein nicht unwesentlicher Punkt war zum Ende hin die Durchführung der Komponententests. Hier wurde das System hinsichtlich der Überholgeschwindigkeit des KFZ zuerst mit unrealistischen Zahlen validiert. Dies führte dazu, dass sich die ausgegebenen KFZ-Geschwindigkeiten trotz unterschiedlicher Überholzeiten nicht signifikant verändert haben. Letztlich wurde das System mit deutlich geringeren Überholzeiten getestet, sodass tatsächlich Veränderungen hinsichtlich der Geschwindigkeit zu beobachten waren.


===Lessons Learned===
Zusammenfassend bleibt festzuhalten, dass das Projekt „Bike Safety Assistent“ erfolgreich mit der zur Verfügung stehenden Zeit und den vorhandenen Mitteln umgesetzt werden konnte, es jedoch einige Punkte im Projektverlauf gab, die bei einem nächsten Projekt verbessert werden können.


<br clear = all>
===Ausblick===
===Ausblick===
Um den vorhandenen Prototypen weiterzuentwickeln und somit ein fertiges und einsatzbereites Produkt zu erhalten, müsste wie bereits beschrieben ein Touch-Screen verbaut werden, um die Anwenderfreundlichkeit zu steigern. Ein weiterer Punkt wäre die Parallelisierung des Programmablaufs. Hier muss sichergestellt werden, dass das System zu jeder Zeit einwandfrei läuft. In einigen Situationen war dies bei dem Prototypen nicht gegeben, da bei hohen Geschwindigkeiten der Microcontroller manchmal nicht jede Raddrehung gezählt hat. So haben sich Messfehler ergeben. Dies war der Tatsache geschuldet, dass auf dem Microcontroller aktuell das Programm ohne parallele Messungen und Berechnungen durchläuft. Daher konnten teilweise keine neuen Messungen erkannt werden, da der Microcontroller noch Berechnungen aufgeführt hat, anstatt die Messwerte der Sensoren abzufragen. Dies würde durch einen parallelen Programmablauf vermieden werden.
Auch hinsichtlich der äußeren Gestaltung der Bike Safety Assistenten könnten Verbesserungen durchgeführt werden. So könnten bspw. wetterfeste Gehäuse entwickelt und 3D-gedruckt oder auch die Befestigungen an dem Fahrrad optimiert werden.
Auch die Realisierung von neunen Features wäre denkbar. So könnte bspw. ein Kamerasystem verbaut werden, welches bei einem zu geringen Überholabstand das Kennzeichen es KFZ erkennt und speichert.
Der Bike Safety Assistent würde besonders in Großstädten die Sicherheit für Fahrradfahrer erhöhen und somit die Nutzung des Fahrrades noch attraktiver machen.


<br clear = all>
<br clear = all>
== Projektunterlagen ==
Die Projektunterlagen befinden sich auf dem [https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/126-150/140_Bike_Safety_Assistent SVN Server] der HSHL und stehen hier als [[:Datei:140 Bike Safety Assistent.zip| ZIP-Archiv]] zum Download zur Verfügbung.


== Literaturverzeichnis ==
== Literaturverzeichnis ==

Aktuelle Version vom 11. Januar 2022, 11:18 Uhr

→ zurück zum Hauptartikel: WS 21/22: Fachpraktikum Elektrotechnik (MTR) und Angewandte Elektrotechnik (BSE)

Autoren: Pia Kostede; Gerrit Wurth; Andreas Mentrup
Betreuer: Marc Ebmeyer

Abb. 1: Symbolbild Bike Safety Assistent


Einleitung

Das Fahrradfahren wird seit Jahren immer beliebter. So nimmt die Anzahl an Fahrrädern in Deutschland kontinuierlich zu. Im Jahr 2005 gab es 67 Mio. Fahrräder. 2020 waren es bereits 79,1 Mio. Dies entspricht einem Anstieg um 18 Prozent [1]. Nicht nur der Umweltgedanke, sondern auch die persönliche Fitness spielen dabei eine wichtige Rolle. Allerdings ist das Fahrradfahren, besonders im fließenden Straßenverkehr, nicht gerade ungefährlich. So gab es im Jahr 2020 allein im ersten Jahresquartal 10.200 registrierte Fahrradunfälle mit Personenschaden. Davon waren 8.245 Unfälle mit Leichtverletzen, 1.901 Schwerverletzten und 54 Unfälle endeten tödlich [2]. Besonders die schlecht ausgebauten Radwege bzw. Radfahrstreifen werden von den Fahrradfahrern als Risikofaktor wahrgenommen [3].
Da auch die Politik dieses Problem erkannt hat, wurde reagiert und die StVO hinsichtlich der geltenden Abstandsregelungen beim Überholen von Fahrrädern mit Kraftfahrzeugen geändert. Seit April 2020 gilt nun ein Mindestabstand innerorts von 1,5 Metern und außerorts von 2 Metern. Diese Vorschrift trägt dazu bei, das Radfahren ein wenig sicherer zu machen. Allerdings wird dieser Abstand von den Autofahrern in den meisten Fällen nicht eingehalten. Daher ist es notwendig, sich als Fahrradfahrer zusätzlich selbst zu schützen. Hierbei hilft der Bike Safety Assistent, ein Abstandsmesssystem für das Fahrrad. Dieser misst den zu erwartenden Seitenabstand und zeigt diesen dem Fahrradfahrer an. Der Bike Safety Assistent soll im Rahmen dieses Projektes im Fach Angewandte Elektrotechnik im Masterstudiengang Business and Systems Engineering entwickelt und realisiert werden.


Projektplanung

Projektplan

Um das Projekt strukturiert anzugehen, wurde im ersten Schritt ein Gantt-Diagramm erstellt. Abbildung 2 zeigt die verschiedenen Aufgaben der einzelnen Phasen und setzt Fristen für die Erledigung. Das Gantt-Diagramm wurde während der Durchführung des Projektes regelmäßig aktualisiert. Zudem wurde ein Ressourcendiagramm (Abbildung 3) erstellt und so die Aufgaben unter den Projektteilnehmern aufgeteilt. Der aktuelle Stand der Projektplanung ist in dieser Datei zu finden.

Abb. 2: Projektplanung als Gantt-Diagramm
Abb. 3: Ressourcendiagramm


Stufenplan

Zudem wurde ein Stufenplan erstellt, welcher bei der Erarbeitung des Prototypen Orientierung geben soll. Dabei werden in der ersten Stufe die "Grundfunktionen" realisiert und diese in den Stufen zwei und drei erweitert. Durch dieses Vorgehen wird die Aufgabe in mehrere kleine Teilabschnitte gegliedert und strukturiert somit die Arbeit.

Abb. 4: Stufenplan


Anforderungen

Die nachfolgenden Anforderungen wurden zusammengestellt und sind der Grundstein dieses Projektes. Die Anforderungsliste, in Abbildung 5 zu sehen, definiert die Ausgangssituation dieses Projektes. Die komplette Anforderungsliste ist in dieser Excel-Tabelle zu finden.

Abb. 5: Anforderungsliste



Funktionaler Systementwurf

Ein funktionaler Systementwurf soll die grundsätzliche Systemstruktur veranschaulichen und dabei lösungsneutral sein. Der funktionale Systementwurf zu diesem Projekt ist in die vier Module "Sensorik", "Benutzereingaben", "Berechnung" und "Darstellung" unterteilt. Der funktionale Systementwurf für den Bike Safety Assistent ist in Abbildung 6 zu sehen.

Abb. 6: Funktionaler Systementwurf


Sensorik

Die Sensorik erfasst die Messwerte und bildet somit die Berechnungsgrundlage der Ausgangsvariablen des Mikrocontrollers. Es werden drei Ultraschallsensoren und ein Hall-Sensor verwendet, dessen primäre Funktion es ist, Abstandswerte zu ermitteln und diese Messwerte und Messgrößen zyklisch an den Mikrocontroller zu übergeben.

Benutzereingaben

Das Modul "Benutzereingaben" wurde im Projektverlauf mit Abstand am häufigsten angepasst und mit der Zeit immer weiter ausgedünnt. Dies war vor allem der knappen Zeit geschuldet. Letztlich wurde festgelegt, dass als einzige Benutzereingaben das An- und Ausschalten des Systems realisiert werden soll.

Berechnung

Die Berechnung erfolgt im Mikrocontroller und wird über den Programmablauf im Arduino IDE gesteuert. Nachdem die Eingangsvariablen (Messgrößen) in den Mikrocontroller übergeben wurden, werden die Ausgangsvariablen auf Formelbasis berechnet. Die Ausgangsvariablen entsprechen der Distanz zum überholendem Kraftfahrzeug, der Geschwindigkeit des Fahrrads und der Geschwindigkeit des überholenden Kraftfahrzeugs.

Darstellung

Die Darstellung übernimmt ein Display. Dort erfolgt die Anzeige der vom Mikrocontroller berechneten Werte. Die Ausgabe der Werte setzt sich aus der eigenen Geschwindigkeit, der Überholdistanz und der Geschwindigkeit des überholenden Kraftfahrzeugs zusammen.


Technischer Systementwurf

Der technische Systementwurf besteht folglich ebenfalls aus den vier Modulgruppen. Die Modulgruppe "Sensorik" beinhaltet die 3 Ultraschallsensoren, welche zwischen 30mm und 5000mm betrieben werden. Der Hall-Sensor misst am Vorderrad die Drehzahl des Rades. Die zweite Modulgruppe "Benutzereingabe" ist für das Ein- und Ausschalten des Systems zuständig. Dies wird denkbar simpel über das An- und Abklemmen der Batterie realisiert. In der Modulgruppe "Berechnung" sorgt der Mikrocontroller für die Berechnung der Ausgangsvariablen. Die letzte Modulgruppe "Darstellung" gibt die berechneten Variablen auf dem Display aus. Abbildung 7 zeigt den technischen Systementwurf.

Abb. 7: Technischer Systementwurf


Komponentenspezifikation

Die Komponentenspezifikation bricht die Module in ihre einzelnen Komponenten herunter und beschreibt detailliert die Funktionsweisen der einzelnen Komponenten. Abbildung 8 zeigt das Deckblatt der Komponentenspezifikation. Die komplette Komponentenspezifikation ist in dieser Excel-Tabelle zu finden.

Abb. 8: Deckblatt Komponentenspezifikation



Hardware

Stückliste

ID Anzahl Kosten pro Stück € Summe Bezeichnung / Komponente technische Bezeichnung Beschreibung Datenblatt Abbildung
1 3x 3,20 € 9,60 € Ultraschallsensoren HY-SRF05 [4] Mit den drei Ultraschallsensoren wird die Distanz zum überholenden KFZ gemessen. Ergänzend dazu wird über Sensor 1 und Sensor 3 die Zeit des Überholvorganges erfasst. Dazu strahlen die Ultraschallsensoren zyklisch einen kurzen und hochfrequenten Schallimpuls aus. Wenn dieser von einem Objekt reflektiert wird, gelangt der Schallimpuls als Echo zu dem Ultraschallsensor zurück. Entscheidend für die Ermittlung der Entfernung des Objektes ist die Zeitspanne zwischen dem Aussenden des Schallimpulses und dem Empfangen des Echos [5]. Damit sich die drei verwendeten Ultraschallsensoren nicht gegenseitig stören, ist es wichtig, das Aussenden der Schallimpulse zeitlich versetzt auszulösen und ein entsprechendes Delay zu definieren. Datenblatt Ultraschallsensor
Abb. 9: Ultraschallsensor
2 1x 3,50€ 3,50€ Hall Sensor Honeywell 2SS52M Series [6] Mit dem Hall-Sensor werden die Umdrehungen am Vorderrad gemessen. Mit dem Umfang des Vorderrades wird daraus die eigene Geschwindigkeit ermittelt. Der Hall-Sensor ist an der Vorderradgabel montiert. Datenblatt Hall-Sensor
Abb. 10: Hall-Sensor
3 1x 0,00€ 0,00€ Mikrocontroller Funduino UNO R3 [7] Als Mikrocontroller wird ein Funduino UNO R3 benutzt, welcher die Sensordaten von den Ultraschallsensoren sowie des Hall-Sensors erhält. Diese werden anschließend verarbeitet. Mit dem Programmcode, welcher in der Arduino IDE geschrieben wurde, werden verschiedene Variablen nach Formeln berechnet, anschließend erfolgt die Ausgabe am Display. Der Mikrocontroller ist in dem Funduino Lernset für die HSHL enthalten. Datenblatt ATmega328P
Abb. 11: Mikrocontroller Funduino Uno
4 1x 0,00€ 0,00€ Anzeige LCD-Display [8] Auf einem LCD-Display kann die eigene Geschwindigkeit, die zurückgelegte Strecke, die Durchschnittsgeschwindigkeit der letzten 2 Kilometer und die Dauer der Fahrt angezeigt werden. Wird ein Überholvorgang erkannt, werden diese Werte durch die Überholdistanz sowie die Geschwindigkeit des überholenden KFZ ergänzt. Das LCD_Display ist in dem Funduino Lernset für die HSHL enthalten. Datenblatt LCD-Display
Abb. 12: LCD-Display
5 1x 0,00€ 0,00€ Elektronik 10 kΩ Widerstand [9] Der Pull-Up-Widerstand für den Hall-Sensor (siehe Schaltplan), ist in dem Funduino Lernset für die HSHL enthalten.
6 1x 2,99€ 2,99€ Elektronik Alkaline Batterie 9-V-Block [10] Für die mobile Spannungsversorgung des Bike Safety Assistenten werden 9-V-Block Alkaline Batterien verwendet.
Abb. 13: Alkaline Batterie 9-V-Block
7 x 0,00€ 0,00€ Elektronik Klingeldraht Für die Verkabelung am Fahrrad wurde Klingeldraht verwendet. Der Klingeldraht ist aus eigenem Bestand.
Abb. 14: Klingeldraht
8 x 0,00€ 0,00€ Montagematerial Diverse Kabelbinder Zum Befestigen einiger Bauteile und Komponenten wurden Kabelbinder verwendet. Die Kabelbinder sind aus eigenem Bestand.
Abb. 15: Diverse Kabelbinder
9 x 0,00€ 0,00€ Montagematerial Diverse Schrauben Zum Befestigen einiger Bauteile und Komponenten wurden Schrauben verwendet. Die Schrauben sind aus eigenem Bestand.
Abb. 16: Diverse Schrauben
10 x 0,00€ 0,00€ Montagematerial Diverse Holzreste Für die Montage der Komponenten wurden Montageplatten aus Holz angefertigt und mit Kabelbindern am Fahrrad befestigt. Für das LCD-Display wurde ein kleines Gehäuse aus Leimholzplatten gefertigt. Die Holzreste sind aus eigenem Bestand.
Abb. 17: Diverse Holzreste
11 2x 48,55€ 97,10€ Diverse Komponenten Funduino Lernset für die HSHL [11] Inhalt siehe Webseite des Funduino Shops. (Kein Datenblatt vorhanden)
Abb. 18: Funduino Lernset für die HSHL [12]

Schaltplan

Die Schaltpläne wurden mit der Software Eplan P8 Education Version 2.7 erstellt. Dargestellt wird der Anschluss der Sensoren und des LCD-Displays am Funduino UNO R3.


Abb. 19: Schaltplan LCD-Display
Abb. 20: Schaltplan Ultraschallsensoren
Abb. 21: Schaltplan Hall-Sensor



Programmierung

Programmablaufpläne

Die nachfolgenden Programmablaufpläne veranschaulichen die Struktur des Programmcodes. Zuerst wird der gesamte Programmablauf und danach die Unterprogramme dargestellt.

Gesamter Programmablaufplan Fahrrad Geschwindigkeit berechnen Ultraschallsensoren Geschwindigkeit des überholenden KFZ berechnen Ausgabe am Display
Abb. 22: Gesamter Programmablaufplan
Abb. 23: Programmablaufplan Fahrrad Geschwindigkeit berechnen
Abb. 24: Programmablaufplan Ultraschallsensoren
Abb. 25: Programmablaufplan Geschwindigkeit des überholenden KFZ berechnen
Abb. 26: Programmablaufplan Ausgabe am Display

Programmcode

////////////////////////////////////////////////////////////////////////
//                    Hochschule Hamm-Lippstadt                       //
////////////////////////////////////////////////////////////////////////
//                                                                    //
// Modul            : Bike Safety Assistent                           //
//                                                                    //
// Studiengang      : Business and Systems Engineering                //
//                                                                    //
// Fach             : Angewandte Elektrotechnik                       //
//                                                                    //
// Gruppe           : BSE 1.2                                         //
//                                                                    //
// Autoren          : Pia Kostede                                     //
//                    Andreas Mentrup                                 //
//                    Gerrit Wurth                                    //
//                                                                    //
// Betreuer         : Marc Ebmeyer                                    //
//                                                                    //
// Beschreibung     : Programm für den Bike Safety Assistenten        //
//                    In diesem Programm werden die Sensorwerte       //
//                    von insgesamt drei Ultraschall und einem        //
//                    Hall-Sensor eingelesen und darüber der          //
//                    Überholabstand zwischen dem Fahrrad und         //
//                    dem PKW, sowie die Geschwindigkeit des          //
//                    PKWs und des eigenen Fahrrads berechnet.        //
//                    Die ermittelten Werte werden anschließend       //
//                    über ein Display ausgegeben.                    //
//                                                                    //
// Funktionen       : Berechnung und Darstellung der Fahrtparameter   //
//                    - Einlesen der Messwerte                        //
//                    - Verarbeitung                                  //
//                    - Ausgabe                                       //
//                                                                    //
// Implementierung  : Arduino IDE 1.8.19                              //
//                                                                    //
// Bibliotheken     : LiquidCrystal_I2C.h                             //
//                    Wire.h                                          //
//                                                                    //
// Letzte Änderung  : 09.01.2022                                      //
//                                                                    //
////////////////////////////////////////////////////////////////////////

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

// Deklaration der Ein- und Ausgänge
int echo0 = 2;
int trigger0 = 3;
int Hall = 4;
int LED = 5;
int triggerPlus45 = 6;
int echoPlus45 = 7;
int echoMinus45 = 8;
int triggerMinus45 = 9;
int Taster1 = 10;
int Taster2 = 11;

// Variablendeklaration
int HallStatus = 0;
int n = 0;
int Merker = 0;
long dauer0 = 0;
long dauerPlus45 = 0;
long dauerMinus45 = 0;
long entfernung0 = 0;
long entfernungPlus45 = 0;
long entfernungMinus45 = 0;
long Distanz0 = 0;
long DistanzPlus45 = 0;
long DistanzMinus45 = 0;
int Tasterstatus1 = 0;
int Tasterstatus2 = 0;
int DauerAnzeige = 800;
int PauseAnzeigeLang = 5000;
int PauseAnzeigeKurz = 2000;
long LetzteAusfuehrungLang = -1;
long LetzteAusfuehrungKurz = -1;
int Merker2 = 0;
int Merker1 = 0;

long r = 355;
long t1 = 0;
long t2 = 0;
long t3 = 0;
long t4 = 0;
long dt1 = 0;
long dt2 = 0;
long v1 = 0;
long v2 = 0;
long s_kfz = 0;
long s_fr = 0;
long s_o = 1120;

// Definition der Anzeige Zustände 

#define Anzeige1 1          // Anzeige-Zustand 1 angelegt - Willkommen und Initialisierung
#define Anzeige2 2          // Anzeige-Zustand 2 angelegt - Anzeige der eigenen Geschwindigkeit
#define Anzeige3 3          // Anzeige-Zustand 3 angelegt - Anzeige der gemessenenen Abstände
#define Anzeige4 4          // Anzeige-Zustand 4 angelegt - Anzeige der Geschwindigkeit des überholenden KFZ

char Anzeige = Anzeige1;    // Anzeige1 (Willkommen und Initialisierung) als Startzustand festgelegt

// Initialisierung
void setup()
{
  // put your setup code here, to run once:
  lcd.init();
  lcd.backlight();
  //Serial.begin(9600);             // Seriellen Monitor zum debuggen
  
  pinMode(LED, OUTPUT);
  //pinMode(Taster, INPUT);
  pinMode(Hall, INPUT);
  pinMode(trigger0,OUTPUT);
  pinMode(echo0, INPUT);
  pinMode(triggerPlus45,OUTPUT);
  pinMode(echoPlus45, INPUT);
  pinMode(triggerMinus45,OUTPUT);
  pinMode(echoMinus45, INPUT);
}

// Programmschleife
void loop() {
  // put your main code here, to run repeatedly:
  long Zeit = millis();                         // Zeit seit Programmstart messen
  
  //_________________________________________________________________
  // Geschwindigkeit berechnen mit dem Hall-Sensor
  HallStatus = digitalRead(Hall);               // Hall-Sensor einlesen

  if (HallStatus == HIGH)                       // Abfrage für die Realisierung der Flankenerkennung
  {
    Merker = 1;                                 // Merker für die Realisierung der Flankenerkennung
    digitalWrite(LED, LOW);                     // LED zum debuggen
  }
  
  if (HallStatus == LOW && Merker == 1)         // Realisierung der Flankenerkennung
  {
    digitalWrite(LED, HIGH);                  // LED zum debuggen
    delay(10);                                  // Verzögerung zum entprellen
    n = n+1;                                    // Zähler für die Umdrehungen
    digitalWrite(LED, LOW);                   // LED zum debuggen
    //Serial.print("Anzahl Umdrehungen: ");     // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(n);                        // Ausgabe auf dem Seriellen Monitor zum debuggen
    Merker = 0;                                 // Merker für die Realisierung der Flankenerkennung
  }
  //n = n+1;

  if (n==1)                       //Bei erster Umdrehung...
  {
    t1 = millis();                //... Zeit erfassen
  }
  if (n==3)                       //Bei dritter Umdrehung...
  {
    t2 = millis();                //... Zeit erfassen
    dt1 = t2-t1;                  // Zeit Differenz berechnen
    v1 = PI*((2/(dt1))*r)*3.6;    // Geschwindigkeit des Fahrrades berechnen
    n=0;                          // Zähler für die Umdrehungen zurücksetzen
  }
  //v1 = 20;                      // Konstante geschwindigkeit zum debuggen
  //_________________________________________________________________
  // Trigger Signal Sensor 3 Hinten bei -45 Grad
  digitalWrite(triggerMinus45,LOW);
  delay(5);
  digitalWrite(triggerMinus45,HIGH);
  delay(10);
  digitalWrite(triggerMinus45,LOW);

  // Sensor 3 Hinten bei -45 Grad einlesen
  dauerMinus45 = pulseIn(echoMinus45, HIGH);
  // Entfernung Sensor 3 Hinten bei -45 Grad berechnen
  entfernungMinus45 = (dauerMinus45/2) * 0.3432;
  

  // Ausgabe der Entfernung von Sensor 3 Hinten bei -45 Grad 
  if (entfernungMinus45 >= 5000 || entfernungMinus45 <= 30)
  {
    //Serial.println("Sensor 3 Hinten bei -45 Grad Kein Messwert");     // Ausgabe auf dem Seriellen Monitor zum debuggen
  }
  else
  {
    DistanzMinus45 = (sin(45*(PI/180)) * entfernungMinus45) - 200;      // Umrechnung Entfernung/Distanz und Offset Lenkerbreite abziehen
    //Serial.print("Sensor 3 Hinten bei -45 Grad misst: ");             // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print(entfernungMinus45);                                  // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(" mm");                                            // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print("Distanz 3 Hinten bei -45 Grad berechnet: ");        // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print(DistanzMinus45);                                     // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(" mm");                                            // Ausgabe auf dem Seriellen Monitor zum debuggen
  }

  //_________________________________________________________________
  // Trigger Signal Sensor 2 Mitte bei 0 Grad
  delay(50);
  digitalWrite(trigger0,LOW);
  delay(5);
  digitalWrite(trigger0,HIGH);
  delay(10);
  digitalWrite(trigger0,LOW);
  
  // Sensor 2 Mitte bei 0 Grad einlesen
  dauer0 = pulseIn(echo0, HIGH);
  // Entfernung Mitte bei 0 Grad Berechnen
  entfernung0 = (dauer0/2) * 0.3432;
  
  
  // Ausgabe der Entfernung von Sensor 2 Mitte bei 0 Grad
  if (entfernung0 >= 5000 || entfernung0 <= 30)
  {
    //Serial.println("Sensor 2 Mitte bei 0 Grad Kein Messwert");    // Ausgabe auf dem Seriellen Monitor zum debuggen
  }
  else
  {
    Distanz0 = entfernung0 - 150;                                   // Offset Lenkerbreite addieren
    //Serial.print("Sensor 2 Mitte bei 0 Grad misst: ");            // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print(entfernung0);                                    // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(" mm");                                        // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print("Sensor 2 Mitte bei 0 Grad berechnet: ");        // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print(Distanz0);                                       // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(" mm");                                        // Ausgabe auf dem Seriellen Monitor zum debuggen
  }

  //_________________________________________________________________
  // Trigger Signal Sensor 1 Vorne bei +45 Grad
  delay(50);
  digitalWrite(triggerPlus45,LOW);
  delay(5);
  digitalWrite(triggerPlus45,HIGH);
  delay(10);
  digitalWrite(triggerPlus45,LOW);

  // Sensor 1 Vorne bei +45 Grad einlesen
  dauerPlus45 = pulseIn(echoPlus45, HIGH);
  // Entfernung Sensor 1 Vorne bei +45 Grad Berechnen
  entfernungPlus45 = (dauerPlus45/2) * 0.3432;
  

  // Ausgabe der Entfernung von Sensor 1 Vorne bei +45 Grad
  if (entfernungPlus45 >= 5000 || entfernungPlus45 <= 30)
  {
    //Serial.println("Sensor 1 Vorne bei +45 Grad Kein Messwert");  // Ausgabe auf dem Seriellen Monitor zum debuggen
  }
  else
  {
    DistanzPlus45 = (sin(45*(PI/180)) * entfernungPlus45) - 300;    // Umrechnung Entfernung/Distanz und Offset Lenkerbreite abziehen
    //Serial.print("Sensor 1 Vorne bei +45 Grad misst: ");          // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print(entfernungPlus45);                               // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(" mm");                                        // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print("Distanz 1 Vorne bei +45 Grad berechnet: ");     // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print(DistanzPlus45);                                  // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(" mm");                                        // Ausgabe auf dem Seriellen Monitor zum debuggen
  }
  //delay(1000);
  //_________________________________________________________________
  // Berechnung der Geschwindigkeit des überholenden KFZ
  if (entfernungMinus45 < 2000)                   // Bei einer gemessenen Entfernung kleiner 2 m an Sensor 3...
  {
    t3 = millis();                                //... Zeit erfassen
    //Serial.print("t3: ");                       // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(t3);                         // Ausgabe auf dem Seriellen Monitor zum debuggen
    Merker1 = 1;                                  // Merker Sensor 3 setzen
  }
  if (Merker1 ==1 && entfernung0 < 2000)          // Bei einer gemessenen Entfernung kleiner 2 m an Sensor 2...
  {
    Merker2 = 1;                                  // Merker Sensor 2 setzen
    Merker1 = 0;                                  // Merker Sensor 3 zurücksetzen
  }
  if (Merker2 ==1 && entfernungPlus45 < 2000)     // Bei einer gemessenen Entfernung kleiner 2 m an Sensor 1...
  {
    t4 = millis();                                //... Zeit erfassen
    
    dt2 = t4 - t3;                                // Zeit Differenz berechnen
    //Serial.print("dt2: ");                      // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(dt2);                        // Ausgabe auf dem Seriellen Monitor zum debuggen
    s_fr = (v1 / 3.6) * dt2;                      // Strecke des Fahrrades berechnen
    s_kfz = (s_fr + s_o + DistanzPlus45 + DistanzMinus45);      // Strecke des KFZ berechnen
    //Serial.print("s_kfz: ");                    // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(s_kfz);                      // Ausgabe auf dem Seriellen Monitor zum debuggen
    v2 = (s_kfz / dt2) * 3.6;                     // Geschwindigkeit des KFZ berechnen
    //Serial.print("Fahrrad Geschwindigkeit: ");  // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(v1);                         // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.print("KFZ Geschwindigkeit: ");      // Ausgabe auf dem Seriellen Monitor zum debuggen
    //Serial.println(v2);                         // Ausgabe auf dem Seriellen Monitor zum debuggen
    Merker2 = 0;                                  // Merker Sensor 2 zurücksetzen
  }

  
  
  //_________________________________________________________________
  // Ausgabe auf dem LCD-Display
    switch (Anzeige)                                // Switch für die durchlaufende Anzeige am LCD-Display
    {
      case Anzeige1:
        // Anzeige-Zustand 1 angelegt - Willkommen und Initialisierung

        lcd.clear();                                // Display anzeige Löschen
        lcd.setCursor(0, 0);                        // Curser erstes Zeichen erste Zeile setzen
        lcd.print("BikeSafetyAssistent");           // Ausgabe erste Zeile des LCD-Displays
        lcd.setCursor(0, 1);                        // Curser erstes Zeichen zweite Zeile setzen
        lcd.print("Initialisierung Erfolgreich");   // Ausgabe zweite Zeile des LCD-Displays
        
        if (LetzteAusfuehrungKurz < (Zeit-PauseAnzeigeLang))    // Ersatz für Delay
        {
          LetzteAusfuehrungKurz = Zeit;
          LetzteAusfuehrungLang = Zeit;
          Anzeige = Anzeige2;                       //Wechsle in den Zustand 2
        }
        break;

      case Anzeige2:
        // Anzeige-Zustand 2 angelegt - Anzeige der eigenen Geschwindigkeit
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Geschwindigkeit:");
        lcd.setCursor(0, 1);
        
        if (v1 >= 50 || v1 <= 10)
        {
          lcd.print("NAN");
        }
        else
        {
          lcd.print(v1);
        }

        if (LetzteAusfuehrungLang < (Zeit-PauseAnzeigeLang))    // Ersatz für Delay
        {
          LetzteAusfuehrungLang = Zeit;
          Anzeige = Anzeige3;                       //Wechsle in den Zustand Anzeige3
        }
        break;


      case Anzeige3:
        // Anzeige-Zustand 3 angelegt - Anzeige der gemessenenen Abstände
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Distanz0,+45,-45");
        lcd.setCursor(0, 1);
        
        if (Distanz0 >= 5000 || Distanz0 <= 30)
        {
          lcd.print("NAN");
        }
        else
        {
          lcd.print(Distanz0);
        }
        lcd.print(", ");
        
        if (DistanzPlus45 >= 5000 || DistanzPlus45 <= 30)
        {
          lcd.print("NAN");
        }
        else
        {
          lcd.print(DistanzPlus45);
        }
        lcd.print(", ");
        
        if (DistanzMinus45 >= 5000 || DistanzMinus45 <= 30)
        {
          lcd.print("NAN");
        }
        else
        {
          lcd.print(DistanzMinus45);
        }
      
        if (LetzteAusfuehrungLang < (Zeit-PauseAnzeigeLang))    // Ersatz für Delay
        {
          LetzteAusfuehrungLang = Zeit;
          Anzeige = Anzeige4;                       //Wechsle in den Zustand Anzeige4
        }
        break;

      
      case Anzeige4:
        // Anzeige-Zustand 4 angelegt - Anzeige der Geschwindigkeit des überholenden KFZ
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("PKW-Geschwindigkeit:");
        lcd.setCursor(0, 1);
        
        if (v2 >= 200 || v2 <= 20)
        {
          lcd.print("NAN");
        }
        else
        {
          lcd.print(v2);
        }

        if (LetzteAusfuehrungLang < (Zeit-PauseAnzeigeLang))    // Ersatz für Delay
        {
          LetzteAusfuehrungLang = Zeit;
          Anzeige = Anzeige2;                       //Wechsle in den Zustand Anzeige2
        }
        break;
    }
  v2 = 0;
}



Aufbau

Der Bike Safety Assistent setzt sich aus verschiedenen Komponenten zusammen, die am Fahrrad an verschiedenen Stellen montiert werden. Die drei Ultraschallsensoren werden vorne (+45°), mittig (0°) und hinten (-45°) entsprechend Abbildung 1 montiert. Bei der Montage wurde für den mittigen und den hinteren Sensor eine Holzleiste mit Kabelbindern neben dem Gepäckträger montiert. Das Ende der Holzleiste wurde im Winkel von 45 Grad zugeschnitten und bildet so die Montagegrundlage für den hinteren Ultraschallsensor. Der mittige Ultraschallsensor wurde am anderen Ende der Holzleiste parallel zum Fahrrad montiert, welcher sich in Höhe der Sitzposition befindet. Das nachfolgende Bild visualisiert die Montagepunkte.


Abb. 27: Montage hinten


Auf der Holzleiste erkennt man die zwei angeschraubten Plastikdosen, welche den Mikrocontroller (im hinteren Bereich) sowie das Steckbrett (vorderer Bereich) vor Witterungseinflüssen schützen. Die Verkabelung wird durch kleine Bohrlöcher aus den Gehäusen herausgeführt.

Der dritte Ultraschallsensor befindet sich an der Vorderachse des Fahrrades und ist dort ebenfalls mit einer Holzleiste befestigt, die einen Winkel von 45 Grad aufweist.


Abb. 28: Montage vorne


Der Hall-Sensor ist an der Vorderradgabel und zwei Magnete sind an den Speichen des Vorderades montiert. Hiermit werden die Umdrehungen des Vorderrades erfasst. Das Display befindet sich am Lenker und ist dort mittig angebracht, um während der Fahrt problemlos die Werte ablesen zu können. Die Verkabelung der drei vorderen Komponenten wird, um das Oberrohr des Fahrradrahmens gewickelt, mit dem hinten liegenden Mikrocontroller verbunden.



Komponententest

Beim Komponententest werden die in der Komponentenspezifikation definierten Komponenten nach speziellen festgelegten Verfahren getestet. Abbildung 29 zeigt das Deckblatt des Komponententests. Die Tabelle selbst ist in dieser Excel-Tabelle zu finden.

Abb. 29: Deckblatt Komponententest


Im Folgenden werden die Testmethoden zu den einzelnen Komponenten kurz erläutert. Die konkreten Testfälle mit den jeweiligen Parametern können der oben verlinkten Tabelle entnommen werden.

Test der Ultraschallsensoren

Hier sollte geprüft werden, ob die Ultraschallsensoren plausible Werte messen. Dazu wurden für jeden Test eine andere Distanz zwischen dem Messobjekt und dem Sensor definiert und im Voraus mit einem Maßband abgemessen. Anschließend wurde eine Messung mit den Ultraschallsensoren durchgeführt und der ausgegebene Wert mit dem zuvor gemessenen Wert verglichen. Hierbei wurde eine Abweichung von unter einem Prozent als akzeptabel eingestuft.

Test des Hall-Sensors

Der Hall-Sensor wurde schon in einem sehr frühen Stadium des Prototypenbaus getestet. Dafür wurde lediglich ein Magnet an den Hall-Sensor angenähert. Sobald der Sensor durchschaltet, leuchtet eine LED, worüber der Schaltvorgang visualisiert wurde.

Test des Ein- und Ausschaltens

Auch das Ein- und Ausschalten des Systems mittels Ab- und Anklemmen der Batterie wurde getestet. Unter der Voraussetzung, dass das System und vor allem das Display bereits einwandfrei funktioniert, wurde die Batterie angeklemmt und beobachtet, ob die Display-Anzeige erscheint. Beim Abklemmen der Batterie sollte das Display wieder ausschalten. Dies war bei dem Test der Fall und somit wurde der Komponententest als bestanden eingestuft.

Test der Distanzberechnung

Hier musste getestet werden, ob bei den äußeren beiden Ultraschallsensoren die Umrechnung der im 45-Grad-Winkel gemessenen Werte in die senkrechten Abstände funktioniert. Bei dem mittleren Abstandssensor musste für die korrekte Berechnung lediglich ein Offset für die Lenkerbreite abgezogen werden. Diese Aspekte wurden mit einer ähnlichen Methode wie der Test der Ultraschallsensoren validiert. Es wurde also ein Objekt in einem vorher definierten und gemessenen Abstand zu den Ultraschallsensoren positioniert und der korrekte senkrechte Abstand errechnet. Anschließend wurde die Messung mittels des Bike Safety Assistenten durchgeführt und die durch das Programm errechneten Werte und die im Voraus händisch ermittelten Werte miteinander verglichen.

Test der Ermittlung der Fahrradgeschwindigkeit

Für diesen Test wurde ein schlichter Vergleich als Validierung durchgeführt. Zum einen wurde die Fahrradgeschwindigkeit mittels des Bike Safety Assistenten ermittelt und zum anderen zeitgleich mit einem herkömmlichen Fahrrad-Tacho gemessen. Die ermittelten Werte wurden verglichen, wobei nur geringe Abweichungen festgestellt werden konnten. Daher wurde der Test als bestanden eingestuft.

Test der Ermittlung der KFZ-Geschwindigkeit

Für diesen Test wurde eine konstante Fahrrad-Geschwindigkeit von 20 km/h angenommen, da das Fahrrad für diesen Test nicht bewegt wurde, sondern statisch an einer Stelle stand. Anschließend wurden die Ultraschallsensoren nacheinander durch das Vorbeigehen einer Person ausgelöst und die Zeit des simulierten Überholvorgangs mittels einer Handystoppuhr gemessen. Die von dem System so ermittelte KFZ-Geschwindigkeit wurde dann auf Plausibilität überprüft.

Test der permanenten Darstellung

Für diesen Test wurde eine optische Bewertung der Anzeige durchgeführt. Hier wurde jeweils überprüft, ob die Fahrrad-Geschwindigkeit, die Überholdistanz und die KFZ-Geschwindigkeit in gewünschter Weise dargestellt werden.



Projektvideo


Zusammenfassung


Lessons Learned

Das Projekt des Bike Safety Assistenten konnte erfolgreich umgesetzt werden. Das System funktioniert für einen Prototypen hinreichend genau und könnte, mit einigen Verbesserungen, zur Sicherheit des Fahrradfahrers im Straßenverkehr beitragen. Die Schwierigkeiten bei der Umsetzung des Projektes lagen vor allem in der knappen Zeit. So wurde bspw. nicht genügend Puffer für die Genehmigung des Projektes und für die Vorbereitung der parallel laufenden Praktika eingeplant, was zum Ende hin Zeitdruck erzeugte. Eine weitere Schwierigkeit/Verzögerung wurde durch die anfängliche Verwendung eines Touch-Displays hervorgerufen. Um die Ausgabe der Distanzen und Geschwindigkeiten übersichtlich zu gestalten, sollte nicht das im Funduino-Set beinhaltete LCD-Display, sondern ein größeres Touch-Display verwendet werden. Allerdings wurde hier die Bauteilkompatibilität im Voraus nicht gewissenhaft geprüft, sodass es im Weiteren zu diversen Problemen gekommen ist. Unter anderem waren bei dem verwendeten Funduino UNO nicht genügend Ports vorhanden, um sowohl das Touch-Display als auch alle benötigten Sensoren zu betreiben. Dies hätte im Vorfeld durch eine umfassendere Recherche umgangen werden können. So hätte bspw. direkt mit einem anderen Microcontroller gearbeitet werden können. Letztlich wurde anstatt des Touch-Displays das dem Funduino-Set beiliegenden LCD-Display verwendet, welches für die Anzeige der ermittelten Distanzen und Geschwindigkeiten vollkommen ausreicht. Jedoch könnte durch die Verwendung eines Touch-Display die Anwenderfreundlichkeit gesteigert werden. Ein weiterer Aspekt bezüglich des Zeitmanagements war die Kommunikation zwischen den Projektbeteiligten. Diese wurde zum Ende hin immer weiter verbessert, da Aufgaben klarer verteilt wurden und dies bspw. durch To-Do-Listen verschriftlicht wurde. Ein nicht unwesentlicher Punkt war zum Ende hin die Durchführung der Komponententests. Hier wurde das System hinsichtlich der Überholgeschwindigkeit des KFZ zuerst mit unrealistischen Zahlen validiert. Dies führte dazu, dass sich die ausgegebenen KFZ-Geschwindigkeiten trotz unterschiedlicher Überholzeiten nicht signifikant verändert haben. Letztlich wurde das System mit deutlich geringeren Überholzeiten getestet, sodass tatsächlich Veränderungen hinsichtlich der Geschwindigkeit zu beobachten waren.

Zusammenfassend bleibt festzuhalten, dass das Projekt „Bike Safety Assistent“ erfolgreich mit der zur Verfügung stehenden Zeit und den vorhandenen Mitteln umgesetzt werden konnte, es jedoch einige Punkte im Projektverlauf gab, die bei einem nächsten Projekt verbessert werden können.


Ausblick

Um den vorhandenen Prototypen weiterzuentwickeln und somit ein fertiges und einsatzbereites Produkt zu erhalten, müsste wie bereits beschrieben ein Touch-Screen verbaut werden, um die Anwenderfreundlichkeit zu steigern. Ein weiterer Punkt wäre die Parallelisierung des Programmablaufs. Hier muss sichergestellt werden, dass das System zu jeder Zeit einwandfrei läuft. In einigen Situationen war dies bei dem Prototypen nicht gegeben, da bei hohen Geschwindigkeiten der Microcontroller manchmal nicht jede Raddrehung gezählt hat. So haben sich Messfehler ergeben. Dies war der Tatsache geschuldet, dass auf dem Microcontroller aktuell das Programm ohne parallele Messungen und Berechnungen durchläuft. Daher konnten teilweise keine neuen Messungen erkannt werden, da der Microcontroller noch Berechnungen aufgeführt hat, anstatt die Messwerte der Sensoren abzufragen. Dies würde durch einen parallelen Programmablauf vermieden werden. Auch hinsichtlich der äußeren Gestaltung der Bike Safety Assistenten könnten Verbesserungen durchgeführt werden. So könnten bspw. wetterfeste Gehäuse entwickelt und 3D-gedruckt oder auch die Befestigungen an dem Fahrrad optimiert werden. Auch die Realisierung von neunen Features wäre denkbar. So könnte bspw. ein Kamerasystem verbaut werden, welches bei einem zu geringen Überholabstand das Kennzeichen es KFZ erkennt und speichert.

Der Bike Safety Assistent würde besonders in Großstädten die Sicherheit für Fahrradfahrer erhöhen und somit die Nutzung des Fahrrades noch attraktiver machen.



Projektunterlagen

Die Projektunterlagen befinden sich auf dem SVN Server der HSHL und stehen hier als ZIP-Archiv zum Download zur Verfügbung.

Literaturverzeichnis



→ zurück zum Hauptartikel: WS 21/22: Fachpraktikum Elektrotechnik (MTR) und Angewandte Elektrotechnik (BSE)