Einparkhilfe - Code Week Award

Werbung
Informatik Enlightened
Station 2 - Einparkhilfe
„Wenn’s knallt, noch’n Meter…“
Jeder von euch, der demnächst in der Fahrschule seine Runden dreht, wird ein
„Schreckensszenario“ kennenlernen: rückwärts einparken! Man dreht und wendet das Auto hin
und her, steht letzten Endes doch schief und wendet vor allen Dingen den Blick nicht von den
Spiegeln ab – aus Angst, das eigene Heck küsst die Stoßstange des Hintermannes.
Was für ein Glück, dass in immer mehr
Fahrzeugen Einparkhilfen eingebaut sind,
die durch ihr drängendes und immer
schneller werdendes Piepen vor dem
drohenden Zusammenstoß warnen.
Doch wie funktioniert so eine
Einparkhilfe? Woher kennt das Fahrzeug
den Abstand? Und wie wird aus dem
Abstand ein Warnton?
Abb. 1: “Parking assist” von Nozilla
Die
Antwort
liegt
im
Verborgenen:
„unsichtbares Licht“! Oder genauer gesagt
Infrarot-Licht, das euch bestimmt von Infrarot-Fernbedienungen bekannt ist. Licht im
sogenannten Infrarot-Spektrum ist für das menschliche Auge nicht sichtbar. Es wird von einem
Sensor ausgesandt, von einer Oberfläche reflektiert und anschließend von einem Empfänger
registriert. Wie damit ein Abstand gemessen werden kann und wie aus dem Abstand ein
Signalton erzeugt wird, das werdet ihr hier mit dem Arduino-Mikrocontroller nachstellen… und
damit hoffentlich verhindern, dass unser Testfahrzeug eine verbeulte Stoßstange bekommt… ;-)
Der Aufbau der Schaltung
Benötigte Bauteile
Die Schaltung der Infrarot-Einparkhilfe auf dem Arduino-Board ist nicht
kompliziert, ihr benötigt lediglich – natürlich neben Arduino und Steckbrettern
–




