Sie sind auf Seite 1von 65

Wissen, wie’s geht.

Wissen, wie’s geht. Leseprobe In dieser Leseprobe erfahren Sie alles zur Arduino-Plattform und können sofort Ihr

Leseprobe

In dieser Leseprobe erfahren Sie alles zur Arduino-Plattform und können sofort Ihr erstes Arduino-Projekt verwirklichen. Außerdem können Sie einen Blick in das vollständige Inhalts- und Stichwort- verzeichnis des Buches werfen.

»Die Arduino-Plattform« »Los geht’s – Erste Praxis«Inhalts- und Stichwort- verzeichnis des Buches werfen. Inhalt Index Der Autor Leseprobe weiterempfehlen Markus

Inhalt»Die Arduino-Plattform« »Los geht’s – Erste Praxis« Index Der Autor Leseprobe weiterempfehlen Markus Knapp

IndexArduino-Plattform« »Los geht’s – Erste Praxis« Inhalt Der Autor Leseprobe weiterempfehlen Markus Knapp Roboter

Der Autor»Los geht’s – Erste Praxis« Inhalt Index Leseprobe weiterempfehlen Markus Knapp Roboter bauen mit

Markus Knapp

Roboter bauen mit Arduino – Die Anleitung für Einsteiger

409 Seiten, broschiert, in Farbe, Oktober 2014 24,90 Euro, ISBN 978-3-8362-2941-8

Kapitel 4

Kapitel 4 Die Arduino-Plattform In diesem Kapitel erfahren Sie unter anderem, was es mit der berühmten

Die Arduino-Plattform

In diesem Kapitel erfahren Sie unter anderem, was es mit der berühmten Arduino-Platt- form auf sich hat. Außerdem werden Sie die Software installieren und kennenlernen.

Zunächst werden Sie sehen, was Arduino überhaupt ist. In Abschnitt 4.2 erläutere ich Ihnen dann die Bestandteile der Arduino-Hardware und gebe Ihnen eine Einführung in die Arduino-Software. Ich werde Ihnen das Roboterkit zu diesem Buch erläutern und aufzeigen, in welchem Kapitel Sie später die Einzelteile verwenden. Im Anschluss wer- den Sie in Abschnitt 4.3 die Arduino-Software und Treiber auf Ihrem Computer installie- ren. Dadurch werden Sie am Ende dieses Kapitels die Grundlagen kennen, die Sie benötigen, um in Kapitel 7, »Los geht’s! – Erste Praxis«, Ihr erstes Arduino-Programm zu schreiben und auf dem Arduino-Board zum Leben zu erwecken.

4.1 Was ist Arduino?

Wenn ich den Slogan der Projektwebseite 1 frei übersetze, ist Arduino »eine Open-Source- Elektronikplattform zum Erstellen von Prototypen, die auf flexibler, einfach zu benutzen- der Hard- und Software basiert. Sie ist für Künstler, Designer, Bastler und jeden gedacht, der daran interessiert ist, interaktive Objekte oder Umgebungen zu erstellen«.

Das erste Arduino-Board wurde bereits 2005 entwickelt und ist einer Legende zufolge nach einer Kneipe benannt. Das Arduino-Board war ursprünglich für Schulen gedacht, und es entwickelte sich schnell eine große Anhängerschaft, da sowohl die eigens dafür entwickelte Software als auch die Hardware hervorragend für Einsteiger geeignet sind. Allein in den ersten drei Jahren wurden circa 50.000 Arduino-Boards verkauft – ein äußerst erfolgreiches Open-Source-Projekt. Beim Arduino-Projekt sind sowohl die Hardware als auch die Software Open Source.

4.1.1 Die Arduino-Projektwebseite

Auch wenn die meisten Texte auf der Website des Arduino-Projekts in englischer Spra- che abgefasst sind, sollte sie später Ihre erste Anlaufstelle sein. Warum? Auch wenn Sie

1

http://arduino.cc

4 Die Arduino-Plattform

in Kapitel 6, »Programmiergrundlagen«, mehr über die »Arduino-Programmierspra- che« gelernt haben werden, können immer mal wieder Fragen auftauchen. Neben der vollständigen Sprachreferenz 2 finden Sie auf der Webseite unzählige fertige Beispiele mit ausführlichen Beschreibungen. Zusätzlich gibt es eine FAQ (eine Liste häufig gestell- ter Fragen) und ein Supportforum. Außerdem finden Sie dort eine Übersicht über die vielen verschiedenen Arduino-Boards, die immer auf dem aktuellsten Stand gehalten wird. Speichern Sie sich also gleich den Link der Projektseite, um ihn immer griffbereit zu haben.

4.2 Die Arduino-Hardware

Nach dieser Einleitung werde ich nun näher auf die Arduino-Hardware eingehen. Zuerst aber ein wichtiger Sicherheitshinweis.

eingehen. Zuerst aber ein wichtiger Sicherheitshinweis. Achtung: Elektrostatische Aufladung zerstört den Arduino!

Achtung: Elektrostatische Aufladung zerstört den Arduino!

Bevor Sie elektrische Bauteile oder Platinen wie Ihren Arduino berühren, sollten Sie sich zur Sicherheit immer »entladen«!

Entladen? Sicherlich haben Sie schon mal »einen gewischt bekommen«, als Sie auf einem Teppichboden mit Schuhen mit Gummisohle herumgelaufen sind und dann einen leitenden Gegenstand oder einen anderen Menschen berührt haben. Die Ursache dafür ist statische Aufladung, die leicht mehrere 10.000 Volt erreichen kann.

Da elektronische Bauteile und damit auch Ihr Arduino-Board verhältnismäßig empfind- lich gegen diese hohen Spannungen sind, sollten Sie elektrische Aufladung sicher »los- werden«. Dies können Sie ganz einfach tun, indem Sie sich kurz vor dem Berühren einer Platine über die Erde (Masse) entladen. In einer Wohnung oder einem Haus geht das am einfachsten, indem Sie kurz einen Wasserhahn, eine nicht lackierte Stelle Ihres Compu- ters oder eines Heizkörpers berühren, denn diese sind immer geerdet. Als zusätzliche Vorsichtsmaßnahme sollten Sie Platinen immer nur am Rand anfassen und die Bauteile oder Stecker nicht direkt an ihren Pins berühren. So erkennt man Sie gleich als Experten – und das wollen Sie doch so schnell wie möglich werden, oder?

4.2.1 Das Arduino-Board für den Roboter

Das Board, das Sie später auf Ihrem Roboter verwenden, heißt Arduino Uno. »Uno« ist Italienisch und bedeutet »Eins«. Denn es war das erste Arduino-Board, das je entwickelt

2

http://arduino.cc/en/Reference/HomePage

4.2 Die Arduino-Hardware

wurde. Es gibt neben diesem Board viele weitere Arduino-Boards, die ich Ihnen in Abschnitt 4.2.3 vorstellen werde. Zunächst will ich aber die einzelnen Bestandteile des Arduino Uno erläutern. Schauen Sie sich dazu Abbildung 4.1 genauer an.

erläutern. Schauen Sie sich dazu Abbildung 4.1 genauer an. Abbildung 4.1 Der »Arduino Uno« und seine

Abbildung 4.1 Der »Arduino Uno« und seine wichtigsten Bestandteile

Wenn Sie sich bereits mit Elektronik beschäftigt haben, wird Ihnen das eine oder andere Bauteil auf der Platine vielleicht bekannt vorkommen. In diesem Fall können Sie die fol- genden Beschreibungen gegebenenfalls überspringen. Falls Sie ein Einsteiger sind, dann lassen Sie sich von den neuen Abkürzungen und Begriffen, die Sie in Abbildung 4.1 sehen, nicht abschrecken. Ich erkläre sie nun der Reihe nach. Ich beginne in der Abbil- dung beim Reset-Taster links oben und gehe dann im Uhrzeigersinn weiter.

Arduino Uno R3 – die Version zählt!

Obwohl das Arduino-Board schon eine Weile existiert, gibt es gelegentlich doch noch kleine Veränderungen, um es weiter zu verbessern. Um festzustellen, ob Sie die aktuelle Version haben, hilft ein kurzer Blick auf die Unterseite des Boards. Die Versionsnummer finden Sie dort, wie in Abbildung 4.2: gezeigt. Entwickler sprechen bei einer neuen Ver- sion oft auch von einem Release. Darum beginnt die Versionsnummer hier mit einem »R«. Aktuelle Informationen über die Releases finden Sie jederzeit in der offiziellen Arduino-Hardwarereferenz 3 . Alle Angaben in diesem Buch beziehen sich auf die derzeit aktuelle Version Arduino Uno R3.

3

http://arduino.cc/en/Main/ArduinoBoardUno

Buch beziehen sich auf die derzeit aktuelle Version Arduino Uno R3 . 3 http://arduino.cc/en/Main/ArduinoBoardUno 54 55

4 Die Arduino-Plattform

4 Die Arduino-Plattform Abbildung 4.2 Die Versionsnummer auf der Rückseite des Boards Der Reset-Taster Das englische

Abbildung 4.2 Die Versionsnummer auf der Rückseite des Boards

Der Reset-Taster

Das englische Wort Reset bedeutet »zurücksetzen« oder »in Grundstellung bringen«. Wenn Sie den Reset-Taster auf dem Arduino-Board betätigen, startet sich das Board wie ein Computer neu und beginnt mit der Abarbeitung der im Mikrocontroller gespeicher- ten Software. Vermutlich werden Sie den Reset-Taster selten benötigen. Denn in dem Moment, in dem Sie das Board mit Strom versorgen, ist es immer in Grundstellung. Um aber an einen definierten Startpunkt zu gelangen, wenn das Arduino-Board scheinbar nicht mehr reagiert, ist der Reset sehr hilfreich.

Ein Beispiel dazu: Sie wollen Ihren Roboter künftig durch die Gegend fahren lassen, und wenn er ein Hindernis erkennt, soll eine LED alle vier Sekunden blinken (siehe Kapitel 7, »Los geht’s! – Erste Praxis«). Dazu werden Sie später die Anweisung delay verwenden, die den Arduino schlicht und einfach »warten« lässt (siehe Abschnitt 6.12, »Verzögerun- gen und Zeitsteuerung«). Wenn der Arduino vier Sekunden lang nichts tun soll, wäre die Anweisung dazu delay(4000). Wenn Sie jedoch in Ihrem Programm versehentlich die Anweisung delay(4000000000) einfügen, weil Sie auf der Taste (0) (Null) eingeschla- fen sind, so würde der Arduino 4.000.000 Sekunden warten und scheinbar nicht mehr reagieren. 4.000.000 Sekunden entsprechen nämlich ungefähr 46 Tagen.

Hier käme nun der Reset-Taster ins Spiel: Anstatt mühsam die Stromversorgung vom Roboter zu trennen und wiederherzustellen, können Sie einfach den Reset-Taster ein- mal kurz betätigen, und das Programm startet von vorne. Um bei dem Roboter-Hinder- nis-Beispiel zu bleiben: Ihr Roboter würde wieder losfahren und erst beim nächsten Hindernis stehen bleiben und dort lange Zeit warten. Sie könnten dann Ihre geschrie-

4.2 Die Arduino-Hardware

bene Software auf Fehler analysieren und würden zweifellos auf die fehlerhafte Anwei- sung delay(4000000000) stoßen und sie korrigieren.

Denglisch

Das Wort Reset ist in der deutschen Sprache heutzutage sehr gebräuchlich, obwohl es ein englisches Wort ist. Wenn Sie den Reset-Taster betätigen, hieße es korrekt »einen Reset durchführen« oder »ausführen«. Viele sagen aber auch einfach »den Arduino resetten«. Das klingt vielleicht ungewohnt. Aber Download und downloaden klangen auch einmal seltsam oder Kidnapping und gekidnappt. Benutzt werden diese Begriffe aber mittlerweile alle – und im Duden stehen sie auch.

aber mittlerweile alle – und im Duden stehen sie auch. Der ICSP-Stecker 2 Lassen Sie sich

Der ICSP-Stecker 2

Lassen Sie sich nicht dadurch verwirren, dass die Beschreibung hier mit dem ICSP-Ste- cker Nummer 2 beginnt. ICSP steht für In-Circuit Serial Programming und bedeutet so viel wie »Programmieren in der Platine«.

In der Vergangenheit mussten Mikrocontroller zum Übertragen neuer Software stets aus der Platine entfernt werden. Sie wurden dazu in eine spezielle zusätzliche Hardware gesteckt und dann neu programmiert. Das bedeutete durch das ständige Entfernen und Stecken der Bauteile eine hohe mechanische Belastung, und es wurde zusätzliche Hard- ware zum Programmieren benötigt.

Mit der Einführung des ICSP-Steckers konnte zumindest direkt auf das zu programmie- rende Bauteil zugegriffen werden, ohne es zu entfernen – externe Hardware zum Pro- grammieren ist weiterhin notwendig. Der ICSP-Stecker 2 wird zum Programmieren des zweiten Mikrocontrollers auf dem Arduino-Board verwendet. Er ist nur zur internen Verwendung, denn er regelt die Übertragung zwischen USB-Anschluss und dem Arduino-Board. Für alle in diesem Buch beschriebenen Projekte benötigen Sie keinen der ICSP-Stecker.

Ein-/Ausgänge (oben und unten)

Dies sind nach der Stromversorgung die wichtigsten Stecker auf einem Arduino-Board. Ich gehe auf die einzelnen Pins der Ein-/Ausgangsbuchsen in Abschnitt 4.2.2 ein.

Benutzer-LED

Die mit »L« beschriftete LED auf dem Arduino ist sehr hilfreich, da sie hervorragend zu Kontrollzwecken oder zur Fehlersuche eingesetzt werden kann. Die LED leuchtet auf, wenn sie mit dem passenden Befehl auf HIGH gesetzt wird, und erlischt bei LOW. Wie das genau funktioniert, erfahren Sie in Kapitel 7, »Los geht’s! – Erste Praxis«. Wie Sie die

4 Die Arduino-Plattform

LED zur Fehlersuche nutzen können, erkläre ich Ihnen in Abschnitt 6.14, »Fehlersuche/ Debugging und die Anzeige von Werten«.

Power-LED

Die Power-LED (engl. Power. dt. Energie) zeigt durch Leuchten an, dass das Arduino- Board mit einer Stromversorgung verbunden ist.

ICSP-Stecker 1

Wie der ICSP-Stecker 2 wird auch der Stecker Nummer 1 für eine besondere Art der Soft- wareübertragung auf Ihr Arduino-Board verwendet. In Ihrem Arduino ist nämlich neben der »normalen« Software auch noch ein sogenannter Bootloader enthalten. Die- ser Bootloader ermöglicht die Aktualisierung der Software im Mikrocontroller direkt per USB (»Upload«) und ohne spezielle zusätzliche Hardware. Für spezielle Anwendun- gen kann es notwendig sein, diesen Bootloader zu umgehen. Und in diesem Fall würden Sie den ICSP-Stecker 1 benötigen. Sie können ihn aber vorerst ignorieren, da Sie Ihr Board hier ausschließlich über die USB-Buchse programmieren werden.

Mikrocontroller

Der Mikrocontroller ist das Herz und das Gehirn des Arduino-Boards. Er wurde bereits in Abschnitt 2.3, »Wie und womit »denkt« ein Roboter?«, beschrieben.

Montagepunkt

Die vier Montagepunkte dienen zur Befestigung des Arduino-Boards auf Ihrem Robo- ter. Sie sollten unbedingt nur diese Löcher nutzen, da auf der Ober- und der Unterseite Leiterbahnen verlaufen, die die einzelnen Bauteile miteinander verbinden. Würden Sie diese durchbohren, wäre das Board danach unbrauchbar!

Sie diese durchbohren, wäre das Board danach unbrauchbar! Tipp Wenn Sie Ihr Arduino-Board später irgendwo mit

Tipp

Wenn Sie Ihr Arduino-Board später irgendwo mit Schrauben befestigen wollen, verwen- den Sie Schrauben aus Kunststoff (Polyamid). Sie vermeiden damit Kurzschlüsse durch leitende Metallschrauben, da einige Bauteile sehr dicht an den Montagelöchern verlö- tet sind.

Übertragungs-LEDs (TX/RX)

Wenn Sie später in Kapitel 7, »Los geht’s! – Erste Praxis Ihr erstes selbst geschriebenes Programm auf den Arduino übertragen, geschieht dies über eine Verbindung zwischen

4.2 Die Arduino-Hardware

Ihrem Computer und der USB-Buchse des Arduino-Boards. Dabei kommunizieren Ihr Computer und der Arduino miteinander, tauschen also Daten aus. Wenn der Computer dabei Daten an den Arduino sendet, leuchtet zur Bestätigung des Empfangs auf dem Arduino kurz die RX-LED (Rx, englisch abgekürzt für Receiver = Empfänger). Sendet der Arduino etwas zum Computer, leuchtet kurz die TX-LED auf dem Board (Tx, englisch abgekürzt für Transmitter = Sender). Solange beide Übertragungs-LEDs während der Datenübertragung blinken, können Sie davon ausgehen, dass alles funktioniert und die Kommunikation zwischen Computer und Arduino einwandfrei läuft.

Stromversorgungsbuchse

Um Ihr Arduino-Board mit Strom zu versorgen, haben Sie zwei Möglichkeiten: die Stromversorgungsbuchse oder die USB-Buchse. Wenn Sie später in Kapitel 7 Ihr Board mit einem USB-Kabel mit Ihrem Computer verbinden, werden Sie feststellen, dass sofort die Power-LED leuchtet und alles auf dem Board mit Energie versorgt wird. Egal, ob Sie das Arduino-Board per USB- oder über die Stromversorgungsbuchse anschließen, das Board erkennt die Quelle automatisch.

Zur Nutzung der Stromversorgungsbuchse benötigen Sie einen Hohlstecker mit 2,1 mm Innendurchmesser (siehe Abbildung 4.3). Der Pluspol liegt dabei in der Mitte des Ste- ckers und die Masse (Minus) entsprechend außen. Der Stromverbrauch des Arduino Uno liegt bei einer Eingangsspannung von 7 Volt bei ca. 0,29 Watt (290 mW).

Stromversorgung – Mindest- und Maximalwerte

Wenn Sie die Stromversorgungsbuchse mit einem externen Netzteil oder Akku verwen- den, achten Sie unbedingt darauf, dass dabei die Grenzwerte nicht lange überschritten werden! Das Netzteil muss außerdem eine Gleichspannung (DC = Direct Current Vol- tage) liefern.

