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. 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ähert 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