... 2 Verlängerungskabel (rot und blau),
… einen Piezo-Signalgeber und
... einen Infrarot-Distanz-Mess-Sensor.
… einen Infrarot-Distanz-Mess-Sensor.
Abb. 2: Piezo-Signalgeber und IRDistanz-Mess-Sensor
1
Informatik Enlightened
Station 2 - Einparkhilfe
IR-Distanz-Mess-Sensor
Der Infrarot-Distanz-Mess-Sensor „Sharp GP2Y0A21YK“ ist ein komplexes Bauteil mit integrierter
Verschaltung, das Entfernungen in einem Bereich von ca. 10-80 cm recht genau erkennen kann.
Dazu besitzt der Sensor zwei „Augen“, einen
Sender und einen Empfänger. Der Sender
sendet einen Infrarot-Lichtstrahl aus, der
von einer Oberfläche reflektiert wird und auf
den Empfänger trifft – je nach Entfernung in
einem unterschiedlichen Winkel. Daraus
lässt sich dann mit einem mathematischen
Verfahren der Abstand berechnen. Die Skizze
gibt euch dazu einen Überblick.
lichtempfindlicher
Empfänger
Sender
(Infrarot-LED)
Piezo-Signalgeber
Der akustische Piezo-Signalgeber ist ein sogenannter „Summer“ oder
„Pieper“, ein kleines Bauteil, das elektronisch angesteuert wird und einen
bestimmten Ton erzeugt – es ist also unsere akustische Ausgabe. Einsatz
finden sie überall dort, wo zur Warnung oder Benachrichtigung schnell
laute Töne erzeugt werden müssen – z.B. beim Rauchmelder, in der
Mikrowelle oder eben als Piepton einer Einparkhilfe am PKW.
Abb. 3.1: PiezoSignalgeber
Jetzt könnt ihr euch ans Zusammenbauen begeben!
Die folgenden Schritte helfen euch bei der Verkabelung: (Steckbretter werden dabei nicht
benötigt)
1. Verbindet den Minus-Pol (das kürzere Beinchen!) des Signalgebers
direkt über das blaue Verlängerungskabel mit einem GND-Pin des
Arduino (bei den digitalen Anschlüssen).
2. Schließt den
Plus-Pol
(das
längere
Beinchen!)
über das rote
Verlängerungskabel an einen digitalen Pin [z.B. 8] an, über den ihr die
Ausgabe leiten werdet.
[Hinweis: Pin 0 und 1 dürfen nicht verwendet werden.]
2
Abb. 3.2: PiezoSignalgeber
Informatik Enlightened
Station 2 - Einparkhilfe
3. Der IR-Distanz-Sensor wird direkt am Arduino angeschlossen, mit dem schwarzen Kabel
an GND (bei den analogen Anschlüssen), dem roten Kabel am 5V-Anschluss und dem
weißen Kabel an einem analogen Pin [z.B. A0], den ihr als Eingangspin für die
Abstandswerte benutzt.
[Hinweis: Eure Lösung kann anders aussehen (z.B. die Belegung der Pins) als auf den
Fotos auf der nächsten Seite, das ist aber nicht schlimm, da es keine eindeutige Lösung
gibt!]
Analoge Pins
Bisher kennt ihr nur digitale Pins, über die z.B. eine LED angeschlossen wird. An diesen Pins
können nur binäre Werte ein- und ausgelesen werden – also ein/aus, 0/1 oder eben die
bekannten Werte HIGH und LOW für eine hohe bzw. niedrige Spannung.
Ein Distanz-Sensor zum Beispiel kann aber nicht nur zwei Werte annehmen, sondern misst ja im
Bereich zwischen dem minimalen und maximalen Wert ganz viele Zwischenwerte. Das
realisieren am Arduino analoge Pins (A0 bis A5), an denen ein ganzer Bereich gemessen werden
kann.
Abb. 4.1
Komplette
Schaltung
Abb. 4.2
Komplette
Schaltung
(Fritzing-Bild)
3
Informatik Enlightened
Station 2 - Einparkhilfe
Manuelle Abstandsmessung
Zuallererst werdet ihr jetzt die Daten, die der Infrarot-Sensor misst, über ein kleines Programm
einlesen und euch auf dem Seriellen Monitor ausgeben lassen. Daher ist eure erste Aufgabe, mit
dem IR-Sensor Werte zu messen und sie entsprechend der Tabelle am Ende der Aufgaben
verschiedenen Zentimeter-Angaben per Hand zuzuordnen. Ihr müsst ja irgendwie feststellen
können, wie diese Werte zu den Zentimeter-Angaben passen, die wir eigentlich benötigen!
Abb. 5: Ausgabewerte des IR-Distanz-Mess-Sensors für Abstände von 10-80cm
An einem analogen Eingangspin bekommen wir auf dem Arduino immer Werte im Bereich 0 bis
1023, also müsst ihr diese zuerst in Zentimeter umrechnen. Das ist allerdings gar nicht so
einfach, d.h. es gibt keine einfache mathematische Formel zum Umrechnen (der Graph in der
Abbildung oben ist schließlich ganz schön seltsam).
[Hinweis: Später stellen wir euch eine Formel zur Umrechnung zur Verfügung, die ihr ganz
einfach benutzen und mit euren von Hand gemessenen Werten vergleichen könnt!]
In diesem ersten Schritt lernt ihr, …