Empfohlene Eingangsspannung: 7–12 Volt

Kurzzeitig erlaubte Grenzwerte: 6–20 Volt

7–12 Volt Kurzzeitig erlaubte Grenzwerte: 6–20 Volt Abbildung 4.3 Ein typischer Hohlstecker von einem Netzteil
7–12 Volt Kurzzeitig erlaubte Grenzwerte: 6–20 Volt Abbildung 4.3 Ein typischer Hohlstecker von einem Netzteil

Abbildung 4.3 Ein typischer Hohlstecker von einem Netzteil

4 Die Arduino-Plattform

USB-Buchse

Die USB-Buchse auf dem Arduino-Board hat drei verschiedene Funktionen:

Stromversorgung des Arduino

Schnittstelle zum Übertragen der Software auf das Arduino-Board

allgemeiner Datenaustausch zwischen Arduino und Computer

Wenn Sie ein Arduino-Board per USB-Kabel mit Ihrem Computer verbinden, erhält es darüber Strom. Sie brauchen also, wie ich in der Beschreibung der Stromversorgungs- buchse erläutert habe, keine separate Energiezufuhr. Die zweite Funktion ist das Über- tragen Ihrer geschriebenen Software auf das Arduino-Board (siehe Kapitel 7, »Los geht’s! – Erste Praxis«). Die Software wird später das »Verhalten« Ihres Roboters ausma- chen. Drittens kann Ihr Arduino-Board Daten an Ihren Computer senden. So werden Sie zum Beispiel in Abschnitt 7.2.3 einen Infrarotdistanzsensor ansteuern und auf dem Bildschirm Text sehen, den Ihnen Ihr Arduino über den USB-Anschluss sendet: Sie bekommen die gemessene Entfernung auf dem Bildschirm live angezeigt. Dies ist, neben der LED, für die Fehlersuche ebenfalls sehr hilfreich.

der LED, für die Fehlersu che ebenfalls sehr hilfreich. Wichtig: Erst installieren – dann anschließen! Bevor

Wichtig: Erst installieren – dann anschließen!

Bevor Sie Ihr Arduino-Board per USB-Kabel an den Computer anschließen, müssen Sie bei einigen Betriebssystemen einen sogenannten Treiber installieren. Wie das geht, erkläre ich Ihnen in Abschnitt 4.2.5. Diese Reihenfolge sollten Sie unbedingt einhalten, da ansonsten der Arduino möglicherweise nicht einwandfrei von Ihrem Computer erkannt wird!

4.2.2 Die Ein- und Ausgänge des Arduino-Boards im Detail

Kommen wir nun zu den wichtigsten Anschlüssen auf Ihrem Arduino-Board: den Ein- und Ausgängen des Arduino Uno. In Abbildung 4.4 sind die einzelnen Pins der breiten Buchsen beschriftet, und ich werde diese im Folgenden der Reihe nach erläutern.

SCL und SDA

Diese beiden Pins sind für die sogenannte I 2 C-Schnittstelle (Aussprache: »I-Quadrat-C«). Vielfach wird diese auch I2C-Schnittstelle genannt (Aussprache: »I-Zwei-C«). Generell dient eine Schnittstelle (englisch Interface) dazu, unterschiedliche Schaltungen oder Teile von ihnen miteinander zu verbinden. Aber auch ganze Geräte werden über Schnittstellen verbunden. So sind zum Beispiel USB-Stecker am Eingang oder Ausgang eines Gerätes Bestandteil der USB-Schnittstelle. Da das I 2 C-Interface bei Ihrem Arduino-

4.2 Die Arduino-Hardware

Roboter standardmäßig keine Verwendung findet, gehe ich hier nicht weiter auf seine Details ein. Ein Tipp aber noch: Die beiden I 2 C-Pins SDA und SDL sind auf der Unterseite des Boards beschriftet! Auf der Oberseite war wegen des ICSP-Steckers 2 kein Platz mehr. Übrigens: Aus rechtlichen Gründen wurde die I 2 C-Schnittstelle früher TWI-Interface genannt (Two-Wire-Interface, englisch für Zweidraht-Schnittstelle), denn der Hersteller Philips hatte lange Zeit die Rechte an dem Namen I 2 C. Sie finden die Bezeichnung TWI daher oft noch in älteren Datenblättern. Auch die Software-Bibliothek des Arduino-Pro- jektes zur Nutzung der I 2 C-Pins heißt bis heute noch Wire 4 .

der I 2 C-Pins heißt bis heute noch Wire 4 . Abbildung 4.4 Die Ein- und

Abbildung 4.4 Die Ein- und Ausgänge des »Arduino Uno«

AREF

Dieser Pin ist ein Eingang, an dem eine beliebige Spannung zwischen 0 und 5 Volt ange- legt werden kann. Er kann nur in Verbindung mit den analogen Eingängen A0 bis A5 (»ANALOG IN«) genutzt werden und dient diesen als Referenz (AREF = Analoge Refe- renzspannung). Näheres dazu wird später unter »Analoge Eingänge« beschrieben.

Masse (GND)

Der Masse-Pin (englisch Ground, abgekürzt GND) ist der Bezugspunkt für alle Spannun- gen auf dem Arduino-Board. Er ist zugleich der Minuspol der Stromversorgung und ent- spricht damit auch 0 Volt.

4 http://arduino.cc/en/Reference/Wire

4 Die Arduino-Plattform

Digitale Ein-/Ausgänge

Die Pins 2 bis 13 dienen als Eingang oder Ausgang. Das heißt, eine Spannung kann an einen Pin angelegt werden (Eingang) oder der Arduino kann eine Spannung ausgeben (Ausgang).

Vorsicht!

Spannungen unter 0 oder über 5 Volt an einem der Pins zerstören Ihr Arduino-Board!

Da es sich um digitale Ein-/Ausgänge handelt, »verstehen« diese Pins wie ein Computer nur zwei Zustände: 0 oder 1. In der Elektronik Ihres Arduino Uno entspricht das 0 Volt oder 5 Volt bzw. allgemein LOW oder HIGH.

Expertenwissen zum Angeben: Logikpegel im Detail

Wie so oft im Leben ist nicht alles schwarz-weiß, so auch bei den Logikpegeln. Tatsäch- lich müssen es nicht exakt 0 Volt oder 5 Volt sein. Je nach verwendetem Bauteil gibt es unterschiedliche Ober- oder Untergrenzen. Bei dem auf dem Arduino-Board verwende- ten Mikrocontroller sind es die folgenden:

Eingang

Eingang Ausgang 0,00–0,50 V 4,44–5,00 V LOW 0,00–1,50 V HIGH 3,50–5,00 V

Ausgang

0,00–0,50 V

4,44–5,00 V

LOW

0,00–1,50 V

HIGH

3,50–5,00 V

Eingang Ausgang 0,00–0,50 V 4,44–5,00 V LOW 0,00–1,50 V HIGH 3,50–5,00 V

Das bedeutet zum Beispiel, dass alle Spannungen zwischen 0,00 und 1,50 Volt an einem Eingang als LOW erkannt werden oder dass alle Spannungen zwischen 4,44 und 5,00 Volt an einem Ausgang als HIGH gelten. Die Bereiche zwischen den hier aufgelisteten sogenannten Logikpegeln gelten schlichtweg als undefiniert. Das heißt, es ist nicht vor- hersagbar, wie sich der Arduino hier verhält.

Warum einige der Pins mit einer Tilde (~) gekennzeichnet sind und was die Beschriftung PWM~ auf der Platine bedeutet, erfahren Sie in Abschnitt 7.4.2). Ich will es ja auch etwas spannend für Sie machen.

TX/RX

Wie Sie bereits im Abschnitt 4.2.1 unter »Übertragungs-LEDs (TX/RX)« erfahren haben, geht es hier um Datenübertragung. Sie könnten über diese Pins eine serielle 5 Daten-

5 Seriell bedeutet, dass die Daten Bit für Bit hintereinander übertragen werden (siehe auch http:// de.wikipedia.org/wiki/Serielle_Datenübertragung)

4.2 Die Arduino-Hardware

übertragung mit anderen Bauteilen durchführen. Da der Arduino Uno aber nur über eine serielle Schnittstelle verfügt, die auf der Platine intern bereits mit dem USB- Anschluss verbunden ist, sollten Sie diese Pins nicht verwenden. Denn immer, wenn Sie ein Programm auf den Arduino übertragen oder später den Serial Monitor (siehe Abschnitt 7.2.3) verwenden, werden dabei die Daten auch über diese beiden Pins laufen. Störungen wären also vorprogrammiert. Für den in diesem Buch beschriebenen Robo- ter werden diese Pins nicht verwendet.

Analoge Eingänge

Im Gegensatz zu den digitalen Eingängen können Sie an die Eingänge A0 bis A5 eine beliebige Spannung zwischen 0 und 5 Volt anlegen. »Analog« bedeutet, dass die Span- nung wirklich jeden Wert dazwischen haben darf. Das Einlesen eines dieser Eingänge geschieht mit dem Befehl analogRead. Sie werden diesen Befehl in Abschnitt 7.2.3 ken- nenlernen, wenn Sie einen Sensor auslesen, der eine analoge Spannung ausgibt. Beim Einlesen einer analogen Spannung vergleicht der Arduino die an einem der Pins A0 bis A5 anliegende Spannung standardmäßig mit 5 Volt. So erhalten Sie zum Beispiel beim Anlegen von 0 Volt eine 0 als Zahlenwert in der Software; bei 2,5 Volt ist der Zahlenwert 128, und bei 5 Volt beträgt er 255 6 . Möchten Sie eine Spannung mit einem geringeren Maximalwert als 5 Volt einlesen (zum Beispiel 3,14 Volt) und dennoch Werte in der Soft- ware von 0 bis 255 erhalten, so kommt der Pin AREF ins Spiel. Sie werden diese Funktion vermutlich nicht so häufig benötigen, und sie wird auch in diesem Buch nicht verwen- det. Für weitere Informationen sei daher an dieser Stelle wieder einmal auf die Arduino- Referenz 7 und den dort beschriebenen Befehl analogReference verwiesen.

Vin

Dieser Pin gehört zu den Stromversorgungspins und kann sowohl als Eingang als auch als Ausgang genutzt werden. An diesen Pin können 7–12 Volt angelegt werden, die dann das Arduino-Board mit Energie versorgen (falls Sie nicht die USB-Verbindung oder die Stromversorgungsbuchse dafür benutzen wollen). Wenn Sie aber das Board per USB- oder Hohlstecker mit Strom versorgen, dann liegen an diesem Pin 5 Volt an.

Masse (GND)

(siehe vorige Beschreibung)

5V

Dieser Pin dient nur als Ausgang. Sobald das Arduino-Board per USB- oder Stromversor- gungsbuchse mit Strom versorgt wird, kommen an diesem Pin geregelte 5 Volt Span-

6 Warum der Wert von 0 bis 255 geht, erfahren Sie in Abschnitt 6.3.4.

7 http://arduino.cc/en/Reference/AnalogReference

4 Die Arduino-Plattform

nung »heraus«. Diese können Sie zur Stromversorgung weiterer kleinerer Bauteile, z. B. von Sensoren, verwenden. Geben Sie niemals eine Spannung an diesen Ausgang, da sie das Arduino-Board zerstören kann!

3,3V

An diesem Pin liefert das Arduino-Board eine Spannung von 3,3 Volt. Bitte beachten Sie, dass hier nur ein maximaler Strom von 50 mA geliefert wird. Geben Sie niemals eine Spannung an diesen Ausgang, da sie das Arduino-Board zerstören kann!

Reset

Dieser Pin dient zum Anschluss eines eigenen Reset-Tasters. Sobald dieser Pin mit Masse (GND) verbunden wird, wird ein Reset des Arduino-Boards ausgelöst. Wenn Sie Ihr Arduino-Board mit Shields (siehe Abschnitt 7.2.7) erweitern, kann es sein, dass diese den Reset-Taster auf dem Board blockieren. Dafür ist dann dieser Pin nützlich.

IOREF

Dieser Pin liefert eine Referenzspannung, mit der der Mikrocontroller auf dem Arduino- Board arbeitet. Der Pin kann intern von Shields genutzt werden, mit denen das Board erweitert werden kann (siehe Abschnitt 7.2.7).

das Board erweitert werden kann (siehe Abschnitt 7.2.7). Fehlt da nicht etwas? Was ist mit dem

Fehlt da nicht etwas? Was ist mit dem freien Pin?

Wie Ihnen vielleicht aufgefallen ist, ist in Abbildung 4.4, links neben dem Pin IOREF, ein Pin nicht beschriftet. Der Grund hierfür ist ganz simpel: Er ist nicht in Verwendung. Möglicherweise »kitzeln« die Entwickler des Boards später noch einmal neue Funktio- nen aus dem Arduino Uno heraus. Dann wird dieser Pin vielleicht noch belegt. Aktuell ist das jedoch nicht der Fall. Aber seien Sie gewiss: Sie haben bereits so unzählige Mög- lichkeiten mit Ihrem Arduino-Board!

4.2.3 Verschiedene Arduino-Boards

Das Arduino-Board wäre vermutlich nicht so erfolgreich, wenn es nicht vollständig Open Source wäre. Dieses Konzept ermöglichte die Entwicklung vieler Arduino-Boards, die nicht vom Arduino-Projekt selbst stammen, aber offiziell mit dem Arduino-Logo versehen sind, weil sie dem Projektstandard 8 entsprechen. Viele Arduino-Boards wur- den bereits entwickelt und veröffentlicht. Manchmal geschah dies, um das schlanke

8 http://arduino.cc/en/Main/Policy

4.2 Die Arduino-Hardware

Arduino-Board mit mehr Leistung zu versehen. Ein anderes Mal ging es nicht um mehr Geschwindigkeit oder Speicher, sondern um mehr Ein- und Ausgänge (Pins). Oftmals wurde aber auch nur die Form verändert oder die Größe der Arduino-Platine reduziert.

SMD-Bauteile

Um die Größe einiger Arduino-Boards zu verringern und auch um die Kosten zu sen- ken, wurde auf Bauteile zurückgegriffen, die sich SMD-Bauteile nennen. SMD ist die eng- lische Abkürzung für Surface-Mounted Device, was so viel wie »auf der Oberfläche montiertes Bauteil« bedeutet. Denn im Unterschied zu dem Arduino-Mikrocontroller, dessen Pins in eine Fassung gesteckt sind und deren »Beinchen« wiederum durch die Platine hindurch gehen, gibt es auf dem Board auch einen Mikrocontroller, der auf der Oberfläche »montiert« (aufgelötet) ist. Und glauben Sie mir, die kleinen SMD-Bauteile stehen den großen in nichts nach. Denn den meisten Platz bei den großen Bauteilen nehmen mittlerweile nur die großen Anschlusspins ein.

In Abbildung 4.5 sehen Sie deutlich den Unterschied der beiden Bauteiltypen auf Ihrem Arduino-Board:

Oben 1 finden Sie den Mikrocontroller als SMD-Bauteil,

unten 2 einen Mikrocontroller in alter Bauweise.

unten 2 einen Mikrocontroller in alter Bauweise. Abbildung 4.5 SMD-Bauteil im Vergleich zur alten Bauweise

Abbildung 4.5 SMD-Bauteil im Vergleich zur alten Bauweise

4 Die Arduino-Plattform

Die herkömmliche Bauweise hat aber auch Vorteile. Wie Sie sehen, ist der große Mikro- controller in eine Fassung gesteckt und kann bei einem Defekt leicht ausgetauscht wer- den. Das ist bei SMD-Teilen sehr schwierig, denn diese müssen mit speziellen Werkzeugen aus- und wieder eingelötet werden. Dies ist bei einigen Bauteilen mit der Hand bereits nicht mehr möglich, da diese die Pins sogar an der Unterseite des Bauteils haben, wo kein Lötkolben hinkommt. So bleibt dann leider oft nur Entsorgen und Neu- kaufen, eine Entwicklung, die für unsere Umwelt alles andere als förderlich ist. Dafür hat die SMD-Technik immer preiswertere Geräte ermöglicht, da die Bauteile immer kleiner und damit günstiger werden – nur eben leider nicht, was Reparaturen angeht.

Nun aber zu der versprochenen Auflistung verschiedener Arduino-Boards. Obwohl es sich nur um eine kleine Auswahl handelt, sollte sie Ihnen einen guten Überblick geben. Und vielleicht entwickeln Sie ja eines Tages Ihr eigenes offizielles Arduino-Board?

Arduino Due

Der Arduino Due ist im Vergleich zum Arduino Uno ein leistungsfähigeres Board. Sein wesentlicher Vorteil sind zweifelsohne die unzähligen Ein- und Ausgänge, sein großer Speicher für Software und sein USB-Port, an den sogar eine Maus, Tastatur oder ein Smartphone angeschlossen werden können.

Tastatur oder ein Smartphone angeschlossen werden können. Abbildung 4.6 Der »Arduino Due« mit mehr als 54

Abbildung 4.6 Der »Arduino Due« mit mehr als 54 Ein- und Ausgängen 9

9 Bild: http://arduino.cc, CC BY-SA 3.0

66

4.2 Die Arduino-Hardware

Ein Nachteil bei diesem Board ist der verwendete 3,3-Volt-Logikpegel, da viele Shields mit einem 5-Volt-Logikpegel arbeiten und damit an diesem Board nicht ohne Weite- res eingesetzt werden können (siehe auch in Abschnitt 4.2.2 unter »Digitale Ein-/Aus- gänge«).

Arduino-Roboter

Ein Arduino-Roboter? Wieso erfahre ich erst jetzt davon? Richtig, es gibt auch einen Roboter der Arduino-Community. Und er hat sogar ein Display auf seiner Oberseite. Der Nachteil dieses Roboters ist sein Preis: Er kostet über 200 EUR.

dieses Roboters ist sein Preis: Er kostet über 200 EUR. Abbildung 4.7 Die Ober- (links) und

Abbildung 4.7 Die Ober- (links) und Unterseite (rechts) des offiziellen Arduino-Roboters 10

Arduino Esplora

Im Gegensatz zu den »normalen« Arduino-Boards stellt der Arduino Esplora auf seiner Platine eine Vielzahl von Sensoren und Aktoren (siehe Abschnitt 2.2.2 und 2.2.3) zur Ver- fügung. Unter anderem finden Sie auf dem Board: LEDs, einen Mini-Joystick, einen Temperatursensor, ein Mikrofon, einen Piezo (siehe Abschnitt 7.3.1), einen Beschleuni- gungssensor, einen Lichtsensor und vieles mehr. Lassen Sie sich nicht durch die Bauform täuschen: Das Board sieht vielleicht wie ein Gamepad aus, ist aber ein vollwer- tiges Arduino-Board mit Mikrocontroller.

10 Bild: http://arduino.cc, CC BY-SA 3.0

67

4 Die Arduino-Plattform

4 Die Arduino-Plattform Abbildung 4.8 Der »Arduino Esplora« sieht wie ein Gamepad aus. 1 1 LilyPad

Abbildung 4.8 Der »Arduino Esplora« sieht wie ein Gamepad aus. 11

LilyPad Arduino USB

Wie bereits erwähnt, gibt es für alle möglichen Zwecke einen Arduino. Warum also nicht die eigene Kleidung um ein Mikrocontroller-Board aus der Arduino-Familie ergänzen? Kein Problem mit dem kleinen LilyPad Arduino USB. Mit ihm lässt sich zum Beispiel ein Lauflicht als Anstecker realisieren.

sich zum Beispiel ein Lauflicht als Anstecker realisieren. Abbildung 4.9 Arduino als Anstecker? Der »LilyPad Arduino

Abbildung 4.9 Arduino als Anstecker? Der »LilyPad Arduino USB« 12

11 Bild: http://arduino.cc, CC BY-SA 3.0

12 Bild: http://arduino.cc, CC BY-SA 3.0

68

4.2 Die Arduino-Hardware

Arduino Micro

Der Arduino Uno ist Ihnen zu groß? Dann greifen Sie doch zu einem Arduino Micro. Dank SMD-Technik ist die Platine auf beiden Seiten eng mit Bauteilen bestückt. So wird jeder Millimeter ausgenutzt. Und ein USB-Anschluss zum Übertragen der Software hat auch noch auf das Board gepasst.

der Software hat auch noch auf das Board gepasst. Abbildung 4.10 Der kleine »Arduino Micro« (Maße:

Abbildung 4.10 Der kleine »Arduino Micro« (Maße: 5,0 × 1,3 cm) 13

Arduino Nano

Es geht noch kleiner – auch wenn Abbildung 4.11 es nicht so deutlich zeigt, da der direkte Vergleich fehlt. Der Arduino Nano ist noch einmal geschrumpft und bietet dennoch unter anderem 14 digitale Ein- und Ausgänge, eine LED und eine I 2 C-Schnittstelle auf kleinstem Raum. Es geht übrigens noch kleiner: Der TinyDuino 14 hat eine Größe von lediglich 2 × 2 cm.

1 4 hat eine Größe von lediglich 2 × 2 cm. Abbildung 4.11 Der »Arduino Nano«

Abbildung 4.11 Der »Arduino Nano« (Maße: 4,3 × 1,8 cm) 15

13 Bild: http://arduino.cc, CC BY-SA 3.0

14 http://tiny-circuits.com/products/tinyduino/

15 Bild: http://arduino.cc, CC BY-SA 3.0

69

4 Die Arduino-Plattform

Wer die Wahl hat …

Sie sehen, die Auswahl an Arduino-Boards ist sehr groß. Lassen Sie sich dadurch nicht abschrecken. Bleiben Sie als Einsteiger zunächst bei Ihrem Arduino Uno. Sobald Sie die- sen verstanden haben und »beherrschen«, macht vielleicht später ein Wechsel auf ein anderes Board Sinn.

4.2.4 Die Einzelteile für Ihren Roboter bzw. das Roboterkit

Bevor es im folgenden Abschnitt um die Installation des Treibers für das Arduino-Board auf Ihrem Computer geht, möchte ich Ihnen die Teile Ihres künftigen Arduino-Roboters vorstellen. Wie ich bereits in Abschnitt 1.3, »Das Roboterkit zum Buch«, beschrieben habe, entstand der Roboter durch die Community Bot Makers 16 . Damit Sie sich die nach- folgenden Teile nicht alle selbst zusammensuchen müssen, gibt es sie als fertiges Star- terKit beim Elektronikversand watterott 17 .

Ein Arduino Uno-Board, R3

Den Arduino Uno haben Sie in diesem Kapitel bereits recht ausführlich kennengelernt. In Kapitel 7, »Los geht’s! – Erste Praxis«, werden Sie Ihr erstes selbst geschriebenes Pro- gramm auf das Board übertragen und ihn damit »zum Leben erwecken«. Für den Robo- ter benötigen Sie genau ein Arduino-Board.

Für den Robo- ter benötigen Sie genau ein Arduino-Board. Abbildung 4.12 Der »Arduino Uno R3« 16

Abbildung 4.12 Der »Arduino Uno R3«

16 http://www.botmakers.de

17 http://www.watterott.com/de/StarterKit-Roboter

70

4.2 Die Arduino-Hardware

Ein USB-Kabel (A-Stecker auf B-Stecker)

Das passende Kabel, um Ihr Arduino-Board mit dem Computer zu verbinden, sehen Sie in Abbildung 4.13.

mit dem Computer zu verbinden, sehen Sie in Abbildung 4.13. Abbildung 4.13 USB-Kabel mit A- und

Abbildung 4.13 USB-Kabel mit A- und B-Stecker

Ein Arduino-»Motor Shield«

In Abschnitt 7.5, »Ich muss hier weg! – Ansteuerung von Motoren«, werden Sie lernen, wie Sie die Motoren für Ihren Roboter ansteuern. Dazu werden Sie dieses Motor Shield benutzen. Sie benötigen genau eins für Ihren Roboter.

Motor Shield benutzen. Sie benötigen gena u eins für Ihren Roboter. Abbildung 4.14 Das Arduino-»Motor Shield«

Abbildung 4.14 Das Arduino-»Motor Shield«

71

4 Die Arduino-Plattform

Fünf Jumper Wires/Testkabel/Steckbrücken (10 cm, Female-Female)

Mit diesen Testkabeln (auch Jumper Wires oder Steckbrücken genannt) können Sie ohne Löten verschiedene Pins schnell und unkompliziert miteinander verbinden. Für den Bau Ihres Roboters benötigen Sie fünf dieser Kabel mit einer Länge von jeweils 10 cm. Die Kabel sollten an beiden Enden Buchsen haben. Im technischen Bereich hat sich für Stecker mit einem Pin der Begriff männlich (englisch male) durchgesetzt. Bei Buchsen ist es entsprechend ein weiblicher Steckverbinder (englisch female). Daher haben die Jumper Wires in Abbildung 4.15 die Bezeichnung »female-female« (Buchsen an beiden Enden).

die Bezeichnung »female-female« (Buchsen an beiden Enden). Abbildung 4.15 Sogenannte Jumper Wires 30 cm Litze/Draht

Abbildung 4.15 Sogenannte Jumper Wires

30 cm Litze/Draht (0,25 mm2)

Um die Motoren in Abschnitt 7.5 anzusteuern, werden Sie diese mit etwas Draht oder Litze mit dem Motor Shield verbinden. Der Kupferkern des Drahtes sollte einen Quer- schnitt von 0,25 mm 2 haben. Sie benötigen ca. 30 cm davon. Etwas mehr kann nie scha- den, falls Sie sich mal vermessen und den Draht zu kurz abschneiden. Welches Werkzeug Sie im Übrigen benötigen, zeige ich Ihnen in Kapitel 5,» Die kleine Werkstatt«, und der Zusammenbau wird Schritt für Schritt in Kapitel 8, »Keine Schraube locker – Die Montage des eigenen Roboters«, beschrieben.

72

– Die Montage des eigenen Roboters«, beschrieben. 72 4.2 Die Arduino-Hardware Abbildung 4.16 Etwas Draht/Litze

4.2 Die Arduino-Hardware

Abbildung 4.16 Etwas Draht/Litze mit einem Querschnitt von 0,25 mm 2

Vier 1,2-Volt-Akkus oder 1,5-Volt-Batterien, Größe AA

Um Ihren Roboter mit Energie zu versorgen, sind Akkus am besten geeignet. Akkus sind wiederaufladbar und darum aus Umweltschutzgründen Einwegbatterien immer vorzu- ziehen. Die Akkus werden bei Ihrem Roboter in den Akkuhalter aus Abbildung 4.18 eingesetzt. Für Ihren Roboter benötigen Sie vier 1,2-Volt-Akkus der Größe »AA« – und ein Ladegerät zum Aufladen der Akkus. Die Akkus sind übrigens nicht im Roboterkit enthalten!

Die Akkus sind übrigens nicht im Roboterkit enthalten! Abbildung 4.17 1,2-Volt-Akkus Tipp Am besten besorgen Sie

Abbildung 4.17 1,2-Volt-Akkus

Tipp

Am besten besorgen Sie sich gleich acht Akkus, so haben Sie immer ein Set im Roboter und ein Set im Ladegerät. Dann können Sie diese sofort austauschen, wenn die Akkus im Roboter leer sind, und müssen nicht erst warten, bis wieder welche aufgeladen sind.

73

austauschen, wenn die Akkus im Roboter leer sind, und müssen nicht erst warten, bis wieder welche

4 Die Arduino-Plattform

Ein Batteriehalter/Akkuhalter

Zum Set gehört auch ein Akkuhalter oder Batteriehalter für Ihren Roboter. Sie benötigen zum Bau des Roboters nur einen.

Roboter. Sie benötigen zum Bau des Roboters nur einen. Abbildung 4.18 Der Halter für die Batterien

Abbildung 4.18 Der Halter für die Batterien bzw. Akkus

Ein Servo

Dieser Servo wird später einen Sensor hin und her bewegen und somit das »Auge« Ihres Roboters darstellen. Was ein Servo ist und wie er angesteuert wird, lernen Sie in Abschnitt 7.4, »Der Diener – Ansteuerung von Servos«.

in Abschnitt 7.4, »Der Diener – Ansteuerung von Servos«. Abbildung 4.19 Ein Standardservo, wie er im

Abbildung 4.19 Ein Standardservo, wie er im Modellbau verwendet wird

74

4.2 Die Arduino-Hardware

Ein Infrarotdistanzsensor

Damit Ihr Roboter später nirgendwo anstößt, benötigt er »Augen«, die Hindernisse erkennen. Das Auge besteht in diesem Fall aus einem Infrarotdistanzsensor (auch Infra- rotdistanzmesser genannt). Wie dieser funktioniert und angesteuert wird, lernen Sie in Abschnitt 7.2.4. Und obwohl ein Mensch zwei Augen hat, benötigt Ihr Roboter nur einen Sensor. Warum das so ist, erfahren Sie ebenfalls in dem zuvor genannten Abschnitt.

erfahren Sie eb enfalls in dem zuvor genannten Abschnitt. Abbildung 4.20 Der Sharp-Infrarotdistanzsensor GP2Y0A21YK0F

Abbildung 4.20 Der Sharp-Infrarotdistanzsensor GP2Y0A21YK0F

Zwei Getriebemotoren

Natürlich soll sich Ihr Roboter auch fortbewegen können. Dazu erhält er zwei Gleich- strommotoren mit jeweils einem Getriebe. Das Getriebe beinhaltet mehrere Zahnräder, die durch eine sogenannte Untersetzung 18 die Drehzahl reduzieren und damit mehr Kraft auf die Räder des Roboters übertragen. Da jeder Motor ein Rad Ihres Roboters antreiben wird, benötigen Sie zwei Motoren. Die Ansteuerung der Motoren zeige ich Ihnen ausführlich in Abschnitt 7.5.

der Motoren zeige ich Ihnen ausführlich in Abschnitt 7.5. Abbildung 4.21 Zwei Motoren mit einem weißen

Abbildung 4.21 Zwei Motoren mit einem weißen Getriebe

18 Genau genommen ist der Begriff Untersetzung nur umgangssprachlich korrekt. Wenn Sie es genau wissen wollen, empfiehlt sich wie so oft ein Blick in die Wikipedia: http://de.wikipedia.org/wiki/ Übersetzung_(Technik)

75

4 Die Arduino-Plattform

Zwei Räder

Wie zuvor erwähnt, bekommt jeder der zwei Motoren Ihres Roboters ein Rad. Sie benö- tigen daher ebenfalls zwei Räder.

ein Rad . Sie benö- tigen daher ebenfalls zwei Räder. Abbildung 4.22 Zwei Räder für Ihren

Abbildung 4.22 Zwei Räder für Ihren Roboter

Ein Stützrad

Da der Roboter auf zwei Rädern nicht sehr stabil ist, wird noch ein drittes Rad benötigt, das als Stützrad dient.

noch ein drittes Rad benötigt, das als Stützrad dient. Abbildung 4.23 Das Stützrad mit der Stahlkugel

Abbildung 4.23 Das Stützrad mit der Stahlkugel

Ein Stück Schrumpfschlauch (4 mm Durchmesser)

Früher wurde zum Isolieren meistens Isolierband verwendet. Heutzutage bietet sich für die meisten Anwendungsfälle ein Schrumpfschlauch an – im Scherz auch gerne mal

76

4.2 Die Arduino-Hardware

»Schlumpfschlauch« genannt (siehe Abbildung 4.24). Ein Schrumpfschlauch hat die Eigenschaft, dass bei hoher Hitze sein Durchmesser abnimmt. Wenn Sie zum Beispiel von zwei Drähten die Isolierung (Ummantelung) entfernt und die Drähte miteinander verbunden haben, können Sie diese mit dem Schrumpfschlauch neu »ummanteln«. Wie das genau geht, erfahren Sie in Kapitel 8, »Keine Schraube locker – Die Montage des eigenen Roboters«, beim Zusammenbau Ihres Roboters.

des eigenen Roboters«, beim Zusammenbau Ihres Roboters. Abbildung 4.24 Schrumpfschlauch Ein Chassis aus gelaserten

Abbildung 4.24 Schrumpfschlauch

Ein Chassis aus gelaserten Acrylteilen

Um einen einfachen, aber stabilen Aufbau Ihres Roboters zu ermöglichen, enthält das Kit alle Teile für ein Chassis aus lasergeschnittenem Polymethylmethacrylat (umgangs- sprachlich auch Acrylglas oder Plexiglas genannt).

sprachlich auch Acrylglas oder Plexiglas genannt). Abbildung 4.25 Gelaserte Acrylteile für ein Chassis Ein

Abbildung 4.25 Gelaserte Acrylteile für ein Chassis

Ein wenig Werkzeug

Natürlich geht der Zusammenbau nicht ohne Werkzeug. In Kapitel 5, »Die kleine Werkstatt«, erfahren Sie daher, welches Werkzeug Sie für die Montage unbedingt benö- tigen und welches hilfreich, aber nicht zwingend notwendig ist.

77

4 Die Arduino-Plattform

Und der Zusammenbau?

Sie haben jetzt einen guten Überblick über alle Bestandteile Ihres späteren Arduino- Roboters bekommen. In Kapitel 8, »Keine Schraube locker – Die Montage des eigenen Roboters«, zeige ich Ihnen, wie Sie alle Teile zu einem Roboter zusammenfügen. Zuvor erhalten Sie noch das nötige Wissen über die Arduino-Plattform und deren Program- mierung.

4.2.5 Treiberinstallation

Damit ein Computer das Arduino-Board und damit Ihren späteren Roboter einwandfrei erkennt, benötigen einige Betriebssysteme einen Treiber. Ein Treiber ist eine Software, die sicherstellt, dass der Computer das Arduino-Board »betreiben« kann und mit ihm über den USB-Port kommuniziert. Die Kommunikation erfolgt dabei über einen Mikro- controller des Herstellers Atmel (ATmega16). Der Treiber für diesen Chip ist in der Arduino-Software oder dem Betriebssystem Ihres Computers enthalten. Wie Sie die Arduino-Software einschließlich Treiber für die verschiedenen Betriebssysteme Win- dows, Mac OS und Linux installieren, zeige ich Ihnen jetzt.

4.3 Die Arduino-Software

Jetzt geht es um die Installation der Arduino-Software auf Ihrem Computer. Sie werden feststellen, dass die Installation kinderleicht ist und Sie danach sofort loslegen können, ohne noch viel auf Ihrem System extra einrichten oder konfigurieren zu müssen.

4.3.1 Download und Installation

Die Arduino-Software ist auf der Arduino-Projektseite 19 frei zum Download verfügbar. Das Programm ist Open Source und für Windows, Mac OS und Linux sowie als Source- code im Download verfügbar. Für die Betriebssysteme Windows und Mac OS ist ein Download über die Webseite notwendig, unter Linux wird die Software mit Mitteln des Betriebssystems installiert. Im Folgenden zeige ich Ihnen für jedes einzelne System die notwendigen Schritte – einschließlich Treiberinstallation.

Windows

Um die Arduino-Software unter Windows zu installieren, besuchen Sie die Arduino-Pro- jektseite. Navigieren Sie dort zur Seite Download. Unterhalb des Punktes Arduino

19

78

http://arduino.cc

4.3 Die Arduino-Software

IDE finden Sie den Link Windows Installer, wie in Abbildung 4.26 dargestellt. Der Installer ist der einfachste Weg, um die Software direkt zu installieren. Dabei ist es egal, ob Sie die Software unter Windows 7 oder Windows 8 installieren wollen – es ist derselbe Download. Folgen Sie nun den Anweisungen anhand der nachfolgenden Abbildungen.

nun den Anweisunge n anhand der nachfolgenden Abbildungen. Abbildung 4.26 Klicken Sie auf den Link »Windows

Abbildung 4.26 Klicken Sie auf den Link »Windows Installer«.

4.26 Klicken Sie auf den Link »Windows Installer«. Abbildung 4.27 Wählen Sie die Option »Datei speichern«.

Abbildung 4.27 Wählen Sie die Option »Datei speichern«.

Standardmäßig speichert Windows heruntergeladene Dateien in Ihrem Benutzerver- zeichnis unter Downloads (siehe Abbildung 4.28). Um die Installation der Arduino-Soft- ware zu starten, klicken Sie doppelt auf die Datei.

79

4 Die Arduino-Plattform

4 Die Arduino-Plattform Abbildung 4.28 Die heruntergeladene Installationsdatei im Explorer Wenn das Fenster aus Abbildung

Abbildung 4.28 Die heruntergeladene Installationsdatei im Explorer

Wenn das Fenster aus Abbildung 4.29 erscheint, bestätigen Sie die Frage durch Klick auf Ja.

erscheint, bestätigen Sie die Frage durch Klick auf Ja . Abbildung 4.29 Windows warnt vor Änderungen

Abbildung 4.29 Windows warnt vor Änderungen am Computer.

Damit die Software installiert werden kann, müssen Sie die Lizenzbedingungen durch Klicken auf I Agree akzeptieren.

80

durch Klicken auf I Agree akzeptieren. 80 4.3 Die Arduino-Software Abbildung 4.30 Die

4.3 Die Arduino-Software

Abbildung 4.30 Die Lizenzvereinbarung der Arduino-Software

Lassen Sie im Dialog aus Abbildung 4.31 alle Optionen so, wie sie sind, und klicken Sie auf Next, um zum nächsten Schritt zu gelangen.

Sie auf Next, um zum nächsten Schritt zu gelangen. Abbildung 4.31 Die unterschiedlichen Installationsoptionen

Abbildung 4.31 Die unterschiedlichen Installationsoptionen

Bestätigen Sie das Zielverzeichnis, in dem die Software installiert werden soll (siehe Abbildung 4.32), durch Klicken auf Install.

werden soll (siehe Abbildung 4.32), durch Klicken auf Install . Abbildung 4.32 Gleich startet die Installation!

Abbildung 4.32 Gleich startet die Installation!

81

4 Die Arduino-Plattform

Der Fortschritt des Installationsvorgangs ist in Abbildung 4.33 dargestellt.

Installationsvorgang s ist in Abbildung 4.33 dargestellt. Abbildung 4.33 Die Installation im vollen Gange Kurz vor

Abbildung 4.33 Die Installation im vollen Gange

Kurz vor Ende des Installationsvorgangs der Arduino-Software startet automatisch die Installation des Treibers (Gerätesoftware) für Ihr Arduino-Board (siehe Abbildung 4.34).

ätesoftware) für Ihr Arduino-Board (siehe Abbildung 4.34). Abbildung 4.34 Hier soll der Treiber installiert werden. 82