… Sensor-Werte über einen analogen Pin einzulesen und
… diese Werte auf dem Seriellen Monitor auszugeben.
Eure ToDo’s
1. Öffnet einen neuen Arduino-Sketch und speichert ihn unter einem sinnvollen Namen.
2. Erstellt das Grundgerüst eines jeden Arduino-Sketches, so wie ihr es aus dem
Einstiegsprojekt kennt!
4
Informatik Enlightened
Station 2 - Einparkhilfe
3. Bevor ihr
und
mit Leben füllt, definiert (wie im Einführungsprojekt
gesehen) eine Variable vom Typ „
“ für den analogen Eingangspin und weist ihr die
entsprechende Nummer des Pins zu.
[Hinweis: Auch wenn die analogen Pins mit A0, A1 usw. bezeichnet sind, benutzt man für
die Zuweisung im Sketch nur den Zahlenwert!]
4. Jetzt müsst ihr noch eine weitere Variable deklarieren, in die ihr später die Sensor-Daten
speichern werdet, um schnell und direkt darauf zugreifen zu können. Denkt hier,
genauso wie bei Schritt 2, an aussagekräftige
Variablen-Namen!
5. Nun zu
:
a. Wie wird die Übertragung zum Seriellen
Monitor gestartet?
Welcher Befehl, den ihr im
Einstiegsprojekt kennen
gelernt habt, startet nochmal
den Seriellen Monitor?
______________________________________
6. Füllt jetzt
mit Leben:
a. Der wichtigste Schritt ist das Einlesen der Sensorwerte. Im Gegensatz zum Setzen
der Spannung an einem digitalen Pin auf HIGH oder LOW müsst ihr die analogen
Werte des Sensors durch den Befehl
einlesen. Weist also jetzt der Variable aus Schritt 4 über das „=“-Zeichen die
Werte zu und wählt dabei den richtigen Pin aus.
__________________ = ___________________ ( __________________ );
b. Nun folgt noch die Ausgabe auf dem Seriellen Monitor, die wieder durch
.
eingeleitet wird. Setzt in die Anführungszeichen eine kurze Beschreibung dessen,
was angezeigt werden soll.
c. Fügt eine zweite Ausgabe hinzu, die aber jetzt in den Klammern die Variable
enthält,
die
die
Sensor-Werte
gespeichert
hat.
Dieses
Mal
ohne
Anführungszeichen, da diese nur bei Text verwendet werden! In diesem Fall
wollen wir aber die Sensor-Werte anzeigen lassen, die in der Variablen
gespeichert sind.
d. Damit die Werte später nicht viel zu schnell auf dem Seriellen Monitor
runtersausen, setzt zum Schluss noch ein
Ausgabebefehle, sodass die Werte nur
jede ein oder zwei Sekunden aktualisiert
werden.
5
hinter die
1 Sekunde = 1000 Millisekunden
Informatik Enlightened
Station 2 - Einparkhilfe
7. Es ist an der Zeit, den Sketch zu testen! Schließt den Arduino wieder an, führt das
Programm aus und beobachtet die Sensor-Werte.
Wie ihr bald feststellen werdet, bewegen sich die gemessenen Distanz-Werte des Sensors nicht
in dem angegebenen Zentimeter-Bereich von ca. 10-80 cm.
min = ____________
Welche minimalen und maximalen Werte
liefert der Sensor im angegebenen
Zentimeter-Bereich?
max = ____________
Um hierbei aber nicht nur Minimum und Maximum zu kennen, sondern eine vernünftige
Einteilung der Abstände vornehmen zu können, ist jetzt „Maßarbeit“ gefragt… Nutzt den langen
Papierstreifen und den Zollstock vor euch, um herauszufinden, welche Sensor-Werte bei 10, 20,
30 Zentimetern usw. ausgegeben werden, und tragt diese in die Tabelle ein!
[Hinweis: Der IR-Sensor misst am besten und genausten, wenn man z.B. ein weißes Blatt
Papier als reflektierende Oberfläche verwendet!]
Abstand
10 cm
20 cm
30 cm
40 cm
50 cm
60 cm
70 cm
80 cm
SensorWert
Lasst euch beim Messen nicht frustrieren! Auch wenn der Sensor ganz ruhig gehalten wird, kann
es doch passieren, dass er unterschiedliche Werte für den gleichen Abstand misst. Entscheidet
euch hier einfach für einen sinnvollen Durchschnittswert!
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
Was könnt ihr für den
Bereich unter 10cm
feststellen?
6
Informatik Enlightened
Station 2 - Einparkhilfe
Ein einfacher Warnton
Nach dem kurzen Abstecher, geht es jetzt wieder mit dem Programmieren der Schaltung weiter,
denn: der Sensor misst zwar die Abstände, aber einen Warnton hört ihr noch nicht. Dazu benutzt
ihr das zweite neue Bauteil, den Piezo-Signalgeber.
Im nächsten Schritt lernt ihr, …