Abbildung 4.34 Hier soll der Treiber installiert werden.

82

4.3 Die Arduino-Software

Bestätigen Sie die Sicherheitswarnung aus Abbildung 4.35 durch einen Klick auf In- stallieren.

aus Abbildung 4.35 durch einen Klick auf In- stallieren . Abbildung 4.35 Sicherheitswarnung beim Hinzufügen des

Abbildung 4.35 Sicherheitswarnung beim Hinzufügen des Treibers

Wenn die Installation wie in Abbildung 4.36 beendet ist, klicken Sie abschließend auf Close.

4.36 beendet ist, klicken Sie abschließend auf Close . Abbildung 4.36 Die Installation ist fertig! Glückwunsch!

Abbildung 4.36 Die Installation ist fertig!

Glückwunsch! Sie haben erfolgreich die Arduino-Software und den Treiber installiert. In Abschnitt 4.3.2 geht es für Sie nun weiter mit dem Start der Arduino-Software und der Erläuterung ihrer einzelnen Elemente.

Mac OS X

Unter Apples Betriebssystem Mac OS ist die Installation der Arduino-Software simpel. Um sie herunterzuladen, besuchen Sie die Arduino-Projektseite. 20 Navigieren Sie dort

20 http://arduino.cc

83

4 Die Arduino-Plattform

zur Seite Download. Unterhalb des Punktes Arduino IDE finden Sie den Link Mac OS X, den Sie anklicken (siehe Abbildung 4.37).

Link Mac OS X , den Sie anklicken (siehe Abbildung 4.37). Abbildung 4.37 Download der Arduino-Software

Abbildung 4.37 Download der Arduino-Software für Mac OS

Der Download besteht in der Regel aus einer ZIP-Datei. Diese wird in Ihrem Benutzer- verzeichnis im Ordner Download gespeichert und in der Regel automatisch entpackt (siehe Abbildung 4.38).

Die Installation unter Mac OS ist kinderleicht: Ziehen Sie im Finder das Programm Arduino vom Downloads-Ordner in das Programme-Verzeichnis (siehe Abbildung 4.39). Ein extra Treiber wird unter Mac OS nicht benötigt.

84

4.3 Die Arduino-Software

unter Mac OS nicht benötigt. 84 4.3 Die Arduino-Software Abbildung 4.38 Die heruntergeladene Software im Finder

Abbildung 4.38 Die heruntergeladene Software im Finder

Abbildung 4.38 Die heruntergeladene Software im Finder Abbildung 4.39 Installation der Software per »Drag &

Abbildung 4.39 Installation der Software per »Drag & Drop«

Glückwunsch! Sie haben erfolgreich die Arduino-Software installiert. In Abschnitt 4.3.2 geht es für Sie nun weiter mit dem Start der Arduino-Software und der Erläuterung ihrer einzelnen Elemente.

85

4 Die Arduino-Plattform

Linux

Die nachfolgende Beschreibung ist für das Linux-Betriebssystem Ubuntu Version 14 gedacht. Ubuntu ist derzeit eines der einsteigerfreundlichsten Linux-Betriebssysteme. Falls Sie ein anderes Linux verwenden, schauen Sie auf der Webseite des Arduino-Pro- jektes 21 nach, welche Anleitung für Ihr Betriebssystem die passende ist.

Unter Ubuntu erfolgt die Installation der Arduino-Software wie nachfolgend beschrie- ben – ein Download von der Arduino-Projektseite ist nicht erforderlich! Starten Sie als Erstes, wie in Abbildung 4.40 gezeigt, das Ubuntu Software-Center.

wie in Abbildung 4.40 gezeigt, das Ubuntu Software-Center . Abbildung 4.40 Die Ubuntu-Oberfläche mit dem

Abbildung 4.40 Die Ubuntu-Oberfläche mit dem Software-Center

Nachdem das Software-Center gestartet ist, klicken Sie in das Suchfeld und geben dort »Arduino« (ohne Anführungszeichen) ein, um nach der Software zu suchen (siehe Abbildung 4.41).

Sobald die Arduino-Software im Software-Center gefunden wurde, wird sie, wie in Abbil- dung 4.42 dargestellt, angezeigt. Klicken Sie auf Installieren, um die Installation der Software zu starten.

21

86

http://arduino.cc

4.3 Die Arduino-Software

zu starten. 21 86 http://arduino.cc 4.3 Die Arduino-Software Abbildung 4.41 Geben Sie in diesem Suchfeld »Arduino«

Abbildung 4.41 Geben Sie in diesem Suchfeld »Arduino« ein.

4.41 Geben Sie in diesem Suchfeld »Arduino« ein. Abbildung 4.42 Ein Klick auf »Installieren« startet die

Abbildung 4.42 Ein Klick auf »Installieren« startet die Installation.

87

4 Die Arduino-Plattform

Wenn Sie unter Linux Software installieren wollen, müssen Sie Ihr Anmeldepasswort eingeben, um sich zu legitimieren (siehe Abbildung 4.43).

eingeben, um sich zu legitimi eren (siehe Abbildung 4.43). Abbildung 4.43 Geben Sie hier Ihr Anmeldepasswort

Abbildung 4.43 Geben Sie hier Ihr Anmeldepasswort ein.

In Abbildung 4.44 ist der Installationsvorgang dargestellt. Sie bekommen nichts weiter davon mit – alles passiert unsichtbar im Hintergrund.

davon mit – alles passiert unsichtbar im Hintergrund. Abbildung 4.44 Der Installationsvorgang läuft. Sie

Abbildung 4.44 Der Installationsvorgang läuft.

Sie erkennen die erfolgreiche Installation an dem kleinen grünen Pfeil am Arduino- Symbol (siehe Abbildung 4.45). Schließen Sie jetzt das Software-Center wieder.

88

4.3 Die Arduino-Software

das Software-Center wieder. 88 4.3 Die Arduino-Software Abbildung 4.45 Geschafft! Die Installation ist

Abbildung 4.45 Geschafft! Die Installation ist abgeschlossen.

Wenn alles geklappt hat, finden Sie die Arduino-Software als Symbol auf dem Desktop (siehe Abbildung 4.46).

als Symbol auf dem Desktop (siehe Abbildung 4.46). Abbildung 4.46 Die installierte Arduino-Software (IDE) 89

Abbildung 4.46 Die installierte Arduino-Software (IDE)

89

4 Die Arduino-Plattform

Falls das Symbol dort nicht erscheinen sollte, klicken Sie, wie in Abbildung 4.47 gezeigt, auf das Ubuntu-Dashboard-Symbol und suchen nach der Software. Sie wird nach Ein- gabe der ersten Buchstaben von »Arduino« sofort angezeigt und kann später von dort gestartet werden.

angezeigt und kann später von dort gestartet werden. Abbildung 4.47 Die Arduino-Software im Ubuntu-Dashboard

Abbildung 4.47 Die Arduino-Software im Ubuntu-Dashboard

Jetzt haben Sie es fast geschafft. Damit Ihr Computer Ihr Arduino-Board später richtig erkennt, wurde mit der Software im Hintergrund ein Treiber installiert. Dieser benötigt jedoch unbedingt einen Neustart Ihres Computers, damit er funktioniert! Starten Sie daher jetzt Ihren Computer neu.

Glückwunsch! Sie haben erfolgreich die Arduino-Software und den Treiber installiert. In Abschnitt 4.3.2 geht es für Sie nun weiter mit dem Start der Arduino-Software und der Erläuterung ihrer einzelnen Elemente.

4.3.2

Start

Nachdem das Programm installiert und gestartet wurde, sieht es so aus wie in Abbil- dung 4.48.

Das ist also die Software, mit der Sie das »Gehirn« des künftigen Roboters mit Leben fül- len werden! Keine Angst, dass noch alles so leer aussieht: Ich zeige Ihnen in Abschnitt

90

4.4 Die Entwicklungsumgebung

4.6.1, wie die Arduino-Software Sie beim Erstellen Ihrer eigenen Programme für den Roboter unterstützt. Denn sie enthält bereits viele fertige Beispiele, die per Mausklick hinzugefügt werden können. Aber dazu später mehr.

hinzugefügt werden können. Aber dazu später mehr. Abbildung 4.48 Die Arduino-Software beim ersten Start 4.4

Abbildung 4.48 Die Arduino-Software beim ersten Start

4.4 Die Entwicklungsumgebung

Noch eine Anmerkung zu den hier künftig verwendeten Begrifflichkeiten: Dieses Fens- ter der Entwicklungsumgebung wird auch grafische Oberfläche oder allgemein GUI (Graphical User Interface = grafische Benutzer-Schnittstelle) genannt. Sie haben viel- leicht auch schon einmal die Abkürzung IDE gelesen. IDE steht für Integrated Develop- ment Environment, also für »integrierte Entwicklungsumgebung«. Das bedeutet, dass die Arduino-Software bereits alles enthält, was Sie zum Erstellen der Roboter-Software benötigen – sprich: Alle Bestandteile sind integriert.

Sie haben vielleicht schon einmal von anderen IDEs gehört, wie zum Beispiel Visual Stu- dio, Xcode oder Eclipse. Dies sind alles IDEs für verschiedene Programmiersprachen und Anwendungen. Die Arduino-Software hat den Vorteil, dass sie auf jedem gängigen Betriebssystem läuft und dort identisch aussieht und bedient wird.

Experten-Wissen

Wenn Sie schon einmal programmiert haben, werden Ihnen Begriffe wie Linker und Compiler sicher etwas sagen. Diese sind in der Arduino-Software vollständig integriert. Sie müssen also nicht extra spezielle Compiler installieren und Pfade setzen. Das macht die Software alles für Sie unsichtbar im Hintergrund.

91

spezielle Compiler installieren und Pfade setzen. Das macht die Software alles für Sie unsichtbar im Hintergrund.

4 Die Arduino-Plattform

4.5 Die Software im Detail

Hier erhalten Sie noch ein paar Hinweise, wie die Arduino-Software aufgebaut ist und was die einzelnen Menüpunkte bedeuten. Sie erfahren außerdem, wie Sie die Software mit fertigen Beispielen unterstützt.

4.5.1 Ändern der Sprache

Sollte die Arduino-Software auf Ihrem Computer nicht auf Deutsch starten, können Sie die Sprache in den Einstellungen (englisch: Preferences) leicht ändern. Die Software wurde in über 30 Sprachen übersetzt. Unter Windows und Linux ist der Menüpunkt für die Ein- stellungen unter File zu finden, unter Mac OS X unterhalb des Punktes Arduino.

zu finden, unter Mac OS X unterhalb des Punktes Arduino . Abbildung 4.49 Ändern der Spracheinstellungen

Abbildung 4.49 Ändern der Spracheinstellungen der Arduino-Software

Damit diese Änderungen übernommen werden, muss die Arduino-Software einmal beendet und neu gestartet werden.

4.6 Die grafische Oberfläche im Detail

Nun ein paar Erläuterungen zur Programmoberfläche. Abbildung 4.50 zeigt das kom- plette Fenster mit allen Symbolen (englisch: Icons). Konkret haben die Symbole und Bereiche des Fensters folgende Bedeutung:

92

4.6 Die grafische Oberfläche im Detail

Überprüfen 1: Überprüft den Programmcode auf Fehler

Upload 2: Überträgt das fertige Programm auf die Hardware

Neu 3: Erzeugt ein neues, leeres Programm

Öffnen 4: Öffnet bestehende Programme

Speichern 5: Speichert das aktuelle Programm

6: Anzeige des Namens des aktuellen Programms

7: Die installierte Version der Arduino-Software

8: Aktiviert den seriellen Monitor

9: Funktionen zur Nutzung der Tabs/Karteireiter

j: Bereich zum Editieren

k: Bereich zur Anzeige von Statusmeldungen

l: Zeigt die Zeile an, in der sich der Cursor befindet

m: Zeigt das Arduino-Board und den aktuellen Anschluss an

m : Zeigt das Arduino-Board und den aktuellen Anschluss an Abbildung 4.50 Die einzelnen Elemente der

Abbildung 4.50 Die einzelnen Elemente der GUI im Überblick

93

4 Die Arduino-Plattform

4 Die Arduino-Plattform Hinweis Standardmäßig öffnet die Arduino-Software beim Start immer das zuletzt verwendete

Hinweis

Standardmäßig öffnet die Arduino-Software beim Start immer das zuletzt verwendete Programm. Beim Schließen der letzten noch offenen Datei beendet sich das Programm – aber davor warnt die Software Sie vorher.

4.6.1 Beispiele innerhalb der Software

Wie ich bereits erwähnt habe, enthält die Arduino-Software zahlreiche fertige Programm- beispiele zur freien Verwendung. Diese sind nach unterschiedlichen Anforderungen gruppiert. In Abbildung 4.51 ist die Auswahl eines Programms zur Servoansteuerung dar- gestellt. Alle Beispiele sind in englischer Sprache kommentiert. Für dieses Buch benöti- gen Sie keines der Beispielprogramme. Wenn Sie jedoch später einmal etwas selbst programmieren, werfen Sie vielleicht als Erstes einen Blick in diese Beispiele, denn hier ist schon vieles als Grundlage vorhanden – und Sie müssen ja das Rad nicht immer neu erfinden. Falls Sie bereits etwas Erfahrung im Programmieren haben, können Sie sich natürlich auch jetzt die einzelnen Beispiele genauer ansehen.

auch jetzt die einzelnen Beispiele genauer ansehen. Abbildung 4.51 Die Arduino-Software enthält zahlreiche

Abbildung 4.51 Die Arduino-Software enthält zahlreiche Beispiele.

94

4.7

Fazit

4.7

Fazit

In diesem Kapitel haben Sie gelernt, wo Sie die Arduino-Software bekommen und wie Sie diese einschließlich Treiber für Ihr Arduino-Board installieren. Sie wissen jetzt außerdem, wo Sie die Sprache der Software ändern können. Danach habe ich Ihnen die einzelnen Elemente der grafischen Programmieroberfläche (IDE) vorgestellt. Abschlie- ßend haben Sie erfahren, wo Sie viele fertige Beispiele finden. Damit haben Sie die wich- tigsten Grundlagen, um in Kapitel 7, »Los geht’s! – Erste Praxis«, Ihr erstes Programm zu schreiben.

95

Kapitel 7

Kapitel 7 Los geht’s! – Erste Praxis Sie haben bis zu diesem Kapitel durchgehalten. Das ist

Los geht’s! – Erste Praxis

Sie haben bis zu diesem Kapitel durchgehalten. Das ist ein gutes Zeichen. Denn Sie haben es trotz viel Theorie bis hierher geschafft, und nun soll es endlich mit prakti- schen Experimenten losgehen.

Sie werden gleich Ihr erstes Programm für den Arduino erstellen und das Ergebnis auf dem Board sehen können.

7.1 Der erste Kontakt mit der Hardware

Das erste Experiment wird ganz einfach daraus bestehen, die orange LED auf Ihrem Arduino-Board zum Blinken zu bringen. Traditionell wird das erste eigene Programm, das eine LED zum Blinken bringt, Blinky genannt. Das ist vielleicht nicht sehr einfalls- reich, aber dafür einprägsam.

7.1.1 »Blinky« – Ansteuerung einer LED

Für Ihr erstes Experiment benötigen Sie folgende Teile:

Checkliste ein Arduino-Board ein passendes USB-Kabel
Checkliste
ein Arduino-Board
ein passendes USB-Kabel

Schließen Sie das Arduino-Board mit einem USB-Kabel an Ihren Computer an. Das pas- sende USB-Kabel hat auf der »Computerseite« einen USB-A-Stecker und auf der »Arduino-Seite« einen USB-B-Stecker und ist in Abbildung 7.1 dargestellt.

179

7 Los geht’s! – Erste Praxis

7 Los geht’s! – Erste Praxis Abbildung 7.1 USB-B-Stecker (links) und USB-A-Stecker (rechts) Wenn Sie den

Abbildung 7.1 USB-B-Stecker (links) und USB-A-Stecker (rechts)

Wenn Sie den Arduino so, wie er »ab Werk« geliefert wird, mit Ihrem Computer verbin- den, blinkt normalerweise die orange LED auf der Platine im Sekundenrhythmus. Sie finden die LED links oben auf der Platine. Sie ist mit dem Buchstaben »L« beschriftet (siehe Abbildung 7.2).