… den Piezo-Signalgeber in einen Sketch einzubinden und anzusteuern und in
Abhängigkeit eines Sensor-Wertes ein akustisches Signal zu erzeugen.
Eure ToDo’s
1. Speichert euren bestehenden Arduino-Sketch unter einem anderen Namen („Speichern
unter“). Ihr werdet eure Programme von nun an immer erweitern, verändern und
anpassen.
2. Erstellt für den Piezo-Signalgeber eine
-Variable und weist ihr den digitalen
Ausgangspin zu, über den das Bauteil mit dem Arduino verbunden ist (falls noch nicht
geschehen).
3.
: Hier müsst ihr den Pin des Piezo-Signalgebers als Ausgang definieren (da ja
ein Ton erzeugt wird) - genauso wie ihr das bei der LED im Einführungsprojekt gemacht
habt.
4. In
benötigt ihr jetzt die bekannten
-
-Anweisungen aus dem
Einstiegsprojekt.
-
-Anweisungen
Möchte man in einem Sketch definieren, dass etwas nur unter einer bestimmten Bedingung
passieren soll – z.B. dass ein Piepton erst bei zu geringem Abstand ertönt – bedient man sich
der sogenannten
-
-Anweisungen. So werden diese benutzt:
Falls die Bedingung wahr ist, wird der erste Programmblock ausgeführt und wenn die Bedingung
falsch ist, der zweite. Dabei sind mit <Bedingung> meist mathematische Vergleiche (>, <, >=, <=,
==) o.Ä. gemeint. Es gibt aber auch den logischen Operator && [und] um zu überprüfen, ob zwei
Bedingungen gleichzeitig wahr sind:
7
Informatik Enlightened
Station 2 - Einparkhilfe
a. Jetzt gilt es, eine
-
-Anweisung zu benutzen. Legt dazu die Grundstruktur
wie oben beschrieben an.
b. Ihr wollt, dass der Piezo-Signalgeber nur piepst – einen dauernden Ton erzeugt –,
wenn der Abstand zum Infrarot-Sensor zu gering wird (hier unter 40 cm). Welche
Variable braucht ihr also, um diese Bedingung zu formulieren? Seht euch die
Tabelle nochmal an: Mit welchem Grenzwert müsst ihr vergleichen?
c. Falls eure Bedingung wahr ist, der Abstand also zu gering, soll ein Dauerton
erklingen. Dazu muss der digitale Ausgangspin auf HIGH gesetzt werden (was
genauso funktioniert wie bei einer LED).
d. Im anderen Fall soll der Ton natürlich nicht zu hören sein. Überlegt euch, welcher
Befehl den Piezo-Signalgeber wieder „ausschaltet“ und vollendet so die
-Anweisung. Nutzt das Schema um eure Überlegungen aufzuschreiben:
5. Fertig! Übertragt den Sketch auf den Arduino und testet ihn. Seid ihr
zufrieden mit dem gewählten Abstand? Ertönt der Ton zu spät/zu früh? usw.
Und jetzt?!
Habt ihr weitere Ideen und Verbesserungsvorschläge? Diskutiert sie in der Gruppe und notiert
sie unten! In den nächsten beiden Teilen werdet ihr eure Einparkhilfe immer weiter optimieren.
Viel Spaß beim Experimentieren, Basteln und Programmieren!!! 
Notizen:
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
8
Informatik Enlightened
Station 2 - Einparkhilfe
„Bei euch piepst‘s wohl!“
Oder auch nicht… Denn: bisher habt ihr das Projekt Einparkhilfe auf den Stand gebracht, dass
bei zu geringer Entfernung ein Dauerton ertönt. Ein Fahrer sollte aber auch durch die
Einparkhilfe ungefähr abschätzen können, wieviel Platz er noch hat, ob also noch keine Gefahr
besteht, er sich dem Hindernis nähert oder schon ganz kurz davor ist!
Das alles soll durch den Piezo-Signalgeber realisiert werden, indem dieser einfach
unterschiedlich schnell piepst.
Habt ihr jetzt schon ein paar Vorschläge,
wie ihr das Umsetzen könnt? (Denkt
einmal an das Einsteigsprojekt…)
In der Optimierung lernt ihr, …
 … anhand der Sensor-Werte Abstandsbereiche festzulegen und
 … durch