mit dem Buchstaben »L« beschriftet (siehe Abbildung 7.2). Abbildung 7.2 Die orange leuchtende LED »L« Sollte

Abbildung 7.2 Die orange leuchtende LED »L«

Sollte auf Ihrer Platine nur die grüne ON-LED leuchten, die orange LED aber nicht, machen Sie sich keine Sorgen. Denn Sie erstellen jetzt ja Ihr erstes Programm, das die

180

7.1 Der erste Kontakt mit der Hardware

LED zum Blinken bringen wird. Sollte die LED bei Ihnen bereits blinken, so ist wahr- scheinlich bereits ein Programm ab Werk auf dem Arduino. Das macht nichts, denn Sie lernen dann jetzt, wie Sie den Blinkrhythmus verändern können. In Listing 7.1 sehen Sie das vollständige Programm dazu. Sie finden die Datei Blinky.ino wie immer zum Down- load unter http://robotiklabor.de/literatur/.

// An Pin 13 ist auf den meisten Arduino-Boards // eine LED angeschlossen. // // Definieren der Variable 'led' // und Setzen auf den Wert 13 (Pin 13) int led = 13;

// Die setup-Funktion läuft einmal zu Beginn. void setup()

{

// Den digitalen PIN zur Ausgabe (Output) festlegen. pinMode(led, OUTPUT);

}

// Die loop-Routine läuft immer wieder - unendlich:

void loop()

{

// schalte die LED an (HIGH) digitalWrite(led, HIGH);

// warte eine halbe Sekunde

delay(500);

// schalte die LED aus (LOW) digitalWrite(led, LOW);

// warte eine halbe Sekunde

delay(500);

}

Listing 7.1 Ihr erstes Arduino-Programm: »Blinky«

Wie Sie sehen, besteht das Programm aus nur wenigen Zeilen, wovon die meisten nur aus Kommentaren bestehen. Zur Erinnerung: Kommentare, die sich auf eine Zeile beschränken, beginnen jeweils mit zwei Schrägstrichen. Dabei ist es unerheblich, ob sie am Anfang oder Ende einer Zeile stehen:

181

7 Los geht’s! – Erste Praxis

// Dies ist ein Kommentar. x = 1; // Das ist noch ein Kommentar.

Nun aber zur Erklärung der Software im Detail. Variablen haben Sie bereits in Abschnitt 6.3, »Variablen«, kennengelernt. Die erste Anweisung im Listing definiert die Variable led und gibt ihr den Wert 13:

int led = 13;

Auf den meisten Arduino-Platinen ist Pin 13 des Steckers intern mit einer LED und einem Widerstand verdrahtet. Das ist sehr praktisch, denn die LED kann so leicht zu Kontrollzwecken verwendet werden oder um einen bestimmten Status zu signalisieren. Warum eine LED einen Widerstand benötigt, erkläre ich Ihnen später in Abschnitt 7.1.4, denn nun soll zunächst die Praxis im Vordergrund stehen. Darum gehen wir jetzt schnell zu den weiteren Programmanweisungen im Code:

void setup()

{

// Den digitalen PIN als Ausgabe (Output) festlegen. pinMode(led, OUTPUT);

}

Immer, wenn Sie den Arduino einschalten, werden die Zeilen der setup-Funktion ein- malig ausgeführt. Dies kann durch Anschluss an einen Computer per USB-Kabel oder über die Stromversorgungsbuchse oder nach Drücken des Tasters Reset geschehen. Wie bereits in Abschnitt 4.2.1 erläutert, können die Pins des Arduino-Boards als Eingang (INPUT) oder Ausgang (OUTPUT) betrieben werden. Das heißt, es wird entweder eine Spannung erwartet (Eingang) oder eine Spannung am Pin ausgegeben (Ausgang). Da Sie in diesem Fall eine LED einschalten wollen, benötigt diese eine Spannung. Dementspre- chend wird der Pin des Arduino als Ausgang geschaltet (OUTPUT), um eine Spannung per HIGH auszugeben. Nun zum »Hauptprogramm«:

void loop()

{

// schalte die LED an (HIGH) digitalWrite(led, HIGH);

// warte eine halbe Sekunde

delay(500);

// schalte die LED aus (LOW) digitalWrite(led, LOW);

182

// warte eine halbe Sekunde

delay(500);

}

7.1 Der erste Kontakt mit der Hardware

Zur Erinnerung: Die loop-Funktion wird automatisch abgearbeitet, nachdem das setup beendet ist. Zum Schalten einer Spannung auf einen der Ausgänge dient der Befehl 1 digi- talWrite. Wie Sie sehen, wird die LED als Erstes mit HIGH eingeschaltet. Danach wartet der Arduino für eine halbe Sekunde, bevor er den nächsten Befehl ausführt. Dazu dient die Anweisung delay(500). Denn der Wert für delay wird in Millisekunden angegeben, und 500 Millisekunden entsprechen 0,5 Sekunden. Nachdem der Arduino gewartet hat, wird die LED mit LOW ausgeschaltet. Und wieder wartet das Board danach für 500 Millisekunden durch den zweiten delay(500)-Befehl. Wenn das Ende der loop-Funktion bei der schlie- ßenden geschweiften Klammer } erreicht ist, beginnt die Schleife von vorne und schaltet die LED mit HIGH wieder an. Und so weiter. Ganz einfach, oder? Jetzt, wo Sie wissen, wie das Programm funktioniert, wollen Sie es natürlich endlich in Aktion sehen.

7.1.2 Übertragen der Software auf das Arduino-Board

Das Übertragen der Software auf das Arduino-Board wird übrigens auch flashen genannt, weil hier ein sogenannter Flash-Speicher mit Daten beschrieben wird.

Experten-Wissen zum Angeben

Die Software, die Sie auf das Arduino-Board übertragen, wird auch Firmware genannt. Sie haben davon vielleicht schon einmal gehört. Eine Firmware besteht aus dem Pro- grammcode und allen darin gespeicherten Daten und bleibt beim Ausschalten des Gerätes dauerhaft bestehen. »Dauerhaft« deshalb, weil sie nicht so einfach gelöscht werden kann – außer eben mit einem Computer und der passenden Software (hier der Arduino-Software). Alle Geräte, die einen Mikrocontroller enthalten, haben auch eine Firmware im Speicher, die beim Einschalten ausgeführt wird – zum Beispiel Ihre Wasch- maschine, die verschiedene Waschprogramme ausführen kann, eine Verkehrsampel, die ein Tages- oder Nachtprogramm ausführen kann, oder vielleicht Ihr Anzeigeinstru- ment im Auto, das live den Benzinverbrauch ausrechnen und anzeigen kann.

das live den Benzinverbrauch ausrechnen und anzeigen kann. Öffnen der Datei Um die Software nun endlich

Öffnen der Datei

Um die Software nun endlich zu übertragen, laden Sie die Datei Blinky.ino herunter und starten die Arduino-Software. Öffnen Sie die heruntergeladene Datei Blinky.ino im Menü über Datei • Öffnen (siehe Abbildung 7.3).

1 Genau genommen ist es kein Befehl, sondern eine Funktion. Umgangssprachlich sprechen aber die meisten von einem Befehl oder einer Anweisung – auch wenn es nicht ganz korrekt ist!

183

7 Los geht’s! – Erste Praxis

7 Los geht’s! – Erste Praxis Abbildung 7.3 Öffnen einer vorhandenen Datei in der Arduino-Software Ihre

Abbildung 7.3 Öffnen einer vorhandenen Datei in der Arduino-Software

Ihre Arduino-Software sollte jetzt so wie in Abbildung 7.4 aussehen.

sollte jetzt so wie in Abbildung 7.4 aussehen. Abbildung 7.4 Das geladene Programm »Blinky« in der

Abbildung 7.4 Das geladene Programm »Blinky« in der GUI

184

7.1 Der erste Kontakt mit der Hardware

Auswahl des Arduino-Boards

Damit die Arduino-Software weiß, auf welchen Typ Arduino-Board das Programm über- tragen werden soll, wählen Sie einmalig im Menü Tools • Board den Punkt Arduino Uno aus (siehe Abbildung 7.5).

Board den Punkt Arduino Uno aus (siehe Abbildung 7.5). Abbildung 7.5 Auswahl des passenden Arduino-Boards Auswahl

Abbildung 7.5 Auswahl des passenden Arduino-Boards

Auswahl des USB-Anschlusses

Nun müssen Sie noch den passenden USB-Anschluss Ihres Computers auswählen. Dies geschieht wieder unter dem Menüpunkt Tools und dann durch den Unterpunkt Seri- eller Port. Unter Mac OS heißen die USB-Ports /dev/tty.usbxxx. Je nach Board ist der letzte Teil des Namens mit »xxx« immer unterschiedlich und könnte zum Beispiel /dev/ tty.usbmodemfa1411 oder auch /dev/tty.usbserial-A5005BPZ lauten. Wenn Sie sich bei der Auswahl des richtigen Anschlusses nicht sicher sind, beenden Sie die Arduino-Soft- ware, ziehen alle nicht benötigten USB-Geräte von Ihrem Computer ab und lassen nur das Arduino-Board verbunden. Dann starten Sie die Arduino-Software erneut und schauen, was an Anschlüssen zur Auswahl steht. Unter Windows heißen die Anschlüsse für das Arduino-Board zum Beispiel COM2 oder COM3, wobei hier die Ziffer im Namen variiert. Solange Sie das gleiche Board immer am gleichen USB-Anschluss Ihres Compu- ters verwenden, müssen Sie diese Einstellung nur einmal durchführen. Ihr Arduino- Board wird dann automatisch erkannt.

185

7 Los geht’s! – Erste Praxis

Übertragen der Software

Der einfachste Teil ist nun das Übertragen der Software auf das Board. Klicken Sie hierzu einfach auf die Upload-Schaltfläche in der Arduino-Software. Der Rest geht automa- tisch: Die Software prüft den geschriebenen Programmcode vor dem Übertragen noch einmal auf Fehler, wandelt ihn in ein für den Mikrocontroller verständliches Format um (kompiliert und linkt) und überträgt das Ergebnis auf das Arduino-Board (flasht). Abbil- dung 7.6 zeigt die GUI, wenn der Vorgang erfolgreich abgeschlossen wurde: In der Statuszeile unten steht dann »Upload abgeschlossen.«.

der Statuszeile unten steht dann »Upload abgeschlossen.«. Abbildung 7.6 Das Übertragen der Arduino-Software (Upload)

Abbildung 7.6 Das Übertragen der Arduino-Software (Upload) ist beendet.

Hat alles funktioniert, blinkt die LED auf dem Arduino-Board nun in einem Rhythmus von 0,5 Sekunden. Herzlichen Glückwunsch! Sie haben nun das erste Mal Ihren Arduino

186

7.1 Der erste Kontakt mit der Hardware

erfolgreich programmiert und damit die Grundlage für alle weiteren Schritte auf dem Weg zu Ihrem eigenen Roboter gelegt! Weiter geht’s.

7.1.3 Fehlersuche

Falls Sie eine Fehlermeldung erhalten haben, schauen Sie auf die Arduino-Projektseite. Dort gibt es einen ausführlichen Troubleshooting-Bereich. 2 Die dort beschriebenen Lösungen werden Ihnen helfen, die meisten Probleme zu beseitigen. Alternativ kopie- ren Sie einfach die erste Fehlermeldung aus der Arduino-Software in die Suchmaschine Ihrer Wahl. Sie können davon ausgehen, dass bereits vor Ihnen jemand dieses Problem hatte und eine Lösung im Internet zu finden ist.

Übung macht den Meister

Experimentieren Sie mit dem Programm Blinky ruhig noch etwas herum. Lassen Sie die LED zum Beispiel ganz schnell blinken oder nur alle zwei Sekunden. Oder lassen Sie die LED nur ganz kurz blinken und dann eine lange Pause einlegen. Übertragen Sie jedes Mal den geänderten Code auf das Arduino-Board, und schauen Sie sich die Auswirkun- gen sofort an. Sie bekommen so ein Gefühl dafür, wie leicht es ist, Änderungen vorzu- nehmen und diese per Upload zu übertragen.

7.1.4 Herr Ohm und sein Gesetz

Wie ich bereits in Abschnitt 7.1.1 erwähnt habe, hat die orange LED an Pin 13 des Arduino-Boards einen Vorwiderstand. Was hat es nun mit dem Widerstand auf sich? Vielleicht haben Sie ja im Zusammenhang mit Widerständen schon einmal vom ohm- schen Gesetz 3 gehört.

Das ohmsche Gesetz

Das ohmsche Gesetz beschreibt, wie sich der durch ein Objekt fließende Strom in seiner Stärke verändert, wenn eine elektrische Spannung an ein Objekt anlegt und diese Span- nung verändert wird.

Anders formuliert: Die Stärke des elektrischen Stroms, der durch ein Objekt fließt, ver- ändert sich im gleichen Verhältnis (proportional) wie die elektrische Spannung am Objekt. Das bedeutet automatisch, dass der Widerstand des Objekts gleich bleibt (kon- stant), egal wie sich Spannung und Strom ändern. Dieser Zusammenhang kann in einer

2 http://arduino.cc/en/Guide/Troubleshooting

3 Benannt nach Georg Simon Ohm

187

Dieser Zusammenhang kann in einer 2 http://arduino.cc/en/Guide/Troubleshooting 3 Benannt nach Georg Simon Ohm 187

7 Los geht’s! – Erste Praxis

einfachen Formel beschrieben werden. Wird die Stromstärke mit I, die Spannung mit U und der Widerstand mit R bezeichnet, lautet sie:

werden. Wird die Stromstärke mit I , die Spannung mit U und der Widerstand mit R

bzw.:

werden. Wird die Stromstärke mit I , die Spannung mit U und der Widerstand mit R

bzw.:

werden. Wird die Stromstärke mit I , die Spannung mit U und der Widerstand mit R

Praktische Anwendung des ohmschen Gesetzes

Und wozu brauchen Sie das nun? Ganz einfach. Eine LED zum Beispiel ist ein verhältnis- mäßig empfindliches Bauteil (auch wenn LEDs heutzutage an jeder Stelle eingesetzt werden). Denn eine LED verträgt nur eine geringe maximale elektrische Spannung U und eine maximale Stromstärke I.

elektrische Spannung U und eine maximale Stromstärke I. Vorsicht! Fließt ein zu hoher Strom durch eine

Vorsicht!

Fließt ein zu hoher Strom durch eine LED, geht sie sehr schnell kaputt. Sie kann dabei sogar explodieren. Und wenn dabei die Kunststoffummantelung in mehrere Teile zer- platzt, kann das im wahrsten Sinne des Wortes schnell ins Auge gehen. Seien Sie also bitte sehr vorsichtig, und schauen Sie in das Datenblatt des Herstellers der LED, welche Spannungen und Ströme die LED maximal verträgt!

Vorwiderstände

Um den Strom zu begrenzen, der durch eine LED fließt, wird ein Widerstand R benötigt, der vor die LED geschaltet wird (Vorwiderstand). Und um die Höhe des Widerstandes zu berechnen, wird – Überraschung! – das ohmsche Gesetz mit obigen Formeln benutzt. Die Einheit des Widerstandes lautet übrigens Ohm (). Wie praktisch, was?

Eine orange Standard-LED wird typischerweise mit einer Spannung von 2,2 Volt (V) und einem Strom von 0,02 Ampere (A) betrieben. 0,02 A entsprechen 20 Milliampere bzw. 20 mA. Wollen Sie so eine LED also an einen Ausgang des Arduino anschließen, der ja 5 Volt Spannung liefert (siehe Abschnitt 4.2.1), benötigen Sie einen Widerstand, um den Strom und die Spannung an der LED zu begrenzen. Welchen Widerstandswert muss der Widerstand haben? Nun, wenn am Ausgang des Arduino 5 Volt »herauskommen«, die LED aber nur 2,2 Volt als Spannung benötigt, bleibt ein Unterschied von 5 V – 2,2 V = 2,8 V übrig, der am Widerstand R verbraucht 4 werden muss. Da Sie jetzt wissen, dass durch

4 Tatsächlich wird Strom nicht »verbraucht«, denn jede Art von Energie geht nie verloren. Sie wird nur in eine andere Form umgewandelt. In unserem Beispiel findet eine Umwandlung in Wärme statt, die jedoch so gering ist, dass sie nicht spürbar ist. Umgangssprachlich spricht dennoch jeder vom »Energieverbrauch«.

188

7.1 Der erste Kontakt mit der Hardware

die LED nur 20 mA an Strom I fließen dürfen, haben Sie alle Werte zusammen, die Sie zur Berechnung des benötigten Widerstandes benötigen:

U = 2,8 V

I = 0,02 A

R = ?

Eingefügt in die Formel des ohmschen Gesetzes sieht das so aus:

in die Formel des ohms chen Gesetzes sieht das so aus: Sie benötigen somit einen Widerstand

Sie benötigen somit einen Widerstand von mindestens 140 Ohm (140 Ω), damit die LED beim Anschluss an eine Spannung von 5 Volt – sprich: an einem der Ausgänge des Arduino-Boards – nicht zerstört wird. Da Widerstände nicht mit allen Werten produ- ziert werden, sondern nur in bestimmten Reihen 5 erhältlich sind, ist der nächsthöhere Wert hier 150 Ω. In der Praxis macht das für die Helligkeit der LED keinen Unterschied.

Wichtig!

Bitte denken Sie immer daran, dass jede LED andere Spannungen und Ströme verträgt. Hier hilft Ihnen das Datenblatt des Herstellers weiter, das Sie in der Regel online finden, oft auch dort, wo Sie die LEDs gekauft haben. Die LED-Spannung wird übrigens meist mit U f angegeben (U f = forward voltage).

Widerstandsberechnung für LEDs vollautomatisch

Falls Sie sich nicht die Mühe machen möchten, LED-Vorwiderstände jedes Mal »von Hand« zu berechnen, so finden Sie im Internet passende Widerstandsrechner 6 .

Anschluss weiterer LEDs

Möchten Sie auf dem Arduino-Board eine weitere LED an einen anderen der Pins anschließen, sähe das auf einer Steckplatine so wie in Abbildung 7.7 aus.

Widerstände und ihre Farbcodierung

Der Wert von Widerständen ist nicht als Zahlenwert auf sie aufgedruckt, sondern anhand von farbigen Ringen kodiert. Eine Erläuterung dazu finden Sie im Internet. 7 Für den Aufbau des Roboters ist das in diesem Buch nicht relevant.