und Verzögerung mit
einen Piepton zu erzeugen.
Eure ToDo’s
1. Zusammengebaut ist schon alles, also geht es los, indem ihr euren alten Sketch unter
einem neuen Namen abspeichert!
2. Eure einzige „Baustelle“ dieses Mal ist
, genauer gesagt der Teil mit der
-Anweisung:
a. Seht euch noch einmal eure Tabelle auf Seite 6 an und überlegt euch eine
passende Einteilung der Sensor-Werte und Zentimeter in einen Bereich, in dem
kein Ton erklingt, und zwei Bereiche mit unterschiedlichen PiepsGeschwindigkeiten.
Bereich 1
- keine Gefahr -
Bereich 2
- nährt sich Hindernis -
Bereich 3
- Gefahr -
Zentimeter
>_____
______-______
<______
Sensor-Werte
<_____
______-______
>______
b. Nun müsst ihr nur noch eure
-Anweisung aus dem ersten Teil ein wenig
anpassen und die eben bestimmten Bereiche einbauen. Dazu werden aus der
einen
-Anweisung (die ja nur zwei Bereiche unterscheiden kann) drei
einzelne if-Anweisungen.
[Hinweis: Nutzt die mathematischen Vergleiche und vor allem das logische && [und]
sinnvoll und verändert die Geschwindigkeit des Piepsens über
mit
unterschiedlichen Werten!]
9
Informatik Enlightened
Station 2 - Einparkhilfe
Für jeden der drei Bereiche benötigt ihr eine eigene
-Anweisung nach dem Schema:
3. Damit seid ihr auch schon bereit für die nächste Test-Phase! Überspielt euren
Sketch und überprüft eure verbesserte Einparkhilfe. Passt ggf. die gewählten
Bereiche oder die Verzögerungen so an, dass ihr mit dem Ergebnis zufrieden
seid.
10
Informatik Enlightened
Station 2 - Einparkhilfe
Geschafft?!?
Herzlichen Glückwunsch! Ihr habt es geschafft! Dank eurer Hilfe kann das Testfahrzeug
jetzt ganz gelöst rückwärts einparken 
Wenn ihr wollt, gibt es noch eine kleine Herausforderung für euch…
Fragt einfach einen Betreuer nach dem Bonus-Blatt!
Quellenverzeichnis:
Abb. 1 – Quelle: Nozilla „Parking assist“ unter Lizenz CC BY-SA 3.0/ verändertes Original
Abb. 2, 3.1, 3.2, 4.1, 5 – Quell: InfoSphere
Abb. 4.2 – Quelle: Screenshots der Fritzing-Software (http://fritzing.org)
Alle weiteren Grafiken/Icons – Quelle: InfoSphere
11
Herunterladen