5 http://de.wikipedia.org/wiki/Widerstandsreihe

6 Zum Beispiel http://www.leds.de/Widerstandsrechner/

7 http://de.wikipedia.org/wiki/Widerstand_(Bauelement)#Farbkodierung_auf_Widerst.C3.A4nden

189

7 Los geht’s! – Erste Praxis RESET DIGITAL (PWM= ) ICSP2 L TX ON RX
7 Los geht’s! – Erste Praxis
RESET
DIGITAL
(PWM=
)
ICSP2
L
TX
ON
RX
Arduino TM
1
POWER
ANALOG
IN
A
B
C
D
E
F
G
H
I
J
11
55
1010
AREF
GND
13
1515
IOREF
12
RESET
3V3
11
10
5V
9
GND
2020
GND
VIN
8
7
6
A0
A1
5
4
2525
A2
3
A3
A4
2
1TX0
ICSP
A5
RX0
0
3030
A
B
C
D
E
F
G
H
I
J
1TX0 ICSP A5 RX0 0 3030 A B C D E F G H I J

Abbildung 7.7 Eine weitere LED mit Widerstand am Arduino-Board 8

7.1.5 Wie dimme ich eine LED?

In diesem Abschnitt lernen Sie, wie Sie eine LED dimmen können und warum das wich- tig für die Ansteuerung Ihres Roboters sein wird. Generell kennt ein digitaler Arduino- Ausgang nur zwei Zustände: HIGH (5 Volt) und LOW (0 Volt). Damit könnte eine LED nur ein- oder ausgeschaltet sein. Was also tun Sie, wenn Sie die LED in der Helligkeit regeln wollen? Könnten Sie nicht einfach eine geringere Spannung anlegen, damit die LED dunkler leuchtet? Nein. Denn anders als bei Glühlampen ist der Spannungsbereich, in dem eine LED arbeitet (leuchtet), sehr eng begrenzt. Die LED benötigt je nach Typ eine sogenannte Durchflussspannung (englisch forward voltage), ab der sie überhaupt erst anfängt zu leuchten. Ein typischer Spannungsbereich für eine LED liegt bei 2 bis 2,4 Volt, und in diesem Bereich leuchtet sie dann in voller Stärke. Aber es gibt einen Trick: Puls- weitenmodulation (PWU). Und die kann Ihr Arduino auch!

8 Abbildung erstellt mit Fritzing

190

7.1 Der erste Kontakt mit der Hardware

Pulsweitenmodulation

Stellen Sie sich vor, Sie sind in einem ziemlich dunklen Raum und Sie haben eine Taschenlampe. Wenn Sie die Taschenlampe nun einschalten, ist es vollständig hell (HIGH), und wenn sie ausgeschaltet ist, ist es dunkel (LOW). Und nun der Trick: Wenn Sie die Taschenlampe nun so schnell Sie können hintereinander ein- und wieder aus- schalten, so werden Sie feststellen, dass es aussieht, was wäre sie gedimmt. Offenbar erhellt sie den Raum nur noch halb so stark, als wenn sie die ganze Zeit leuchtet. Das liegt daran, dass das menschliche Auge nur sehr träge auf die schnellen Helligkeitsände- rungen reagieren kann. Es nimmt daher insgesamt nur eine »halbe Helligkeit« wahr. Das können Sie übrigens leicht selbst mit einer Taschenlampe ausprobieren. Zur besse- ren Veranschaulichung, was Pulsweitenmodulation ist, schauen Sie sich einmal Abbil- dung 7.8 genauer an.

100% 0% t/s 0 1 2 3 4 5 6 7 8 t 1 T
100%
0%
t/s
0
1
2
3
4
5
6
7
8
t
1
T

Abbildung 7.8 Pulsweitenmodulation

In dem Diagramm ist die Taschenlampe innerhalb einer Zeitdauer t von insgesamt acht Sekunden viermal für eine Sekunde ausgeschaltet und viermal für eine Sekunde eingeschaltet. In der Dauer von acht Sekunden war sie also 50 % der Zeit an- und 50 % ausgeschaltet. Natürlich würde das Auge einen so langsamem Wechsel deutlich wahr- nehmen. Das Beispiel in Abbildung 7.8 dient nur zur einfacheren Berechnung der 50 % – sprich der halben Helligkeit.

Der Name »Pulsweitenmodulation« (PWM) kommt daher, dass die Länge der Impulse, also die Weite im Diagramm, verändert (moduliert) wird. 9 Es muss ja kompliziert klin- gen, denn Sie sind nun schon fast ein Arduino-Fachmann, und da brauchen Sie auch ein paar Fachausdrücke zum Angeben.

9 Die Pulsweitenmodulation (PWM) wird übrigens auch Pulsdauermodulation (PDM) genannt.

191

7 Los geht’s! – Erste Praxis

7 Los geht’s! – Erste Praxis Ganz formell In einer Formel würde die Berechnung der Helligkeit

Ganz formell

In einer Formel würde die Berechnung der Helligkeit aus dem Diagramm oben so ausse- hen:

der Helligkeit aus dem Diagramm oben so ausse- hen: Man spricht hierbei auch von einem duty

Man spricht hierbei auch von einem duty cycle von 50 %. Duty cycle bedeutet so viel wie Einschaltdauer oder Tastverhältnis.

Wenn die Lampe innerhalb einer Sekunde nur 0,1 Sekunden lang an wäre, ergäbe das einen Helligkeitswert (duty cycle) von 10 %:

die Lampe innerhalb einer Sekunde nur 0,1 Sekunden lang an wäre, ergäbe das einen Helligkeitswert (duty

Pulsweitenmodulation nachgebildet

Um die Pulsweitenmodulation auf dem Arduino nachzubilden, benötigen Sie wieder den Code Blinky.ino aus Listing 7.1. Tragen Sie für die delay-Anweisungen folgende neue Werte in die Klammern ein:

digitalWrite(led, HIGH); // schalte die LED an (HIGH)

// warte 0,1 Sekunden // schalte die LED aus (LOW) // warte 0,9 Sekunden

delay(100);

digitalWrite(led, LOW);

delay(900);

Wenn Sie nun den geänderten Code auf Ihren Arduino hochladen, werden Sie sehen, dass die LED nur halb so hell erscheint – wie in dem Beispiel mit der Taschenlampe. Sie haben nämlich die LED nur noch für 100 Millisekunden an- und dann für 900 Mil- lisekunden wieder ausgeschaltet. Dieses schnelle Flackern wird von Ihrem Auge so wahrgenommen, als wäre die LED viel dunkler geworden. Spielen Sie ruhig mit den zwei Werten für die delay-Anweisung, und versuchen Sie, weitere Helligkeitsstufen zu bilden.

Einmal »delay«, immer »delay«?

Der Befehl delay ist die simpelste Methode, um mit dem Arduino-Board PWM nachzu- bilden. Jedoch hat diese Methode auch Nachteile. So kann der Befehl delay als kleinsten Wert nur 1 übernehmen, also eine Millisekunde. Sollten Sie also eine später eine feinere Auflösung benötigen, ginge das mit delay nicht. Der wesentliche Nachteil von delay ist jedoch, dass während der Ausführung dieses Befehls der Arduino nichts anderes im

192

7.1 Der erste Kontakt mit der Hardware

Hintergrund abarbeiten kann! Außerdem ist es nicht sehr einfach, mittels delay die Ein- schaltdauer exakt zu definieren. Weitere Details dazu finden Sie im Internet im Artikel »The secrets of Arduino PWM«. 10

PWM für Profis: »analogWrite«

Praktischerweise haben die Entwickler auch hier vorgesorgt und PWM gleich »mitgelie- fert«. Anstatt mittels delay einen Pin in einem bestimmten Rhythmus zwischen HIGH und LOW wechseln zu lassen, gibt es folgenden Befehl:

analogWrite(Pin, Wert)

Der Befehl benötigt zwei Parameter: Der erste ist der anzusteuernde Pin, der zweite eine Zahl von 0 (= »immer aus«) bis 255 (= »immer an«).

Beispiel:

Der Befehl analogWrite(5, 128) schaltet den Pin 5 auf 50 % des maximalen Wertes von 5 Volt, also 2,5 Volt (255 = 100 % = 5 Volt, 128 = 50 % = 2,5 Volt). Natürlich liegen für einen Teil der Zeit immer noch 5 Volt am Ausgang des Ports an, denn dieser wechselt ja wie beim Taschenlampenlicht immer noch sehr schnell zwischen 0 und 5 Volt. Wenn Sie aber mit einem trägen Messgerät die Spannung am Pin überprüfen, so werden Sie effek- tiv nur 2,5 Volt messen (Mittelwert).

Und wenn Sie nun mittels analogWrite(5, 64) effektiv nur ca. 1,25 Volt messen würden, warum leuchtet die LED dann immer noch, obwohl sie ja, wie in Abschnitt 7.1.4 beschrie- ben, eine Spannung größer als 2 Volt benötigt, um zu leuchten? Ganz einfach: Die einfa- chen Messgeräte sind zu träge, um die schnellen Wechsel in der Gleichspannung messen zu können. An einem sehr präzisen und vor allem schnellen Oszilloskop sind die Wechsel zwischen 0 und 5 Volt gut zu sehen. In Abbildung 7.9 sehen Sie so eine Mes- sung mit dem Oszilloskop. Hier ist deutlich der gemessene Mittelwert Mean mit 1,28 Volt zu erkennen, aber eben auch der Maximalwert Maximum mit 5,28 Volt. 11

Da unsere LED die bei 5,28 Volt entstehenden höheren Ströme nicht dauerhaft verträgt, muss eben auch bei den effektiv gemessenen 1,28 Volt ein Vorwiderstand verwendet werden.

10 http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM

11 Eigentlich sollten das hier genau 5,0 Volt sein. Aber so spielt das Leben: Offenbar lagen zum Zeitpunkt des Experiments an meinem Board 5,28 Volt an.

193

7 Los geht’s! – Erste Praxis

7 Los geht’s! – Erste Praxis Wichtig! Der Arduino Uno kann nicht auf jedem Pin ein

Wichtig!

Der Arduino Uno kann nicht auf jedem Pin ein PWM-Signal ausgeben! Es sind genau sechs Pins, die diese Funktion nutzen können. Damit Sie sich diese nicht merken müs- sen, sind sie auf der Platine mit einer Tilde (~) vor der jeweiligen Pin-Nummer gekenn- zeichnet.

Tilde (~) vor der jeweiligen Pin-Nummer gekenn- zeichnet. Abbildung 7.9 Schneller Wechsel der Pegel zwischen 0

Abbildung 7.9 Schneller Wechsel der Pegel zwischen 0 und 5 Volt

In Abbildung 7.10 sehen Sie die markierten PWM-fähigen Pins 3, 5, 6, 9, 10 und 11.

Sie die markierten PWM-fähigen Pins 3, 5, 6, 9, 10 und 11. Abbildung 7.10 Die PWM-Pins

Abbildung 7.10 Die PWM-Pins sind mit einer Tilde (~) gekennzeichnet.

194

7.1 Der erste Kontakt mit der Hardware

Warum ist PWM so wichtig?

Die Pulsweitenmodulation ist nicht nur praktisch, um LEDs zu dimmen. Wenn Sie später in Abschnitt 7.5, »Ich muss hier weg! – Ansteuerung von Motoren«, die Motoren Ihres Roboters ansteuern, werden Sie PWM verwenden, um den Motor nicht nur mit maximaler Geschwindigkeit (100 % = HIGH), sondern auch langsamer (zum Beispiel mit 25 %) drehen zu lassen.

Übrigens: HIGH ist nicht gleich HIGH – oder: 3,3 Volt vs. 5 Volt

Viele neue Bauteile nutzen als HIGH-Zustand statt 5 Volt oft nur noch 3,3 Volt, weil damit insgesamt in einer Schaltung Energie gespart wird. Um eine andere Schaltung mit 3,3-Volt-Logik am Arduino Uno anzuschließen, werden spezielle Wandler benötigt, die die Spannungen automatisch von 3,3 nach 5 Volt und umgekehrt wandeln. Im Inter- net finden Sie diese zum Beispiel unter der englischen Bezeichnung Voltage Level Trans- lator. Sie kosten nur wenige Euro.

Voltage Level Trans- lator . Sie kosten nur wenige Euro. Übung Erstellen Sie jetzt bitte ein

Übung

Erstellen Sie jetzt bitte ein Programm, das eine LED auf 25 % Helligkeit herunterregelt (dimmt). Schließen Sie dazu eine LED mit Vorwiderstand an Pin 5 an. Wenn Sie sich nicht mehr sicher sind, wie die LED angeschlossen wird, blättern Sie dazu kurz zu Abbil- dung 7.7 zurück. Das Programm besteht aus sehr wenigen Zeilen und sollte am Ende so wie PWM_LED.ino in Listing 7.2 aussehen:

// An Pin 5 ist eine LED mit Widerstand angeschlossen. int led = 5;

void setup()

{

// Den Pin zur Ausgabe festlegen. pinMode(led, OUTPUT);

}

void loop()

{

// 64 entspricht ca. 25 % von 255. // Die LED leuchtet nun mit 25 % Helligkeit. analogWrite(led, 64);

}

Listing 7.2 Das Programm »PWM_LED.ino« dimmt eine LED auf 25 %.

195

7 Los geht’s! – Erste Praxis

7.1.6 Zwischenfazit

Der erste Praxisteil ist geschafft, und ich hoffe, es hat Ihnen bis hierher Spaß gemacht. Sie haben erfolgreich die Grundlagen für die nachfolgenden Kapitel auf dem Weg zu Ihrem eigenen Arduino-Roboter gelernt. Als Erstes haben Sie die orange LED zum Blin- ken gebracht, indem Sie zum ersten Mal Software auf Ihr Arduino-Board übertragen haben. Nach etwas Theorie über das ohmsche Gesetz lernten Sie im Anschluss, warum LEDs immer Vorwiderstände benötigen. Als Letztes haben Sie anhand einer Taschen- lampe gelernt, was Pulsweitenmodulation (PWM) ist und dass Sie diese später zur Motorsteuerung auf Ihrem Roboter benötigen werden.

7.2 Ist da jemand? – Kontakt mit der Außenwelt

In Abschnitt 7.1.1 haben Sie gelernt, wie Sie mit dem Arduino-Board mittels LED etwas signalisieren können. Was tun Sie aber, wenn Ihr Arduino-Board etwas von der Außen- welt mitbekommen soll? Das zeige ich Ihnen in den folgenden Abschnitten. Und es wird viel einfacher als das PWM-Thema aus Abschnitt 7.1.5.

7.2.1 Schalter abfragen

Das einfachste Element, das Sie an einem Arduino-Pin »einlesen« können, ist ein simp- ler Schalter. Diese Teile benötigen Sie für den nachfolgenden Aufbau:

Checkliste ein Arduino-Board ein passendes USB-Kabel
Checkliste
ein Arduino-Board
ein passendes USB-Kabel

Um einen Arduino-Pin einzulesen, muss natürlich ein Signal auf den Pin gegeben wer- den, das der Arduino »versteht«. Wie Sie sich bestimmt schon gedacht haben, ist das einfachste Signal ein HIGH oder LOW. Dazu wird gleich ein Pin des Arduino-Boards mit der Masse (GND = LOW-Signal) und mit 5 Volt (HIGH-Signal) verbunden. Wenn Sie näm- lich den Wert eines Arduino-Eingangs einfach einlesen würden, ohne dass etwas mit dem Pin verbunden ist – dieser also quasi »in der Luft hängt« –, dann bekommen Sie jedes Mal ein nicht vorhersagbares Ergebnis. Bauen Sie nun das Experiment mit dem Schalter so wie in Abbildung 7.11 dargestellt auf.

196

7.2 Ist da jemand? – Kontakt mit der Außenwelt

auf. 196 7.2 Ist da jemand? – Kontakt mit der Außenwelt RESET DIGITAL (PWM= ) ICSP2
RESET DIGITAL (PWM= ) ICSP2 L TX ON RX Arduino TM 1 POWER ANALOG IN
RESET
DIGITAL
(PWM=
)
ICSP2
L
TX
ON
RX
Arduino TM
1
POWER
ANALOG
IN
Abbildung 7.11 Eine einfache Schaltung mit Schalter 12
A
11
B
C
D
E
F
G
H
I
J
55
1010
AREF
GND
13
IOREF
1515
2020
12
RESET
3V3
11
10
5V
9
GND
GND
VIN
8
7
6
A0
A1
5
4
A2
3
2525
3030
A3
A4
2
1TX0
ICSP
A5
RX0
0
A
B
C
D
E
F
G
H
I
J

Wie Sie sehen, ist Pin 5 des Arduino über die gelbe Leitung mit einem Widerstand von 10 kund mit einem Kontakt des Schalters verbunden. Das andere Ende des Widerstandes R1 ist über die schwarze Leitung mit der Masse (GND) verbunden. Der mittlere Kontakt des Schalters S1 ist über die rote Leitung mit 5V verbunden. Zur Verdeutlichung zeigt Abbildung 7.12 den dazu passenden Schaltplan.

Warum ist eine so umständliche Verkabelung mit einem extra Widerstand notwendig, wenn Sie doch nur einen simplen Schalter einlesen wollen? Noch einmal: Würde der Widerstand weggelassen werden und wäre der Schalter geöffnet bzw. in die eine Rich- tung geschoben, so würden Sie beim Einlesen des Arduino-Pins einen willkürlichen Wert als Ergebnis zurückbekommen, weil der Pin »in der Luft« hängen würde und

12 Abbildung erstellt mit Fritzing

197

7 Los geht’s! – Erste Praxis

dadurch keinen definierten Zustand wie HIGH oder LOW hat. Wenn aber ein Wider- stand gegen die Masse (GND) geschaltet wird, so wird der Pin »auf Masse gezogen«. Ein Auslesen des Pins ergibt somit den definierten Wert LOW. Schieben Sie den Schalter in die andere Richtung, liegen am Pin des Arduino 5 Volt an. Sie haben also ein definiertes HIGH-Signal.

o 5 Volt an. Sie haben also ein definiertes HIGH-Signal. RESET D0/RX RESET2 D1/TX AREF D2
o 5 Volt an. Sie haben also ein definiertes HIGH-Signal. RESET D0/RX RESET2 D1/TX AREF D2
RESET D0/RX RESET2 D1/TX AREF D2 ioref D3 PWM 3 D4 2 A0 D5 PWM
RESET
D0/RX
RESET2
D1/TX
AREF
D2
ioref
D3 PWM
3
D4
2
A0
D5 PWM
1
S1
A1
D6 PWM
Arduino
A2
D7
Uno
(Rev3)
A3
D8
A4/SDA
D9 PWM
A5/SCL
D10 PWM/SS
21
D11 PWM/MOSI
D12/MISO
D13/SCK
R1
10kΩ
N/C
Arduino Uno
Abbildung 7.12 Der Schaltplan zu Abbildung 7.11 13
3V3
5V
GND
VIN

Expertenwissen zum Angeben

Ein Widerstand, der einen Pin wie beschrieben »herunter auf Masse zieht«, wird übri- gens Pull-down-Widerstand genannt. Das Gleiche gibt es auch Richtung HIGH: Ein Widerstand vom Pin zur positiven Versorgungsspannung heißt Pull-up-Widerstand.

13 Abbildung erstellt mit Fritzing

198

7.2 Ist da jemand? – Kontakt mit der Außenwelt

Der Befehl zum Einlesen eines digitalen Arduino-Pins lautet:

digitalRead(Pin);

Der Befehl benötigt beim Aufruf nur den Parameter Pin, also die Nummer des digitalen Pins, der eingelesen werden soll. Als Ergebnis liefert der Befehl den »Wert« HIGH oder LOW zurück. Aber am einfachsten verdeutlicht dies das kleine Programm Schalter_ein- lesen.ino in Listing 7.3, das Sie bitte auf Ihr Arduino-Board übertragen und mit der Schal- tung aus Abbildung 7.11 ausprobieren.

int ledPin = 13; int inPin = 5;

int zustand = LOW; // Diese Variable speichert den Schalterzustand

// LED verbunden mit Digital-Pin 13 // Schalter verbunden mit Digital-Pin 5

void setup()

{

pinMode(ledPin, OUTPUT); // Digital-Pin 13 als Ausgang definieren

pinMode(inPin, INPUT);

// Digital-Pin 7 als Eingang definieren

}

void loop()

{

zustand = digitalRead(inPin);

// Schalterzustand (Pin) einlesen

digitalWrite(ledPin, zustand); // LED gemäß Schalterzustand schalten

}

Listing 7.3 Einlesen eines Schalters und Ausgabe mittels LED

Wie erwartet sollte nun der Schalter die LED des Arduino-Boards ein- und ausschalten.

Warum einfach, wenn es auch umständlich geht?

Haben Sie sich beim Lesen des Programmcodes gefragt, warum es so viele Zeilen sind bzw., genauer gesagt, warum eine Variable verwendet wird? Natürlich hätte der Code auch wie in Listing 7.4 wesentlich kürzer geschrieben werden können.

void setup()

{

// Digital-Pin 13 als Ausgang definieren pinMode(13, OUTPUT);

199

7 Los geht’s! – Erste Praxis

// Digital-Pin 7 als Eingang definieren pinMode(7, INPUT);

}

void loop()

{

// Schalter einlesen und LED sofort ein-/ausschalten digitalWrite(13, digitalRead(7));

}

Listing 7.4 Einlesen eines Schalters – kurz, aber unvorteilhaft

Auf den ersten Blick erscheint Ihnen das Programm sicher einfacher und übersichtli- cher. Schauen Sie sich die Unterschiede in Ruhe an. Sie werden feststellen, dass in Lis- ting 7.4 vollständig auf die Verwendung von Variablen verzichtet und der Code dadurch sehr schlank wird. Das kann natürlich so gemacht werden – insbesondere dann, wenn es sich um ein so einfaches Programm handelt. Stellen Sie sich aber nun vor, Sie bauen die Schaltung einmal um und schließen den Schalter statt an Pin 7 an Pin 11 an. Vielleicht schließen Sie auch noch eine grüne LED statt der eingebauten an und wollen diese an Pin 10 stecken.

Was müssten Sie dazu nun im Programmcode verändern? Richtig: An jeder Stelle müss- ten Sie für den Schalter die 7 auf 11 ändern und für die LED die 13 auf 10. Verwenden Sie stattdessen den Code mit den Variablen, müssten Sie lediglich die zwei Zeilen mit led- Pin und inPin aktualisieren. Die lange Codevariante ist auf den ersten Blick vielleicht umständlicher, aber wesentlich leichter zu warten. Denken Sie nur daran, an wie vielen Stellen Sie Pin-Nummern aktualisieren müssten, sollten Sie später einmal ein Pro- gramm mit hundert Zeilen haben. Nicht zuletzt wäre dieses Vorgehen auch noch deut- lich fehleranfälliger.

In diesem Abschnitt haben Sie gelernt, wie Sie einen Schalter anschließen, diesen ausle- sen und warum hierzu ein Widerstand notwendig ist. Des Weiteren haben Sie erfahren, warum es sich meistens lohnt, Variablen in Programmen zu verwenden, statt sie so kurz wie möglich zu schreiben.

7.2.2 Taster abfragen

Was mit einem Schalter geht, geht mit einem Taster genauso einfach. Und das testen Sie jetzt. Sie benötigen für den nachfolgenden Aufbau:

200

7.2 Ist da jemand? – Kontakt mit der Außenwelt

200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
200 7.2 Ist da jemand? – Kontakt mit der Außenwelt Checkliste einen Taster einen Widerstand, 10
Checkliste einen Taster einen Widerstand, 10 k Ω ein paar Leitungen (Jumper Wire) eine Steckplatine

Checkliste

einen TasterCheckliste einen Widerstand, 10 k Ω ein paar Leitungen (Jumper Wire) eine Steckplatine den Arduino Uno

einen Widerstand, 10 k ΩCheckliste einen Taster ein paar Leitungen (Jumper Wire) eine Steckplatine den Arduino Uno

ein paar Leitungen (Jumper Wire)Checkliste einen Taster einen Widerstand, 10 k Ω eine Steckplatine den Arduino Uno

eine SteckplatineCheckliste einen Taster einen Widerstand, 10 k Ω ein paar Leitungen (Jumper Wire) den Arduino Uno

den Arduino UnoCheckliste einen Taster einen Widerstand, 10 k Ω ein paar Leitungen (Jumper Wire) eine Steckplatine

Checkliste einen Taster einen Widerstand, 10 k Ω ein paar Leitungen (Jumper Wire) eine Steckplatine den

Im Unterschied zu einem Schalter, der seine Position dauerhaft beibehält, verbindet ein Taster seine Kontakte nur, solange er gedrückt wird – zumindest bei einem Taster, der die Kontakte beim Betätigen schließt. Es gibt nämlich auch Taster, die beim Betätigen die Kontakte öffnen. Der Aufbau der Schaltung ist genau der gleiche wie beim Schalter, wie Sie anhand Abbildung 7.13 leicht feststellen werden.

wie Sie anhand Abbildung 7.13 leicht feststellen werden. RESET DIGITAL (PWM= ) ICSP2 L TX ON
RESET DIGITAL (PWM= ) ICSP2 L TX ON RX Arduino TM 1 POWER ANALOG IN
RESET
DIGITAL
(PWM=
)
ICSP2
L
TX
ON
RX
Arduino TM
1
POWER
ANALOG
IN
Abbildung 7.13 Schaltung zum Auslesen eines Tasters 14
D
11
A
B
C
E
F
G
H
I
J
55
1010
AREF
GND
13
IOREF
1515
12
RESET
3V3
11
10
5V
9
GND
GND
2020
2525
VIN
8
7
6
A0
A1
5
4
A2
3
A3
A4
2
1TX0
ICSP
A5
RX0
0
3030
A
B
C
D
E
F
G
H
I
J

14 Abbildung erstellt mit Fritzing

201

7 Los geht’s! – Erste Praxis

Den dazugehörigen Schaltplan sehen Sie in Abbildung 7.14: Nur das Symbol für den Tas- ter S2 hat sich verändert.

S2

RESET D0/RX RESET2 D1/TX AREF D2 ioref D3 PWM D4 A0 D5 PWM A1 D6
RESET
D0/RX
RESET2
D1/TX
AREF
D2
ioref
D3 PWM
D4
A0
D5 PWM
A1
D6 PWM
Arduino
A2
D7
Uno
(Rev3)
A3
D8
A4/SDA
D9 PWM
A5/SCL
D10 PWM/SS
D11 PWM/MOSI
D12/MISO
D13/SCK
R1
10kΩ
N/C
1
2
Arduino Uno
1
2
21
Abbildung 7.14 Schaltplan zu Abbildung 7.13 15
3V3
5V
GND
VIN

Vorwiderstand ohne Widerstand – oder: Der interne Pull-up-Widerstand

Sie können den Aufbau aus Abbildung 7.13 durch Aktivieren einer besonderen Funktion Ihres Arduino auch ohne extra Widerstand aufbauen. Dazu nutzen Sie den internen Pull-up-Widerstand. Intern? Richtig. Der auf Ihrem Arduino-Board verbaute Mikrocont- roller besitzt an seinen digitalen Pins interne Pull-up-Widerstände, die Sie per Software aktivieren können. Dies geschieht mit folgendem Befehl:

pinMode(Pin, INPUT_PULLUP);

Damit ersparen Sie sich einen separaten Widerstand beim Abfragen von Tastern oder Schaltern. Beachten Sie aber, dass sich die Logik beim Auslesen des Pins »umkehrt«.

15 Abbildung erstellt mit Fritzing

202

7.2 Ist da jemand? – Kontakt mit der Außenwelt

Denn der Pin wird standardmäßig immer Richtung +5 Volt »gezogen«. Das bedeutet:

Wenn der Taster in Abbildung 7.15 nicht gedrückt ist, ist der Pin HIGH. Wird der Taster gedrückt, wird der Pin mit GND verbunden und ist damit LOW. Aber dafür sparen Sie sich ein extra Bauteil.

RESET DIGITAL (PWM= ) ICSP2 L TX ON RX Arduino TM 1 POWER ANALOG IN
RESET
DIGITAL
(PWM=
)
ICSP2
L
TX
ON
RX
Arduino TM
1
POWER
ANALOG
IN
AREF
GND
13
IOREF
12
RESET
11
3V3
10
5V
9
GND
8
GND
VIN
7
6
A0
5
A1
4
A2
3
A3
2
A4
TX0
1
ICSP
A5
RX0
0
A
B
C
D
E
F
G
H
I
J
11
55
1010
1515
2020
2525
3030
A
B
C
D
E
F
G
H
I
J

Abbildung 7.15 Versuch mit Taster und internem Pull-up-Widerstand 16

Prellende Taster und Schalter

Taster und Schalter haben eine Eigenschaft, die Prellen (engl. bounce) genannt wird. Das bedeutet. Wenn ein Schalter oder Taster betätigt wird, werden die Kontakte in der Regel nicht einfach geschlossen, sondern im winzigen Millimeterbereich mehrfach hinterein- ander kurz geschlossen und wieder geöffnet. Das kann man sich wie einen Handball vorstellen, der auf den Boden fällt und dabei ein paarmal springt, bis er endgültig liegen bleibt. Dieses Verhalten ist technisch bedingt und unerwünscht. Beim Schalten einer LED ist dieses Prellen nicht weiter tragisch und auch nicht wahrnehmbar.

Wenn Sie aber zum Beispiel jede Betätigung eines Tasters zählen wollen, so nimmt der Arduino diese Mehrfachbetätigungen durch das Prellen aufgrund mehrerer schneller Messungen während des Tastendrucks wahr. Ein scheinbar einmaliger Druck auf den Taster wird dann zum Beispiel als »fünfmal betätigt« gezählt. Das kann dann bei Aus- wertungen in einer Software zu einem Problem werden. In Abbildung 7.16 sehen Sie, wie ein Taster mehrfach zwischen AUS und EIN wechselt, bis er am Ende eingeschaltet bleibt.

16 Abbildung erstellt mit Fritzing

203

7 Los geht’s! – Erste Praxis

7 Los geht’s! – Erste Praxis Abbildung 7.16 Ein prellender Schalter beim Einschalten Wie kann dieses

Abbildung 7.16 Ein prellender Schalter beim Einschalten

Wie kann dieses Prellproblem gelöst werden? Zum einen gibt es spezielle sogenannte entprellte Taster. Diese sind mechanisch so konstruiert, dass sie nicht prellen können. Zum anderen ist das aber auch per Software lösbar. Es gibt eine fertige Lösung, da sich bereits andere ausgiebig zu diesem Problem Gedanken gemacht haben: die sogenannte Bounce-Bibliothek 17 . Diese sorgt dafür, dass ein prellender Schalter oder Taster wie gewünscht abgefragt werden kann, und filtert die Störungen automatisch für Sie her- aus. Ein Beispiel dazu sehen Sie in Listing 7.5. Den Code zum Download finden Sie in der Datei Taster_entprellt.ino. Der Aufbau der Testschaltung dazu ist in Abbildung 7.15 dar- gestellt. Denken Sie daran, dass Sie für die Verwendung der Bibliothek diese erst in Ihre Arduino-Software importieren müssen (siehe Abschnitt 6.15).

#include <Bounce2.h>

#define TASTER_PIN 2 // Pin für den Taster (gegen GND)

#define LED_PIN

13 // Die übliche Arduino-LED

// Erstelle ein Bounce-Objekt, das das Entprellen regelt. Bounce entpreller = Bounce();

void setup()

{

// Taster-Pin als Eingang definieren

17

http://playground.arduino.cc/code/bounce

204

7.2 Ist da jemand? – Kontakt mit der Außenwelt

pinMode(TASTER_PIN, INPUT);

// Internen Pull-up-Widerstand aktivieren pinMode(TASTER_PIN, INPUT_PULLUP); // Entprellfunktion aktivieren entpreller.attach(TASTER_PIN);

entpreller.interval(5);

// LED-Pin als Ausgang definieren pinMode(LED_PIN,OUTPUT);

}

void loop()

{

// Entpreller (entpreller) aktualisieren entpreller.update();

// "Korrigierten" Wert des Tasters lesen int wert = entpreller.read();

// LED ein- oder ausschalten

// (LOW = EIN, weil Pull-up-Widerstand!) if (wert == LOW)

{

// LED an digitalWrite(LED_PIN, HIGH);

}

else

{

// LED aus digitalWrite(LED_PIN, LOW);

}

}

Listing 7.5 Taster einlesen und automatisch entprellen

Die meisten Zeilen dürften für Sie nicht mehr neu sein. Spannend ist lediglich die Zeile zu Beginn:

Bounce entpreller = Bounce();

205

7 Los geht’s! – Erste Praxis

Hier wird ein Objekt namens entpreller erstellt, das die ganze Magie für Sie regelt. Beachten Sie weiterhin die in der setup-Funktion enthaltene Anweisung pinMode(TAS- TER_PIN, INPUT_PULLUP), die den internen Pull-up-Widerstand im Arduino für den Tas- ter-Pin aktiviert (siehe Abschnitt 7.1.4). Wie die Entprellfunktion intern genau arbeitet, können Sie auf der Website des Entwicklers nachlesen. 18 Wichtig sind an dieser Stelle zum einen die folgenden Zeilen in der setup-Funktion:

// Entprellfunktion aktivieren entpreller.attach(TASTER_PIN);

entpreller.interval(5);

sowie die folgenden Zeilen später in der loop-Funktion:

// Entpreller (entpreller) aktualisieren entpreller.update();

// "Korrigierten" Wert des Tasters lesen int wert = entpreller.read();

Das ist auch schon alles, was Sie dazu wissen müssen. Wahrscheinlich werden Sie die Bounce-Bibliothek in der Praxis nicht sehr oft benötigen. Aber falls einmal die exakte Auswertung von Tastern oder Schaltern notwendig ist, kennen Sie nun diese hilfreiche Bibliothek.

7.2.3 Sensoren

Aber nun zu etwas Spannenderem als simplen Tastern und Schaltern: Sensoren. Ein Sen- sor ist so etwas wie ein »Fühler«, der bestimmte Eigenschaften seiner Umgebung erken- nen kann. Er nimmt Messungen vor und stellt die Ergebnisse an seinen Anschlüssen zum Auslesen an elektrischen Schaltungen, wie dem Arduino, zur Verfügung. In den folgenden Abschitten will ich Ihnen drei Sensoren vorstellen, die in der Robotik häufig Anwendung finden. Einen davon werden Sie selbst später an Ihrem Arduino-Roboter nutzen!

7.2.4 Infrarotsensor

Es gibt verschiedenste Sensoren, die sich mit der Messung von Infrarotlicht beschäfti- gen. Infrarotlicht ist Licht im für den Menschen unsichtbaren Bereich. Dabei sind wir ständig davon umgeben, sogar in unserem Wohnzimmer – zumindest, wenn Sie einen

18

https://github.com/thomasfredericks/Bounce-Arduino-Wiring/wiki

206

7.2 Ist da jemand? – Kontakt mit der Außenwelt

Fernseher oder eine Stereoanlage mit Fernbedienung besitzen, denn die gängigen Fern- bedienungen haben alle eine Infrarot-LED (IR-LED), die Signale an das zu steuernde Gerät überträgt. Mit vielen Digitalkameras oder Webcams können Sie die Infrarotstrah- lung sogar sichtbar machen: Halten Sie doch einmal in sehr dunkler Umgebung Ihre Fernseherfernbedienung vor eine Kamera, betätigen eine der Tasten und schauen Sie auf das Bild. Es dürfte ungefähr wie in Abbildung 7.17 aussehen. Der nun sichtbar leucht- ende Punkt ist die Infrarot-LED.

Der nun sichtbar leucht- ende Punkt ist die Infrarot-LED. Abbildung 7.17 Infrarotlicht, mit einer Webcam sichtbar

Abbildung 7.17 Infrarotlicht, mit einer Webcam sichtbar gemacht

Natürlich hat Ihr Fernseher oder das entsprechende empfangende Gerät auch einen Inf- rarotsensor, um dieses Licht zu erkennen und mittels weiterer Elektronik zu dekodie- ren. Dekodieren bedeutet in diesem Fall, die übertragenen Signale zu entschlüsseln. Schließlich wäre es ziemlich hilfreich, wenn beim Drücken der Taste 4 auf der Fernbe- dienung eine andere Information als bei Taste 2 an das zu steuernde Gerät übertragen wird. In Abbildung 7.18 sehen Sie einen Infrarotsensor (IR-Sensor).

Abbildung 7.18 sehen Sie einen Infrarotsensor ( IR-Sensor ). Abbildung 7.18 Der Infrarotsensor (IR-Sensor) TSOP38238 207

Abbildung 7.18 Der Infrarotsensor (IR-Sensor) TSOP38238

207

7 Los geht’s! – Erste Praxis

Der Vorteil der Infrarotsensoren ist, dass sie relativ günstig sind. Sie haben aber auch einen Nachteil: Da die Sonne ebenfalls einen sehr hohen Anteil an Infrarotlicht aussen- det, funktionieren viele IR-Sensoren im Außenbereich nicht sehr zuverlässig. Denn neben dem Infrarotlicht der Fernbedienung empfangen sie zusätzlich das IR-Licht der Sonne und können das Signal somit nicht immer eindeutig erkennen. Für Innenberei- che können sie also gut eingesetzt werden, während draußen andere Sensoren besser geeignet sind.

Der Infrarotsensor Ihres Roboters

Der Infrarotsensor, der später auf Ihrem Arduino-Roboter zum Einsatz kommen wird, ist eine Kombination aus Infrarotsender und -empfänger: der Sharp-Infrarotdistanz- messer mit dem kurzen und leicht zu merkenden Namen GP2Y0A21YK0F. Dieser Sensor, den Sie in Abbildung 7.19 sehen, enthält eine Infrarotdiode (IR-Diode) und einen IR- Empfänger. Die IR-Diode sendet Infrarotlicht aus, das von einem Objekt reflektiert und vom IR-Empfänger wieder eingelesen wird. In Abhängigkeit von der Entfernung des Objekts gibt dieser Sensor an einem seiner Pins eine Spannung aus. Diese Spannung können Sie mit dem Arduino einlesen.

aus. Diese Spannung können Sie mit dem Arduino einlesen. Abbildung 7.19 Der Sharp-Infrarotdistanz messer

Abbildung 7.19 Der Sharp-Infrarotdistanzmesser »GP2Y0A21YK0F«

Der Sensor ist denkbar einfach an einem Arduino-Board anzuschließen, denn er hat lediglich drei Leitungen an seinem Anschlusskabel:

Farbe Rot Schwarz Weiß Belegung +5 Volt Masse (GND) Signal
Farbe Rot Schwarz Weiß Belegung +5 Volt Masse (GND) Signal
Farbe Rot Schwarz Weiß Belegung +5 Volt Masse (GND) Signal

Farbe

Rot

Schwarz

Weiß

Belegung

+5 Volt

Masse (GND)

Signal

Tabelle 7.1 Die Belegung des Sensor-Anschlusskabels

208

7.2 Ist da jemand? – Kontakt mit der Außenwelt

Für das nachfolgende Experiment benötigen Sie folgende Teile:

Checkliste einen Infrarotdistanzsensor den Arduino Uno
Checkliste
einen Infrarotdistanzsensor
den Arduino Uno

Stecken Sie das Anschlusskabel an den Sensor und schließen Sie dann den Sensor wie in Abbildung 7.20 an Ihren Arduino an. Das weiße Sensorkabel entspricht in der Abbil- dung der gelben Leitung.

RESET DIGITAL (PWM= ) ICSP2 L TX ON RX Arduino TM 1 POWER ANALOG IN
RESET
DIGITAL
(PWM=
)
ICSP2
L
TX
ON
RX
Arduino TM
1
POWER
ANALOG
IN
AREF
GND
13
IOREF
12
RESET
3V3
11
10
5V
9
GND
GND
VIN
8
7
6
A0
A1
5
4
A2
3
A3
A4
2
1TX0
ICSP
A5
RX0
0

Abbildung 7.20 Der Infrarotdistanzsensor, angeschlossen am Arduino 19

Vorsicht, empfindliche Buchse am Sensor!

Beachten Sie, dass der weiße Stecker nur in eine Richtung auf den Sensor gesteckt wer- den kann. Bitte schauen Sie sich den Stecker in Abbildung 7.21 genau an: Er hat einen kleinen Steg in der Mitte, der in die passende Führung des Sensors gesteckt werden muss. Sollten Sie den Stecker falsch herum stecken und den Sensor anschließen, wird mindestens der Sensor dauerhaft Schaden nehmen!

19 Abbildung erstellt mit Fritzing

209

und den Sensor anschließen, wird mindestens der Sensor dauerhaft Schaden nehmen! 19 Abbildung erstellt mit Fritzing

7 Los geht’s! – Erste Praxis

Abbildung 7.21 Der Stecker des Sensors hat einen Steg in der Mitte.

Abbildung 7.21 Der Stecker des Sensors hat einen Steg in der Mitte.

Dieser Sharp-Sensor kann Distanzen zu einem Objekt in ca. 10 bis 80 cm Entfernung messen und gibt entsprechend zu den Entfernungen einen analogen Spannungswert auf der weißen Signalleitung aus. Beispielsweise:

ca. 2,3 Volt bei 10 cm Entfernung

ca. 1,0 Volt bei 29 cm Entfernung

ca. 0,4 Volt bei 80 cm Entfernung

In Abbildung 7.22 sehen Sie ein Diagramm aus dem Datenblatt des Sensors, das die jeweilige Spannung in Abhängigkeit zur Entfernung eines Objekts vom Sensor zeigt.

3,5 3,0 2,5 2,0 1,5 1,0 0,5 0,0 0 10 20 30 40 50 60
3,5
3,0
2,5
2,0
1,5
1,0
0,5
0,0
0 10
20
30
40
50
60
70
80
Abstand zum reflektierenden Objekt (in cm)
Spannung (in V)

Abbildung 7.22 Die Ausgangsspannung in Abhängigkeit zur Entfernung

210

7.2 Ist da jemand? – Kontakt mit der Außenwelt

Wie Sie sehen, handelt es sich um eine analoge Spannung, die alle Werte zwischen 0 bis ungefähr 3,1 Volt annehmen kann. Daraus folgt das nächste Experiment mit dem Arduino und einer neuen Funktion: das Einlesen einer analogen Spannung mit diesem Befehl:

analogRead(pin);

Anzeigen der Entfernung auf dem Bildschirm

Laden Sie nun bitte das Programm IR_Distanz_SerialOut (siehe Listing 7.6) herunter, und übertragen Sie es mit der aufgebauten Schaltung auf Ihr Arduino-Board:

int ledPin = 13; // Der übliche LED-Pin int IRpin = A0; // Der Pin für den Infrarotsensorausgang

void setup()

{

pinMode(ledPin, OUTPUT); // LED-Pin ist ein Ausgang

pinMode(IRpin, INPUT);

// IR-Pin als Eingang definieren

// Serielle Ausgabe auf dem Bildschirm starten

Serial.begin(9600);

}

void loop()

{

// Sensor (Pin) einlesen float spannungswert = analogRead(IRpin);

// umrechnen in cm float entfernung = (6787 / (spannungswert - 3)) - 4;

// Solange Distanz <= 80 cm if (entfernung <= 80)

{

// Distanz ausgeben Serial.print("Messwert: "); Serial.print(spannungswert); Serial.print(" / Entfernung: "); Serial.print(entfernung); Serial.print("cm");

}

else

211

7 Los geht’s! – Erste Praxis

{

Serial.print("> 80 cm");

}

Serial.println();

delay(500);

}

Listing 7.6 »IR_Distanz_SerialOut.ino« zum Anzeigen der Entfernung

»IR_Distanz_SerialOut.ino« zum Anzeigen der Entfernung Abbildung 7.23 Ausgabe der Entfernung auf dem Bildschirm

Abbildung 7.23 Ausgabe der Entfernung auf dem Bildschirm

212

7.2 Ist da jemand? – Kontakt mit der Außenwelt

Nach dem Übertragen der Software aktivieren Sie den in Abschnitt 6.14.2 beschriebenen Serial Monitor in der Arduino-Software über die Menüpunkte Tools Serial Monitor. Halten Sie nun die Hand vor den Sensor, und verändern Sie dabei die Entfernung. Die Ausgabe auf dem Bildschirm zeigt die ungefähre Entfernung der Hand vom Sensor an. In Abbildung 7.23 sehen Sie ein Beispiel.

Wenn Sie den Code einmal näher betrachten, werden Sie feststellen, dass die ganze Magie auf zwei Zeilen beschränkt ist. Erst wird die analoge Spannung vom Sensor am Arduino-Pin mittels analogRead eingelesen und gleichzeitig in der Variable entfernung gespeichert:

// Sensor (Pin) einlesen float spannungswert = analogRead(IRpin);

Gleich danach wird der eingelesene Spannungswert in die Entfernung in Zentimeter umgerechnet. Die spezielle Formel 20 ist hier an den verwendeten Sensor angepasst. Bei einem anderen Sensor müssten Sie hier eine Anpassung vornehmen:

// umrechnen in cm float entfernung = (6787 / (spannungswert - 3)) - 4;

Die Entfernung mittels LED signalisieren

Schauen Sie sich nun Listing 7.7 an, und übertragen Sie die Datei IR_Distanz_LED.ino auf den Arduino. Nach dem Übertragen des Codes sollte die orange LED auf dem Arduino- Board langsam im Sekundentakt blinken.

int ledPin = 13; // Der übliche LED-Pin int IRpin = A0; // Der Pin für den Infrarotsensorausgang

void setup()

{

pinMode(ledPin, OUTPUT); // LED-Pin als Ausgang definieren

pinMode(IRpin, INPUT);

// IR-Pin als Eingang definieren

}

void loop()

{

// Sensor (Pin) einlesen float spannungswert = analogRead(IRpin);

20 Siehe auch http://www.acroname.com/articles/linearizing-sharp-ranger.html

213

7 Los geht’s! – Erste Praxis

// Umrechnen in cm float entfernung = (6787 / (spannungswert - 3)) - 4;

// delay-Wert begrenzen if (entfernung > 80) entfernung = 80;

if (entfernung < 10) entfernung = 10;

// Entfernung für delay umrechnen int zeit = 0; zeit = map(entfernung, 10, 80, 100, 1000);

// LED blinkt digitalWrite(ledPin, HIGH); delay(zeit); digitalWrite(ledPin, LOW); delay(zeit);

}

Listing 7.7 Blinkende LED in Abhängigkeit zur Entfernung der Hand

Je näher Sie nun die Hand in Richtung Sensor bewegen, desto schneller blinkt die LED.

in Richtung Sensor bewegen, desto schneller blinkt die LED. Hilfreich – die Funktion »map« Ein paar

Hilfreich – die Funktion »map«

Ein paar Worte zu der hier verwendeten map-Funktion: Diese ist äußerst hilfreich, um Werte eines bestimmten Bereichs auf einen anderen abzubilden (zu »mappen«). Um es etwas anschaulicher zu sagen: Wenn Sie zum Beispiel einen Temperatursensor haben, der von –100 bis +100 °Celsius misst, und Sie die Helligkeit einer LED von 0 bis 255 in Abhängigkeit zur Temperatur einstellen wollen, dann geht das mit der map-Funktion wie folgt:

helligkeitLED = map(temperatur, -100, 100, 0, 255);

Einfach, aber genial, oder? Sie finden die komplette (englische) Referenz zum map-Befehl wie immer im Internet. 21

21

http://arduino.cc/en/Reference/Map

214

7.2 Ist da jemand? – Kontakt mit der Außenwelt

Und wozu das Ganze?

Wie Sie sich bestimmt vorstellen können, sind die vorangegangenen Beispiele hilfreich, wenn Sie später den Infrarotsensor auf Ihrem Roboter einsetzen werden. Denn schließ- lich soll der Roboter ja rechtzeitig vor einem Hindernis ausweichen und nicht dumm vor eine Wand fahren. Das bedeutet: Wenn in diesem Beispiel eine LED schnell sehr blinkt, ein Hindernis also sehr nah ist, werden Sie den Roboter in Abschnitt 9.2, »Hindernisvermeidung«, dazu bringen, nach links oder rechts auszuweichen.

Übung

Experimentieren Sie wieder etwas mit dem Code. Ändern Sie das Programm IR_Dis- tanz_LED so, dass es die Helligkeit einer externen LED in Abhängigkeit von der Entfer- nung der Hand zum Sensor ändert. Tipp: Schauen Sie sich dazu vielleicht noch einmal Abschnitt 7.1.5 an. Übung macht den Meister! 22

7.2.5

Ultraschallsensoren

Gegenüber den in Abschnitt 7.2.4 vorgestellten Infrarotsensoren haben Ultraschallsen- soren den Vorteil, dass sie gegen Sonnenlicht unempfindlich sind. Das heißt, wenn Sie Ihren Roboter einmal im Garten fahren lassen wollen, eignen sich Ultraschallsensoren besser – auch wenn diese draußen ebenfalls vor Nässe geschützt werden müssen. Ein weiterer wesentlicher Vorteil ist die maximal messbare Entfernung: Die in Abbildung 7.24 gezeigten Sensoren SRF04/05 von Devantech können eine Entfernung bis sechs Meter messen. Der Nachteil der Sensoren liegt in Ihrem Preis: Verglichen mit IR-Senso- ren sind sie fast doppelt so teuer in der Anschaffung.

ren sind sie fast doppelt so teuer in der Anschaffung. Abbildung 7.24 Der Ultraschallsensor »S RF04/05«

Abbildung 7.24 Der Ultraschallsensor »SRF04/05« von Devantech

22 Ich will Ihnen die Lösung nicht vorenthalten: Sie finden sie als Download mit dem Dateinamen IR_Distanz_LED_Helligkeit.ino.

215

7 Los geht’s! – Erste Praxis

Auch die Ansteuerung der Ultraschallsensoren ist komplexer: Dem Sensor muss erst ein Start-Impuls gegeben werden, damit er eine Messung startet. Danach »antwortet« er mit einem Impuls, dessen Länge der gemessenen Distanz entspricht.

7.2.6 Immer noch nicht genug? Arduino-Shields!

Das Arduino-Board wäre sicher nicht so erfolgreich, wenn es zum einen nicht so einfach zu programmieren und zum anderen nicht so leicht erweiterbar wäre. Natürlich haben sich die Entwickler etwas dabei gedacht, solche Buchsen auf die Oberseite zu montieren. Denn sie ermöglichen es nicht nur, ein paar Drähte oder Bauteile (wie Widerstände) »mal eben schnell« zu stecken. Sie ermöglichen auch die Erweiterung des Arduino- Boards durch sogenannte Arduino-Shields. Diese werden einfach »huckepack« auf den Arduino gesteckt und sind ohne Löten oder Schrauben sofort einsatzbereit. Es gibt wirk- lich unzählige Shields und damit Erweiterungsmöglichkeiten. Um sich einen kleinen Überblick über die Vielfalt an Arduino-Shields zu verschaffen, schauen Sie sich die nach- folgenden Abbildungen an. Wenn Sie damit noch immer nicht genug Anregungen für spätere Projekte erhalten, suchen Sie im Internet nach »Arduino Shield«. Sie werden zahlreiche Ergebnisse für Inspirationen erhalten.

werden zahlreiche Ergebnisse für Inspirationen erhalten. Abbildung 7.25 Das »Arduino Motor Shield« Das Arduino

Abbildung 7.25 Das »Arduino Motor Shield«

Das Arduino Motor Shield aus Abbildung 7.25 dient zum leichten Anschluss und Betrieb von Motoren und Servos am Arduino-Board. Dieses Shield werden Sie auf Ihrem Robo-

216

7.2 Ist da jemand? – Kontakt mit der Außenwelt

ter nutzen, und ich zeige Ihnen in Abschnitt 7.4, »Der Diener – Ansteuerung von Ser- vos«. bzw. Abschnitt 7.5, »Ich muss hier weg! – Ansteuerung von Motoren«, wie das funktioniert.

weg! – Ansteuerung von Motoren«, wie das funktioniert. Abbildung 7.26 Das »Arduino Wireless SD Shield« 2

Abbildung 7.26 Das »Arduino Wireless SD Shield« 23

Sie wollen eine SD-Karte für Ihren Arduino nutzen, um dort zum Beispiel Daten zu pro- tokollieren oder ihn mit einem XBee Funkmodul (siehe Abbildung 7.27) erweitern? Kein Problem: Das Arduino Wireless SD Shield aus Abbildung 7.26 ist das Shield Ihrer Wahl.

SD Shield aus Abbildung 7.26 ist das Shield Ihrer Wahl. Abbildung 7.27 Spezielle »XBee«-Funkmodule zur

Abbildung 7.27 Spezielle »XBee«-Funkmodule zur Funkdatenübertragung 24

23 Bild: http://arduino.cc, CC BY-SA 3.0

24 Bild: Mark Fickett, CC BY-SA 3.0

217

7 Los geht’s! – Erste Praxis

Wenn Sie Ihren Arduino Daten anzeigen lassen und ihn per Touchscreen steuern wol- len, dann sollten Sie sich näher mit dem TFT Touch Shield aus Abbildung 7.28 beschäf- tigen.

dem TFT Touch Shield aus Abbildung 7.28 beschäf- tigen. Abbildung 7.28 Das »TFT Touch Shield« 2

Abbildung 7.28 Das »TFT Touch Shield« 25

Verbinden Sie Ihr Arduino-Projekt doch später einmal mit Ihrem heimischen Netzwerk – per WLAN mit dem WIFI Shield aus Abbildung 7.29. Sie könnten zum Beispiel Ihr Pro- jekt aus dem heimischen Netz twittern lassen oder vom Internet aus auf Ihr Arduino- Board zugreifen. Und einen SD-Kartenleser hat dieses Shield auch noch mit dabei.

SD-Kartenleser hat dieses Shield auch noch mit dabei. Abbildung 7.29 Das »Arduino WIFI Shield« 2 6

Abbildung 7.29 Das »Arduino WIFI Shield« 26

25 Bild: http://www.adafruit.com/products/1651

26 Bild: http://arduino.cc, CC BY-SA 3.0

218

7.2 Ist da jemand? – Kontakt mit der Außenwelt

Wenn Sie mal einen Roboter bauen wollen, der fast überall erreichbar ist, dann sollten Sie sich mit dem GSM Shield aus Abbildung 7.30 vertraut machen. Es enthält alles, was Sie zur Kommunikation über das Handynetz benötigen. Wenn Sie sich später noch näher mit dem Thema GSM beschäftigen wollen, sollten Sie sich auch das