Sie sind auf Seite 1von 378

t:\\\~ll'\I.A.

~S\is\-e~
- Di.oJ..e\\ ~vV.\\, ~eY'o, vo\-
- R47 I \ 8'R'2-, '2-'2-0R, 18'0R
- A\\sc\.\\v.ss'o\öc~e
- A~~v.s
- tJ\o\-ove\\
- l\\~yll'\V"Ot-Se\\SOY

- <;c\.\01.\t-ev
- \(0\'Qe\ v,\\J.. \Jev'oi.\\J..ev

- Av-J..v.i.\\o
- Co\01. v.\\J.. CY\i.fS
Markus Knapp

Roboter bauen mit Arduino


Die Anleitung für Einsteiger

.. •
~
0 •

Galileo Press
An den Leser

Liebe Leserin, lieber Leser,

hereinspaziert, hereinspaziert, hier gibt es ein ganz besonderes Angebot: zwei zum Preis
von einem. Glauben Sie nicht? Dann lassen Sie sich das Folgende auf der Zun ge zerge-
hen : Dieses Buch zeigt Ihnen nicht nur den Einstieg in das Basteln mit dem Arduino-
hier gelingt Ihnen zugleich auch der einfache Ei n stieg in den Roboterbau.

Und das Tolle an dieser Kombination: beides geht unglaublich gut zusammen. Während
Sie nämlich Ihren ersten richtigen Roboter auf Basis der Arduin o-Plattfom1 zusamme n-
schrauben, wenden Sieall das direkt in der Praxis an, was Sie gerade noch z. B. über Pro-
gramm ierung von Fahrtrichtungen oder über Sensoren, Platinen und Werkzeuge
gelernt haben.

Markus Knapp, der Autor dieses Buches und führender Kopf des beliebten Robotik-Pod-
casts www.robotiklabor.de, achtet dabei stets auf Anfängertaugli chkeit und lässt den
Basteispaß nie zu kurz kommen. Spätestens, wenn Ihr kleiner Arduino-Roboter seine
ersten RoHversu che unternimmt, werden auch Sie vom Robotik-Fieber gepackt sein.
Das Schöne : Das hier Gelernte nehmen Sie mit auf Ihrem Weg zu allen Robotern, die Sie
vermutlich im Anschluss ersinnen und bauen werden ...

Abschließend noch ein Hinweis in eigener Sache: Dieses Buch wurde mit großer Sorg-
falt geschrieben, geprüft u nd produziert. SolJte dennoch einmal etwas nicht so funktio-
n ieren, wie Sie es erwarten, freue ich mich, wenn Sie sich direkt mit mir in Verbindung
setzen. Ihre Anregun gen und Fragen sind uns jederze it herzlich willkommen!

Ihr Sebastian Kestel


Lektorat Ga lileo Computing

sebastian.kestel@galileo-press.de
www.galileocomputing.de
Gali leo Press · Rheinwerkallee 4 · 53227 Bon n
Auf einen Blick

1 Don 't panic! - Einleitung ......... ................................. ...... ...... .......................... .......... 15

2 Wir sind die Roboter ...................... ............. ............................ ............... ................... .. 21

3 Arten der Programmierung ........ .................................................................... .......... 45

4 Die Arduino-Piattform .......... ........ ............................................. ................................ 53

5 Die kleine Werkstatt ................... .......................................................... ...................... 97

6 Programmiergrundlagen ...... .................. .......... ...... .............................. ...... ...... ....... 131

7 Los geht' s!- Erste Praxis ........................................................................................... 179

8 Keine Schraube locker- Die Montage des eigenen Roboters ...................... 263

9 Drive me crazy?- Die erste Fahrstunde .......................................... ...... ............... 333

10 Pimp My Robot!- Mögliche Erweiterungen ...................................................... 357

11 Der Roboter und der Rest der Welt ........................................................................ 397

12 Schlusswort .................................................................................. ................................. 401


Impressum

Wir hoffen seh r. dass Ih nen dieses Buch gefal len hat. Bitte tei len Sie uns doch Ih re M ein u ng m it.
Eine E-M ail m it Ihrem Lo b od er Tadel se nden Si e direkt an de n Lektor des Buches:
sebastian.kestel@galileo-press. de. Im Falle eine r Re klamati on ste ht Ihnen gerne un ser Lese rse rvice zur
Verfügu ng: service@galileo·press.de. Informat ionen über Rezension s· und Schulungsexe mplare
erha lten Sie von : britta.behrens@galileo-press.de.

Inf orm ati onen zu m Ve rlag und weit ere Kontaktmöglichkeit en fi nden Si e au f un serer Verlagswebsite
www.galileo-press.de. Dort können Sie sich auch u mfassend und aus erster Ha nd über u nser akt uell es
Ve rlagsprog ramm info rmi ere n und alle unsere Bücher versandkost enfrei bestellen.

An diesem Bu ch haben vie le mitgewirkt, i nsbeso ndere :

Lektorat Sebasti an Kest el, Jan Hoh lma n n


Fachgutachten Benjam in Kappel. Rostock
Korrektorat Friederike Da enecke, Zü lp ich
Herstell ung Kame lia Brendel
Typografie u nd Layout Ve ra Brau ner
Ein ba ndgestal tung Eva Schm ücker
Coverfoto Ma rkus Knapp; Sh utterstock: 187275119 © Monash, 172507439 © Kak2s;
iStockphoto : 17411250 © Belt erz, 9 3819313 © cosm opolit
Satz 111 -satz, Husby
Druck Himmer, Augsbu rg

Di eses Buch wurde gesetzt au s der TheAntiqu aB (9,35/13,7 pt) i n FrameMaker.


Gedruckt wu rde es auf chl orfrei gebleich te m Offsetp apier (90 g/m ' ).

Der Name Ga lileo Press geht auf den ita lienisch en Mathematiker und Ph il oso ph en Ga li leo Gali lei
(1564-1642) zurück. Er gilt als Gründungsfigur der neuzei tl ichen W issen sch aft u nd w urde berühmt
als Verfechte r des modernen, heliozentri schen Weltbi lds. Legendär ist se in Aussp ru ch Eppur si
muove (Und sie bewegt sich doch). Das Emblem von Galileo Press ist der Jupiter, umkreist von den
vier Galileischen Monden . Ga li lei entd eckt e d ie nach ih m benannten M ond e 161 0.

Bibliografische Information der Deutschen Nationalbibliothek :


Die Deutsche Nationa lbibliothek verzeich net diese Publ ikation in der Deutsc hen Nati onal -
bibliogra fi e; deta illierte bibl iogra fi sch e Date n si nd im Intern et über http://dnb.d-nb.de abru f bar.

ISBN 978-3-8362· 2875· 6


© Galileo Press, Bann 2015
1. Auflage 2015

Das vo rliegende We rk ist in al l seinen Teil en urheberrechtlich geschüt zt. All e Rechte vorbeh alten ,
insbesondere das Recht der Übersetzung, des Vort rags, der Reproduktion, der Vervi elfä lt igung auf
fotomechanischem ode r and eren Wege n u nd der Speicherung in elektronischen M ed ien .

Ungeachtet der Sorgfalt, die auf die Erste ll u ng von Text, Abb ildungen und Programmen verwendet
wurde, können weder Ve rlag noch Autor, Herausgeber oder Übersetzer für mögliche Feh ler un d
deren Folgen eine j u ristische Verantwortung oder irgendeine Haftung übernehmen.

Die in diesem Werk wiede rgegebenen Gebrauchsnamen, Han delsnamen, Waren bezeich n ungen
usw. können auch ohne besond ere Kennzeichnung Marken sein und al s solche den gesetzlic hen
Bestimmungen unterl iegen.
Inhalt

Geleitwort des Fac hgut achters ........................................................................................................... 13

1 Don 't panic!- Einleitu ng 15

1.1 Für wen ist dieses Buch geeignet? ................................................................................... 15


1.1.1 Prog ramm ierken ntn isse? .................................................................................... 16
1.1.2 Altersklassen ........................................................................................................... 16
1.1.3 Handwerk liches Gesch ick und Elektronikwissen? ...................................... 16

1.2 Wie sollte das Buch gelesen werden? ............................................................................ 17

1.3 Das RoboterkitzumBuch ..................................................................................................... 17


1.3.1 Welch e Teile ben öt ige ich zum Bau des Roboters ? .................................... 17
1.3.2 Sonstige elektro nische Baute ile .......................................................... ............. 18

1.4 Die Webseite zum Buch ........................................................................................................ 18

1.5 Robotiklabor- Der Podcast rund um Robotikthemen ........................................... 18

1.6 Danksagung ............................................................................................................................... 18

2 Wir sind die Roboter 21

2.1 Welche Arten von Robotern gibt es? .............................................................................. 21


2.1.1 Zweibein ige Roboter ............................................................................................ 22
2.1.2 Sechsbeinige Roboter ........................................................................................... 23
2.1.3 Zwei- und dreirädrige Roboter .......................................................................... 24
2.1.4 Vierrädrige Roboter............................................................................................... 27
2.1.5 Sechsrädrige Roboter ........................................................................................... 28
2.1.6 Roboter mit Raupenantrieb ............................................................................... 29
2.1.7 Schlangenroboter .................................................................................................. 30
2.1.8 Tauchroboter .......................................................................................................... 31
2.1.9 Fazit ............................................................................................................................ 33
2.1.10 App-Empfehlung .................................................................................................... 33

2.2 Woraus beste ht ei n Roboter? ............................................................................................ 34


2.2.1 Grundsätzliches .................... ....................................................................... .......... 34

5
Inhalt

2.2.2 Sen sore n ................................................................................................................... 34


2.2.3 Akteren ...................................................................................................................... 35

2.3 Wie und womit nden kt« ein Roboter? ........................................................................... 37

2.4 Mikrocontrol ler allgemein .................................................................................................. 37


2.4.1 Al t ernativen zum Ardu ino-Boa rd ..................................................................... 38

2.5 Fazit ............................................................................................................................................... 43

3 Arten der Programmierung 45

3.1 Grafische Programmierung ....................................................................... .......................... 45


3.1.1 Grafische Programm ierung m it »Sc ratch« ................................................... 46

3.2 Textbasierte Programmierung .......................................................................................... 49

4 Die Arduino-Piattform 53

4.1 Was ist Arduino? ...................................................................................................................... 53


4.1.1 Die Ardu in o-Proj ektwebse ite ............................................................................ 53

4.2 Die Arduino-Hardware .......................................................................................................... 54


4.2.1 Das Ard uino-Board f ür den Roboter ................................................................ 54
4.2.2 Die Ein- und Ausgänge des Arduino-Boards im Deta il .............................. 60
4.2.3 Verschiedene Arduino-Boards ........................................................................... 64
4.2.4 Die Einzelte ile für Ihre n Robote r bzw. das Robote rkit .............................. 70
4.2.5 Treiberinst allatio n ................................................................................................. 78

4.3 Die Arduino-Software ............................................................................................................ 78


4.3.1 Dow nload und Insta llat ion ................................................................................ 78
4.3.2 Start ............................................................................................................................ 90

4.4 Die Entwicklungsumgebung .............................................................................................. 91

4.5 Die Software im Detail .......................................................................................................... 92


4.5.1 Ändern der Sprache .............................................................................................. 92

4.6 Die grafische Oberfläche im Deta il .................................................................................. 92


4.6.1 Beis piele innerhalb der Software ..................................................................... 94

4.7 Fazit ............................................................................................................................................... 95

6
Inhalt

5 Die kleine Werkstatt 97

5.1 Fliegende Verdrahtung ......................................................................................................... 97


5.1.1 Vor- und Na chteile derfliegenden Verdrahtung ........................................ 98

5.2 Steckplatinen ............................................................................................................................ 99


5.2.1 Vor- und Nachteile der St eckp lat inen ............................................................ 102

5.3 Werkzeuge ................................................................................................................................. 102


5.3 .1 Sicherheitsbril le ..................................................................................................... 102
5.3 .2 Seit enschneider ..................................................................................................... 103
5.3 .3 Abisolierzange ........................................................................................................ 104
5.3.4 Lötkolben/Lötstation, Lötz inn und Schwam m ............................................ 105
5.3.5 Messgerät {optional) ............................................................................................ 108
5.3.6 Feuerzeug ............................... .................................................................................. 109
5.3.7 Schlitzsch raubendreher, 2 bis 3 mm breit .................................................... 110
5.3.8 Sonstige Werkzeuge (optional) ........................................................................ 110

5.4 Kabel verbinden oder isolieren ......................................................................................... 113


5.4.1 Kabel verbi nden ..................................................................................................... 113

5.5 Platinen ........................................................................................................................................ 115

5.6 Löten ............................................................................................................................................. 118


5.6.1 Was wird benötigt? .............................................................................................. 118
5.6.2 Wie geht es? ............................................................................................................ 119
5.6.3 Was sind kalte Lötstellen? .................................................................................. 129

5. 7 Fazit ............................................................................................................................................... 129

6 Programmiergrundlagen 131

6.1 Stil .................................................................................................................................................. 131


6.1.1 Einrückung ............................................................................................................... 133
6.1.2 Eindeutigkeit/Sinnhaftigkeit ............................................................................. 133
6.1.3 Groß-/Kleinschreibung und Unterstriche ..................................................... 134
6.1.4 Muttersprache oder Englisch? .......................................................................... 134
6.1.5 Kommentieren und dokumentieren ............................................................... 135
6.1.6 Einheitlichkeit - Bleiben Sie Ihrem Sti l treu! ................................................ 135
6.1.7 Zusammenfassung ............................................................................................... 135

6.2 Kommentare ............................................................................................................................. 136

7
Inhalt

6.3 Variabl en ....................................................................................................................... .............. 1 37


6.3.1 Da s Sem ikolon ........................................................................................................ 1 37
6.3.2 Das Leerzeiche n ...................................................................................................... 1 37
6.3.3 Deklara t ion .............................................................................................................. 13 7
6.3.4 Date nty pen .............................................................................................................. 1 37

6.4 Konst anten ................................................................................................................................. 142


6.4.1 Vo rdefi nierte Kon stanten ....................................................... .. .. ........................ 143

6.5 #defin e (Prä prozessor-Anweisung) ................................................................................. 143

6.6 Operatoren ................................................................................................................................. 144

6.7 Kont roll struktu ren .................................................................................................................. 145


6.7.1 De r Befehl »if « ........................................................................................................ 145
6.7.2 De r Befehl »if...e lse« ............................................................................................. 147
6.7.3 Die »switch «-Anweis ung .................................................................................... 148

6.8 Schleifen ...................................................................................................................................... 150


6.8.1 Die »for«-Sc hleife .................................................................................................. 151
6.8.2 Die »whi le«-Sc hleife ........................................................................................ ..... 152
6.8.3 Die »do...w hi le« -Sch leife ................ ................ .. ........................... .. ...................... 153

6.9 Funktionen ....................................... ..................... ..................................................................... 154


6.9.1 Para mete r un d Argume nte ................................................................................ 157
6.9.2 Argumente ............................................................................................................... 158
6.9.3 Begrenzte Haltbarkeit- oder: der Gü ltigkeitsbereich
von Variablen .......................................................................................................... 159

6.10 Die »setupcc-Funktion ............................................................................................................ 162

6.11 Die »loopcc-Fu nktion .............................................................................................................. 163


6.11.1 Das kleinstmögliche Ardu ino-Prog ramm ...................................................... 164

6.12 Verzögerungen und Zeitsteuerung ................................................................................. 164

6.13 Ein- und Ausgänge .................................................................................................................. 165

6.14 Fehlersuche/Debuggingund die Anzeige von Werten ..................................... ..... 166


6.14.1 Die LED als Mittel zur Fe hlersuche .................................................................. 166
6.14.2 Der serie lle Port - Ausgabe von Text .............................................................. 168
6.14.3 Ausga be von Variablenwerte n auf dem Serial M onitor ........................... 171

6.15 Bibliotheken (Libraries) ......................................................................................................... 176

6.16 Fazit ............................................................................................................................................... 176

8
Inhalt

7 Los geht's!- Erste Praxis 179

7.1 Der erste Kontakt mit der Hardware .............................................................................. 179


7.1.1 »Biinky« - Ansteuerun g ein er LE D ................................................................... 179
7.1.2 Übertragen der Softwa re auf das Arduin o- Board ...................................... 183
7.1.3 Feh lersuche ............................................................................................................ 187
7.1.4 Herr Ohm un d se in Gesetz ................................................................................. 187
7.1.S Wie dim me ich eine LED? ................................................................................... 190
7.1.6 Zw ischenfazit ......................................................................................................... 196

7.2 Ist da j emand?- Ko ntakt mit der Außenwelt .......... .................................................. 196
7.2.1 Schalter abfragen .................................................................................................. 196
7.2.2 Taster abfragen ...................................................................................................... 200
7.2.3 Se nsoren ................................................................................................................... 206
7.2.4 Inf rarot se nsor .... ..................................................................................................... 206
7.2.S Ult ra schal lsensoren .............................................................................................. 21S
7.2.6 Im mer noch nicht genug? Arduino-Sh ields ! ................................................ 216
7.2.7 Zwischenfazit ......................................................................................................... 220

7.3 Hört mich jemand? - Ausgabe von Signalen .............................................................. 220


7.3.1 Der Piezosigna lgeber ........................................................................................... 221
7.3.2 Melodi en progra m mie ren .................................................................................. 22S
7.3.3 Ein Musikinstrument ........................................................................................... 225
7.3.4 Zwischenfazit ......................................................................................................... 22 9

7.4 Der Diener- Ansteuerung von Servos ........................................................................... 230


7.4.1 Was sind Servosund wie funktion ieren sie? ............................................... 230
7.4.2 Wie werde n Servos angesteu ert? .................................................................... 232

7. 5 Ich muss hier weg!- Ansteuerung von Motoren .............. ........................................ 239
7.5.1 Arten von Motoren ............................................................................................... 239
7.5.2 Wie werden Motoren angesteuert? ................................................................ 241
7.5.3 Motoransteuerung realis ieren .......................................................................... 244
7.5.4 Ein Sensorventilator ............................................................................................. 255

7.6 Fazit ............................................................................................................................................... 261


7.6.1 Letzt e Vorbereitung vor dem Zusam menba u des Roboters ................... 261

9
r Inhalt

8 Keine Schraube locker- Die Montage des


eigenen Roboters 263

8.1 Überbl ick ..................................................................................................................................... 263


8.1.1 Die Teile für den Arduino -Roboter ................................................................... 264
8.1.2 Die Werkzeuge für den Zusammenbau des Arduino-Roboters ............. 26S
8.1.3 Arte n der Monta ge ................................................................................................ 267

8.2 Los geht's- Sch ritt fü r Schritt zum Bot ......................................................................... 270
8.2.1 Vorbereitung ........................................................................................................... 27 0
8.2.2 Die Grundp latte ..................................................................................................... 272
8.2.3 Der kleine Motorhalter .................................. ...................................................... 276
8.2.4 Der große Motorhalter ........................................................................................ 280
8.2.S Löten der Drähte bzw. Litze an die Motoren ................................................ 283
8.2.6 Motoren mit Schrauben und Muttern versehen .............. .......................... 284
8.2.7 Montage des linken Motors ............................................................................... 286
8.2.8 Montage des rechten Motors ............................................................................ 290
8.2.9 Befestigung der beiden Motoren vorne ......................................................... 290
8.2.10 Montage der oberen Platte ................................................................................ 293
8.2.11 Der Batteriehalter bzw. Akkuhalter ...... ........................................................... 297
8.2.12 Das Stützrad bzw. Kugellager ........................................................................... 300
8.2.13 Der Servo ..................................................................................... ............................. 303
8.2.14 Das Servorad oder Servo kreuz ........................................................................... 306
8.2.1S Das Arduino-Board ................................................................................................ 308
8.2.16 Das Roboter-Ges icht ............................................................................................. 309
8.2.1 7 Das Kabe l zum Infrarotsensor ........................................................................... 311
8.2.18 Der Infrarotsensor- die »Augen « .................................................................... 31S
8.2.19 Der Kopf .................................................................................................................... 317
8.2.20 Das Ardui no Motor Shield .................................................................................. 318
8.2.21 Die Spannungsversorgung und Motorkabel ................................................ 320
8.2.22 Der Servostecker- mit Hack .............................................................................. 323
8.2.23 Der Sensorstecker .................................................................................................. 327
8.2.24 Finale: Die Räder .................................................................................................... 327

8.3 Alles bereit?- Ein paar Tests .............................................................................................. 330


8.3.1 Stromversorgu ngstest ......................................................................................... 33 0
8.3.2 Servotest ................................................................................................................... 330
8.3.3 Sensortest ..................................................................................,............................. 331
8.3.4 Motortest ................................................................................................................. 331

8.4 Fazit ............................................................................................................................................... 332

10
9 Drive me crazy?- Die erste Fahrstunde 33 3

9.1 Roboterchoreografie .............................................................................................................. 333


9.1.1 Gru ndrichtungen ................................................................................................... 333
9.1.2 Den Roboter im Zickzack f ahren lassen ......................................................... 337
9.1.3 Den Roboter in einer Spira le fahren lassen .................................................. 341
9.2 Hindernisvermeid ung ........................................................................................................... 344
9.2.1 Wie fu nktioniert Hindern isvermeidung? ...................................................... 344
9.2.2 Umsetzung in die Praxis ..................................................................................... 345
9.2.3 Der Roboter als Haustier ..................................................................................... 347
9.3 Fa zit ............................................................................................................................................... 356

10 Pimp My Robot! -Mögliche Erweiterungen 357

10.1 Grundsätzliche Ansteuerung eines Displays ............................................................... 358


10.1.1 Insta ll ation der LCD-Shie ld-Library ................................................................. 358
10.1.2 Montage eines LCDs auf dem Roboter und Nutzung
von Sh ield-Adaptern ............................................................................................ 362
10.1.3 Hindernisanzeige .................................................................................................. 364
10.1.4 Entfernungsanzeige auf dem LC D ................................................................... 369
10.1.5 Hinderniszählung und Anzeige auf dem LCD .............................................. 372
10.2 Press Any Key! -Interaktion per Tast atur ................................................................... 374
10.2.1 Abfragen der Tasten ............................................................................................. 375
10.2.2 Steuerung des Roboters über die Tasten ...................................................... 378
10.2.3 Die Geschwindigkeit über die Tasten einstelle n ........................................ 382
10.3 Ich sehe was ... - weitere Sensoren ................................................................................. 387
10.3.1 Infrarotsensor zur Fernste uerung ................................................................... 387
10.3.2 Treppen- un d Tischkantene rkenn ung ............................................................ 387
10.3.3 Der Roboter zäh lt Personen ............................................................................... 388
10.3.4 Bring mich ins Lic ht- der Hell igkeit sse nsor ................................................ 390
10.3.5 Reflexionssensor-Linienverfolgung ............................................................. 390
10.3.6 Farbsenso r ............................................................................................................... 390
10.3.7 Bew egu ngssensor ................................................................................................. 391
10.4 Spannendes - Energiemanagement ............................................................................... 391
10.4.1 Spannungsanzeige ............................................................................................... 391
10.4.2 Akkuwarne r mittels Spannungstei ler ............................................................ 393
10.5 Fazit ............................................................................................................................................... 396

11
Inhalt

11 Der Roboter und der Rest der Welt 397

11.1 Kommu nikation perI nfrarot .............................................................................................. 397


11.1.1 Com ing home- Suchen einer Basissta t ion .................................................. 397
11.1.2 Und wa s machst du so? - Roboter kommun izieren .................................. 398
11.1.3 Al les im grüne n Bere ich? - De r Roboter al s Gärtner ................................. 398

11.2 Kommun ikation mittels Sprache ..................................................................................... 398


11.2.1 Hell o world!- Sprachausgabe f ür den Roboter .......................................... 398
11.2.2 Sim on befiehlt- Sprac herken nung für den Ro boter ................................. 399

11.3 Steuerungper Bluetooth ..................................................................................................... 399

11.4 Internet of Things- Das Internet der Dinge ....... .......................... ............................... 399

11.5 Fazit ............................................................................................................................................... 400

12 Schlusswort 401

Index ............................................................................................................................................................ 403

12
· Geleitwort des Fachgutachters

Der Fachgutachter Benjamin Kappe/ ist studierter Elektrotechniker und befindet sich zur
Zeit im Masterstudiengang lnformationstechnik/ Technische Informatik an der Univer-
sität Rostock. Zudem ist er als IT-Dozent tätig. Dabei arbeitet er schwerpunktmäßig mit
Jugendlichen . Privat lebt er mit seiner Frau und der gemeinsamen kleinen Tochter in
unmittelbarer Nähe zur Ostsee.

Wer träumte nicht als Kind davon, einmal einen eigenen Roboter zu haben. Denn : Galt
es viele Hausaufgaben zu lösen, so hätte man diese auf den Roboter abwälzen können.
War man nicht der Stärkste auf dem Schulhof, hätte man ihn als starken Partner gehabt,
der die Verhältnisse geraderückt. Durften die Freunde nicht raus, so hätte man jeman-
den zum Spielen gehabt.
Nun liegt die Grundschule nicht nur für mich, sondern wahrscheinlich auch für Sie
schon ein paar Jahre zurück und wir müssen diesen Kindheitstraum etwas realistischer
sehen. Das bedeutet aber nicht, dass wir den Traum ganz aufgeben müssen, wir müssen
ihn lediglich etwas anpassen. Es wird keinen Roboter für alles geben, sondern wohl eher
einen für jede Situation. Entsprechend müssen die verschiedenen Roboter verschieden
konzipiert und gebaut sein, um die ihnen zugedachte Aufgabe erfüllen zu können. Aber
bei aller Verschiedenheit gibt es dennoch viele Gemeinsamkeiten, die Roboter mitein-
ander teilen. Und wenn Sie nicht nur wissen möchten, welche das sind, sondern gleich-
zeitig Ihren ersten Roboter bauen und vielleicht später für eine spezielle neue Aufgabe
weiterentwickeln möchten, dann haben Sie das r ichtige Buch in Händen. Und um es
kurz zu machen: Unter der Anleitung von Markus Knapp wird das Roboterbauen zum
Kinderspiel.
Fürall diejenigen, die sich für das Thema begeistern, aber immer glaubten, dass das all es
viel zu schwer oder zu teuer für sie sei: Lassen Sie sich von diesem Buch eines Besseren
belehren. Die Plattform Arduino ist bestens für den kostengünstigen Einstieg in die Bast-
lerkarriere geeignet. Sie wurde von Elektroingenieuren geschaffen, die alle Menschen
und nicht nur ihresgleichen an der elektronischen Welt teilhaben lassen wollten. Der
Arduino kann Sie vollkommen in diese Welt hineinziehen. Das einzige, was er dafür von
Ihnen verlangt, ist ein wenig Zeit und einen treuen Begle iter, den Sie in diesem Buch

13
Geleitwort des Fachgutachters

sicherlich finden werden. Alter und Erfahrung sind dem Arduino ni ch t wi cht ig. Haupt-
sache, Sie haben Spaß an Technik.
Übrigens : Wenn m ein e Tochter schon etwas älter wäre, wäre d ieses Buch au ch e in schö-
nes Familienprojekt Kinder sind u nglaublich begeisterungsfäh ig, und welches Kind
würde nicht gerne zu seinen Klassenkameraden sagen (.. prahlen" wäre viell eicht kein
ga n z abwegiger Begri ff), dass es ein en Roboter geba ut hat, der ihm überall hin fo lgt.
(Wenn man als Eltern teil Glück hat, wird m a n hoffentlich auch in dieser Geschichte
erwähnt.)

Neben einer tollen Bast eliektüre für die ganze Fa milie bet ra chte ich das Buch auch fü r
junge Erwachsene und natürlich für Lehrer als seh r inte ressa ntes Lern - u nd Unterrichts-
material. Ich habe Schü ler beim Programm ieren und Bastel n au fblüh en sehen - übri-
gens gerade solche, de nen man einen >> intensiven « Charakter nachgesagt hatte. Sehen
Sie dieses Buch auch al s eine An regung für Ihren Unterricht, wenn Sie als Lehrer arbei-
ten. Die Welt braucht Talente, die hinter die Ku li sse n blicken wollen -so lche, die nicht
nur auf der Welt leben, sondern diese gestalte n und ve rändern m öchten. Und zweife llos
fö rdert das vorliegende Basteibuch von Markus Knapp di eses Int eresse.

In diesem Sinne möchte ich diesen Tex t mit den berühmten (und nur geringfügig geän-
derten) Worten der Aufklärung abschließen: »Habe den Mut, dich deines eigenen Robo-
ters zu bedienen «.

Ihr Benjamin Kappe!

14
Kapitell

t)o"'i- p~\\ic! - Ei\\leii-L\\\~


"Als der Pflug erfunden wurde, haben einige gesagt, das ist schlecht. Dasselbe war
der Fall beim Buch, beim Telefon, beim Auto, beim Fern sehen und beifastjeder neuen
Technologie. Das war immer so und wird immer so sein. Die nächste Generation hat
die neue Technologie dann aber jedes Mal fast schon als völlig selbstverständlich
betrachtet." - Bill Gates

Sie haben sich also entschlossen, einen Arduino-Roboter zu bauen. Das ist gut. Denn Sie
folgen damit nicht nur einem aktuellen Trend. Die Robotik wird uns in Zukunft immer
mehr im Alltag begleiten. Denken Sie nur einmal daran, wie preiswert Staubsaugroboter
bereits zu kaufen sind. Einen eigenen Roboter von Grund auf zu bauen geht weit darü-
ber hinaus, sich einfach »nur« mit Elektronik und Modellbau zu beschäftigen. Aber das
soll Sie nicht abschrecken. Denn in diesem Buch wird Ihnen auf leicht verständliche Art
und Weise erklärt, wie Sie einen autonomen Roboter bauen können, der mit der
berühmten Arduino-Elektronikplattform vollautomatisch angesteuert wird. Und ganz
nebenbei können Sie die Arduino-Elektronik für praktisch unendlich viele weitere Bas-
teiprojekte verwenden. Und wer weiß? Vielleicht legt dieses Buch den Grundstein für
eine große Bastler- oder sogar Entwicklerkarriere? Aus welchem Grund auch immer Sie
sich dafür entschieden haben : Ich verspreche Ihnen, dass dies kein langweiliges Fach-
buch ist, gespickt mit Hunderten Formeln und langatmigen theoretischen Abhandlun-
gen! Ich werde Sie stattdessen in kleinen, einfachen und vor allem unterhaltsamen
Schritten an den Bau Ihres persönlichen Arduino-Roboters heranführen. Sie finden hier
za hlreiche praktische Experimente zum Nachbauen und Ausprobieren und einfache
Programme, die alle genau erklärt werden. Natürlich gibt es auch ein wenig Theorie.
Aber eben nur so viel, wie nötig ist. Und: Keine Panik, es ist wirklich simpel, einen Robo-
ter zu bauen. Sie werden erstaunt sein! Aber nun genug de r einleitenden Worte. Viel
Spaß beim Lesen, Ausprobieren und Basteln!

1.1 Für wen ist dieses Buch geeignet?


Dieses Buch ist für jeden geeignet, der aufeinfache und anschau liche Art lernen möchte,
einen Ard uino-gesteuerten Roboter selbst zu bauen.

15
1.1.1 Programmierkenntnisse?
Sie benötigen für das Buch kein e Programmierkenntnisse, denn alle Beispielpro-
gramme werden fertig m itgeliefert und Sie werden Schritt für Schritt an alle Befe hle
herangeführt. Wenn Sie bereits Programmiererfahrung mit C oder C++ haben, wird es
Ihnen um so leichter fallen - es ist aber kei ne Bedingung.

1.1.2 Alt ersklassen


Dieses Buch ist für nahezu alle Altersklassen geeignet. Vielle icht sind Sie bereits im
Ruhestand und möchten ein neues Hobby beginnen. Dieses Buch m acht es möglich.
Oder Sie sind noch Schüler un d wollen sich mit der Robotik besch äftigen. Dieses Buch
erspart Ihnen das mühsame Sammeln von Informationen aus dem Internet, da Sie alles,
was Sie wissen müssen, st rukturiert und übersichtlich zusammengefasst in diesem
Buch finden.

Sicherheit
An verschiedenen Stellen in diesem Buch könnte es fü r sehr junge Leser notwendig
sein, dass die Eltern oder ältere Freunde ein wenig beim Aufbau helfen. Das ist aber nur
vereinzelt der Fall und beschränkt sich nur auf Dinge, die Kinder nicht allein machen
sollten, wie zum Beispiel einen heißen Lötkolben benutzen. Ich werde Sie in den jewei-
ligen Kapiteln deutlich darauf hinweisen.
Eine Sicherheitsbrille für wenige Euro ist immer hilfreich, wenn Sie zum Beispiel ein
Drahtende mit einem Werkzeug abkneifen - so kann im wahrsten Sinne des Wortes
nichts ins Auge gehen. Aber auch das wird Ihnen in Kapitel 5, »Die kleine Werkstat t «,
genau gezeigt; ebenso, worauf Sie dabei noch achten sollten.
Ich kann Ihnen außerdem versichern, dass alle Experimente und Beispiele in diesem
Buch mit einem absoluten Bastei- und Robotikanfänger getestet wurden . Er hat alle
Experimente mit Leichtigkeit umgesetzt, und es hat ihm auch noch viel Spaß gemacht.
Und um den Spaß soll es doch in diesem Buch auch gehen!

1.1.3 Handwerkliches Geschick und Elektronikwissen?


Sie benötigen für dieses Buch kein besonderes handwerkliches Können . Die meisten
Schritte bestehen aus einfachem Stecken von Kabeln oder aus dem Umgang mit einem
Schraubendreher oder einer Schere. Das an wenigen Stellen erforderliche Verlöten von
Kabeln wird Ihnen im jeweiligen Kapitel ausreichend erläutert. Auch speziell es Wissen
über elektronische Bauteile ist nicht notwendig. Alle Teile, die Sie für Ihren Robote r

16
benötigen, werden genau erklärt, und Sie lernen ihre Funktion in praktischen Beispie-
len kennen .

1.2 Wie sollte das Buch gelesen werden?



Im Idealfalllesen Sie dieses Buch von Anfang an und der Reihe nach durch, da die Glie-
derung der einzelnen Kapitel aufeinander aufbaut. So lernen Sie beispielsweise erst,
welche Arten von Motoren es gibt, danach, wie Sie einen Motor ansteuern, und später,
wie Sie die Motoren für Ihren Roboter nutzen. Es hilft Ihnen als Einsteiger also sehr,
wenn Sie erst ein wenig Theorie lernen und später das Erlernte ausprobieren. Vielleicht
wissen Sie aber auch bereits das eine oder andere über Roboter oder kennen bestimmte
elektronische Bauteile. Oder Sie haben manchmal keine Lust, alles im Detail zu verste-
hen, und wollen sofort mit dem Basteln loslegen. All das geht mit diesem Buch.
Mir geht es oft auch so, dass ich Sachen lieber gleich »in die Hand« nehmen und alles
zusammenbauen will. Wenn aber dann nicht alles auf Anhieb funktioniert, ersparen Sie
sich viel Zeit bei der Fehlersuche, wenn Sie vorher etwas Theorie »gebüffelt« haben. Ich
kann daher aus eigener Erfahrung sagen, dass es Ihnen wahrscheinlich mehr Freude
bereiten wird, wenn Sie erst verstehen, wie etwas funktioniert, und es danach erfolg-
reich in die Praxis umsetzen.
Wie gesagt, Sie können im Buch gerne zwischen den Kapiteln hin- und herspringen. Es
wird Ihnen aber am Ende leichter fallen, es der Reihe nach durchzulesen.

1.3 Das Roboterkit zum Buch


Bestimmt sind Sie schon neugierig, was Sie so alles für den Bau Ihres Arduino-Roboters
benötigen. Nun, ich will Sie nicht länger auf die Folter spannen. Der Roboter, den Sie in
diesem Buch bauen werden, entstand durch die Online-Community Bot Makers 1. Dies
ist eine Internetplattform, auf der sich Robotik-Interessierte austauschen und ihre
selbst gebastelten Roboter mit Bildern vorstellen können. Die Bauanleitung in diesem
Buch basiert auf dem dort vorgestellten Roboter.

1.3.1 Welche Teile benötige ich zum Bau des Roboters?


Sie können sich alle Teile, die Sie zum Bau Ihres Arduino-Roboters benötigen, selbst
zusammenstellen. Die Liste der verwendeten Bauteile finden Sie in Abschnitt 4.2.4, »Die

1 http://botmakers.de

17
Einzelteile für Ihren Roboter bzw. das Roboterkit «. Alternativ können Sie den in diesem
Buch beschrieben en Roboter vollstä ndig als Ba usatz bei watterott e/ectronic 2 b este llen.

1.3.2 Sonsti ge elektronische Ba uteile


Neben den Teilen fü r de n Roboter si nd fü r einige Lernbeispiele noch einige weitere elek-
tronische Bauteile notwendig. Dies sind zum Beispiel ein Taster, e in Schalter, ein e LED
und ein Widerst and. Sie benötigen diese nicht zwingend, aber sie h elfen Ihnen, die
Funktionsweise Ihres Roboters spät er besser zu ve rstehen. Die Teile we rden jeweils vor
jedem Experiment benannt.

1.4 Die Webseite zum Buch

Alle Programme in diesem Buch sind Open Sou rce und dah er frei verfügbar. Sie finden
sie aufmeiner Webseite zum Download :

http://robotiklabor.de/literatur

1.5 Robotiklabor- Der Podcast rund um Roboti kthemen

Wenn Sie sich auch sonst für Robotik im weitesten Sinne interessieren, möchte ich
Ihnen meine monatlich erscheinende Sendung Robotiklabor - Der Podcast rund um
Robotikthemen 3 ausdrücklich ans Herz legen. Dieser Podcast informiert in lockerer
Unterhaltungsrunde über aktuelle Themen rund um die Robotik und um das Elektro-
nikbasteln - gratis, monatlich und mit viel Spaß. Wir greifen hier Themen aller Art für
Einsteiger und Profis auf und senden zudem live mit Ch at sowie als Aufzeichn ung zum
Download. Das Schöne an einem Audio-Podcast ist ja, dass Sie ihn wann und wo Sie wol-
len h ören oder auch mal unt erbrechen können - wie dieses Buch.

1.6 Danksagung

Als Erstes möcht e ich an dieser Stelle meinem Lektor Sebastian Kestel danken, der m ich
motivierte, dieses Buch zu schreiben. Mein Dank geht in gleich er Weise an das gesamte
Team von Galileo Press. Ebenfa lls möcht e ich m ich bei meinem Arbeitgeber bedan ken,
der mir die nebenberufliche Tätigkeit ermöglichte. Auch mein er Familie gilt an dieser

2 http:/j www. watterott.comj de/StarterKit-Roboter


3 http:// robotiklabor.de

18
Stelle großer Dank: Während der Zeit des Schreibens haben wir uns leiderviele Monate
nicht sehen können. Ganz besonders danke ich meinen Freunden Alexander Moser,
Berit Behnke ,u nd Oliver Bock. Ihr habt mich so vielfaltig und auf so großartige Weise
unterstützt, dass ich bis jetzt nicht weiß, wie ich euch etwas in angemessener Art
zurückgeben kann. Der größte Dank allerdings geht an meine wunderbare Frau Stepha-
nie. Ohne deine unglaubliche Geduld, deine einmalige Unterstützung und dein immer-
währendes Verständnis würde es dieses Buch nicht geben.

19
Kapitel 2
Wiv Si\\~ ~ie Robotev
Gleich zu Beginn m öchte ich Ihnen ein en Überblick verschaffen, welche Arten von
Robotern es gibt. Diese Übersicht wird bei We item nicht vollst ändig sein. Sie wird
Ihnen aber einen Eindruck verm i tteln, wie weit das Feld der Robotik ist.

Möglicherweise kennen Sie den einen oder anderen Roboter bereits, vielleicht ist dieses
Buch aber auch Ihr erst er Einstieg in das Thema. In beiden Fällen werden Sie vermutlich
überrascht sein, wie komplex einige Roboter sind und welche technischen Herausforde-
rungen die Konstrukteure offenbar meisterten. Ergänzt werden die Bilder der Roboter
um eine kurze Beschreibung und um deren Preis oder was deren Entwicklung kostete.
Dadurch bekommen Sie von selbst eine Einschätzung, was Sie später von Ihrem
Arduino-Roboter als Einsteiger erwarten dürfen.

2.1 Welche Arten von Robotern gibt es?


Ich habe an dieser Stelle bewusst auf eine sehr fachliche und systematische Einteilung
der Roboter verzichtet. Dennoch sollen Sie an dieser Stelle einen Überblick über sehr
unterschiedliche Roboterarten erhalten. Fast alle in diesem Kapitel vorgestellten Robo-
ter sind autonom. Das bedeutet, dass sie sich selbstständig bewegen und »handeln «
können. »Handeln << ist natürlich ein sehr weitgehender Begriff. Im Allgemeinen werden
Roboter bereits als autonom bezeichnet, wenn sie eigenst ändig durch die Gegend fah-
ren und Hindernissen ausweichen - bis die Batterien leer sind. Genau genommen sind
Roboter aber nur dann vollständig autonom, wenn sie auch von ihrer Energieversor-
gung unabhängig sind.1 Das wäre zum Beispiel bei einem Mars-Roboter der Fall, der
seine Akkus selbsttätig über Solarzellen wieder aufladen kann.
Nehmen Sie s.ich beim Studium der nachfolgenden Abbildungen und Kurzbeschreibun-
gen ruhig etwas Zeit. Versuchen Sie sich dabei, in einen Roboterent wickler hineinzuver-
setzen, der Sie am Ende dieses Buches sein werden. Überlegen Sie, wie Sie so einen
Roboter jeweils bauen würden.

1 http://de.wikipedia.org/ wiki/ Autonomer_ mobiler_ Roboter

21
. ~ '
2 Wir sind die Roboter · , ,

2.1.1 Zweibeinige Roboter

Zweibeinige Roboter werden häufig als humanoide Roboter bezeichnet. »Humanoid«


bedeutet so viel wie >)menschenähnlich«. Denn humanoide Roboter haben nicht nur
zwei Beine wie der Mensch, sondern sind auch ansonsten wie ein Mensch aufgebaut
Das heißt, sie haben ebenfalls einen Körper, der zwei Arme und einen Kopf aufweist,
u nd können sich daher in einer von Menschen gebauten Umgebung gut fortbewegen.
Ln Abbildung 2.1 sehen Sie den h urnanoiden Roboter .Nao von A ideboran Robotics2.
Durch ihre menschliche Bauform werden diese Roboter in großer Zahl bei der Roboter-
fu.ßba11meisterschaft RoboCup 3 eingesetzt.

Abbi ldung 2.1 Der humanoide Roboter »N ao«4

~ Roboter
- Nao
~ Vorteile

- über 20 Freiheitsgrade (Bewegungsrichtungen)


- Teile der Software sind Open Source.
- Entwicklung begann bereits 2006.

2 http://www.aldebaran.com
3 http://robocup.org oder auch http://www.robocupgermanopen.de
4 Bild: Aldebaran Robotics, CC BY-SA 3.0

22
- handliche Größe (58 cm hoch, 4,3 kg schwer)
- diverse Se nsoren und Aktaren (zwei HD-Kameras, Sprachausgabe, LEDs)
- dem Menschen nachempfunden
- hoher Niedlichkeitsfaktor (wird auch zu Hause akzeptiert)
.,. Nachteile
- instabiler im Vergleich zu Robotern aufRädern oder mehrbeinigen Robotern
- trotz Preissenkung um 50 % im Jahr 2014 für Privatpersonen noch unerschwinglich
- hoher Niedlichkeitsfaktor (sieht für Laien wie ein Spielzeug aus)
.,. Preis
- ca. 6000 EUR

2.1.2 Sechsbeinige Roboter


Sechs Beine helfen mehr als zwei? Nun, wenn sich ein Roboter in unebenem Terrain
bewegen soll, stimmt das definitiv. Denn auch wenn es für einen Menschen eine leichte
Sache ist, sein Gleichgewicht zu halten, so muss einem Roboter dieses erst aufwendig
beigebracht werden. Und mit mehr als zwei Beinen hat ein Roboter immer mehrere
Beine auf sicherem Grund, auch wenn mal eines in der Luft h ängt. Stellen Sie sich vor,
Ihr humanoider Roboter würde auf einem fremden Planeten ständig über jeden Stein
stolpern und sein Gleichgewicht verlieren. Hier würde sich stattdessen ein Roboter mit
vielen Beinen und damit hoher Stabilität anbieten. Ein beeindruckendes Beispiel hier-
für ist der Roboter Crex aus dem Projekt RIMRES des Deutschen Forschungszentrums für
Künstliche Intelligenz (DFKI) 5 in Bremen .
.". Roboter
- Crex aus dem Projekt RlMRES
.". Vorteile
- sehr stabil in verschiedensten Umgehungen
- für den Außeneinsatz gedacht
- sehr robust durch hohen Metallanteil
- hohe Genauigkeit durch über 40 Sensoren
- Schnittstelle für Energie- und Datenaustausch

5 http://www.dfki.de/ robotik/ de/Jorschung/ robotersysteme/ crex.html

23
, 2 Wir sind die Roboter
. .

.,.. Nachteile
- für Einsteiger komplexe Steuerung (25 Gelenke)
- fü r Einsteiger komplexe Sensorik
.,.. Preis
- unbekannt (Forschungsprojekt)

Abbil dung 2. 2 Der sechsbeinige Roboter »Crex« des DFKI Robot ics Innovation Cente rs 36

2.1.3 Zw ei- und dreirädri ge Robot er


Man kann sich ein wenig darüber streiten, ob der nachfolgende Roboter ein zwei· oder
dreirädriger Roboter ist. Der dreiräd rige Roboter MURCS von Peter Recktenwald7 weist
zwar drei Räder auf, das dritte Rad ist jedoch passiv und dient nur als St üt:zrad. Tatsäch·
lieh ist es nur eine Art Kugellager. Das ist aber kein Nachteil, ganz im Gegenteil. Der klare
Vorte il bei dieser Art von Robotern ist, da ss sie sehr einfach zu konstruieren und zu
steuern sind. Durch das Stützrad erhalten sie eine gute Stabilisierung. Und stellen Sie
sich vor: Auch Ihr Arduino-Roboter in diesem Buch entspricht diesem bei Bastlern
beliebten Prinzip und hat auch nur zwei aktive Räder.

6 Bild: DFKI Gmb H, Robot ics Innovati on Center, Foto : Flo rian Cordes
7 http:/j www.robotfreak.de

24
, , 2.1 Welche Arten von Robotern gibt es?

Robote r MURCS
Die Vor- und Nachteile dieses Roboters (siehe Abbildung 2.3) auf einem Blick:
". Roboter
- MURCS
". Vorteile

- simpler Aufbau
- sim ple Steuerung (nur zwei Motoren)
- für Anfänger hervorragend geeignet
- preiswerter Aufbau
". Nachteile
- nur fü r den Inneneinsatz geeignet
- nur fü r ebene Oberfläch en geeignet
". Preis
- ca. ISO EUR

Abbildung 2.3 Der dre irädrige Robot er »MURCS« (Stützrad ve rdeckt)

25
.,.. Roboter
- direcsl
.,.. Vorteile
- sehr stabil
- kräftiger Antrieb
- hohe Geschwindigkeit
- viel Platz für Sensoren und Elektronik jeder Art
- viel Platz für Akkus
.,.. Nachteile
- hohes Gewichttrotz Venvendung von Aluminium (16 kg)
- hoher Stromverbrauch durch stark reibende Mecanum-Räder und PC
.,.. Preis
- unbezahlbares Hobby ...

2.1.5 Sechs rädrige Robot er


Auf den ersten Blick mögen sechsrädrige Roboter vielleicht eine Besonderheit sein.
Denn warum sollten einem Roboter mehr Räder spendiert werden, wenn doch vier
eigentlich ausreichen? Auch hier ist das Geheimnis die Stabilität. Ein Roboter mit vier
Rädern hat definitiv ein Problem. wenn er durch sehr unebenes Gelände fahren muss.
Denn schnell kann hierbei - je nach Konstruktion - ein Rad in der Luft hängen. Oder der
Roboter setzt im schlimmsten Fall mit seinem Unterboden auf und hängt fest. Stellen
Sie sich das einmal bei den berühmten Marsrobotern der NASA vor. Eine Mission wäre
schnell gescheitert! Und damit wissen Sie nun auch, warum die NASA die letzten drei
Marsroboter10 Spirit, Opportunity und Curiosity mit sechs Rädern versehen hat .
.,.. Roboter
- Curiosity
.,.. Vorteile
- hohe Stabilität
- geeignet für sehr unebe nes Terrain
.,.. Nachteile
- aufwendige Steuerung/Koordination der einzelnen Räder
.,.. Preis
- ca. 1,9 Milliarden EUR (gesamte Mission, inklusive Flug zum Mars)

10 http:// marsrover.nasa.gov/

28
Abbildung 2.6 Der sechsrädrige Marsroboter »Curiosity« der NASA 11

2.1.6 Roboter mit Raupenantrieb

Roboter mit Raupenantrieb haben sich im Hobbybereich nicht sehr erfolgreich durch-
gesetzt. Der Grund dafür mag sei n, dass wichtige Teile des Antriebs nicht so einfach
durch eigene oder fremde Teile zu ersetzen sind. Dadurch ergibt sich eine gewisse
Abhängigkeit von einem einmal gewählten Hersteller. Dafür können diese Roboter eine
sehr hohe Geschwindigkeit erreichen, da die Raupen eine große Auflagefläche haben
und somit besser »die PS auf die Straße bringen«.
.,. Roboter
- Arexx RP6 VZ
.,. Vorteile
- hohe Wendigkeit
- sehr robust
- für den Außeneinsatz geeignet (bei geschützter Elektronik)
- hohe Geschwindigkeit

11 Bild: Courtesy NASA/ JPL-Ca ltech.

29
2 Wir sind die Roboter

.,. Nachteile
- spezielle Ersatzteile
.,. Preis
- ca.140 EUR

Abbildung 2.7 Der Roboter »Arexx RP6 V2« mit Raupenantrieb 12

2.1.7 Schlangenroboter

Mit diesem Abschnitt kommen Sie langsam in den Bereich »Es gibt nichts, was es nicht
gibt«. Denn der nächste Roboter ist ein Schlangenroboter. Jn der Robotik gehen Entwick-
ler nä mlich immer mehr dazu über, sich Konzepte der Natur abzuschauen und diese
technisch nachzuahmen. Und da· Schlangen in der Natur nicht nur eine sehr hohe
Geschwindigkeit, sondern auch noch eine extrem hohe Wendigkeit an den Tag legen,
bietet es sich geradezu an, so etwas nachzubauen. ln Abbildung 2.8 sehen Sie ei nen
Schla ngenroboter vom Biorobotics Lab der Camegie Me/Ion Un iversity. Er heißt Uncle
13
Sam. Die schon erwähnte extreme Wendigkeit hat Techniker motiviert, Schlangenro-
boter zu bauen, die sich in unserer Kanalisation fortbewegen können . Seien Sie also auf
der Hut, fa lls Sie das nächste Ma l den WC-Deckel wieder nicht heruntergeklappt
haben ...

12 Bild und Bezugsquelle: http:// conrad.de


13 http://biorobotics.ri.cmu.edu/ projects/ modsnake/

30
I

Abbildung 2.8 Ein Schlangenroboternamens »Uncle Sam« 14

.,. Roboter
- Uncle Sam
.,. Vorteile
- höchste Wendigkeit
- der Natur nachempfunden (hat sich bewährt)
.,. Nachteile
- derzeit oft noch externe Stromversorgung nötig
.,. Preis
- unbekannt

2.1.8 Ta uchroboter
Die am wenigsten erforschten Gebiete unserer Erde sind zweifelsfrei noch immer die
Tiefen der Ozeane. Was liegt also näher, als auch in diesem Forschungsbereich auf Robo-
ter zu setzen? Schließlich können sie im Vergleich zum Menschen lange Zeit ohne Sau-
erstoff unter Wasser bleiben und unterkühlen auch nicht so leicht. Aus diesem Grund
zeige ich Ihnen hier einen kleinen Vertreter der Unterwasserrobotik mit dem Namen

14- Bild : Carnegie M ellon Univer sity, Prof. Howi e Choset

31
2 Wir sind die Roboter

OpenROV15 . Zugegeben, es is t kein vollständig autonomer Roboter. Denn ROV steht hier
für »Remote Operated Vehicle <,also »ferngesteuertes Fahrzeug«. Aber lassen Sie es sich
gesagt sein: Allein ein Gehäuse auflange Zeit wasserdicht zu bekommen ist schon eine
Herausforderung fü r sich. Sie könnten also gut auf OpenROV aufbauen und ihn viel-
le icht später zu einem vollständig autonomen Roboter umbauen. Außerdem habe ich
dieses Tauchfahrzeug gewählt, weil sowohl seine Software als auch seine Hardware
Open Source sind.

Abb ildung 2.9 Der Tauchroboter »OpenROV«

,.. Roboter
- OpenROV
,.. Vorteile
- bezahlbare Einstiegsplattform für Tauchroboter
- wasserdicht bis 25 Meter (geplant bis 100 Meter)
- hohe Geschwindigkeit (1 Meter/ Sekunde)
- Open-Source-Hard- und Software
,.. Nachteile
- ferngest euert per Kabel (begren zte Reichweit e)
,.. Preis
- ca. 62 0 EUR

15 http://openrov.covmj

32
2.1.9 Fazit

Sie sehen, es gibt viele Arten von Robotern mit ganz unterschiedlichen Anforderungen
und Merkmalen . Natürlich ist diese Liste nicht vollständig, und sie wird es auch niemals
sein. Denn jeden Tag sitzen Forscher und Bastler vor neuen Herausforderungen, die sie
bereits h eute oder in Zukunft mithilfe eines Roboters lösen wollen. Wenn Sie später
Ihren ersten eigenen Roboter fertiggebaut haben und das Buch vollständig durchgele-
sen haben, dann blättern Sie doch einmal zurück zu diesem Kapitel. Sie werden höchst-
wahrscheinlich mit einem ganz anderen Blick auf diese Roboter zurückschauen und
dabei bestimmt a uch ein paar e igene Ideen entwickeln, wie Ihr nächster Roboter aus-
sehen soll.

2.1.10 App-Empfehlung

Zum Schluss dieses Kapitels möchte ich Ihnen noch eine iPad-App empfehlen. Es handelt
sich um die App ROBOTS 16 vom IEEE Spectrum Magazin 17. Leider gibt es die App derzeit
nur für iOS und noch nicht für Android. Sie können sich mit der App über150 Roboter aus
19 verschiedenen Ländern ansehen- mit allen Spezifikationen, beeindrucken den Fotos
und 360° -Ansichten. Die App ist wirklich lohnenswert und dabei noch kostenlos.

Abbildung 2.10 Di e App »RO BOTS « vo m IEEE 18

16 http:// robot'sapp.spectrum.ieee.org
17 htlp:// spectrum.ieee.org
18 Bild : Sc ree nshot der App »ROBOTS «

33
2.2 Wora us besteht ein Roboter?
Dam it Sie als angehend er Robotikexperte m itrede n können, sollten Sie w issen, woraus
ei n Roboter grund sätzlich best eht. Au ßerdem werden Sie in d iesem Abschnitt ei nige
Fachbegriffe kennenlernen, die Ihnen helfen werden, die einze ln en Bestandteil e eines
Roboters korrekt benen nen zu können .

2.2.1 Grun dsätz liches


Grunds ätzlich werd en d ie Bestandteile e ines Roboters in zwei Gru ppen unterteilt:

.,.. in Sensoren u nd
.,.. in Aktoren.

Ich ha be Ihnen zur Verdeutlichung diese in Abbildung 2.11 stark vereinfacht dargestellt.

Abbildu ng 2.11 Grundsätzl icher Aufbau eines Roboters

Auf der linken Seite sehen Sie einen einfachen h andgezeichneten Roboter, auf der rech-
ten Seite meinen Roboter direcsl aus Abschnitt 2.1.4.

2.2.2 Sensoren

Das Wort Sensor kommt au s dem Lateinischen und bedeutet üb ersetzt ))empfinden <<
oder »fü hlen<<. Nun haben Roboter nach heut igem Stand d er Technik noch keine Emo-
tionen . Dafür könne n sie aber über Sensoren Zustände der Au ßenwelt wahrneh men. Sie
haben also zum Beispiel eine Kamera, mit der sie )) sehen<<können , oder ein Mikrofo n,
um einen Menschen zu )) hören ((. Mit der Microsoft Kinect.-Kamera 19 kö n nen Robote r
zum Beispiel eine Geste wie den erhobenen Arm eines Menschen erkennen und diese
zum Beispiel als Anwei sung in terpretieren, anzuhalten . Ein Mikrofon könnte in Verbi n-

19 http:// de. wikipedia.orgjwiki/ Kinect

34
dungmit e inem Computer auf dem Roboter dazu dienen, Befehleper Sprache entge-
genzunehmen und auszuführen.
lS
Dies wären bereits sehr fortgeschrittene Beispiele für Sensoren. Einfachere Sensoren
sind zum Beispiel Ultraschallsensoren oder Infrarotdistanzsensoren, die Distanzen m it-
~s
tels Schall bzw. Infrarotlicht ermitteln können und diese dem Roboter in Form einer
elektrischen Spannung auswertbar zur Verfügung stellen. Solche Sensoren sind in der
Robotik häufig anzutreffen, dienen sie doch in der Regel dazu. dass ein Roboter Hinder-
nisse rechtzeitig erkennt und stoppt oder ausweicht. Wie Sie einen Infrarotsensor für
Ihren Roboter verwenden, lernen Sie übrigens in Abschnitt 7.2.3. »Se nsoren «.
Weitere Sensoren sind zum Beispiel Stromsensoren, die messen, wie viel Strom durch
einen Motor nießt. Werden diese überwacht, kann zum Beispiel ermittelt werden, ob
ein Motor einen ungewöhnlich hohen Stromverbrauch hat, weil er sich vielleicht festge-
t. fahren hat. In diesen Bereich gehört auch die Überwachung der Ene rgieve rsorgung, also
zum Beispiel von Akkus auf dem Roboter. Schließlich möchten Sie zum Beispiel bei
einem Tauchroboter, dass er rechtzeitig wieder auftaucht und nicht mit leeren Akkus
nutzlos auf dem Meeresgrund liegen bleibt.

2.2.3 Aktoren

Da ein Roboter seine Außenwelt nicht nur wahrnehmen soll, sondern auch Handlungen
durchführen soll, benötigt er Aktaren - auch Aktuatoren genannt. Das Wort »Aktuator«
kommt aus dem Englischen und bedeutet so viel wie »Auslöser« oder »Antriebsele-
ment« .

Aktoren auf einem Roboter sind zum Beispiel die Motoren, aber auch die Arme eines
Roboters. Vereinfacht kann man sagen: alles, womit der Roboter Tätigkeiten ausführt.
Aktoren sind aber nicht nur ganze Roboterarme, sondern auch ihre einzelnen Bestand-
teile. Dies können beispielsweise Servos (siehe Abschnitt 7.4, »Der Diener- Ansteue-
rung von Servos «) oder Elektromotoren (siehe Abschnitt 7.5, »Ich muss hier weg! -
Ansteuerung von Motoren«) sein. Auch hydraulische Elemente, wie Sie sie bestimmt
schon einmal an einem Bagger gesehen haben, sind Aktoren. Das können Sie sich wie
beim menschlichen Körper vorstellen, bei dem die Muskeln die Aktaren sind.
Viele bezeichnen auch Bauteiie. die sich nicht bewegen, als Aktoren, wie zum Be.ispiel
ein Blinklicht. Dieses kann in versch ieden Situation en u ntersc hiedlich e Zustän de signa-
lis ieren. Das kennen Sie mit Sicherb it selbst: Bei einer Alarman lage zeigt ein blinken-
des Licht einen Alarmzustand an. Bei einem Gabelstapler wie in der Abbildung 2.12
hingegen wird der normale Betrieb durch ein Blinklicht 0 angezeigt. Manchmal signali-
siert es hierbei auch die Warnung: »Achtung, Gefahrenbereich !«

35
2 Wir sind die Roboter

Auch in der Robotik werden Warnleuchten so ei ngesetzt: Auf einem g roßen Schweißro-
boter in der Autoproduktion wird e in gefährlicher Bet ri eb signali s iert, auf e in em im
Vergleich kleineren Roboter zeigt die Leuchte eher e ine Störung an (vgl. hierzu Abbil-
dung 2.12, G).

Abbildung 2.12 Ein Blinklicht zur Signalisierung verschiedener Zustände

Auch La utsprecher können durchaus als Aktoren bezeichnet werden. Sie sind sehr hilf-
reich für Robote r im Heim- oder Pflegebereich, wenn mit ei.nem Menschen über Sprach-
ausgabe kommuniziert werden soll.

Abbild un g 2.13 Sensore n und Aktoren bei Ihrem Arduino-Roboter

36
0- In Abbildung 2.13 sind die an Ihrem Arduino-Roboter verwendeten Sensoren und Akta-
m ren dargestellt: ein Infrarotdistanzmesser 0 (Sensor; h ie r schwarz) und zwei Gleich-
il - strommotoren (Aktoren) 8 mit Getriebe (weiß).

2.3 Wie und womit »denkt« ein Roboter?

Nachdem Sie in Abschnitt 2.2 gelernt haben, woraus ein Roboter im Wese ntlichen
besteht, soll es nun um den wohl wichtigsten Bestandteil des Roboters gehen: se in
»Geh irn «. Be im Menschen ist das Hirn der im Kopfbefindliche Bestandteil des Zentral -
nervensystems. Bei einem Roboter ist der Aufbau durchaus mit dem des Menschen ver-
gleichbar. Denn in der Regel haben Roboter mehrere einzelne Sensoren, die ihre Signale
jeweils zu einer zentralen Steuere inheit melden- wie beim Menschen die Nerven . Diese
zentra le Einheit wertet die Signale nacheinander aus und entscheidet- meist nach fest
vorgegebenen Plänen- wie der Roboter reagiert. Die Pläne sind hier das Programm, das
der Roboter fest eingespeichert von Ihnen bekommt und das er immer und immer wie-
f- der durchläuft, bis er abgeschaltet wird. Welche Arten es gibt, einen Roboter zu pro-
1-
grammieren, zeige ich Ihnen in Kapitel 3, >>Arten der Programmierung«. Ihr erstes
eigenes Programm für Ihren Arduino-Roboter werden Sie in Abschnitt 7.1 , >>De r erste
Kontakt mit der Hardware «, schreiben. Aber worauf läuft nun so ein Programm in
einem Roboter?

2.4 Mikrocontroller allgemein

Die Software, aufgrundderer ein Roboter handelt, läuft auf einem Mikrocontroller. Ein
Mikrocontroller ist ein Computer, der aus nur einem einzigen Chip besteht. Man
bezeichnet Mikrocontroller oft auch als System-on-a-Chip (kurz SoC, eng!. für >> System
auf einem Chip«). Im Gegensatz zu einem normalen Computer, der viele einzelne aus-
tau chbare Bestandteile wie Prozessor und Speicher (RAM} enthält, ist hierwirklich alles
in einem kleinen TC (Jntegrated Circuit, eng!. für >>integrierter Schaltkreis«) enthalten-
die Bestandteile eines IC unterscheiden sich je nach Typ und Hersteller sehr. Der Mikro-
controller, der auf Ihrem Roboter zum Einsatz kommt, ist der Chip ATmega328p2° des
Herstellers Atme/ (siehe Abbildung 2.14, 0 ). Dieses IC hat verschiedene Ein- und Aus-
gänge an seinen >>Beinchen<<, die Sie in Kapitel 6, >>Programmiergrundlagen«, zu pro-
grammieren lernen.

20 hllp://www.atmel.com/devices/ atmega328p.aspx

37
2 Wir sind die Roboter

Abbi ldung 2.14 Der Mikrocontroller- das »Gehirn « Ihres Arduino-Roboters

Wie Sie sehen, benötigt das Gehirn noch einige weitere Bauteile um sich herum, um zu
funktionieren, aber das ist beim Menschen ja auch nicht viel anders.

Kein Betriebssystem !
Der Hauptunterschied zu einem vollwertigen PC oder Mac ist, dass das System sofort
aus dem Speicher heraus ausgeführt wird . Es muss also n icht langsam ein Betriebssys-
tem laden und zig Dateien von einer Festplatte lesen. Sofort nach dem Einschalten
beginnt es mit der Ausführung des gespeicherten Programms. Da hier kein Dateisystem
im Einsatz ist, gibt es praktisch nichts, was kaputtgehen oder nicht mehr gelesen wer-
den kann. Vor allem aber wird bei Mikrocontrollern aber auf erprobte Technik gesetzt.
Es geht n icht vorrangig darum, ein möglichst schnelles System im Einsatz zu haben,
sondern darum, dass einfache Kontrollaufgaben so zuverlässig wie möglich gelöst wer-
den. Aus diesem Grund ist der Einsatzbereich von Mikrocontrollern so weit verbreitet.
Auf die weiteren Details und vor allem die einzelnen Anschlüsse des Arduino -Boards,
auf dem sich der Mikrocontroller in Abbildung 2.14 befindet, gehe ich in Kapitel4, »Die
Ardu ino-Plattform «, noch ausführlich ein. jetzt zeige ich Ihnen noch weitere Plattfor-
men, die ebenfall s zur Robotersteuerung im Hobbybereich eingesetzt werden.

2.4 .1 Alternativen zum Arduino-Board

Der Roboter, den Sie in diesem Buch aufbauen werden, basiert auf der Ard uino-Platt-
form . Über die Details und die Vor- und Nachteile verschiedener Plattformen könnte
man vermutlich ein komplettes separates Buch schreiben. Damit Sie zum indest einen
Eindruck von einigen Alternativen bekommen, möchte ich Ihnen diese hier ku rz vor-
stellen .

38
LEGO Mindstorms
Als Erstes sehen wi r uns ein sehr beliebtes. aber n icht ganz so günstiges Produkt an:
LEGO Mindstorms 21. Die LEGO-Mind storms-Plattform besteht vereinfacht gesagt aus
einem programm ierbaren Lego-Stein. Er enthält ein auf Linux basierendes Betriebssys-
tem, und es können unter anderem vier Sensoren, vier Motoren sowie ein WLAN-Modu l
angeschlossen werden. Das Mindstorms-System ist im Wesentli chen auf den Einsatz
mit weiteren Lege-Bausteinen beschränkt, mit denen verschieden e Roboter aufgebaut
werden können. Der Vorteil an diesem System ist die kinderleichte Programmierung,
die im Wesentlichen über eine grafische Oberfläche erfolgt- d ie Details mit den dahin-
tersteckenden Programmzeilen bleiben dem Anwender so verborgen.

Abbildung 2.15 Der LEGO Mindstorms EV3 -R oboter »EV3RSTORM«

21 http://www.lego.com/de-de/mindstorms/

39
Aufd ie Vor- und Nachteile dieser Art der Programmierung werde ich auch in Kapitel3
kurz eingehen. Ein weiterer Nachte il beim Mindstorms-System ist, dass es nicht Open
Source ist. Bei allen anderen h ier vorgestellten Plattformen sind sowoh l die Software als
auch die Hardware Open Source- das heißt, all e Quellen und Schaltpläne sind frei ver-
fügbar. Dafür ist das System von Lego extrem robust, vielfach erprobt und »kinderzim-
mertauglich «. Außerdem beginnt man nicht »bei null« sondern erhält viele Beispiele
mitgeliefert.

BeagleBoard
Eine weitere Alternative zum Arduino-Board ist das BeagleBoard 22 Dieses Board hat
wesentlich mehr »Rechen power« als der Arduino, es ist aber auch wesentlich teurer. Als
Betriebssystem kommt auf dem Board ein vollwertiges Linux zum Einsatz, das direkt
aus dem Speicher heraus bootet - also ohne SO-Karte. Die derzeit neueste Hardware-
version des BeagleBoa rd nennt sich BeagleBane Black und hat- im Gegensatz zu dem
in diesem Buch verwendeten Arduino-Board - auch noch USB-, LAN - und HDMI-
AnschJüsse.

Abbildung 2.16 Das BeagleBoa rd- hier das aktue ll e» BeagleBane Black«

Dadurch bietet das Board zwar wesentlich mehr Möglichkeiten, macht aber auch die
Ansteuerung umständlicher. Außerdem ist ein gewisses Erlenen des Betriebssystems

22 http://beagleboard.org

40
notwend ig. Als großer Vorteil sind jedoch die 46 Ein- und Ausgänge zu nennen, die
Mög lichkeiten f'Ür e ine Vielzah l von Erweiterungen bieten. Mittlerweile gibt es übrigen s
eine vergleichbare Arduino-Alternative zum BeagleBoard: den Arduino Yun 23 oder den
se hr leistungsfä higen intel Galileo 24 .

Raspberry Pi
Eine der derzeit prominentesten Entwicklungen im Hobbyelektronik-Bereich ist mit
Sicherheit der Raspberry Pi 25 . Auch dieses Board bootet ein Linux als Betriebssystem -
im Gegensatz zum BeagleSone Black jedoch direkt von e iner SD-Karte. Ein Nachteil
gegenüber de r Arduino -Plattform waren bis vor Kurzem die wenigen Ein- und Aus-
gänge.

Diese Notwendigkeit wurde erkannt: Der aktuelleRaspbeny Pi Model B+ hat jetzt 40 Ein-
und Ausgänge (sogenannte GPIO, General Purpose Input Output, eng!. für >>Meh rzweck-
Ein-/Ausgänge «). Der Vortei l des Raspberry Pi kann jedoch auch sein Nachteil sein:
Dadurch, dass ein vollwertiges Betriebssystem auf ihm läuft, kann sich auch schon mal
ein Prozess >>aufhängen « und das ganze System zum Absturz bringen. Das kann bei
einem einfachen Arduino prinzipbedingt nicht pass ieren.

Abbildung 2.17 Der »Rasp be rry Pi - Modell B+« mit 512 MB RAM

Dafür erh ält man mit dem Raspberry Pi (kurz RasPi) für wenig Geld eine n vollstänctigen
PC inklusive USB-, LAN-, HDMI - und Audio-Ansch lü ssen sowie 512 MB Speicher - un d
das a u f de r Größe e in e r Kreditkarte! U nd da er zusätzlich zum Proze so r (CPU} a u ch

23 http://arduino.cc/ en/Ma in/A rduinoBoardYun


24 http://arduino.cc/ en/ ArduinoCertified/ Inte/Galileo
25 http://www.raspberrypi.org

41
. .
2 Wir sind die Roboter

noch eine GPU hat, ist der RasPi sogar in der Lage, Fi lme im Full-HD-Format {1920 x 1080
Pixel) flüssig abzuspielen.
Sogar eine spezielle Kamera gibt es für ihn (si eh e Abbildung 2.18) . Sie wird über e inen
speziellen Steckplatz verbunden und belegt somit keinen de r USB-Anschlüsse.

3:
> ~ ~
; >
C>
>
C>
>
0
) ("') ("') ("')

Ab bild un g 2.18 Die Raspberry-Pi -Ka m era

Alles in allem bi etete der Raspberry Pi ei n bee indruckendes Preis-Leistungs-Verhä ltnis.


Dafür ist der Markt der Erweiteru ngen (Shields) noch in den Kindersch uhen. Hier änderl
sich die Entwicklung aktuell mit einer standard isierten Erweiterungsmöglichkeit
na mens HAT {Hardware Attached on Topj26.

In der Arduino-Welt gibt es m it den Shields eine weitaus größere Auswahl - abe r diese
Pla ttform gibt es ja auch bereits se it 2005, während der Raspberry Pi erst2011 das Licht
der Welt erblickte.

26 http://www.raspberrypi.org/ inl roduci ng-raspberry-pi-ha ts/

42
2.5 Fazit
In diesem Kapitel haben Sie die drei wichtigsten Bestandteile eines Roboters kennenge-
lern t:
.,. Sensoren, die »fühlen« , was in der Welt so vor sich geht
.,. Aktoren, mit denen ein Roboter »tätig wird <•
.,. das »Gehirn <<eines Roboters: der Mikrocontroller auf d em Arduino-Board

Dan ach habe ich Ihnen mit LEGO Mindstorms, dem BeagleBoard und dem Raspberry Pi
verschiedene Alternativen zum Arduino-Board vorgestellt. Wie ich bereits erwähnt
habe, gibt es unzählige Elektronikplattformen, mit denen Sie einen Roboter aufbauen
können. Dieser Teil sollte Ihnen einen gewissen Überblick verschafft haben- und auch
ein Gefühl dafür, warum in diesem Buch das Arduino-Board für Ihren Roboter verwen -
detwird .

43
Kapitel 3

Avi-e't J..ev PvoBv~~~ievl.\\\8


Na chdem Sie in Kapitel2, »Wir sind die Roboter«, die Bestandteile eines Roboters
kennengelernt haben, möchte ich Ihnen nun zwei grundlegende Arten der Program-
mierung und einige wichtige Begriffe rund um dieses wichtige Thema näherbringen.

Egal ob Sie im täglichen Sprachgebrauch von einem Programm, von Software, von einer
Applikation oder kurz von eine r »App« sprechen, das alles meint im Wesent lichen das
Gleiche: ein Objekt auf einem Compute r, das ausgeführt werden kann. Und dabei ist es
egal, ob es als Datei auf einer Festplatte gespeichert ist oder im Speicher eines Mikrocon-
trollers vorliegt.
Wenn Sie an Ihrer Wachmaschine »B untwäsche « auswählen und auf »Start« drücken,
läuft ein Waschprogramm ab -gespeichert in einem Mikrocontroller, der dem Ihres
Arduino-Boards ähnelt. Wenn Sie im Geschäft an einer Ladenkasse etwas bezahlen, lau-
fen in und um die Kasse herum Programme ab: vom Einscannen des Barcodes an der
Ware über das Anzeigen des Preises im Display bis zum Bezahlvorgangper EC-Karte. All
das sind Programme, die in einem Gerät ablaufen und die uns tägli ch umgeben.
Soll ein Computer oder Mikrocontroller oder sonstige Hardware Ihre Anweisungen aus-
führen, so müssen Sie dazu zuerst die Software schreiben, sprich programmieren. Hier-
bei werden grundsätzlich zwei Arten von Programm ierung unterschieden - die
grafische und die textbasierte Programmierung -, die ich Ihnen im Folgenden näher
beschreiben möchte.

3.1 Grafische Programmierung

Gerade im Einsteigerbereich verbreitet sich die grafische Programmierung immer


mehr. Vor allem Kinder und Jugendliche können so spielerisch an das auf den ersten
Bli ck vielleicht abschreckend wirkende Thema Programmieren herangeführt werden.
Aber um dies zu erklären, geht es erst m al einen Schritt zurück. In der Vergangenheit
wurd en Programme als einfache Textdateien in einem Editor am Computer erstellt
(siehe Abschnitt 3.2). Davor hatte sich der Programmierer erst einmal Gedanken
gemacht, was das Programm machen soll, und dieses dann auf dem Papier entworfen.
Dies waren spezielle Zeichnungen, aus denen hervorging, was wann wie abläuft. Diese
Zeichnungen werden daher Programmablaufplän e genannt (siehe Abbildung 3.1).

45
Erhöhen um 1

Abbildung 3.1 Ein einfacher Programmablaufplan

Das mag jetzt vielleicht sehr aufwendig und altmodi sch klingen. Außerdem ist der in
Abbildung 3.1 dargestellte Ablaufplan sehr simpel. Tatsächlich macht es aber immer
Sinn, sich vordem Erstellen eines Programms ausgiebig Gedanken zu machen, was das
Programm später genau tun soll. Und genau dafür sind Programmablaufpläne äußerst
hilfreich. Daher meine klare Empfehlung: Erstellen Sie immer einen Programmablauf-
plan. Ob Sie das mit Bleistift und Papier oder mit einer speziellen Software 1 auf Ihrem
Computer tun, bleibt letztendlich Ihnen überlassen .

3.1.1 Grafische Programmierung mit ))Scratch«


Um Neueinste igern den Einstieg in die Programmierung zu erleichtern, wurde 2007 am
MIT Media Lab die visuelle Prog rammiersprache Scratch 2 entwickelt. Diese spieler ische
Art der Softwareentwicklung ist vor allem für Kinder und Jugendliche gedacht. Aber sie
m acht auch Erwachsenen Spaß und lässt sich sogar ohne eine Installation auf Ihrem
Computer sta rten - denn sie läuft in jedem gängigen Webbrowser (siehe Abbildung 3.2).

I Zum Beispiel mit Microsoft Visio unter Windows oder mit OmniGraffle unter Mac OS.
2 http://scratch.mit. edu

46
I

Abbildung 3.2 Die Oberfläche von »Scratch « in einem Browser

Mit Scratch können Sie in fünf Minuten Ihr erstes Programm erstellen, das zum Beispiel
ein Bild auf dem Bildschirm per Pfeiltasten nach links und rechts bewegt -und dabei
noch jeweils einen Schlagzeugschlagper Ton ausgibt. Der Vorteil bei dieser grafischen
Programmierung ist das im wahrsten Sinne des Wortes kinderleichte Erstellen und
Erlernen von Programmstrukturen, die sonst sehr theoretisch erdacht und mühsam in
einem Texteditor erstellt werden müssen. Zum direkten Vergleich sehen Sie in Abbil-
dung 3.3 zuerst das Programm, wie es mit Scratch erstellt wird.

Abbildung 3.3 Ein mit >>Scratch« erstelltes grafisches Programm

47
In Abbildung 3.4 sehen Sie dagegen ein vergleichbares Programm im Tex teditor der Ar-
duino-Software, die Sie in Abschnitt 4.3. »Die Arduino-Softwa re «, kennenlernen werden.

votd setup()
(
ptnlol>de(ledPin, OOTl'IIT) ; ' 0\Q\tol Ptn 13 als Ausgang deftmer.en
ptnlol>de(\nPtn, I 'P\IT) ; t' Otgi tol Ptn 7 ~ls E\n9009 O.ftnt~ren

voto loop{)
(
II Sch<Jlt<rzustand (Ptn) etnlesen
\f (d;g; tolReac{ tnPtn) •• HIGH)
{
r, Zanler f:ese t
n • 0;

Go
{
1 Zaraler.,.. 1
n • n ~ 1;

rl LfD kur: an <.Schlag:;;ugschlog)


Otgltol"rt ~ ledl'tn , IIJGH) ;
deloy(250 ) ;
I lED tA.;i
dtgt olWnte( ledPt n , LQ!I) ;
dela)'(250 ) ;
} Mhtle ( n < 10) ;
}

Ii Schot t~rzusta.'ld P:flJ e1.nlesd\


tf (dtgt tolP.eOO{tnPtn ) •• LCIIf)
{
I Zahler R-es.et
n .. e;

do
[
II Z:Ohler +- 1
n • n • 1;

II LEO ~urz on (Schlogzeugschlog)


dtgtto!Wrtt<(leoPtn , HIGH) ;
deloy(250);
II lEO aus
dtgl to!Wrt te(ledPt n , LQ!l);
delay(250 ) ;
} oht le (n < 10) ;
}
}

~ - ~'_ • ' ' -~' -; >' '_.,-. • " 'r ~

I,
Anfu1na UNJ on ldt:v/ltv.u\bmadtrll1f•1411

Abbi ldung 3.4 Ein vergleichbares Programm in der Ardui no-Softwa re

48
I
Tja, nun sind Sieaufgrund der vielen Textzeilen in Abbildung 3.4 vielleicht abgeschreckt
und wol len von textbasierter Programmierung, um die es im Folgenden geht, gar nichts
mehr wissen. Oder Sie sagen sich: >>Aber ich will doch basteln und wissen, was dahinter-
steckt! Habe ich mir hier ei n Basteibu ch gekauft, oder was?« Nun, dann sind Sie hier
genau richtig.
Lesen Sie weiter in Abschnitt 3.2, wo ich Ihnen die Nachteile grafischer Programmie-
rung aufzeige. Sie werden anschließend verstehen. warum sch einbar langweilige Text-
editoren viele Vorteile bei der Programmierung haben 3

3.2 Textbasierte Programmierung

Auf den ersten Blick könnte der Eindruck entstehen, dass die textbasierte Programmje-
rung aufgrundihrer Unübersichtlichkeit und Komplexität keinerlei Vorteile gegenüber
der grafischen Programmierung aufweist. Ein Nachteil bei der grafischen Programmie-
rung ist jedoch die Begrenzung durch die eingeschränkte Auswahl an fertigen Baustei-
nen, die Ihnen zur Verfugung stehen.
Zum anderen sehen Sie beim Erstellen von Programmen, indem Sieper Maus Kästchen
hin und her schieben, nicht, was dahintersteckt. Dadurch entgehen Ihnen wichtige
Grundlagen, um etwas vollständig Neues zu erschaffen. Außerdem ist die webbasierte
Programmierumgebung von Scratch geradezu verlockend, weil Sie fertige Beispiele der
Entwicklergemeinschaft sehr leicht nutzen und sich nicht selbst Gedanken machen zu
müssen. Stellen Sie mal einem Kind einen Schokoladenkuchen vor die Nase und sagen
Sie ihm, es darf ihn nicht essen, sondern soll ihn mit den ebenfall s vor ihm liegenden
Zutaten selbst backen, um es zu lernen ... Wer gewinnt dabei wohl?
Selbstverständlich wollen und müssen Sie in der heutigen Zeit nicht alles von Grund auf
selbst ausdenken und das Rad jedes Mal neu erfinden. Aber es hilft in der Regel, ein Pro-
gramm selbst zu schreiben, bevor Sie es einfach aus dem Internet fertig herunterladen.
Gerade als Einsteiger-und das ist sehr wichtig- werden Sie auch mal Fehler machen.
Dabei werden Sie lernen, was Sie falsch gemacht haben und wie Sie durch Ihre Weiter-
entwicklung diese Fehler künftig vermeiden.
In Abbildung 3.5 und Abbildung 3.6 sehen Sie zwei moderne textbasie.r te Editoren bzw.
Programmierumgebungen. Wenn Sie die nachfolgenden Abbildungen näher betrach-
ten, werden Sie vielleicht einen Eindruck davon bekommen, dass die Programmierung

3 Im wissenschaftlichen Bereich wird mit Tools wie LabView tatsächlich viel au f grafische Weise pro-
grammiert. Dies stellt dort auch keinen Nachteil dar. Aber das weiter zu erörtern. würde an dieser
Stelle etwas zu weit gehen. Wichtig is t, dass Sie den grundsätzlichen Unterschied verstehen.

49
mit textbasierten Systemen sehr mächtig ist. Da Sie dort nicht a uf vorgegeben e grafi-
sche Elemente beschränkt sind, können Sie schreiben und damit progra mmieren, was
Sie wollen. Zusätzlich unterstüt zen dies e Programmi erum gehungen Sie dadurch, dass
sie zum Beispiel eine Textvervollständigung beinhalten. Dadurch werden bei der Ein-
gabe von »Anweisungen « d iese a utomatisch ergä n zt. Ich m öchte lhn e n mit diesen
Abbi ldungen nicht den Mut nehmen : lch kann Ihn en ve rsich ern , dass ich in di esem
Buch alles Nötige beschreiben werde, damit Sie in Kapitel 7, »Los geht's ! - Erste Praxis «,
Ihr erstes eige nes Programm erfolgreich geschrieben haben und auf dem Arduino-
Board das Ergebnis sehen werden! Und um das Arduino-Board geht es im nun folgen -
den Kapitel4, >>Die Arduino-Piattform «.

91 II .t.ntt ""-A
91 DPCMCOtnit();
02
93 II rne: robot to • definlt'd nate
94 resetAobot() ;
9S
96 vtnle (1)
97 {
98 II uria\BlocUng_cteadStr!ng();
99
111 w..ntl6_t buchnabe .. 8:
111
1fl
113 II block1"9 rebCf on ser~l pon USAR:n
,.,
1a4 vhile (USART_Getfh;Status CUSARTJ, USART FLAG RXH!) =
{ - - RESET)

116 }
117
ll8 buctutabe = USART_R.ecrheDI!ti(IJSARTJ):
1M
111 II tlulld ltnng
111 neceive<hu(buduube);
112
113
11'
llS H ( str.lngR.eccived (J)
116 {
117
II Ge co plet« ~tring_ and delet• u.rt_r...:_n~
118 get_s.tring{At rJ.nv but ter);
119
uo
121 I Jtf:SET I INl T
122
11 {urc.p l stringbuffer , • re• ) &::8' t )
113 {
124 resnRobol () :
12S
126
II nashhvht oft
127 tla.shHght (OFF) ;
128
129
138 II green LED on. Know we knollol', th1t the pr09ra• on the PC/Mec hu 1n1ti•Used thc At•e\
turr~lE D (lfOGRC EN, ~ );
131
1l2 I I an1wr "'J th "ok"
133
134 II thh answer 1a us~ to ue 1t ttw robot 1s "on"
put _st r ing ( • •r~ro ) ;
13S

Abbildung 3.5 Der sch lichte. aber mächtige Texteditor »Sublime Text«4

4 http://www.subl imetext.com

so
:<Sy--
r ··········· .. ································ ···························
C(llpVr1.,..t (C) lterkol• JIMpp
-.d1rKt . de
:Z.00122. - 1 &

• c;amnv..d top
• d t0.14cpp TMs f1h 1• lUtt of d1rKa •
.~.epp

........... dtrKI h ' ' • • tofnqre : you CAI'I red i urtllutl' tt end/~ -odtfy L

·-
• domoTlYHd.q>o
ul'ldor tM tot• of tM Cilal Cöe-wre\ ~1.1c li«Me .n PU0\1U..t
by t1'W Fr•• Sof~r• J"OWICht-i~ • ."..rs101' l of u. L1cen.ae .
-~.qlp
dtr.u h 4htdDut.-d 11'1 the ltope Uat h: wi\\ k uufu\,
• ~.cpp but V!THOU1' A1tY W~TY ; ...ttt--t. • .,.,., U. it~p\fed "'•runty •"
• l'llli...cw JllJIOI.AjlfAilUTY or J"tniES$ fO. A P.uTIQ.ILAR ~ . S.. dw
• lnterfat:aAvr.cpp COIIJ CO.nou\ Pv01tc LtcOtUoe for ..,,.. dete1h •
)oyreadef'MM:()S.objc..m
\'cu al"oou\.d h•w recehccl • COp'( of the GNJ ~,.~ "uub\ic ~iCenH
8' joyrcuadtrMaoOS.q,p
alon& wh::h dir..a . If f'IOt, SM ofl\ttp:JI--I'IU· • '&I\1eenHI/>.
• joy8tlolu:pp
.........................................................................,

. ......
.·--
)oylllokOieioO-
~URO•mc*
..__,.
~

.

...
• locf!Je.qlp
..-
nllbO'kl'tntad cpp
~
S.MoO rTh r oad : IS.n•o rThr!Nd(l n t erfeca.Wr • 1, Qltl.rtu ••)
(
II au uw
chs-""-'- •
~ of t .h fa c\as.s (ttlh h fo; ~fll
t.n1a-~ stat 1 cxrtaCbjen . cl.s.~ O ;
. . suc••)

·~
·~
... 1't:OO$)ed • hho ;
s 1 -.,\et t ~ • fe~so ;

... ...
II Ctlf#Y tlw pe1nte,. ftoa
1n'terfacel • t ;
~
t.bo orl .. -.\ c:;bjKt

II AttTf fot ator1fll U. -aw r.-d 'r.l\.un. t r - tbla •btfnrl'CI .tet\SOt•


tas-.orvaW. ( s.EifSOAl) • t;
1ASIAW~rY•luo [ SOISa.2J • t;
11ScttMirY•Wo ( StliSOitl) • t;
flt$c.M.or't'elo.~o ( UWSOR4J • t;
1RSe1'114rY•lua ( SL~J • e;
1RSensorVelue{S.Vi'SOU1 • e;
II iRScnsorVal..uo(SI:IISOII'l) • e; -~ ,... wo\tac• u v (-.sur1nc tM "_., ....,,,. I ~bt.on), s.ue, 1 J I
11 1tsv4orY•We(SOI.SOUJ • t; > nc. vo\Up 24 Y (~tna t:N fiO'IK *"O!P\J 1 acQ;atleton) MtlRN" 1 II

II ,.,.,._, Por uorlfll ttle -.s.r-ed wottap Y..t... H


~lt.apSeruo rVe \ \M'[VOllACl:SDISGitl} • t:
wo\upSenMI'V•W. (V'OlT.t4UDiSCRl) • t;

II for at.Or'~f'll • .,t,.n..\ t.erttoe.n ••t- (tnr•S'fl


l'oe..trt.b,..lVa\ue (t ) • t ;

11 1nhh\hnt.,.
for ( i nt f •t; tc~YSUE : t •• )
(

11 imcie\, .. ,,Of'l
for ( 11\t 1..1 ; hfiCTOIII:S.OS(ItAIIAAYSI:U; 1 ... )
(

II Ar''l'f fo,. •torlns ttle ••.5Ured COllt.act v• l.Jin


11 1nhtatt&.n.i0f'l
# s.n..."......,-s.n,..Th-'0 (o,. ( htt t • t: t cCOJIITACTAJlAAYSt zt; 1 ••)
# Sonoo<Tlnad·-.Q,...., {

# -llnod .."."".rroOiJI4r<j ~ I
# s.n.ot'Tlnld.:c::onvort~
s.n.:wn....ect. ~)
# s.ntorThoechun():
# S..O.nr..d-~lrt) ; lo
vQd : ·~==I:J••"i"l'l"i"l"~' ~'.~t•·J··•·;·························.:
Fahre Sehrtu-e tilr ,rojekt d1r«.S .u .. .
Unverlndorte JConf-i p.~r•t1011\, qN'a- khrl~t orird Uht-rsprvnat,. .
Stllrte • Juu / bt tt/•Jc.e• · jl
# s.tlorThMd~.au.{f J /D!><f\~ll /b i nfq••"' ·•pec: /09 t/ loc.ttl/.Nre{qtA/~/ ax.A · &•• CCIIIF"IG •••II- ... c::oNFt G-.-.11.14 - o "-'.! f1b cttrKS.CJrO
# s.n.orTIYNd:-get~ MESSAGt : qt.Addltbnry : found fr~ OtGlrl in cf1re:u..ory /~f\0Ca\/l1bury/fr--u
# Sontornwo.d•·gotDlslonoo(".nO:II MESSAGf: qtMdlibrery : f01o1nd r r - r k Q't_Core 1n direct.:.ry / op't/loul/LH:tnry/fr.....,rtu
# SeniOfllYOod gotDffvlwlDiltoncr "- /Agpl1cot1on.t/Xcodo.epp/Col'\toMs~\OJM,-/ usr{bia/aake - f IUiio.eft\ e
# SoniiOt'fhtoad::teiOI ~ 1/•1></l~• ll fbin/q<M .. ·lp.K /~:~~l;c~•:r:~::~~pt"U/IIOKlll: • & " COIFlCi,.,.,llll. ... CCH.HGu•M.IA · o Ka;ltef1\c arc . p~

~ Sen~llYNd: :got~JaSen.ofYU... ;,.0 , , ,,_, . 00_,,.,,,. •• , 1 for do"te1ls tsow to 1r'1Su\l libf,_n«:t .

Abbildung 3.6 Die Entwick lungsumgebung von »Qt«5

5 btt p:// qt-proj ct.org

51
Kapitel4

Oie Av~L\l\\o-Pl~H--PoviM
in diesem Kapitel erfahren Sie unter anderem, was es mit der berühmten Arduino-Piatt-
Jorm auf sich hat. Außerdem werden Sie die Software installieren und kennen lernen.

Zunächst werden Sie sehen, was Ardu ino überhaupt ist In Abschnitt 4.2 erläutere ich
Ihnen dann die Bestandteil e der Arduino-1-lardware 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 Einze lteile verwenden. Im Ansch luss wer-
den Sie in Abschnitt 4.3 die Arduino-Software und Treiber aufihrem 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 aufdem Arduino-Board zum Leben zu erwecken.

4.1 Was ist Arduino?


Wenn ich den Slogan der Projektwebseite 1frei ü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 Umgehungen 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 a ls auch die Software Open Source.

4.1.1 Die Arduino-Projekt webseit e


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

I http:// arduino. cc

53
-
4 Die Arduino-Piattform

in Kapitel 6, »Programmiergrundlagen «, mehr über die »Arduino -Programmierspra-


che« gelernt haben werden, können .immer mal wieder Fragen auftauchen. Nebe n der
vollständigen Sprachreferenz 2 finde n Sie auf der Webseite unzählige fert ige Beispiele
mit ausführlichen Beschreibungen. Zusä tzlich gi bt es eine FAQ (eine Liste häufig gestell-
ter Fragen) und ei n Supportforum . Außerd em finden Sie dort eine Übersic ht über die
vielen verschiedenen Arduino-Boards, die immer auf dem aktuellsten Stand gehalten
vvird. Speichern Sie sich also gleich den Link der Projekt seite, um ihn immer griffbereit
zu haben.

4.2 Die Ard uino-Ha rdware

Nach dieser Einleitung werde ich nun näher auf die Arduino-Hardware ei ngehen. Zue rst
aber ein wichtiger Sicherheitsh inweis.

I• Achtung: Elektrostatische Auflad ung zerst ört den Ardui no !


Bevor Sie elekt ri sche Bautei le oder Platinen wie Ihren Arduino berühren, sollte n Sie sich
zur Sicherheit immer »ent laden << !
Entlade n? Sicherlich haben Sie schon mal »einen gewischt bekommen «, als Sie auf
einem Teppich bode n mit Schuhen mit Gummisoh le herumgela ufen sind und dann
einen leitenden Gege nstand oder einen ande ren Menschen berü hrt haben . Die Ursache
dafür ist statische Auflad ung, die leicht mehrere 10.000 Volt erre ichen kann .
Da elektro nische Bautei le und damit auch Ih r Arduino-Board verhält ni smäßig empfind-
lich gegen diese hohen Spannungen sind, sollten Sie elektrische Aufladung sicher »los-
werde n«. Dies können Sie ganz einfach t un, indem Sie sich kurz vor dem Berü hren ei ner
Plat ine über die Erde (Masse) entladen. ln einer Woh nung ode r einem Haus geht das am
einfa chsten, indem Sie kurz ei nen Wasse rhah n, eine nicht lackierte Stelle Ihres Com pu -
ters oder eines Heizkörpe rs be rüh ren, denn diese sind im mer geerdet. Als zusätzliche
Vorsichtsmaßna hme sollten Sie Plat inen immer nur am Ra nd anfasse n und die Bautei le
oder Stecker nicht di rekt an ihren Pins berühren. So erkennt man Sie gleich als Experten
-und das wollen Sie doch so schnell wie mög lich we rden, oder?

4.2.1 Das Arduino-Board für den Roboter

Das Board. das Sie später auf Ihrem Roboter verwend en. heißt Arduin o Uno. »Uno « ist
Italien isch und bedeutet »E ins <<. Denn es war das erste Arduin o-Board., das je ent wickelt

2 http://arduino.ccjenj ReferencejHom ePage

54
I
wurde. Es gibt neben die sem Board viele weitere Arduino-Boards, die ich Ihnen in
Abschnitt 4.2.3 vorste ll en werde. Zunächst will ich aber die einzelnen Bestandte il e des
Arduino Uno erläutern. Schauen Sie sich dazu Abbildung 4.1 genauer an.

0 Reset -Taster
6 Benutzer-LED
0 Übertragungs-LEDs
0 Ein -/Ausgänge
0 Power-LED
0 ICSP-Stecker 1
0 M ikrocontroller
0 Montagepunkt
0 Ein -/Au sgänge
® Stromversor-
gungs buch se
(D USB-Buchse
~ ICSP-Stecker 2

Abbildung 4.1 Der »Arduino Uno« und seine wicht igsten 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önn en 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!


Obwoh l das Arduino-Board schon eine We ile ex istiert, gibt es gelegentl ich doch noch
+
kleine Veränderungen, um es weiter zu verbessern. Um festzustellen, ob Sie die aktuelle
Vers ion haben, hilft ein kurzer Blick auf die Unterseite des Boards. Die Versionsnummer
find en Sie dort, wie in Abbildung 4.2: gezeigt. Entwickler sprechen bei einerneuen Ver-
sion oft auch von einem Release. Darum beginnt die Vers ionsnumm er hier mit einem
>> R<<. Aktuel le Informationen übe r di e Releases find en Sie jederzeit in der offi ziel len
Arduino-H ardwarereferen z3. Alle An ga ben in diesem Buch bez iehen sich auf die derzeit
aktu elle Version Arduino Un o R3.

3 http://arduino.ccjen/ Main/ ArduinoBoardUno

55
4 Die Arduino-Piattform

Abb ildung 4. 2 Die Ve rsionsnummer auf der Rückseite des Boards

Der Reset-Tast e r
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
Momen t, in dem Sie das Board mit Strom ve rsorgen, ist es immer in Grundstellung. Um
aber an einen definierten Startpunkt zu gelangen, wenn das Arduino-ßoard 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 l,
•>Los geht's ! - Erste Praxis «). Dazu werden Sie später die Anweisung delay verwenden,
die den Arduino schlicht und einfach »wa rten << lässt (siehe Abschnitt 6.12, »Verzögerun-
gen und Zeitsteuerung «). Wenn der Ardu ino vier Sekunden lang nichts tun soll, wäre
die Anweisung dazu delay(4000). Wenn Sie jedoch in Ihrem Programm versehentli ch
die Anweisung del ay( 4000000000) einfügen, weil Sie auf der Taste [I] (Null) eingeschla-
fen sind, so würde der Arduino 4.000.000 Sekunden warten und scheinbar nicht mehr
reagieren. 4.000.0 0 0 Sekunden entsprechen nämlich ungefahr 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 da n n Ihre gesch rie-

56
I
bene Software auf Fehler analysieren und würden zweifellos auf die feh lerhafte 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 »ei nen
Reset durchführen« oder »ausfüh ren «. Vie le sagen aber auch einfach »den Arduino
resetten«. Das klingt vielle icht ungewohnt. Aber Download und downloaden kla ngen
auch einma l seltsam oder Kidnapping und gekidnappt. Benutzt werden diese Begriffe
aber mittlerweile alle- und im Du den stehe n sie auch.

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
v iel 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
I.
gesteckt und dann neu programmiert. Das bedeutete durch das ständige Entfernen und
e
Stecken der Bauteile eine hohe mechanische Belastung, und es >'lllrde zusätzliche Hard-
·-
ware zum Programmieren benötigt.

Mit der Einführung des ICSP-Steckers konnte zumindest direkt auf das zu programmie-
r 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 Stromversorgu ng die wichtigsten Stecker auf einem Arduino-Board.
Ich gehe auf d ie einzelnen Pins der Ein-lAusgangsbuchsen 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 Kapitel7, »Los geht's! - Erste Praxis«. Wie Sie die

57
4 Die Arduino-Piattform

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

Power-LED
Die Power-LED (eng!. 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 Saft-
wareübertragung auf Ihr Arduino-Board verwendet. In Ihrem Arduino ist nämlich
neben der »normalen « Software auch noch ein sogenannter Boot loader enthalten. Die-
ser Bootloader ermöglicht clie 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 Bootload er 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 h ier 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 unbedi ngt nur diese Löcher nutzen, da auf der Ober- und der Unterseite
Leiterbahnen verla ufen, die die einzelnen Bauteile miteinander verbinden . Würden Sie
diese durchbohren, wäre das Board danach unbrauchbar!

+ Tipp

Wenn Sie Ihr Arduino-Board späterirgendwomit Schrauben befestigen wollen, verwen-


den Sie Schrauben a us Kunststoff (Polyamid). Sie vermeiden damit Kurzsch lüsse durc h
leite nde Meta ll sch ra ube n, da ei nige Ba utei le sehr dicht an den Montage löchern verlö-
tet si nd .

Übertragungs-LEDs (TX/RX)

Wenn Sie später in Kapitel 7, >>Los geht's! - Erste Praxis Ihr erstes selbst geschriebenes
Prog ramm auf den Arduino übertragen, geschieht dies über eine Verbindung zwische n

58
Ihrem Computer und d e r USB-Buchse d es Arduino-Boards. Dabei kommunizieren Ihr
Computer und der Arduino miteinander, t auschen also Daten au s. Wenn der Computer
dabei Daten an den Arduino se ndet, leuch te t zur Bes tä tigung des Empfangs auf dem
Arduino kurz die RX-LED (Rx, e nglisch abgekürzt für Receiver = Empfänger). Sendet der
Arduino etwa s zum Computer, leuchtet kurz die TX-LED auf dem Board (Tx, englisch
abgekürzt für Tran smitter = 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 Pluspolliegt 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 Netztei l oder Akku verwen-
+
den, achten Sie unbedingt darauf, dass dabei die Grenzwerte nicht la nge überschritten
werden! Das Netzteil muss außerdem eine Gleichspannung (OC = Direct Current Val-
tage) liefern.
Empfohlene Eingangsspannung: 7-12 Volt
Kurzzeitig erlaubte Grenzwerte : 6- 20 Vo lt

Abbildung 4.3 Ein typischer Hohlstecker von einem Netzte il

59
4 Die Arduino-Piattform

USB-Buchse
Die USB-Buchse auf dem Arduino-Board hat drei verschied en e Fu nktionen:

~ Stromversorgung des Arduino


~ Sch nittstelle zum Übertragen de r Software a uf 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 Besch reibung der Stromversorgungs-
buchse erläutert habe, keine separate Energiezufuhr. Die zweite Funktion ist das Über-
tragen Ihrer geschriebenen Software auf das Arduino-Board (sieh e Kapitel 7, »Los
geht's!- Erste Prax is«). 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
Bild schirm Text seh en, 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.

I• Wichtig: Erst insta llieren - dann anschließen!


Bevor Sie Ihr Ard uino-Board per USB-Kabel a n den Computer anschließen, müsse n Sie
bei ein igen Betriebssystemen einen sogenan nte n Treiber insta lliere n. Wie das geht,
e rklä re ich Ihnen in Abschn itt 4.2.S. Diese Reihe nfolge sollten Sie un bedingt einhalten,
da a nso nsten der Ard ui no möglicherweise nicht einwandfrei von Ih rem Compute r
erkannt wird!

4.2.2 Die Ein- und Ausgänge des Ardu ino-Boards im Detai l

Kommen wir nun zu den wichtigsten Ansch lüssen auf Ihrem Arduino-Board : den Ein-
und Ausgän gen des Ard uino Uno. In Abbildung 4.4 sind die einzelnen Pins der breiten
Bu chsen beschriftet, und ich werde diese im Folgenden der Reihe nach erläutern.

SCL und SDA

Diese beiden Pins sin d fü r die sogenan nte J2C-Schnittstel/e (Aussp rache: »f-Quadrat-C«).
Viel fach wird diese au ch l2C-Schnittstelle genannt (Aussp rache : »l-Zwei-C«). Generell
d ient eine Schnitts telle (en glisch Interface) dazu, unterschied liche Schalt u ngen oder
Teile von ihnen m iteinander 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 rzc -Interface b ei Ihrem Arduino·

60
4.2 Die Arduino-Hardware

Roboter standardmäßig ke ine Verwendung findet, gehe ich hier nicht weiter auf seine
Details ein. Ein Tipp aber noch: Die beiden I2C-Pins SDA und SDL sind auf der Unterseite
des Boards beschriftet! Auf der Oberseite war wegen des ICSP-St eckers 2 kein Platz mehr.
übrigens: Aus rechtlichen Gründen wurde die I2C-Sch nittstelle früher HVI-Interface
genannt (Two-Wire-Jnt:erface, englisch für Zweidraht-Schnittstel/e), denn der Hersteller
Philips hatte lange Zeit die Rechte an dem Namen 12C. Sie fi nden die Bezeichnung TWI
daher oft noch in älteren Daten blättern. Auch die Software-Bibliothek des Arduino-Pro-
jektes zurNutzungder I2C-Pins heißt bis heute noch Wire 4 .

0 SCL
E) SDA
0 AREF
0 Masse
0 Digita le Ei n-/
Ausgänge
() TX/RX
0 Ana loge Eingänge
0 Vin
0 Masse
~ SV
G) 3,3V
Q) Reset
'i) IOREF

Abbildung 4.4 Die Ei n- un d Au sgänge des »A rduino Un o«

AREF
Di eser Pin ist ein Eingang, an dem eine beliebige Spannung zwischen 0 und 5 Volt ange-
legt werd en kann . Er kann n ur in Verbindung mit den analogen Eingängen AO bis AS
(»ANALOG IN« ) genutzt werden und dient diesen als Referenz (AREF = Analoge Refe-
renzspan nung) . Näh eres dazu wird später unter »Analoge Eingänge « besch rieben.

Masse {GND)
Der Masse-Pin (englisch Gro und, abgekürzt GND) ist der Bezugspunkt für alle Spannun-
gen auf dem Arduin o-Board. Er ist zugleich der Minuspol der Stromversorgung u n d ent-
spricht damit auch 0 Volt.

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

61
4 Die Arduino-Piattform

Digitale Ein-/Ausgänge
Die Pins 2 bis J3 dienen als Ei ngang oder Ausgang. Das heißt, eine Spannung kann an
einen Pin angelegt werden (Eingang) oder der Arduino kann eine Spannung ausgeben
(Ausgang).

I• 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 J. In der Elektronik Ihres Arduino Uno entspricht das 0 Volt
oder 5 Volt bzw. aUgeme.in LOW oder HIGH.

+ Expertenwissen zu m 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:

LOW
Eingang __
___;;; Ausgang
0,00-1,SO V 0,00-0,SO V
HIGH 3,50-5,00 V 4,44- 5,00 V

Das bedeutet zum Beispiel, dass all e Spa nnungen zwischen 0,00 und 1,50 Volt an einem
Einga ng 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
sogenan nten Logikpegel n gelte n schlichtweg als undefiniert. Das heißt, es ist nicht vor-
hersagbar, wie sich der Ardu ino hier verhält.

Warum ein ige der Pins mit einer Tilde("') gekennzeichnet sind und was di e Beschriftung
PWM"' auf der Platine bedeutet, erfahren Sie in Abschnitt 7.4.2}. Ich will es ja auch etwas
spanne nd 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 serielles Daten-

5 Seriell bedeutet, dass die Daten Bit für Bit hinte rein ander übertragen werden (siehe auch htt p://
de. wikipedia.org/ wiki/ Serielle_ Datenübertragung)
I
Ü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, we nn Sie
ein Programm auf de n Arduino übertragen oder später den Serial Monitor (siehe
Abschn itt 7.2.3) verwe nden, werden dabei die Daten auch über diese beiden Pins laufen.
Störungen wä re n also vorprogrammiert. Für den in di esem Buch beschriebenen Robo-
ter we rden diese Pins nicht verwendet.

Anal oge Eingänge


Im Gegensatz zu den digitale n Eingängen können Sie a n die Eingänge AO bis A5 eine
beliebige Spannung zwischen 0 und 5 Volt anlegen. »Ana log« bed eutet, 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 AO bis
A5 anliegende Spannung standardmäßig mit 5 Volt. So erhalten Sie zum Beispiel beim
Anlege n von 0 Volt e ine 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 ein e Spann ung 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 wi rd auch in diesem Buch nicht verwen-
det. Für weitere Informationen sei daher an dieser Stelle wieder einmal auf die Arduino-
Refe renz7 und den dort beschriebenen Befehl analogReference verwiesen.

Vi n
Dieser Pin gehört zu den Stromversorgungspins und kann sowohl als Eingang als auch
als Ausgan g genutzt werden . An diesen Pin können 7-12 Vo lt angelegt werden, d ie dann
das Arduin o-Board m it Energie versorgen (falls Sie n icht die USB-Verbi ndung oder die
Stromversorgungsbuchse dafür benutzen wollen) . Wenn Sie aber das Board per USB-
ode r Hohlstecker mit Strom versorgen, dann liegen an diesem Pin 5 Volt an.

Masse (G ND)
(siehe vorige Beschreib ung)

SV
Di eser Pin dient nur als Ausgan g. Sobald das Arduino-Board per USB- oder Stromversor-
gungsbu chse mit Stro m verso rgt wird, ko mmen an diesem Pin geregelte 5 Volt Spa n-

6 Warum de r Wert von 0 bis 255 geh t. erfahren Sie in Abschni tt 6.3.4 .
7 hl.tp://arduino.cc/en/ Reference/ AnalogReference

63
4 Die Arduino-Piattform

nung »heraus« . Diese können Sie zur Stromversorgung weiterer kleinerer Bau teile, 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-Ta sters. Sobald dieser Pin mit
Masse (GND) verbunden wird, wird ein Reset des Arduino-Boards a usgelöst. Wenn Sie
Ihr Arduino-Board mit Shie/ds (siehe Abschnitt 7.2.7} erweitern, kann es sein, dass diese
den Reset-Taster auf dem Board blockie ren . Dafür ist dan n dieser Pin nützlich.

IOREF
Dieser Pin liefert eine Referenzspannung, mit der der MikrocantraUer 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}.

+ Fehlt da nicht etwas? Was ist mit dem f rei en Pin?


Wie Ih nen vielleicht aufgefa llen ist, ist in Abbildung 4.4, links neben dem Pin /OREF, ein
Pin nicht beschriftet. Der Grund hierfür ist ganz simpel: Er ist nicht in Verwend ung.
Möglicherweise »kit zeln« die Entwick ler des Boards späte r noch einmal neue Funktio-
nen aus dem Ard uino Uno heraus. Dann wird dieser Pin vie lleicht noch belegt. Aktuell
ist das jedoch nicht der Fal l. Aber seien Sie gewiss: Sie haben bereits so unzählige Mög-
lichkeiten mit Ihrem Arduino-Board!

4.2.3 Versch iedene Arduino -Boards

Das Arduino-Board wäre vermutlich n icht 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 hrtp://arduino.cc/ en/ Main/ Policy

64
Arduino-Board mit mehr Le istung 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-Piatine reduziert.

SMD-Baute ile
Um die Größe einiger Arduino-Boards zu verringern und auch um die Kosten zu sen-
ken, wurde auf Bautei le zurückgegriffen, die sich SMD-Bautei/e 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« (aufge lö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.

Jn Abbil dung 4.5 sehen Sie deutlich den Untersch ied der beiden Bauteil typen auf Ihrem
Ard uino-Boa rd :

1> Oben 0 finden Sie den Mikrocontroller als SMD-Bauteil,


1> unten 0 einen Mikrocontroller in alter Bauweise.

Abbildun g 4.5 SMD-Ba utei l im Ve rglei ch zur a lt en Bauwe ise

65
4 Die Arduino-Piattform

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 leich t ausgetauscht wer-
den. Das ist bei SMD-Teilen sehr schwierig. denn d iese 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 h inkommt. So bleibt dann leider oft nur Entsorgen und Neu-
ka ufen . eine Entwicklung, die für unsere Umwe lt alles andere alsfö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 kl eine Auswahl handelt, sollte sie Ihnene inen guten Überblick geben.
Und vielleicht entwickeln Sie ja eines Tages Ihr eigenes offizielles Arduino-Board?

Ard ui no Due
Der Ardu ino Due ist im Vergleich zum Arduino Uno ein leistungsfahigeres 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, Tastat ur oder ein
Smartphone angeschlossen werden können.

Abbild un g 4.6 Der »Arduino Due« mit meh r als 54 Ein- und Ausgängen9

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

66
Ein Nach teil bei diesem Board ist der verwendete 3,3-Volt-Log ikpegel, da viele Shields
mit einem 5-Vo lt-Logikpegel arbeiten und damit an diesem Board nicht ohne Weite-
res ei nge setzt werden können (siehe auch in Abschnilt 4.2.2 unte r »D igitale Ein-/ Aus-
gä nge«).

Ardui no-Roboter
Ein Arduino-Roboter ? Wieso erfahre ich erst jetzt davon ? Richtig, es gib t 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.

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

Arduino Esplora
Im Gegensatz zu den »normalen << Arduino-Boards stellt der Ardu ino Esp lora auf seiner
Platine eine Vie lzahl von Sensoren und Aktaren (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
Tem peraturse nsor, ein Mikrofon, einen Piezo (siehe Abschnitt 7.3.1), einen Beschleuni -
gungssensor, einen Lichtsensor und vie les mehr. Lassen Sie si h nicht durch die
Bauform täuschen: Das Board sieht viell eicht wie ein Gamepad aus, ist aber ein vollwer-
tiges Arduino-Board mit Mikrocantroll er.

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

67
4 Die Arduino-Piattform

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

Li lyPad 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.

Abbildung 4.9 Arduino als Anstecker? Der »Li lyPad Ardu ino USB« 12

II Bild: htlp://arduino.cc, CC BY-SA 3.0


12 Bild : http://a rduino.cc, CC 13Y-SA 3.0
Arduino Mic ro
Der Ardui no Uno ist Ihne n zu groß? Dann greifen Sie doch zu einem Arduin o M icro.
DankSMD-Technik ist die Platin e auf beiden Seiten eng mit Bauteilen bestückt. So wird
jeder MiUi meter ausgenutzt. Und ein USB-An schl uss zum Übert rage n de r Software hat
auch noch auf das Board gepasst.

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

Arduin o Nano
Es geht noch kleiner - auch wenn Abbildung 4.11 es nicht so deutlich zeigt, da der direkte
Vergleich fe hlt. Der Arduin o Nano ist noch einmal geschrumpft und bietet dennoch
unte r anderem 14 digita le Ein- und Ausgänge, e ine LED und eine I2C-Sch nittstelle auf
kleinste m Rau m. Es geht übrigens noch kleiner: Der TinyDuino 14 hat eine Größe von
lediglich 2 x 2 cm.

Abbildung 4.11 Der »Ard uino Nano« (Maße : 4,3 x 1,8 cm) 15

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


14 http:// l'iny-circuits.com/ produ ts/ tinyduin o/
15 Bild: http ://a rduin o.cc, CC BY-SA 3.0

69
4 Die Arduino-Piattform

Wer die Wahl hat ...


ie 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 ha ben und »beherrschen«, macht vielleicht später ein Wechsel auf ein
a nd eres Boa rd Sinn.

4.2.4 Die Einze lte il e für Ihren Robote r bzw. das Roboterkit

Bevor es im folgenden Abschnitt um die Installation des Treibers für das Arduino-Board
auf Ih rem Computer geht, möchte ich Ihnen die Teile Ihres künftigen Ard u ino-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 zusammensu chen 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 Kapitel7 , »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.

Abbildung 4.12 Der »Ard uino Uno R3 «

16 http://www.bolmakers.de
17 ht tp://www.watterott.comj de/StarterKit -Roboter

70
Ein USB-Ka bel (A-Stecker auf B-Stecker)
Das passende Kabel , um Ihr Arduino-Board mit dem Computer zu verbinden, sehen Sie
in Abbildung 4.13.

Abbildung 4.13 USB-Kabe l mit A- und B-Stecker

Ein Arduino-» Motor Shield «


ln 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 genaueins für Ih ren Roboter.

Abbildung 4.14 Das Arduino-» Motor Shield «

71
4 Die Arduino-Piattform

Fünf Jumper Wires/Testkabei/Steckb rü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 unkomp liziert miteinander verbinden. Für den
Ba u Ihres Roboters benötigen Sie fünf dieser Kabel m it e iner Länge von jeweils 10 cm.
Die Kabel so llten an beiden En den Buchsen haben. Im technischen Bereich hat sich für
Stecker m it einem Pin der Begriff männlich (englisch male) durchgesetzt. Bei Buchsen
ist es entspreche nd ein weiblicher Steckverbinder (englisch female). Daher haben die
Jumper Wires in Abbildung 4.15 die Bezeichnung »fema le-fema le« {Buchsen an beiden
Enden).

Abbildung 4.15 Sogenannte Jumper Wires

30 cm Litze/Draht (0,25 mm2)

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

72
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 Akkusam besten geeignet. Akkus sind
wiederaufladbar und darum aus Umweltschutzgründen Einwegbatterien immer vorzu-
ziehen. Die Akkus werden bei Ihrem Roboter in den Akkuhalter aus Abbi ldung 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!

eneloop

Abbildung 4.17 1,2-Volt-Akku s

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
4 Die Arduino-Piattform

Ein Batterie halter/Akku halter


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

Abbildung 4.18 Der Ha lter 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
Absch nitt 7.4, »Der Diener- Ansteuerung von Servos «.

Abb ild ung 4.19 Ei n Sta nda rdservo, w ie er im Modellbau verwendet wird
Ein Infrarotdistanzsensor
Damit Ihr Roboter später nirgendwo anstößt, benötigt er )>Augen «, die Hindernisse
erkennen. Das Auge besteht in diesem Fall a us 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 ebenfa lls in dem zuvor genannten Abschnitt.

Abbildung 4.20 Der Sharp- lnfrarotdistanzsensor GP2YOA21YKOF

Zwei Getriebem otoren


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 dam it mehr
Kraft auf die Räder des Roboters übertragen. Da jeder Motor ein Rad Ihres Roboters
antre iben wird, benötigen Sie zwei Motoren. Die Ansteuerung der Motoren zeige ich
Ihnen ausführlich in Abschnitt 7.5.

Abbildung 4.21 Zwei Motoren mit einem weißen Getriebe

18 Genau genommen ist der Begriff Untersetzung nur umgangssprachlich korrekt. Wenn ie es genau
~isse n wollen, mpfi hlt sich wie so oft ei n Blick in di Wikipedia : http://de.wikipedia.org/ wiki/
Ubersetzung_ (Tech nik)

75
4 Die Arduino-Piattform

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

Abbildung 4.22 Zwei Rä der für Ih ren Roboter

Ei n Stützrad

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

Abbi ldung 4.23 Das St üt zrad mit der Stahlk uge l

Ein Stück Sch rumpfschlauch (4 mm Durchmesser)

Früh er wurde zum Isolieren m eistens Isolierband verwendet. Heutzutage bietet sich fü r
die meiste n Anwendungsf<ille ein Schrumpfsch lauch an - im Sc herz auch gerne ma l

76
))Schlumpfschlauch « genannt (siehe Abbi ldung 4.24) . Ein Schru mpfschl auch hat die
Eige nschaft, dass bei hoher Hitze sein Durchmesse r abnimmt. Wenn Sie zum Beispiel
von zwei Drähte n die Isolierung (Ummantelung) entfernt und die Drähte m iteinan der
verb unden haben, können Sie diese mit dem Schrumpfschlauch neu »umman teln«.
Wie das genau ge ht, erfah ren Sie in Kapitel S, »Keine Schraube locker - Die Montage des
eigenen Roboters«, be im Zusamme nbau lh res Roboters.

Abbildung 4. 24 Schrum pfschl auch

Ein Cha ssis aus ge laserten Acrylteilen


Um einen einfachen, aber stabilen Aufbau Ihres Roboters zu ermögli chen, enthält da s
Kit alle Teile für ein Chass is aus lasergeschnittenem Polymethylmethacrylat (umgangs-
sprachlich auch Acrylglas oder Plexiglas genan nt).

Abbildung 4.25 Ge laserte Acrylteile für ein Chassis

Ein wenig Werkzeug


Natürli ch geht de r Zusammenbau nicht ohne Werkzeug. In Kapitel 5. »Die kleine
Werkstatt «, erfa hren Sie daher, welches Werkzeug Sie für die Montage unbedingt benö-
ligen und welches hilfreich, aber nicht zwingend notwend ig ist.

77
4 Die Arduino-Piattform

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 Ihne n, wie Sie alle Teile zu einem Roboter zusammenfügen. Zuvor
erhalten Sie noch das nötige Wissen über die Arduino-Plattform und deren Program-
mi erun g.

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 Atme/ (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 ve rschiedenen 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 aufih rem Computer. Sie werden
feststellen, dass die Installation kinderle icht ist und Sie danach sofort los legen können,
ohne noch viel aufihrem System extra einrichten oder konfigurieren zu müssen.

4.3.1 Down load 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 ei n
Download über die Webseite notwendig, unter Linu x wird die Software mit Mitte ln des
Betriebssystems installiert. Im Folgenden ze ige ich Ihnen für jedes einzelne Sys tem clie
not wendigen Schritte - einschließlich Trei berinst allation.

Win dows

Um die Arduino-Soft ware unter Windows zu installieren, besuchen Sie die Arduino-Pro-
jektseite. Navigieren Sie dort zur Seite DOWNLOAD. Unterha lb des Punktes ARDUINO

19 http://arduino.cc

78
4.3 Die Arduino-Software 1

' '

JDE finden Sie den Link WINDOWS lNSTALLER, wie in Abbildung 4.26 dargestellt. Der
Jnstaller 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.

a· I •

c EI · ..., . P IC· •

• AfOUif\0 I~ t. rl ßE:TA(wruthlupport I OI ArdUiflO '{ JnlndkdU no()ue boi!~J


• NrghUyBu lds
• Aldwno IOE for ntdGameo
- Sourcr Coct
. OthtfSof'twart-
• OpreriWrt lmfJ:ts for tM VUn

Aiduino IDE
Arduino 1 . 0 . 5
Oownlosd Not st.qn

Aldumo 1 0 S (rtlt ~t n<ot~~) . ~t.e&1 by Googl Co4..: C.dl•ng SU.rud


HOrtCE An.IUIUO Oriwn ha-..ebeul Updlt!d CD add SUpport for W1ndows Rf'ft:tf'nct:

8 I, yoo candownlotd l:ht:upd ~ JOE('m'lton I O.W2 ft'WWinOOWS) trom Enwonment


rmpln

(1 POl<)

Arduino 1 . 5 . 6-r2 BETA (with support for


Arduino Yun and Arduino Due boards)

Abbi ldung 4.26 Klicke n Sie auf den Link »Windows lnsta ller«.

' .frdulno· t..O..S-r2~1odowu!:xe


Vom Typ; B;nary F~e (52,6 MB)
Von: http;//ilrdu nlo.guoglecode.com
M6chteo Sie d i r:~>e O;,t:eJ <öpckhc.m1

Abbildung 4.27 Wählen Sie die Option »Date i speich ern «.

Standardmäßig speichert Windows herunlergeladene Dateien in Ihrem Benutzerver-


zeichnis unter Downloads (siehe Abbildung 4.28). Um die Installation der Ardu ino-Soft-
wa re zu starten, klicken Sie doppelt auf die Datei.

79
4 Die Arduino-Piattform

~ C Oowntoeds durchrucht.n p

'k Fovoriton Name Änd~rungsdlt\Jm Typ GrOße.


mDesktop 0 arduino-1.0.5-r2-wmdows 01.05.2.01400:12 Anwendung 53.829 1<0
Downloalh
DropbOI (Mac)
iOoud (Mi!:c)
Photo Stream (Ma{)
Zuldzl~ht

Biblic«he:lce-1
Bilder
Dokurne'lte:
Jl Musik
Videos

Comput:a

6 Elen.rtt. 1 a.....m ausgow!h~ (52,5 M3)

Abbildung 4.28 Die heruntergeladene Installationsdatei im Explore r

Wenn das Fe nster aus Abbild ung 4.29 ersc heint, best ätigen Sie die Frage durch Kli ck
auf)A.

-
~ X

~ Mochten S1: zulassen, dass durch das folgende


.:_ Programm Anderungen an diesem Computer
vorgenommen we1den?

ProgRmmname arduino-1 .0.5-r2-windows.exf


V<rifaitrtor H•rausgobor. Arduino llC
Datfiur<prung: Festplatte auf diesem Computer

G Det?Jifs an.Wgen , , Ja : ,, Nein

Anzeigezeitpunkt für die Ben~cbrichtiqungen ändern

Abbildung 4.29 Windows warnt vor Änderunge n am Com puter.

Damit die Software installiert werden kann, müssen Sie die Lizenzbedingungen durch
Klicken auf I AG REE akzeptieren.
~ Piease review the l rense agree=nt before lnst2111ng Arduino. If you
W &Cl!f>l oll terms of the agreement, dick I l>qee.

GMJ LESSER GENERAL PUBilC UCENSE

Versior1 3, 29 liXle :1007


Copyright (C) :1007 free SOftware Foundo!ion, IJ1c. <ht1D:llt.f.rxgl>

Everyooe 1s permitted ID copy and dlstr'bute 1/efbatim CDpies of !hls license


downent, but<hangi1g II ls not allowed.

!Ws v<r!ilkn of the GUJ Lesser General Pubk LJcense lncorpora~ the tenTI9
ond coodllons ofversion 3 of the GUJ General PLbli< L.lcense, ~ t:ed
by the addillonal per1!issions lst:ed below.

N~,.; ~tinst...aß5y;temv2.46
Ii I />qee II
Abbildung 4.30 Die Li zenzvereinbarung der Ardui no-Software

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

0 Instal USB dtiver


0 Create St»rt Mer<J shortDJt
0 Create Desktop shor trut
0 A>so<iate .ino flies

a.x.l N•Jilsoft ln<tall System v2. 46

Abbildun g 4.31 Die unterschiedlichen Insta llationsoptionen

Bestätigen Sie das Zielverzeichnis, in dem die Software installiert werden soll (siehe
Abbildung 4.32), durch Klicken aufiNSTALL
--
00 . X

~ fol~er. Ta Instoll n a clfferont


Selup willinstaU Ardulno 1n the fullowtng
W foloer, cki<Bro...., and selectonother folder . C1ldc Instal to start the
m!Biauon.

Brome... 11

Spoce~q..trO<J : 25"1.5MB
Spoce avlllahle, ~~. 1GB

Abbildung 4.32 Gleich startet die In sta llation !

81
4 Die Arduino-Piattform

Der Fortsch ritt des Installationsvorgangs ist in Abbildung 4.33 dargestellt.

m X I'
I

<Bot\.

Abbildun g 4.33 Die In st all at ion im vollen Gange

Kurz vor Ende des Installationsvorgangs der Arduino-Software startet automatisch di e


In stallation des Treibers (Gerät esoftware) für lh r Arduino-Board (siehe Abbi ldung 4.34).

Arduino Setup: lnstalling - Cl

<Back Oase

Name: Arduino USB D<Wer


Herausgeber. Arduino LlC

0 Softwarevon "ArdUino LlC" tmmer vertrauen lnstallierM Noch! on<tallieren

Sie sollten nur Treibersoflware von vertrauen.wurdigen Henu"'9ebem instalfieren.l!tiJ:


bnn tmam ..lft rrdffl Yfdchr Grutesoftworc btdcokrnlm imtalhrrt wc:rdrn Onn7

Abbi ldung 4.34 Hie r soll der Tre ibe r inst all iert werden.

82
Bestätigen Sie die Sicherheitswarnung aus Abb ildung 4.35 durch einen Klick auf IN -
STAL LI EREN .

Möchten Sie diese Gerätesoftware installieren?


Name: Arduino USB Driver
Herau•geber. Arduino LLC

0 Software von "Arduino LLC" immer vertrauen Nicht mstalfieren

Sie sollten nur Treibersoftwart von ve.rtrauenswtJrdigen Herausgebern installieren. Wte


kann fmgestelttweydcn welche Geratesoftware bedenkenlos mstaiJiert Ywro;jen lcann?

Abbildung 4.35 Sic herheitswarnung beim Hinzufügen des Tre ibers

Wenn die Installation wie in Abbi ldung 4.36 beendet ist, klicken Sie abschließend auf
(LOSE.

c- I I Julisoft Inst•R System v2.~6 <Bad !Ir ao.e - I

Abbi ldung 4.36 Die Installation ist fertig!

Glückwunsch! Sie haben erfo lgreich die Ar du ino-Software und den Treiber insta ll iert. In
Abschnitt 4.3.2 geht es für Sie n un weiter m it dem Start der Ardu ino-Software und der
Erläuteru ng ihre r einze lne n Elem ente.

Mac OS X

Unte r Apples Betriebssystem Mac OS ist die Installation der Arduino- oftware simpel.
Um sie herunterzuladen, b suchen Sie die Arduino-Projekt eite. 20 avigieren Sie dort

20 http://arduino.cc

83
4 Die Arduino-Piattform

zur Seite Dow LOAD. Unterhalb des Punktes ARDUINO !OE fi nd en Sie den Link MAc OS X,
den Sie ankl icken (siehe Abbildung 4.37).

Aiduino IDE
Arduino 1.0.5
Download Noxtsteps
Arduino 1.0.5 (rtlease notes), hosted by Google Codo: Getting Startod
NonCE: Ardulno Drivers havo been updated to odd support for Windows Reforonce
8.1, you an down Ioad the updated IOE (lll!rs&On 1.0.S·r2 for Windows) from Environment
tho dawnload links below. Examples
Foundahons
FAQ

- source

Arduino 1.5.6-r2 BETA (with support for


Arduino Yun and Arduino Due boards)
lf you have t he Ardui no Yun or Due you must down Ioad t he 1.5.6 verslon. Refer t o t he Yun gettlng started page, o r Oue
gettlng started page for specific details about those boards.

WARNING: verslon 1.5.6 may cause problems wlth the seri aJ monitor, the problern ls futed in verslon 1.5.6-r2 that can be
downloaded below.

WARNING: Thls software is a beta verslon, you may encounter bugs or unexpected behaviours. Piease discuss any issues
ln the Yun forum or Due fo ru m
Download

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

Der Down load besteht in der Regel aus einer ZIP-Datei. Diese wird in Ihrem Benutzer-
verzeichnis im Ordner Download gespeichert und in der Regel automatisch entpackt
(siebe 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 wi rd unter Mac OS nicht benötigt.

84

)S X,
4.3 Die Arduino-Software

fAVORITEH Freigegebener Ordner


!D marku.s Ände rungsdatum (;t<)k Hinzugtf\ii t am
~ Alle meine Dateien 17 .... 201J 20 19 208,4 MB Progr~mm Heute 13:13
I 'L...::;.._
Ar_d_ul_no
.......l
9 AirDrop
9 Bilder
Dokumente

Schreibtisch

Abbildung 4.38 Die heruntergeladene Software im Find er

fAVORITUI Freigegebener Ordner


!D markus .lnde.rungsdatum Grolle Art Hlnzugdwgl am
c:2 Alle meine Dateien oo Ardulno 17. Ma12013 20: 19 208,4 MB Programm Heute 13:13
9 Ai rDrop
G Bilder

:er-
ckt

Abbi ldung 4.39 In stallation der Softwareper »Drag & Drop "

:9).
Glückwunsch ! Sie haben erfolgreich di e Arduino-Softwa re installiert. In Abschn itt 4.3.2
geht es für Sie nun weiter m it dem Start der Arduino-Software und der Erlä ute rung ihrer
einzeln en Elemente.

85
4 Die Arduino-Piattform

Lin ux
Die nachfolgende Beschreibung i t für das Linux-Betriebssystem Ubuntu Version 14
gedacht. Ubuntu ist derzeit eines der einsteigerfreundlichsten Linu x-Betriebssysteme.
Falls Sie ein anderes Linux verwenden, schauen Sie auf der Webseite des Arduino-Pro-
jektes21nach, welche Anleitung für Ihr Betriebssystem die passende ist.
Unter Ubuntu erfolgt die In stallation der Arduino-Software wie nac hfo lgend beschrie-
ben- ein Download von der Arduino-Projektseite ist nicht erforderlich! Starten Sie als
Erstes, wje in Abbildung 4.40 gezeigt, das UBUNTU SOFTWARE-CENTER.

Abb ild ung 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ührungsze ichen) ein., um nach der Software zu suchen (siehe
Abbildung 4.41).

Sobald die Arduino-Softwa re im Software-Center gefunden wurde, wird sie, wie in Abbil-
dung 4.42 dargestellt, angezeigt. Kl icken Sie auf INSTALLIEREN, um die Installation der
Software zu starten.

21 http://arduino.cc

86
· . · 4.3 Die Arduino-Software

- \Jti!JfttuSortwart•C t ftttr

~ . Q.G ;: ~
,~,_.~,.-,..•• .. ·.:;. ......,, ....W l•bd'wU

®
--
Unsere Lieblinge
Erkunden Sie unsere Favoriten

-
---_.,_
.....
,._ 6, ...... --· --
.....
.-·-...
(jj) - -
.......
......... Wia,.._
1. T....

~-·~

-.-........ -- - -
1.1\SU'

. .. L . .
~
....
"'
....... .
Wllllli:l:f"-

........
**
~)A'

..........
U5.U.OO ...,,..........
~&T.-11:5
""'"

---·-
--·- ..- - -
k l!btWII'Ut

-
Chrbd ~ h rtN.I-

·- - ~ ~~ .........
Thanm&.~.

*
'! '
Gul!r
[nbroOJ~.....,.

***** ~
,_ VLC• ...............

..-...,
. ...._
*•*** .... -----
•••
·-
***** c-11
Abbildung 4.41 Geben Sie in d iesem Suchfeld " Ard uino« ein.

JCij Llnt.Q' MaQ~trlotlll (Edlcl6n c:n &pM'Iol.) USSl.9S


. . La r.wntLJde~

~ ~':..:'t=94{E.dld6nt'n &J)it\oiJ USS~9S

II ~sUEsplrltolhT"-e•l1
~IMe·~ ..... Sol'twhUW.

~WIRnhUIEspbltoUvre•'ZI
U !ttttuM.e~..,,~lMI

Abbildun g 4.42 Ein Klick auf >> Insta lli eren« sta rtet die In stallati on .

87
4 Die Arduino-Piattform

We n n Sie unter Linux Soft ware insta llie ren wollen, müssen Sie Ihr Anmeldepa ss wort
eingeben, um sich zu legitimieren (siehe Abbildung 4.43 ).

"' Legitimieren

Sie müssen Ihr Passwort eingeben, um Software zu installieren


oder zu entfernen.
Eine Anwendung versucht eine Aktion auszuführen, die Privilegien erfordert. Eine
Legitimation Ist erforderUch, um diese Aktion auszuführen.

Passwort:

I> Dobl l ls

Abbrechen

Abbildung 4.43 Geben Sie hier Ihr Anme lde passwort ein.

In Abbildung 4.44 ist der Installationsvorgang dargestell t. Sie be kommen nichts weiter
davon mit- alles passiert unsichtbar im Hintergrund.

Espedal Ha rd ~ f t: • Llnwt Magaztnr {Edl<.i6n en & panol) U5$3.95


lr«l.lcJ6nll N6JIM.~PrJ~ COY:&

U5$3.95

US$l.95

US$ l 95

US$3.95

US$3.95

Abb ildu ng 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.
4.3 Die Arduino-Software

EspedallilfdWate • Unux M1g.1ZIM (Edld6n ft1 Espil'cll) us.s:us


hDDin41"''cbno, R.I!DbtlryP'IJJroUlto:W

I
~ Utu Mf91l11W90(Editibnrn&pll'101)
t.-.. UEarcadtl.llul

Utu Mog.ulne91 (tdld<lnenEspoJ\oQ


UEttfteildtlna

t.ltu ,..g.ulne 93 (tdld6nenEspotool) US$l.9S


UEJtnoldelt!UI.

uss:us

Rf"•'bUIBplntol,lvreiZ1
flf'ldihrw«~dnSoltwnlM•

Abbildung 4.45 Geschafft! Die Instal lation ist abgeschlossen.

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

Abbildung 4.46 Di e in sta lli erte Arduino-Softwa re (IDE)

89
4 Die Arduino-Piattform

Falls das Symbol dort nicht erscheinen sollte, klicken Sie, wie in Abbildung 4.47 gezeigt,
auf das Ubuntu-Dashboard- ymbol und suchen nach der Softv.rare. Sie wird nach Ein-
gabe der ersten Buchstaben von })Arduino « sofort angezeigt und kann späte r von dort
gestartet werden.

Abbildung 4.47 Die Ardu ino-Sofuvare im Ubuntu-Dash board

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. Jn
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-
dung4.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.

f
1-, '\~~I(;:;;\~~--
>

1 Aldulno "b.no'lll/ ATnwg.~l2.aon J&v/llyustMr\.:li~A5005SPZ

Abbildung4.48 Die Arduino-Softwa re beim ersten Start

4.4 Die Entwicklungsumgebung

Noch eine Anmerkung zu den hier künftig verwendeten Begrifflichkeiten: Dieses Fen s-
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 e in mal von a nderen !DEs gehört, wie zum Beispiel Visua l Stu-
dio, Xcode oder Eclipse. Dies sind all es !DEs für verschiedene Programmiersprachen und
Anwendungen. Die Ardu ino-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 sage n. Diese sind in der Arduino-Software vollständig integriert.
Sie müsse n also nicht extra spezie lle Compi ler insta lli eren und pfade setze n. Das macht
die Software all es für Sie unsichtbar im Hintergrund .

91
4 Die Arduino-Piattform

4.5 Die Software im Detail

Hier erhalten Sie noch ein paar Hinweise, wie die Arduino-Soft ware aufgebaut ist und
was die einzelnen Menüpunkte bedeuten. Sie erfahren außerde m, wie Sie die Software
mit fert igen Beispielen unterstützt.

4.5.1 Ändern der Sprache

Sollte die Arduino-Software aufihrem Computer nicht auf Deutsch starten, können Sie
die Sprache in den Ein stellungen (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.
Einsttl lungm

Skeo!cbboak Spticht!.rorl;
..:.l:::lh:::;
"'::.;/m>rl<
="::.'/~D:::
o<;:;
u.,.."
=":!.:
l'"
;:;
<d::;
ul:::
no_ _ _ _ _ _ _ _ __.J! ( Durrhsucht.n )
Editnr langul.gt · ~ttm o~ra.ult M(bM~tigt d nVl Neustatt vo n Ardulno)
IAnbic);",.so f
Edi:or Sd uift;rti Ar.agonH (Aragor)t.U) .W'Oll Ard.u.ino)
C..t>Jl(C.121l)
lws!llhrl i<M Au 111104':!1: ~·f:l:) ng Q uptoad
~Cc.de t!.Kl'l tJ HJ:PSC (Chinese Tradltionaf)

2 ÜlMietl Edt~ ~==~~Ht~ds)


~ Btim St.uten En;:fhh (&,glidt)
EJ!sti C&ton lan}
~ Si:ttchdam1r Plllplno (Plßpiaol ~tuaJi1lrnn (.pdl! -> .ino)
a.lthr &!!:st~ Iu~ Franr;W tfnn,&it:)
/Us~{rnvi:us / GaJego {GA.Itgo)
1-"•..n
r&W ~~iten, · ~~~ ~ryv,d)

'=-- ---l' =:~:)


- Batlau tndonu: la (lndont:slan)
lto\llano 01-aJiiJ\o)
B'l'lli(B:f'll"l
IROI(Xorul\)
l..a.t\'idu {L.a.t'Yidu Yi.locW
Ue luvlt~ Ka.lb.a (Uthuardna n)
~(Mvitlh l)
No r~ k (}l orweglan)

<..-..u!-..u
.kzyk Pollkl (Polilh)
Pcttvgub G"ort ugueu- ßruj f)
F'tirtuguls (Pcnu;utu -Portugal)
Romlnl (UmN Romll\l)
Pt!tKKK (Rllutan)
ü~ol{&p11\ol}
~(Tamil)

Abbildung 4.49 Ändern der Spracheinsteilungen der Arduino-Software

Damit diese Än derungen übernommen werden, muss die Ardu ino -Software einmal
beendet und neu gestartet werden.

4.6 Die grafische Oberfläche im Det ail

Nun ein paar Erläuterungen zur Programmoberfläche. Abbild u ng 4.50 zeigt das kom-
plette Fenster mit allen Symbolen (englisch: Jeans). Konkret haben die Symbole und
Bereiche des Fensters folgende Bedeutung :
4.6 Die grafische Oberfläche im Detail

.,_ überprüfen 0: Überprüft den Programmcode auf Fehle r


.,_ Upload 8: überträgt das fert ige Programm auf die Hard ware
.,_ Neu 8: Erzeugt ein neues , leeres Programm
.,. öffnen 0: Öffn et bestehende Programme
1> Speichern 0: Speichert das aktuelle Programm
.,. 0: Anzeige des Namens des aktuellen Programms
.,_ 0: Die installierte Version der Arduino -Software
.,_ 0: Aktiviert den seriellen Monitor
.,_ 0: Funktionen zur Nutzung der Tabs/Karteireiter
1> ~:Bereich zum Editieren
1> ~: Bereich zur Anzeige von Statusmeldungen
.,. G: Zeigt die Ze ile an, in der sich der Cursor befindet
1> I»: Zeigt das Arduino-Board und den aktuellen Anschluss an

Abbildung 4.50 Di e ei nze ln e n Eleme nte der GU I im Überb lick

93
4 Die Arduino-Plattform

+ Hinw ei s
St anda rdmäßig öffnet die Ard uino-Software beim Start immer das zuletzt verwendete
Progra mm. Bei m Schl ießen der letzte n noch offenen Datei beendet sich das Programm
- abe r davor warnt die Software Sie vorher.

4 .6.1 Beispiele innerhal b der Software

Wie id1 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 BIick in diese Beispiele, denn h ier
ist schon vieles als Grundlage vorhanden- und Sie müssen ja das Rad nicht immer neu
erfin den. Falls Sie bereits etwas Erfahrung im Programmieren haben, können Sie sich
natürlich auch jetzt die einzelnen Be ispiele genauer ansehen.

Bearbe.it•n Sketch Tools Hilfe


Neu XN
Öffnen ... 310
Sketchbook
Beispiele

• OLI!asic:s
Schließen XW 02.Diglt.11
Speichern XS OJ.Analog
Speiehorn unte r.. . ~ XS 04.Communication
Upload XU OS .Control
Upload mit Programmer ~XU 06.Sensors
07.Display
Papierformat ~XP
085trings
Drucken XP
09. USO
l O.StarterKJt •
ArdulnoiSP

Adafrult_L.EDBackpack
TimetOne

EEPROM

Esplora

Ethern.t

Firmat:a

GSM

LlquidCrystal

Robot_Cont rol

RobotJ~ o tor

SD
MjJe1· •8 Kno b
Softw.ue5erlal .. *"IJ§M
SPI
Stepper
••
TFT

WIFI

Wlre

Abbi ldung 4.51 Die Ardui no-Softwa re ent hä lt za hlreiche Beispiel e.

94
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. Absch lie-
ßend haben Sie erfahren, wo Sie vie le fertige Beispiele finden . Damit haben Sie die wich-
tigsten Grundlagen, um in Kapitel7. »Los geht's!- Erste Praxis «, Ihr erstes Programm zu
schreiben.

95
r •••
Kapitel 5
Dle ~1el'te Wev~si-~H-
Kein ordentliches Basteibuch ohne Werkzeuge! Natürlich benötigen Sie zum Bau
Ihres Arduino-Roboters auch etwas Werkzeug. Und wie das Löten funktioniert, lernen
Sie ebenfalls in diesem Kapitel!

Werkzeug? Keine Sorge! Es sind keine speziellen Arbeitsgeräte notwendig- außer viel-
leicht einem Lötkolben. Aber auf diesen gehe ich in Abschnitt 5.6 genauer ein. Jetzt geht
es erst einmal um das Thema Verkabelung.

5.1 Fliegende Verdrahtung

Sie haben verschiedene Möglichkeiten, elektrische Bauteile »mal eben schnell << mitein-
ander zu verbinden, um eine Schaltung aufzubauen . Die Bauteile können fest in eine
Platine eingelötet werden, so wie es bei Ihrem fertigen Arduino-Board der Fall ist. Sie
können aber auch einfach mit Jumper Wires (siehe Abschnitt 4.2.3) lose aneinanderge-
steckt werden. Oder die Bauteile werden einfach direkt mit ein paar Le itungen (Drähten)
aneinande rgelötet-ohne Platine und manchmal auch fast ohne Drähte wie in Abbil-
dung 5.1.

Beim Basteln und auch bei professioneller Hardwareentwicklung spricht man vonfester
Verdrahtunq oderfliegender Verdrahtung.
Bei der fliegenden Verdrahtung hängen die Bauteil e ohne Platine meistens etwas »i n
der Luft((, dah er der Name. Diese Technik der provisorischen Verkabelung geht recht
schnelL und man benötigt nicht viel dafür. Der Nachteil ist dabei, dass zum ein en die
Bauteile nicht mehr so le icht wiederverwendet werden können. Denn sie wurden für die
fliegende Verdrahlung oft schnell aneinande rge lötet und können aufgrund von Löt-
zinnresten oder verbogenen Anschlüssen meist nicht mehr so gut durch fert ige Plati-
nen gesteckt werden . Ein weiterer wesentlicher Nachtei l der fliegenden Verdrahtung ist,
dass man sehr schnell sogenannte kalte Lötstellen erzeugt. Bei diesen Lötstellen ist die
Verbindung nicht sauber hergestellt und kann sich durch mechanische Belastung
(Wackeln) leicht lösen. Vor allem aber haben diese ka lten Lötstellen oft keinen richtigen

97
' . ( ~ ' . ' \

5 Die kleine Werkstatt . : ': , .

Kontakt bzw. verlieren ihren Kontakt nach einiger Zeit! in so einer Verdrahtung dann
einen Fehler zu finden, ist nicht sehr einfach. Aus diesem Grund spricht zwar die Schnel-
ligkeit im Aufbau für diese Art der Verdrahtung, die Fehleranfälligkeit aber grundsätz-
lich dagegen. Greife n Sie lieber zu Steckplatinen. die n icht viel kosten un d mehr
Möglichkeiten bieten (siehe Abschnitt 5.2 ).

Abbildung 5.1 Fliegend e Verdrah t ung ei nige r Ba utei le

5.1.1 Vor- und Nachteile der fliegenden Ve rdra htung

II II II II II II II II II II II II II II II II II II
Übersicht
+ schnell gemacht
+ keine Pl at ine
- erzeugt hctufig kalte Lötstellen
- fehleranfällig
- Bautei l e schwierig wi e derverwendbar
2
· ' ' 5.2 Steckplatinen

5.2 Steckplatinen
Anstell e der fliege nd en Verdrahtung haben sich sogenannte Steckplatinen (englisch
Breadboards) durchgesetzt (siehe Abbildung 5.2). Diese Platinen werden auch Prota-
boards genannt, da man mit ihn en einfach und schnell einen Prototyp einer Schaltung
zusam menstecken kann.

Abbildung 5.2 Eine klass ische kleine Steckplatine

Das Besondere an Steckplatinen ist, dass zum Aufbau einer Schaltung die Bauteile nicht
miteinander verlötet werden müssen, sondern durch simples Stecken elektrisch mitein-
ander verbunden werden . Wie f unktioniert das ? Um dieses leichter zu verstehen,
schauen Sie sich doch einmal die in Abbildung 5.3 aufgebaute Schaltung genauer an .

99
5 Die kleine Werkstatt

...... ..............
... ............... ... ......... .................. ... ... ......
. . ... . . . . . . . . . . . . . . .
.......... .......... .. ... ... ..
Abbildung 5.3 Eine sim ple Schaltung auf eine r Steckplatine 1

Wie Sie sehen, sind in Abbildung 5.3 vier Batterien mit einer roten LED, einem Wider-
stand sowie einer blauen und gelben Leit ung (Jumper Wire) verbunden. In Abbildung
5.4 seh en Sie die Steckplatine noch einmal vergrößert und um 90° gedreht dargestellt,
damit Sie das entscheidende Merkmal der Steckplatine besser erkennen können.

Abbildung 5.4 Die Steckplat ine im Deta if2

Vielleicht haben Sie bereits die dezent grünen Linien in der Abbi.ldung bemerkt. Diese
stellen die >>internen Leitungen« der Steckplat ine dar, die die Löcher bzw. Buchsen auf

I Abbildung ersteUt mit Fritzing


2 dto.

100
. ·... · ', '·'·,·:· · . , ' · · 5.2 Steckplatinen

unterschiedliche Weise miteina nder verbinden: Rechts un d links außen auf der Steck-
platine sind all e Löcher senkrecht miteinander verbunden - auch erkenn bar an den dün-
nen roten und bl aue n Linien. Umgekehrt verhält es sic h m it den Löch ern (Bu chsen), die
ga nz unten m it den Buchstaben A bis J besch riftet sind : D.iese Reihen sind horizonta l
miteinander verbunden.

Abbi ldung 5.5 Der techn ische Stromfluss auf einer Steckp lati ne3

Das bedeut et, das s in diesem Beispiel der Strom in der Schaltung wie folgt fließt (s ieh e
Abbildung 5.5) : von der roten Leitung »s enkrecht hoch « zur gelben Leitung und durch
diese hind urch, dann »waagerecht « von Buchse J »nach links « zum Widerstand in
Buchse F. Von dort fließt er durch den Widerstand weiter zum unteren Anschluss der
roten LED, durch die LED hindurch, weiter >>waagerecht nach links« zur blauen Leitung.
Und zum Schlu ss fließt er durch die blaue Le itung und dann innerhalb der Steckplatine
»senkrecht herunter<< zur schwarzen Leitung. Alles klar?

Mit einer Steckplatine haben Sie in Sekundenschnelle Verbindu ngen hergestell t oder
entfernt. Achten Sie aber dara uf, das s di e Anschlüsse der elektronischen Baut eile oft-
rnals unterschiedliche Breiten haben. Die meisten Teil e, wie LEDs, Widerstände oder ICs
passen mit Leicht igkeit in d ie Buch se n hinein. Oftmals haben aber zum Be ispiel Dioden
sehr dicke »Beinch en «. Sobald Sie merken, dass ein Baute il nicht mit leichtem Druck in
die Löcher der Steckplatine passt, versu chen Sie es nichtm it Gewalt! Das entspre chende
Loch würde ausleiern und damit für normale Bauteil e nicht mehr passen bzw. den Ko n-

3 Abbildung erste llt mit Fritzing

101
5 Die kleine Werkstatt

takt nich t mehr einwandfrei herstellen. Greifen Sie bei solchen Baute ilen auf Kroko-
klen~men4 zurück.

5.2.1 Vo r- und Nachteile der Steckp latinen

II II II II II II II II II II II II II II II II II I
Übersicht
+ Verbindungen können in Sekunden heroestellt oder
oeändert ••erden
+ kein Löten notwendig , alles •~ird oesteckt
+ kein Risiko kalter Lötstellen
+ Bau te ile können \Üederve r wendet Herden
können ausleiern
Scha l tun g en werden schnell unübersichtlich

5.3 Werkzeuge

In diesem Abschnitt erfahren Sie, welche Werkzeuge Sie zum Bau Ihres Arduino-Robo-
ters benötigen und welche zwar hilfreich, aber nicht zwingend notwendig sind. Wenn
Sie wollen, schauen Sie beim Lesen gleich nach, ob Sie so ein Werkzeug h aben, und
haken es entsprechend im Buch ab oder markieren es im E-Book.

5.3.1 Sicherheitsbrille

Das wichtigste Utensil bei einigen Arbeiten ist die Sicherheitsbrille. Sie ist jedoch bei den
meisten Arbeiten für Ihren Roboter nicht notwendig. Aber sobald Sie zum Beispiel einen
Draht abkneifen oder mit einem heißen Lötkolben hantieren, kann auch mal im wahrs-
ten Sinne des Wortes »etwas ins Auge gehen «. Ihr Augenlicht ist jedoch das kostbarste
Gut, das Sie sich immer bewahren müssen! Ich werde Sie bei der Montage Ihres Robo-
ters in Kapitel S, »Keine Schraube locker - Die Montage des eigenen Roboters«, darauf
hinweisen, wann Sie die Brille benutzen müssen.

4 http://de.wikipedia.org/ wiki/ Krokodilklemme

102
5.3 Werkzeuge

Abbildu ng 5.6 Eine Sicherheitsbri ll e kostet wenig und schützt!

5.3.2 Seit enschn eid er

Einen Seitenschneider wird verwendet, um Drähte oder Anschlüsse von Bauteilen (wie
zum Beispiel Widerständen) zu kürzen. Sie werden ihn verwenden, wenn Sie in Ab-
schnitt 7.5, ))Ich muss hier weg!- Ansteuerung von Motoren «, zum ersten Ma l einen
Motor mit Ihrem Arduino-Board ansteuern und dafür ein paar Drähte zurechtschnei-
den. Bei dünnen Dräh ten geht das zur Not auch mit einer alten Schere. Aber zum einen
geht das nur mit sehr dünnen Drähten, und zum anderen ist ein guter Seitenschneider
wirklich ei ne lohnenswerte Anschaffung.

Abbildung 5.7 Ein Se itensc hne id er

103
5 Die kleine Werkstatt

5.3.3 Abi so lierzange


Wenn Sie an die Motoren lhres Roboters jeweils zwei Drähte anlöten werden, müssen Sie
zuvor die Drähte von ihrer Kunststoffummantelung (Isolierung) befreien. Dazu gibt es
verschiedene Möglichkeiten. Viele bevorzugen dafür eine Abisolierzange (siehe AbbiJ·
dung 5.8). Diese stellt sich automatisch auf den Kabeldurchmesser ein und isoliert das
Kabel ab, ohne innenliegende Adern zu beschädigen. Viele Bastler nutzen dafür auch ein
Kabelmesser. 1it diesem wird die Isolierung des Drahtes vorsichtig rund herum leicht
eingeritzt. Anschließend wird die Isolierung nach mehrmaligem Biegen der Ummante·
Jung an der Schnittstelle einfach mit der Hand abgezogen. Der schwierige Teil ist hierbei,
die Isolierung so we it bis auf den Dra ht d urchzusch neiden, ohne dabei die Adern zu
beschädigen. Wie so oft gilt auch hier: Übung macht den Meister. Wenn Ihre Drähte am
Ende ungefahr wie in Abbildung 5.9 ausseh en, haben Sie Ihr Ziel erre icht.

Abbi ldun g 5.8 Eine Ab isol ierza nge für Drähte

Abbild ung 5.9 Ab isolierte Drä ht e

104
Tatsache ist, dass es eine sehr hohe Zahl an Werkzeugen zum Ab isolieren gibt, abe r im
Hobbybereich jeder etwas a nde res bevo rzu gt. An statt ein es extra Kabelmessers tut es
sicher auch ein altes Taschen messer oder mit etwas Übung eine Schere. Probieren Sie in
Abschn itt 7.5 einfach au s, womit es Ih ne n am leichtesten fa llt . Leih e n Sie s ich vielleicht
erst einmal ein Werkzeug, bevo r Sie sich selbst teures Spezialwerkzeug ka ufen- auch
wenn viele ihr We rkzeu g nur un gern verleihen , weil nicht jed er es so beh andelt , als wäre
es das eigene.

5.3.4 Lötkolben/Löt station, Löt zinn und Schwamm


Um es gleich vorwegzunehme n : Sie müssen für den Ba u Ihres Ardu ino-Roboters ledig-
lich vier Drähte an zwei Motore n löte n . We n n Sie also je m an den kennen, de r eine
Lötstation (sieh e Abb ildung 5.10 ) ode r einen Lötkolben (siehe Abb ild u ng 5.11) besitzt,
müssen Sie sich dieses We rkze u g nicht ext ra ansch affen .

Abbildung 5.10 Ei ne profes sion ell e Lötsta tion mit digita ler Regelu ng 5

5 Bild: Weller Tools GmbH.

105
5 Die kleine Werkstatt

Einsteiger-Lötstationen bekommen Sie bereits für unter 50 Euro. Und bei Geräten für
diesen Preis kö n nen Sie sogar die Löttemperatur digital regeln - im Unterschied zu
einem Lötkolben, der immer die gleiche Temperatur hat. Außerdem haben die meisten
Lötkolben eine viel zu hohe Temperatur bzw. Leistung. Damit ist das Löten von elek·
tronischen Bauteilen oft kaum möglich, da diese sehr empfindlich gegen hohe Tempe-
raturen sind.

Abbildun g 5.11 Ein einfach er Lötkolben kann die Temperatur nicht regeln.6

Lötz inn

Zum Herstellen der Verbindung zwischen Draht und Bauteil benötigen Sie etwas Löt·
zinn (siehe Abbildung 5.12). Dieses ist heute üblicherweise bleifrei und enthält außer-
dem bereits ein Flussmittel, das das Lötzinn beim Löten an die richtigen Stellen Jließen
lässt, wenn es erhitzt u nd damit flüssig ist.

Abbildung 5.12 Bleif reies Lötzi nn

6 Bild: WellerTools GmbH


' • . ' ' " . 5.3 Werkzeuge
' Jl' -

Schwa mm/Messingwol le
Während des Lötens sollten Sie die Spitze Ihres Lötkolbens gelegentlich reinigen, weil
das seine Lebensdauer erheblich verlängert. Hierfür gibt es spezielle Schwämme (siehe
Abbildung 5.13). Diese werden leicht feuc ht gehalten (nicht tropfnass!), und das über-
schüss ige Lötzinn wird an ihnen von der Lötspitze im heißen Zustand gelegentlich
abgestreift. Damit nach diesem Reinigungsvorgang mit dem Schwamm die Spitze des
Lötkolbens nicht so schnell oxidiert, empfiehlt sich zusätzlich Messingwolle. An dieser
wird die Spitze nach Lötvorgängen ebenfalls kurz im heißen Zustand abgestreift. Das
mag jetzt alles sehr aufwendig klingen. Sie können mir aber glauben, dass es nur wenige
kurze Handgriffe beim Löten sind, die Ihnen Ihr Werkzeug durch lange Lebensdauer
danken wird. Ich benutze noch heute meine erste, 20 Jahre alte professionelle Lötsta-
tion und habe dabe i die Lötspitze nur einmal austauschen müssen.

Abbildun g 5.13 Ei n Schwamm mit Ha lter zu m Reinige n de r Löt spitze 7

Löten

Wie das Löten gen au funktioniert, lerne n Sie in Ab schnitt 5.6.

7 Bild: Weller Tools GmbH

107
5 Die kleine Werkstatt ·

5.3.5 Messgerät (optional)


Für den Bau Ihres Arduino-Roboters benötigen Sie ke in Messgerät. Aber vielleicht wer-
den Sie viel Gefallen am Basteln mit Elektronik finden, und ein Messgerät ist dabei in
vielen Situationen sehr hilfreich. Wenn Sie zum Beispiel später mit Ihrem Arduino-
Board eine LED ansteuern wollen, können Sie mit einem Messgerät feststel len, ob am
Ausgang des Arduino überhaupt eine Spannung »herauskommt« (anliegt) . Es könnte ja
sein, dass die angeschlossene LED defekt ist In diesem Fall würden Sie die Ursache
schnell finden und die LED austauschen. Messgeräte gibt es in nahezu allen Preisklas-
sen, von zehn bis vielen Tausend Euro. In Abbildung 5.14 sehen Sie ein recht einfaches,
etwas in die Jahre gekommenes Messgerät. Abbildung 5.15 zeigt die modernere Vari-
ante, die den Messbereich automatisch einstellt, sich per USB-Schnittstelle aus lesen
lässt und Spannungen in ihrem Display sogar grafisch anzeigt. Bevor Sie hier voreilig
viel Geld ausgeben, lassen Sie sich ausgiebig beraten, oder suchen Sie im Internet nach
entsprechenden Empfehlungen. Für Einsteiger reichen günstige Messgeräte lange Zeit
vollkommen aus !

Abbildung 5.14 Ein einfaches ält eres Messgerät


, 5.3 Werkzeuge

Abbi ldung 5.15 Ein moderneres Messgerät mit USB-Schnittste lle

5.3.6 Feuerzeug

Vielleicht erscheint es etwas sinnbefreit, hier eine Abbildung eines Feuerzeugs aufzu-
nehmen. Es soll Sie aber daran erinnern, das s Sie zum Bau Ihres Roboters ein Feuerzeug
benötigen. In Kap itel 8, »Keine Schraube locker - Die Montage des eigenen Roboters «,
werden Sie es am Schrumpfschlauch zur Herstellung einer Isolierung verwenden.

Abbildung 5.16 Ein Feuerze ug

109
5 Die kleine Werkstatt

5.3 .7 Sc hlitzs chraube ndreher, 2 bis 3 mm breit

Um die Drähte vo m Motor an das Motor Shie ld Ihres Roboters anz uschließen, benöti-
gen Sie einen kleinen Schlitzschraubendreher (siehe Abbi ldung 5.17 ). Die Spitze des
Schraubend reh ers sollte un gefä hr zwei bis drei M illim eter breit sein.

Abbild ung 5.17 Ein kle iner Schl it zschraubendreher

5.3.8 Sonstige We rkzeuge (o pt iona l)

In diesem Abschnittlis te ich noch ein paar Werkze uge auf, die ebenfalls n icht zwingend
notwendig, aber d urchaus hilfreich sind.

Spitzza nge/Fiachza nge


Ein ebenfa ll s nützliches Werkzeug .i st d ie Sp itzzange oder Flachza nge. Mit beiden kön-
n en Sie zu m Beispiel Anschlü sse von Wide rständ en in di e gew ünschte Form biegen
oder eine klein e Schraubenmu tte r fes th alten . In Abbil du ng 5.18 seh en Sie eine kl eille
Spitzzange, wie sie im Elektronikbereich h äufig verwendet wird . Sie unterscheidet sich
von einer Flachzange lediglich dadurch, dass sie spitz zuläuft und man mit ihr leichter
in schwierig zugängliche Stellen g reifen kann.

Abbildung 5.18 Ein e Spitzzange

110
5.3 Werkzeuge

Biegeleh re
Ein oftmals untersc hätz tes We rkze ug fü r unter ein en Euro ist die Biegelehre {siehe
Abbildung 5.19 }. Mit ihr kön nen Sie Bauteil e wie Wid erstä nde oder Dioden exakt und
gerade auf das passende Rastermaß für Platin en zu rechtbiege n.

Abbild ung 5.19 Eine Biege lehre zum Biegen von Widerstände n & Co.

Pinzette
Egal ob Sie mit sehr winzigen SMD-Bauteilen zu tun haben oder ob Ihnen eine kleine
Schraube an ei ne schwer zugängl iche Stelle gefallen ist, eine Pinzette hilft immer weiter.
Die in Abbildung 5.20 unten dargestellte Pinzette ist eine sehr fei ne Ausführu ng und
auch gut für SMD-Ba ute il e gee ignet . Man bekommt sie günstig auf dem Flohmarkt, wo
gelegentlich ge brauchte Operationsbestecke verkauft werd en. Es mu ss aber nicht gleich
eine so fe ine und damit auch empfi ndlich e Pinzette sein. Die einfache Ausfü hrung
reicht oftmals völlig aus.

Abbildung 5.20 Ei ne ei nfa che und eine Profi-Pin zette

111
5 Die kleine Werkstatt

»Dritte Hand« bzw. »helfende Hand«


Dieses nützliche Werkzeug hat irgendwie keinen richtigen Namen. Es ist als dritte Hand
oder helfende Hand « bekannt und sollte bei niemandem im Ha ushalt fehlen, der geie·
gentlieh lötet (siehe Abbildung 5.21). Es kostet nur wenige Euro und ist sehr hilfreich
zum Halte n vom Platinen, Kabeln oder Steckern beim Löten . Sie können damit zum Bei·
spiel sehr leicht in der linken »Hand« ein Bauteil einklemmen und in der rechten
»Hand« ein anzulötendes Kabel. Dann haben Sie Ihre beiden Hände frei für Lötzinn und
Lötkolben.

Abbildu ng 5.21 Praktisch zu m Ha lten von Platinen: die »dritte Hand «

Lupe

Als letztes Werkzeug kann ich dem einen oder anderen noch eine Lupe ans Herz legen
(siehe Abbildung 5.22). Die Bauteile und deren Beschriftungen werden heute immer
kleiner, und die Augen werden ab einem gewissen Alter leider immer schlechter. Hier
helfen eine gute Beleuchtung und der Griff zur Lupe.

112
5.4 Kabel verbinden oder isolieren

Abbildung 5.22 Eine einfache Lupe

5.4 Kabel verbinden oder isolieren


Neben den in Abschnitt 5.3 vorgestellten Werkzeugen gibt es noch paar weitere Teile
und Tätigkeiten. die Sie zum Basteln kennen sollten. Diese möchte ich Ihnen im Folgen-
den kurz vorstellen.

5.4.1 Kabel verbinden

Es gibt viele Verfahren, um zwei Kabel miteinander zu verbinden. Sie können Kabel zum
Beispiel mit Lüsterklemrnen 8 verschrauben oder auch mit Steckbrücken einfach anein-
anderstecken (siehe Abschnitt 4.2.3). Ersteres stellt für den Leiter innerhalb des Kabels
eine erhöhte mechanische Belastung dar und kann darum nicht beliebig oft wiederholt
werden, ohne das Kabel irgendwann zu kürzen und neu abzuisolieren.

Abbildung 5.23 Ein e Lü st erk lem me zum Verbi nden von Kabe ln

8 Lüster ist ein sehr altes Wort für Kronleuchter. Und obwohl man heute sicher weniger Kronleuchter
anschließt, heißt die Klemme noch immer so (siehe auch http://de.wikipedia.org/ wiki/ Lüster-
klemme).

113
5 Die kleine Werkstatt

Sie können Kabel aber auch einfach miteinander »verdrillen «. Das bedeutet, dass Sie die
abisolierten Enden wie in Abbildung 5.24 um go• versetzt aneinanderhalten und dann
fest miteinander verd rehen. Diese Art der Verbindung hält zwar nicht ewig, aber »auf
die Schnelle« sind damit aufeinfache Art Kabel miteinander verbunden.

Abbildung 5.24 Verdrillte Kabel

I• Vorsicht: Leichte Verletzungsgefahr!


Sei n Sie bitte vorsichtig, wen n Sie die im Baste ibereich üb li che Litze 9 verd rille n! Diese
besteht aus vielen sehr dün nen Ei nzeldrähten, die sehr spitz sind. Beim Verdrillen ka nn
es leicht pass ieren, dass Sie sich mit einem der winzigen Einzeldrähte- wie mit einer
Na del- in die Fingerkuppe stechen.

Isol ierband
Sie sollten selbst verdrillte oder verlötete Kabel immer isolieren. Denn schnell kann es
passieren, dass sich ein nicht isoliertes Kabel und ein anderes Kabel oder ein Pin auf einer
Platine versehentlich berühren - und schon haben Sie einen Kurzsc hluss oder eine zu
hohe Span nung an einer Stelle, wo sie nicht hingehört. Ziehen Sie also zum Isolieren den
in Abschnitt 4.2.3 beschrieben Schrumpfschlauch über die offenen Kabelenden, oder
verwenden Sie Isolierband (siehe Abbildung 5.25). Es ist vielseitig verwend bar und in
jedem Baumarkt günstig erh ältlich. Die beste und sicherste Möglichkeit zum Verbinden
von Kabeln ist im Hobbyelektronikbereich immer noch das Verlöten von Kabeln.

9 http://de. wikipedia.org/ wiki/Litze_ (Elektrotechnik)


· 5.5 Platinen

Abbildung 5.25 Iso lierband

Kabelbinde r
Kabelbinder sind aus dem Basteibereich eigentlich n icht meh r wegzudenken (siehe
Abbildung 5.26 ). Auch wenn diese kleinen Helfer Einwegteile sind, so können Sie schnell
und einfach Kabel damit bündeln, sie irgendwo »festzurren « oder anderweitig Teile
aneinanderb inden.

Abbildung 5.26 Kabelbind er kann ma n immer gebrauch en.

5.5 Platinen

Dieser Abschnitt beschre ibt Pla tine n, di e Sie n icht für ihren Robote r be n ötigen! Ich
möchte Ihnen aber hier de nnoch einen kleinen ti efe rgeh ende n Einbli ck in die Welt des
Basteins geben. Wen n Si.e später eine Sch altung au s i.gen e n Ba uteil en dauerhaft m itei-

115
5 Die kleine Werkstatt ,

nander verbinden wollen, kö n nen Sie dazu Lochrasterplatinen verwenden. Anders als
beim losen Stecken von Bauteilen auf einem Steckbrett werden hier die Bauteile dauer-
haft eingelötet und m it den Leiterbahnen und zusätzlichen Leitungen auf der Platine
verbunden.

Abbildung 5.27 Lochrasterplatinen zum Ein löten von Bautei len

Lochrasterplatinen gibt es in verschiedensten Ausführungen . Der Vorteil dieser Plati-


nen ist, dass Sie schnell eigene Prototypen aufbauen können und diese lange Zeit stabil
verwendet werden können. Außerdem kann man sie so auch besser transportieren oder
montieren. Di e lo sen Schalt ungen auf den Steckplatinen sind a ufgrund ihrer Instabili-
2
· 5.5 Platinen

tät nur l'ür den stationären Einsatz geeignet. Des Weiteren geht es in der Regel schneller,
so eine Platine »mal eben schnel l zusammenzu löten «, als mit einer professionellen Lay-
out-Software wie Eag le10 eine eigene Platine herstellen zu lassen. Ein Nachtteil bei die-
ser Alt von selbst gelöteten Plat inen ist, dass sie schnell unübersichtlich werden
können und Lötbrücken - also unerwünschte kleine Lötverbindungen zwisch en zwei
Lötpunkten- oft schwierig zu findens ind (siehe Abbildung 5.28 ).

Abbildung 5.28 Unterseite einer handge löteten Lochrasterplati ne

Aber lassen Sie sich nicht durch das scheinbare Chaos auf so einer Platinenunterseite
abschrecken. Ich setze solche handgelöt eten Platinen auf meinem eigenen Roboter seit
Jahren ein, ohne dass Fehler auftreten.

Falls Sie sich mehr für das Erstellen von »richtigen « ind~striell erstellten Platinen inte-
ressieren, dann kann ich Ihnen als Einsteiger auch die freie Software Fritzingll ans Herz
legen. Mit ihr können Sie recht einfach Ihre Schaltung am Computer auf einem Steck-
brett entwerfen, dann eine Platine daraus entwerfen und diese im Anschluss online
bestellen - zum Beispiel Ihr eigenes Arduino-Shield für derzeit nur 29 EUR. Übrigens:
Alle Abbildungen mit Schaltungen zum Aufbauen in diesem Buch sind mit der Fritzing-
Software entstanden.

10 llttp://de. wlkipedia.org/ wiki/ Eagle_(Software)


Ii htt p://Jritzing.org

117
5 Die kleine Werkstatt

5.6 Löte n

Um es noch einma l zu betonen: Sie mü ssen für den Zusammenbau Ihres Arduino·
Roboters nur bei einem einzigen Schritt löten. Viele haben noch immer großen Respekt
vor dem Thema Löten und trauen sich nicht so recht daran. Ich werde Ihnen in diesem
Abschnitt zeigen, wie einfach es ist. Sie könne n es überspringen, fa ll s Sie jemanden ken·
nen, der Ihnen bei Arbeitsschritt aus Abschn itt 7.5, »Ich muss hier weg! - Ansteuerung
von Motoren«, die Kabel an die Motoren Ihres Roboters löt et.

Alternativ nutzen Sie jetzt die Gelegenheit und erlernen diese neue Fähigkeit, die Ihnen
aufih rem weiteren Weg beim Basteln an vielen Stellen das Leben leichter machen wird.
Wenn Sie bereits löten können, auch gut. Überfliegen Sie diesen Abschnitt, und schauen
Sie, ob Sie alles richtig machen oder ob noch der eine oder andere Tipp für Sie dabei ist.
Viel Spaß dabei!

5.6.1 Was wird benötigt?

Wie ich bereits erläutert habe, benötigen Sie folgende Teile zum Löten:

II II II II II II II II II II II II II II II II II II
Checkliste

eine Lötstation (wenn möglic h diaital geregelt ,


siehe Abschnitt 5 . 3 . 4)
Lötzinn

~ eine Lochrasterplatine (siehe Abschnitt 5.5)


~ einen Schwamm und/oder t1essingwolle zum Re i nigen
~ eine feuerfeste Unterlage (alter Glas - oder
Metalltisch , Holzplatte)
~ e i n paar Drähte zum Üben

~ ein paar alte Bauteile zum Einlöten (zum Beispiel Widerstände)


~ eine Sicherheitsb ril le

~ einen Se i tenschneider

~ eine »dritte Hand/helfende Hand« (A l ternativ: etwas Tesafilm)


~ etv1as Geduld

Das ist auch schon alles, was Sie bra uchen. Alles bereitgelegt? Los geht's l
s

5.6.2 Wie geht es?


Löten ist kein »Hexe nwerk((. Bevor ich Ihnen aber genau erkläre, wie Sie Bauteile in eine
Platine einlöten, möchte ich Ihn en ein paar Grundbegriffe näherbringen. Sehen Sie sich
dazu Abbildung 5.29 ge nauer an.

0 Bauteil
E) Durchkontaktierung
0 Platine
0 Lötstelle
0 Lötpunkt
0 Anschlussbe in
0 Leiterbahn
Lötzinn

Abbildung 5.29 Die wichtigsten Elemente beim Löte n

Einseitige und doppelseitige Platinen


Wie Sie vielleicht schon bemerkt haben, gibt es Platinen, bei denen nur auf der Unter-
seite Leiterbahnen (Leitungen) aufgebracht sind, und solche, wo beide Seiten Leiter-
bahnen aufweisen. Diese werden entsprechend einseitige oder doppelseitige Platinen
genannt. Industriell herge stellte Platinen sind heute in der Regel doppelseitig. Bei sehr
professionellen Platinen, wie zum Beispiel der Grundplatine (englisch Motherboard) in
einem Smartphone, sind die Platinen aufgrund des geringen Platzes sogar mehrlagig
(engl. Multilayer). Das bedeutet, dass die Leiterbahnen sogar innerhalb der Platine in
acht oder mehr Schichten (eng!. Layer) verlaufen.
Jetzt fragen Sie sich sicher, wie die Verb indung zwischen diesen Schichten hergestellt
wird, damit der Strom überall durchJli.eßen kann. Hier kommen die sogenannten Durch-
kontaktierungen ins Spiel. Eine Durchkontaktierung können Sie sich wie einen h ohlen
Zylinder aus Metall vorstellen, der ab Werk durch ein Loch in der Platine gepresst wurde.
In Abbildung 5.29 sehen Sie eine Platine im Querschnitt, bei der das rechte Anschluss-
bein des Widerstandes durch eine Durchkontaktierung gesteckt ist und das linke nur
durch einen ganz normalen Lötpunkt - manchmal auch Lötauge genannt. Wie Sie in der
Abbildung sehen, ist der linke Lötpunkt nur an der Unterseite der Platine verlötet. Die
Durchkontaktierung auf der rechten Seite jedoch ist auf der Unter- und Oberseite der
Platine verlötet. Keine Angst, Sie müssen oder besser sollten solche Durchkontaktierun-
gen nicht auf beiden Seiten aufwendig einzeln verlöten - aber dazu später mehr.

119
5 Die kleine Werkstatt

Lötzin n
Das Lötzinn erfüllt beim Löten zwe i Aufgaben: Zum einen stellt es d ie elektrische Ver-
bind ung zwischen Leiterbahn oder Lötpunkt und dem Ba uteil her. Zum andere n fließt
das Löt zinn beim Erhitzen mit dem Löt kolben an die Anschlüs se der Bauteile oder in die
Durchkontaktierung. Es stellt dabei be im Erkalten eine mechanisch e Verbindung her,
die den Bauteilen Halt au f der Platine gibt- sie sozusagen »befestigt«.

Damit das Lötzinn einfacher an die gevrunschten Stellen fließen kann, ist es von innen in
der Regel mit Flussmittel gefüllt_Man spricht hier auch von einer Seele aus Flussmittel.
Und ganz nebenbei bem erkt: Damit das Lötzinn auf einer Platine nicht überall hinfließt,
sind Platinen überall, wo keine Leite rbah nen und Lötpunkte sind, m it sogenannte m Löt-
stopplack überzogen .

Es gibt verschiedene Arten vo n ElektronikJötzinn. Seit einigen Jahren ist Lötzinn in


komm erziellen Bereiche n bleifrei. Für private Zwecke ist bleihaltiges Lötzinn abe r noch
erlau bt und überall erhältlich. Bleifreies Lötzinn ist aufgrundseiner Zusammensetzung
fü r Einsteiger etwas schvvieriger zu verlöten. Ich empfehle Ihnen daher, entweder ))her-
kömmliches <( Lötzinn, das Blei enthält, zu nutzen. Dieses hat in der Regel den Aufdruck
Sn60Pb40 oder auch Sn60Pb38Cu2. Das bedeutet, dass die Zusammensetzung (Legie-
rung ) des Lötzinns wie folgt ist: 60 % Zinn {Sn} plu s 40 % Blei (Pb}, bzw. 38 % Blei (Pb}
u nd 2% Kupfer (Cu}. Alternativ n utzen Sie gesundh eitlich unbedenklicheres bleifreies
Löt zinn m it Silberant eiL Der macht es zwar teuer, aber dafür wieder leich ter z u verarbei-
t en. Auß erdem ersparen Sie sich so den Um gan g mit gesu ndheitli ch bedenklich em Blei.
Bleifreies Lötzinn mit Silber erkennen Sie an einer Besch rift u ng wie Sn95,8Ag3,5Cu0,7
(95,8 % Zinn, 3,5 % Silber (Ag). 0 ,7 % Kupfer).

I• Sicherheitshinweisel
Lötkolben und flüssiges Lötzin n sind extrem heiß ! Die Tempe rat ur ein es Löt kolbens
beträgt über 300 · celsius_ Die Gefahr, sich hieran zu verbrennen, ist al so sehr groß.
Beachten Sie daher unbedi ngt folgende Hi nweise, wenn Sie selbst löten wollen:
1. Ben utzen Sie eine feuerfeste Unterlage (z. B. ein altes Holzbrett oder eine Werkbank).
2. Passen Sie auf, dass niemand am Kabe l des Lötko lbens bzw. der Lötstation hängen
bleibe n kann -auch nicht Sie selbst.
3. Sorgen Sie dafür, dass der Lötko lben sicher liegt oder - noch besser - in einem geeig-
neten Halt er ist (siehe Abschnitt 5.3.4}.
4_ Und wenn der Lötkolben doch ei nmal Richtung Fußboden fällt: Ve rs uchen Sie nicht,
ihn reflexartig aufzufange n! Ha ndeln Sie schnell, aber achtsam.
5
5.6 Löten

s. Lassen Sie einen heißen Lötkolben niemals unbeaufsichtigt!


6. Belüften Sie den Raum ausreichend, um den Schadstoffgehalt durch die entstehen-
den Dämpfe so gering wie möglich zu halten.
7. Pusten Sie niemals auf die Lötste lle! Das geschmo lzene Lötzinn könnte wegspritzen
und Verbrennungen verursachen .
8. Tragen Sie eine Sicherheitsbrille (siehe Abschnitt S.3.4).

Wenn Sie mit einem Seitenschneider die »Beinchen « der eingelöteten Teile abkneifen,
können diese leicht durch die Gegend und damit in Ihr Auge f liegen! Gehen Sie daher
auch hier auf Nummer sicher, und beachten Sie fo lgende Regeln :

1. Kneife n Sie Teile immer nach unten, >> Richtung Fußboden «, ab.
2. Halten Sie die Teile fest, die Sie abkneifen wo llen. (Achtung: Diese sind vom Löten
event uell noch heiß!)
3. Trage n Sie eine Sicherheitsbrille I

Der Lötvorgang
Am einfachsten ist es, Sie versuchen zu Beginn zwei Drahtenden miteinander zu verl ö-
ten. Isolieren Sie dazu zunächst ein paar Drähte ungefähr einen Zentimeter an jedem
Ende ab. Das Ergebnis sollte in etwa wie in Abbildung 5.30 aussehen. Die Länge der
Drähte spi.elt hierbei keine große Rolle.

Abbildun g 5.30 Ei n paa r abi solierte Drähte

121
5 Die kleine Werkstatt

Nun klemmen Sie jeweils ein Draht ende in je einenArm der »dritten Hand« oder befe:
tigen beide Drähte so aufihrer feuerfesten Unterlage. dass sich beide Drahtenden wie i
Abbildung 5.31 berühren. Alternativ können Sie auch einen einzigen Draht zu eim
Schleife biegen (siehe Abbildung 5.32). Wichtig ist nur, dass sich die Drähte möglich~
et was berü hren, damit beim folgenden Erhitzen durch den Lötkolben die Hitze gleid
zeitig un d damit gleichmäßig durch beide Drahtenden fließt.

Abbildung 5.31 Mit Tesafi lm befestigte, ab isolierte Drähte

Abbildung 5.32 Mit Tesafilm befestigte, abiso lie rte Drahtsch leife

Die Fixierung mit Tesafilm hilft zu verh indern, dass es kalte Lötstellen gibt. Dazu Jese1
Sie in Ab schnit t 5.6.3 mehr.

Schalten Sie nun die Lötstation ein bzw. stecken Sie den Stecker des Lötkolbens in di
Steckdose. Wen n Sie eine regelbare Lötstation verwenden, stellen Sie den Temperatur
reglera uf u ngefahr 330 °Celsius ein und warten, bis d ie Tem peratur erreicht ist. Diese
wird je nach Lötstation untersch iedlich angezeigt.

+ Erst lesen, dann löten!


Lesen Sie sich die folge nden Schritte bis zu Ende in Ruhe durch, bevor Sie Ihre erste
Löt st elle herstellen. Schauen Sie sich bitte auch noch Abbildung 5.33 und Abbi ldung
5.34 a n. Dort ist de r nachfolgend beschriebene Lötvorgang abge bildet.

122

· befes·
twiein
5.6 Löten

1 einer

glichst


gleich·

Abbildung 5.33 Der Lötvorgan g m it zwe i Drähte n

.lesen

Abbildung 5.34 Der Lötvorgang mit eine r Drahtsch leife


in die
ratur·
Jieses Alles bereit? Los geht's :

1. Streifen Sie den Lötko lben kurz vor dem Lötvorgang in Schwamm oder Messingwolle
kurz ab.
2. Halten Sie den Lötkolben in die Mitte der abisolierten Drähte, und erhitzen Sie diese
ohne starken Druck für 3 bis 5 Sekund en. Nicht länger!
3· Führen Sie währenddessen das Lötzinn auf die heiß werdenden Dräh te - nicht auf die
Lötspitze!

123
5 Die kleine Werkstatt 5.6 Löten

Nun klemmen Sie jeweils ein Drahtende in je einen Arm der »dritten Hand « oder befes-
tigen beide Drähte so aufihrer feuer festen Unterlage, da ss sich beide Drah tenden wie in
Abbil dung 5.31 berühren. Alternativ können Sie auch einen einzigen Draht zu einer
Schleife biegen (siehe Abbildung 5.32}. Wichtig ist nur, dass sich die Drähte möglichst
etwas berühren, damit beim folge nden Erhitzen durch den Lötko lben die Hitze gleich-
/
zeitig und damit gleichmäßig durch beide Drahtenden fließt.


Abbildung 5.31 Mit Tesafilm befestigte, abisol ierte Drähte Abbildung 5.33 Der Lötvorgang mit zwei Drä hten

Abbildung 5.32 Mit Tesafilm befestigte, abisolierte Drahtschleife

Die Fixierung mit Tesafilm hiJft zu verhindern, dass es kalte Lötstellen gibt. Dazu lesen
Sie in Abschnitt 5.6.3 mehr.
Abbildung 5.34 Der Lötvorgang mit einer Drahtschleife
Schalten Sie nun die Lötstation ein bzw. stecken Sie den Stecker des Lötkolbe ns in die
Steckdose. Wenn Sie eine regelbare Lötstation verwend en, stellen Sie den Temperatur-
regler auf ungefahr 330 ·celsius ein und warten, bis die Temperatur erre icht ist Oieses Alles bereit? Los geht's:
wird je nach Lötstation unterschiedlich angeze igt
L Streife n Sie den Lötkolben kurz vor dem Lötvorgang in Schwamm oder M ssingwolle

+ Erst lesen, dann löten!


Lesen Sie sich die folgenden Schritte bis zu Ende in Ruhe durch, bevor Sie Ihre erste
kurz ab.
2. Halten Sie den Lötkolben in die Mitte der abisolierten Drähte, und erhitze n Sie diese
ohne starken Druck für 3 bi 5 Sekund en. Nicht länger!
Lötstelle herstel len. Scha uen Sie sich bitte auch noch Abbildung 5.33 und Abbildung
3. Führen Sie währ nddessen das Lötzinn auf die heiß werdenden Drähte - nicht auf die
5.34 an. Dort ist der nachfolgend besc hriebene Lötvorgang abgebi ldet Lötspitze!

122 123
5 Die kleine Werkstatt

4. Das Lötzinn wird flüssig und verteilt sich aufund um die beiden Dräh te.
5. Geben Sie so viel Lötzinn nach, bis die Drähte ausreichend von Lötz inn umschloss1
sind. Es sollte kein allzu dicker Klumpen werden.
6. Sieht alles soweit gut aus? Dann ziehen Sie gleichzeitig Lötzinn und Lötkolben v<
der Lötstell e weg.
7. Warten Sie ein paar Sekunden, bis die Lötstelle erkaltet ist. Sie erkaltet übrigens ga1
von selbst- pusten Sie also bitte nicht!

Das Ergebnis sollte ansch ließend ungefähr so wie in Abbildung 5.35 bzw. Abbildungs.:
aussehen.

.j }
:

vorher

nacher

Abbil dung 5.35 Die verlöteten Drähte

vorher nacher

Abbildung 5.36 Die verlötete n Enden de r Schleife

124
5.6 Löten

Herzlichen Glückwunsch : Ihre erste selbst erstellte Lötstelle! Sie muss nicht gleich per-
fekt aussehen. Haben Sie Geduld mit sich selbst. Übung macht den Meister. Und wenn
hlossen
Sie wollen, versuchen Sie doch einm al die Drähte mit der Hand auseinanderzuziehen.
wenn Sie alles richtig gemacht haben, dürfte es Ihnen kaum gelingen - erstaunlich
Jen von
stabil, oder?

ns ganz

mg 5.36
Verzage n Sie nicht, wenn es beim ersten Mal nicht gleich wie gewünscht klappt. Versu-
chen Sie auch, ein Gefü hl für die richtige Menge Lötzinn zu entwickeln. Hier gilt im
Zweifel: Weniger ist mehr! Übertreiben Sie es nicht mit dem Beifügen vom Lötzinn ;
aber nehmen Sie auch nicht so wenig, dass die Drähte gleich wieder auseinanderfallen,
wem) Sie ein bisschen an ihnen wackeln. In Abbildung 5.37 und Abbildung 5.38 sind ein

paar Beispi ele darge stellt. Probieren Sie das Löten bitte noch weiter aus, bis es ungefähr
so wird, wie dort gezeigt.

Zur Sicherheit: hinterher Hände waschen! I•


Da das Lötzi nn unterschi edlichste Chemikalie n ent hält, gilt au ch hier das alte Sprich-
wort: Nach dem Löten, vor dem Essen: Händewaschen nicht vergessen/

i \
~ .... .!
:
T
zuwenig

.
: .....\
perfekt!

- . :

L. ... :
T
zuvi el

Abbildung 5.37 Die ric ht ige Menge Lötzinn se hen Sie in der Mitte.

125
5 Die kleine Werkstatt ,

4. Das Lötzinn wird flüss ig und verteilt sich aufund um die beiden Drä hte.
5. Geben Sie so viel Lötzinn nach, bis die Drähte ausreichend von Lötzinn umsch losse
sind. Es sollte kein allzu dicker Klumpen werd en .
6. Sieht alles soweit gut aus? Dann ziehen Sie gleichzeitig Löt zinn und Lötkolben vo
der Lötst elle weg.
7. Warten Sie ein paar Sekunden, bis die Lötstelle erkaltet ist. Sie erkaltetübrigens gar
von selbst- pusten Sie also bitte nicht!

Das Ergebnis sollte anschJjeßend ungefähr so wie in Abbildung 5.35 bzw. Abbildung 5.3
a ussehen.

vorher

nach er

Abbildung 5.35 Die ve rlöteten Drähte

vorher nache r

Abbildung 5.36 Die verlöteten Enden der Sch leif e

124
5.6 Löten

Herzlichen Glückwunsch: Ihre erste selbst erstellte Lötstelle! Sie muss nicht gleich per-
fekt aussehen. Haben Sie Geduld mit sich selbst. Übung macht den Meister. Und wenn
Iossen
Sie wollen, versuchen Sie doch einmal die Drähte mit der Hand auseinanderzuziehen.
wenn Sie alles richtig gemacht haben, dürfte es Ihnen kaum gelingen - erstaunlich
~n von
stabil, oder?

1S ganz

ng 5.36
verzagen Sie nicht, wenn es beim ersten Mal nicht gleich wie gewünscht klappt. Versu-
chen Sie auch, ein Gefühl für die richtige Menge Lötzinn zu entwickeln. Hier gilt im
Zweifel: Weniger ist mehr! Übertreiben Sie es nicht mit dem Beifügen vom Lötzinn;
aber nehmen Sie auch nicht so wenig, dass die Drähte gleich wieder auseinanderfallen,
wen!) Sie ein bisschen an ihnen wacke ln. In Abb ildung 5.37 und Abbildung 5.38 sind ein

paar Beispiele dargestellt. Probieren Sie das Löten bitte noch weiter aus, bis es ungefahr
so wird, wie dort gezeigt.

Zu r Sicherheit: hinterher Hände waschen! I•


Da das Lötzi nn unterschied lichste Chemikalien enthält, gilt au ch hier das alte Sprich -
wort: Nach dem Löten, vor dem Essen : Händewaschen nicht vergessen!

\ ) ; :

L....: T
zu wenig

iI \•

T
perfekt!
~
I
.....:

L. ...! T
zu vie l

Abbi ldung 5.37 Die richtige Menge Lötz inn sehen Sie in der Mitte.

125
5 Die I< Ieine Werl<statt · .. . . 5.6 Löten

4. Das Lötzi nn wird flüssig und verteilt sich aufund um die beiden Drähte. Herzlichen Glückwunsch : Ihre erste selbst erstellte Lötstelle! Sie muss nicht gleich per-
5. Geben Sie so viel Lötz inn nach, bis die Drähte ausreichend von Lötzinn umsch lossen fekt aussehen. Haben Sie Geduld mit sich selbst. Übung macht den Meister. Und wenn
sind. Es sollte kei n allzu dicker Klumpen werden. Sie wollen, versuchen Sie doch einmal die Drähte mit der Hand ause inanderzuziehen.
wenn Sie alles richtig gemacht haben, dürfte es Ihnen ka um ge lingen - erstaunlich
6. Sieht alles soweit gut aus? Dann ziehen Sie gleichze itig Lötzinn und Lötkolbe n von
stabil, oder?
der Lötstelle weg.
7. Warten Sie ein paar Sekund en, bis die Lötstelle erka ltet ist. Sie erkaltet übrige ns ganz Verzagen Sie ni cht, wen n es bei m ersten Mal nicht gleich wie gewün scht klappt. Versu-
von selbst - pusten Sie also bitte nicht! chen Sie auch, ein Gefühl für die richt ige Menge Lö tzinn zu entwickeln . Hier gilt im
Zweifel: Weniger ist mehr! Übertreiben Sie es nicht mit dem Beifügen vom Lötzi nn;
Das Ergebnis sollte anschli eßendungefahr so wie in Abbildung 5.35 bzw. Abbildung 5.36 aber nehmen Sie auch nicht so wenig, dass die Drähte gleich wieder auseinanderfallen,
aussehen. wenn Sie ein bisschen an ihnen wackeln . In Abbildung 5.37 und Abbildung 5.38 sind ein
paar Beispiele dargestellt. Probieren Sie das Löten bitte noch weiter aus, bis es ungefahr
so wird, wie dort gezeigt.

vo rher
Zur Sicherheit: hinterher Hände waschen!
Da das Lötz in n untersch iedlichste Che mika li en enthält, gilt auch hier da s alte Sprich-
I•
wort: Nach dem Löten, vor dem Essen: Händewaschen nicht vergessen !

. '
; /

nacher zu wenig
Abbi ldung 5.35 Die verlöteten Drähte

. i
l .....:
perfekt!

vorher nac her


T
zu viel

Abbi ldung 5.36 Die verlöteten Enden de r Sch leife Abbildung 5.37 Die richt ige Menge Lötzinn sehe n Sie in der Mitte.

124
125
1e eme er s a

r····
{.. ----·· ---~-

0 zuwenig 0 perfekt! 0 zuviel

Abbildung 5.38 Die richtige Me nge Lötzin n auf einer Drahtschleife

Wenn Sie mit di esem Ergebnis zufrieden sind, geht es weiter zum nächsten Level: zur
Verlöten eines Bauteils in einer Platine.

Jetzt geht es darum, dass Sie lernen, wie Sie Bauteile in einer Platine einlöten. Nehmen Si
eine Lochrasterplatine (siehe Abschnitt 5.5) zur Hand und einen Widerstand, den Sie nict
meh r unbedingt benötigen. Gehen Sie nun genauso wie beim Verlöten der Drähte vor:
l. Kurzes gleichzeitiges Erhitzen des Lötpunktes und des Widerstandes
2. Zufüh ren des Lötzinns
3. Gleichzeitiges Entfernen des Lötkolbens und des Lötzinns
4. Kurzes Warten auf das Erkalten der Lötstelle

In Abbildung 5.39 sehen Sie diesen Vorgang noch einmal dargestellt.


- - - - ---

Abbildung 5.39 Einlöte n eines Bautei ls auf ei ner Plati ne mit Lötpun kt

126
5.6 Löten

Tipp
Dam it der unverlötete Widerstand beim Umdrehen der Platine nicht jedesmal aus der
Platine fällt, können Sie seine Anschlussbeine nach dem Stecken etwas auseinander-
+
biegen. So kann er nicht mehr herausfallen.

Vielleicht noch ein Tipp zur richtigen Menge Lötzinn, da dies die häufigste Frage von
Löteinsteigern ist. Sie haben die richtige Menge hinzugefügt, wenn die fertige Lötstelle
so wie in Abbildung 5.40 aussieht (bei einer einseitigen Platine).

:1: zum

1en Sie
enicht
vor:

Abbildung 5.40 Die perfe kte Lötstelle im Detail- an einem Lötpunkt

Bevor ich Ihnen noch etwas zu den berühmt-berüchtigten kalten Lötstellen erkläre,
werden Sie jetzt die letzte Hürde beim Lernen meistern : das Löten eines Bauteils in
einer Durchkontaktierung. Wie bereits erwähnt, werden Durchkontaktierungen nicht
von beiden Seiten verlötet, sondern wie normale Lötpunkte nur von der Unterseite der
Platine. Und eine weitere gute Nachricht ist: Der Lötvorgang funktioniert prinzipiell
genauso wie der von normalen Lötpunkten. Die dazugehörige Abbildung 5.41 zeigt
Ihnen daher auch zunächst den gleichen Vorgang.
Der einzige Un terschied beim Löten an einer Durchkontaktierung ist, dass Sie den Löt-
kolben ungefähr so lange auf diese halten und Lötzinn zuführen, bis die Lötstelle
anfangt, etwas zu >>blu bbern«. In genau diesem Moment läuft näml ich das Lötzin n
durch das Loch auf die Oberseite der Platine. Dadurch wird automatisch auch der Löt-
punkt auf der Bauteilseite der Platine mit Lötzinn versorgt und automatisch mit verlö-
tet. Es erfordert etwas Übung, d iesen Moment festzustellen, wenn es »blu bbert«. Es lässt
sich etwas schwierig beschreiben, aber Sie werden es merken, wenn Sie einmal an einer
doppelseitige Platine löten. Und wenn es Ihnen nach etwas Übung gelungen ist, sollte
das Ergebnis idealerweise so wie in Abbildung 5.42 aussehen.

127
.. • 1

5 Die kleine Werkstatt . 5.6 Löten

Tipp
Damit der unverlötete Widerstand beim Umdrehen der Platine nicht jedesmal aus der +
Platine fällt, können Sie seine Anschlussbeine nach dem Stecken etwas auseinander-
biegen. So kann er nicht mehr herausfallen.

Vielleicht noch ein Tipp zur richtigen Menge Lötzinn, da dies die häufigste Frage von
Löteinsteigern ist. Sie haben die richtige Menge hinzugefügt, wenn die fertige Lötstelle
so wie in Abbildung 5.40 aussieht (bei einer einseitigen Platine).
0 zu wenig 0 perfekt! 0 zuviel

Abbildung 5.38 Die richtige Menge Lötzinn auf einer Drahtschleife

Wenn Sie mit diesem Ergebnis zufrieden sind, geht es weiter zum nächsten Level: zum
Verlöten eines Bauteils in einer Platine.
Jetzt geht es darum, dass Sie lernen, wie Sie Bauteile in einer Platine einlöten. Ne hmen Sie
eine Lochrasterplatine (siehe Abschnitt 5.5) zur Hand und einen Widerstand, den Sie nicht
mehr unbedingt benötigen. Gehen Sie nun genauso wie beim Verlöten der Drähte vor:
1. Kurzes gleichzeitiges Erhitzen des Lötpunktes und des Widerstandes
2. Zuführen des Lötzinns
Abbildung 5.40 Die perfekte Lötste ll e im Detail - an einem Lötpu nkt
3. Gleichzeitiges Entfernen des Lötkolbens und des Lötzinns
4. Kurzes Warten auf das Erkalten der Lötstelle Bevor ich Ihnen noch etwas zu den berühmt-berüchtigten kalten Lötstell en erkläre,
In Abbildung 5.39 sehen Sie diesen Vorgang noch einmal dargestellt. werden Sie jetzt die letzte Hürde beim Lernen meistern: das Löten eines Bauteils in
einer Durchkontaktierung. Wie bereits erwähnt, werden Durchkontaktierungen nicht
von beiden Seiten verlötet, sondern wie normale Lötpunkte nur von der Unterseite der
Platine. Und eine weitere gute Nachricht ist : Der Lötvorgang funktioniert prinzipiell
genauso wie der von normalen Lötpunkten. Die dazugehörige Abbildung 5.41 zeigt
Ihnen daher auch zunächst den gleichen Vorgang.
Der einzige Unterschied beim Löten an einer Durchkontaktierung ist, dass Sie den Löt-
kolben ungefähr so lange auf diese halten und Lötzinn zuführen, bis die Lötstelle
anfängt, etwas zu »blubbern <<. In genau diesem Moment läuft nämlich das Lötzinn
durch das Loch auf die Oberseite der Platine. Dadurch wird au tomatisch auch der Löt-
punkt auf der Bauteilseite der Platine mit Lötzinn versorgt und automatisch mit verlö-
tet. Es erfordert etwas Übung, diesen Moment festzustellen , wenn es ))blu bbert«. Es lässt
sich etwas schwierig beschreiben, aber Sie werden es merken, wenn Sie einmal an einer
Abbildung 5.39 Ein löten eines Bauteils auf einer Platine mit Lötpunkt doppelseit ige Platine löten. Und wenn es Ihnen nach etwas Übung gelungen ist, sollte
das Ergebnis idealerweise so wie in Abbi ldung 5.42 aussehen.

126
127
s Die kleine Werkstatt

Abbildung 5.41 Der Lötvorgang an einer Durchkontaktierung

Abbildung 5.42 Die richt ige Menge Lötz inn bei einer Durchkontakt ierung

I• Zu viel Hitze tut nicht gut!


Bitte achten Sie darauf, auch beim Löt en von Durch kontaktierungen den Lötkolben
nicht zu lange an das Bautei l zu halten. Bauteile unnötig lange einer Temperatur von
über 300 •c auszusetzen, tut ih nen nicht gut; sie können sogar dabei zerstört werden !
Es gibt hierbei zwar große Unterschiede (Widerstände sind sehr unempfind lich, Ha lblei·
ter, wie LEDs und ICs, sind dagegen sehr empf indl ich}, aber übertreiben Sie es mit der
Hitze nicht. Die Lötdauer sollte pro Lötpunkt/Durchkontaktierung idealerwei se zwi·
sehen drei und fünf Sekunden liegen. Sie werden merken , dass Sie spät er mit etwas
Übung den Lötvorgang in zwei bis drei Se kunden beherrschen.

128
5.7 Fazit

Natürlich reicht es th eoretisch au s, da ss nur der untere Teil der Durchkontaktierung mit
Lötzinn versorgt wird.ln diesem Fall bes leht aber das Ris iko, dass die Durchkontaktie-
rung durch mechani sche Belastung der Platine vielleicht einmal reißt. Dadurch würde
der Strom ni cht auf der Oberseite der Pl atine weiterfließen und die Schaltung nicht
mehr korrekt fun ktionieren . Zusätzlich hat das Bauteil wesentlich mehr Halt, wenn die
Durchkontaktierung vollständig mit Lötzinn gefü ll t ist.

5.6.3 Was sind kalte Löt stellen ?


Die Geschichte der kalten Lötstelle ist eine Geschichte voller Missverständnisse -
schließlich sind Lötstellen na ch dem Löte n doch immer kalt, oder? Die kalte Lötstelle
hat ihren Na men vermutlich dah er, dass beim Lötvorgang nicht alle Materialien ausrei-
chend erhitzt wurden. Die Folge davon ist, dass keine einwandfreie mechanische Ver-
bindung zwischen Bauteil und Lötzinn oder Lötpunkt und Lötzinn hergestellt wird.
Außerdem ist bei kalten Lötstellen die Leitfähigkeit oftmals nicht ausreichend.
Das Gemeine an diesen Lötstellen ist, dass sie sich oft erst nach einigen Mo naten oder
gar Jahren bemerkbar machen. Eine Platine hat dann plötzlich einen Wackelkont akt,
und Sie wundern sich warum. Erkennen können Sie kalte Lötstellen zum einen daran,
dass diese bei bleihaiti gern Löt zinn nicht glänzen. Das ist auch beim Lötvorgang sehr
gut zu beobachten und reprodu zierbar, wenn Sie zum Beispiel zwei Drähte miteinander
verlöten und während des Erkaltens etwas daran wackeln oder stark auf die Lötstelle
pusten. Sie werden sehen, wie die Lötstelle beim Abkühlen plötzlich matt wi rd. Das ist
das deutlichste Ind iz, woran Sie diese unbeliebten Lötstellen erkennen. Aber kein Pro-
blem, Abhilfe ist möglich: Erhitzen Sie die Lötstelle einfach kurz erneut, und geben Sie
ein klein wenig Lötzinn hinzu. Das darin en tha.ltene Flussmittel mac ht das Lötzinn wie-
der schön flüssig, und nun lassen Sie die Lötstelle ohne Wackeln oder Pusten erkalte n.
Fertig ist die korrekte Lötstelle.

5.7 Fazit

In diesem Kap itel haben Sie die >>fliegende Verdrahtung<< und die Verwendung von
Steckbrettern ke nnengelernt Außerdem erhielten Sie ei nen Überblic k über benötigte
und empfohlene Werkzeuge für den Bau Ihres Roboters. Am Ende erhi elten Sie eine aus-
fü hrliche Anleitung, wie gelötet wird. Fa lls Sie das vorher noch nicht kannten, haben Sie
nun das nötige Wisse n bzw. die notwendigen Fertigkeiten dazu. Andernfalls gab es viel-
leicht auch fü r Sie noch ein paar Neu igkeiten in diesem Kapitel.

129
Kapitel 6

Pvo~vt:'\~~iev~VL\\\~\t:'\Be"
ln diesem Kapitellernen Sie die grundlegenden Elem ente der Arduino-Programmier-
sprache kennen . Sie beherrschen bereits C oder C++? Dann können Sie es auch nur


überfliegen. Noch keine große Erfahrung? Los geht's!

Die Arduino-Programmiersprache basiert auf den Programmiersprachen C und C++. Sie


ist größtenteils identisch zu diesen, weist jedoch einige Besonderheiten auf. Es kann
daher durchau s sinnvoll für Sie sein, sich mit diesem Kapitel vertraut zu machen, wenn
Sie C oder C++ schon kennen . Wenn Sie schon eine andere Programmiersprache gelernt
haben, wird es Ihnen ebenfalls leichtfallen. Bevor ich im Folgenden auf die verschiede-
nen Bestandteile der Sprache eingehe, zeige ich Ihnen erst einmal wichtige Punkte zum
Thema Programmierstil. Wenn Sie ein Programm schreiben, ist es wichtig, sich zuvor
etwas Gedanken über den Stil zu machen. Das soll nicht heißen, dass Ihr Code am Ende
besondershübsch aussieht, aber es wird ihn leichter lesbar und damit leichter verständ-
lich machen. Schließlieh sollten Sie doch nach der Lektüre d ieses Buches mit gutem Bei-
spiel vorangehen und Code nicht irgendwie schreiben, oder? Übrigens : Arduino-
Programme werden a uch Sketch oder Sketchbook genannt.

6.1 Stil

Wie schrieb neu li ch jemand bei Face book: »Nein, Stil ist nicht das Ende des Besens«.
Und wenn Sie sich vielleicht wundern, warum ich diesem Thema ein eigenes Kapitel
widme, dann vergleichen Sie doch bitte einmal Listing 6.1 und Listing 6.2 - Program -
miererfahrung noch nicht vorausgesetzt!

#include <Servo. h>

II Erstellt ein Servoobjekt zur Steuerung .


II Maximal 8 Servos können angesteuert werden .
Servo servol;

void setup ()

131
{
pinMode(9 , OUTPUT) ; II Pin 9 als Ausgang definieren
servol. attach(9); II Verbindet Pin 9 mit dem Servoobjekt.

voi d loop()
{
II Variable zur Speicherung der Position
int pos = 0;

II Geht von 0 bis 180 Grad in Schritten von einem Grad.


for (pos = 0; pos <= 180; pos++)
{
II Bewege Servo zu Position "pos" .
servo1 . write(pos) ;
II Warte 15 ms , bis Servo Position erreicht .
delay(15) ;
}

II Geht von 180 bis 0 Grad in Schritten von einem Grad.


for (pos = 180; pos >= 0; pos - - )
{
II Bewege Servo zu Position "pos".
servol .write(pos) ;
II ~/arte 15 ms , bis Servo Position erreicht .
delay(15) ;
}
}

Listi ng 6.1 So sieht hal bwegs "orde ntlicher« Cod e mit Stil a us.

Und um es gle ich vorwegzunehmen : Beid e Listings enthalte n de n g leichen Programn


code, nur jeweils in anderer Sch reibweise ! Das h eißt, beide Programme habe n exakt d
gleiche Funktion .1 Und nun schauen Sie sich das an :

1 Beide Programm e dienen dazu , einen Servo hin und he r zu bewege n. Wie das geht un d was ein Sen
überhaupt ist, lernen Sie in Abschn itt 7.4 .

132
6.1 Stil

#include <Servo . h>


Servo da sKomische_Teil_Dingens ; int willi=O ;

void setup() { pinMode(9,0UTPUT); dasKomische_Teil_Dingens .attach(9) ; }


void loop()
{


for(willi = 0; wllli < 180 ; willi +=1){
dasKomische Tei.l Dingens .write(willi ); delay( 15) ;
} for (willl=l80; wllll> =20; wllll -=1 //wozu war diese ZEILE?
{
dasKomische_Teil_Dingens .write(willi) ; // move servo to position
delay(15) ; } // hier wollte ich mir was merken
}

Listing 6.2 Bitte nicht nach machen! So sol lte Ihr Code nicht aussehen!

Muss ich noch etwas dazu sagen? Wie Sie unzweifelhaft erkennen können, hat der Pro-
grammcode in Listi ng 6.2 keinerlei Struktur oder Einheitlichkeit. Natürlich ist das Bei-
spiel sehr überzogen und enthält fast alles, was Sie nicht tun sollten. Aber gerade dann,
wenn Sie bisher noch nicht oder nur sehr wenig programmiert haben, sollten Sie gleich
zu Beginn mit gutem Stil starten. Bedenken Sie dabei, dass vielleicht mal jemand ande-
res den Code sieht- spätestens wenn Sie eine Frage an einen Fre und haben und ihm den
Code zeigen müssen. Ich spreche hier aus eigener Erfahrung. Nachfolgend erläutere ich
daher die wkhtigsten Regeln für »Code mit Stil«. Ich gehe auf die detaillierte Bedeutung
einzelner Punkte jeweils in den folge nden Abschnitten noch weiter ein. Jetzt geht es erst
einmal um Grundsätzliches.

6.1.1 Einrückung
Rücken Sie die einzelnen Zeilen ein, wo es die Lesbarkeit erhöht und üblich ist. Üblicher-
we ise werden Zeilen innerhalb von Blöcken von Anweisungen eingerückt. Was Blöcke
ramm· sind, erfahren Sie später. Für Ihren Computer oder den Arduino macht es keinen Unter-
:akt die schied, ob Sie Zeilen einrücken, für einen Menschen aber schon. Sie würden in eine r
Ma i! ja auch nicht Absätze weglassen, nur dam it Sie ein paar Zeilen spa ren.

6.1.2 Eindeutigkeit/Sinn haftigkeit


Benennen Sie Dinge eindeutig und sinnvoll. Natürlich könnten Sie zum Beispiel eine
in Servo Variable (siehe Abschnitt 6.3) für einen Servo lisa oder tolles_Teill nennen. weil Sie es
witzig finden. Aber glauben Sie mir, es lenkt ungemein beim Lesen ab, und es ist daher

133
6 Programmiergrundfage~- . · :~ ·.: ~:-~-~~?S~-

pi nMode( 9, OUTPUT); II Pin 9 als Ausgang definieren


servo1 .attach( 9); II Verbindet Pin 9 mit dem Servoobjekt .
}

void loop()
{
II Variable zur Speicherung der Position
int pos = 0;

II Geht von 0 bis 180 Grad in Schritten von einem Grad.


for (pos = 0; pos <= 180; pos++)
{
I I Bewege Servo zu Position "pos".
servo1. write(pos) ;
II Warte 15 ms , bis Servo Position erreicht.
delay( 15);
}

II Geht von 180 bis 0 Grad in Schritten von einem Grad .


for (pos = 180; pos >= 0; pos--)
{
II Bewege Servo zu Position "pos" .
servol .write( pos);
II Warte 15 ms, bis Servo Position erreicht .
delay( 15);
}

listing 6.1 So sieht halbwegs »ordentlicher« Code mit Sti l aus.

Und um es gleich vorwegzu nehmen : Beide Listings enthalten den gleichen Programm·
code, nur jeweils in anderer Schreibweise! Das heißt, beide Programme haben exakt die
gleiche Funktion. 1 Und nun schauen Sie sich das an:

Beide Programme dienen dazu, einen Servo hin und her zu bewegen. Wie das gebt und wa s ein Servo
überhaupt ist, lernen Sie in Abschnitt 7.4.

132
#include <Servo . h>
Servo das Komi sche_Teil_Di ngens ; int willi=O ;

void setup() { pinMode(9 , 0UTPUT) ; dasKomische_Teil_Di ngens .att ach(9) ; }


void loop ()
{


for(willi = 0; wllli < 180; willi+ =1){
dasKomische _Teil_Dinge ns . write (wil li); delay( 15) ;
} for(willi=180 ; wllli>=20 ; wllli -=1 II wozu war diese ZEI LE?
{
dasKomisc he_Teil_Dingens .write(willi ) ; II move servo to position
delay(1 5); } I I hier wollte ich mir was merken
}
Listing 6.2 Bitte nicht nachmachen! So so llte Ihr Code nicht aussehen !

Muss ich noch etwas dazu sagen? Wie Sie unzweifelhaft erkennen können, hat der Pro-
grammcode in Lisbng 6.2 keinerlei Struktur oder Einheitlichkeit. Natürlich ist das Bei-
spiel sehr überzogen und enthält fas t alles, was Sie nicht tun sollten. Aber gerade dann,
wenn Sie bisher noch nicht oder nur sehr wenig programmiert haben, sollten Sie gleich
zu Beginn mit gutem Stil starten. Bedenken Sie dabei, dass vielleicht mal jemand ande-
res den Code sieht - spätestens wenn Sie eine Frage an einen Freund haben und ihm den
Code zeigen müssen. Ich spreche hier aus eigener Erfahrung. Nachfolgend erläutere ich
daherdie wichtigsten Regeln für »Code mit Stil«. Ich gehe auf die detaill ierte Bedeutung
einzelner Punkte jeweils in den fo lgenden Abschnitten noch weiter ein. jetzt geht es erst
einmal um Grundsätzliches.

6.1.1 Einrückung
Rücken Sie die einzelnen Zeilen ein, wo es die Lesbarkeit erh öht und üblic h ist. Üb li cher-
weise werden Zeilen innerhalb von Blöcken von Anweisungen eingerückt. Was Blöcke
sind, erfa hren Sie später. Für Ihren Comp uter oder den Arduino macht es keinen Unter-
schied, ob Sie Zeilen einrücken, für einen Me ns chen aber schon. Sie würd en in einer
Mai! ja auch nicht Absätze weglasse n, nur damit Sie ein paar Zeilen sparen.

6.1.2 Eindeut igkeit / Sinnhaftigkeit


Benennen Sie Dinge ein deut ig und sinnvoll. Natü rlich kön nten Sie zu m Beispiel eine
Variable (siehe Abschnitt 6.3 ) für einen Servo lisa oder tolles_Teill nennen, weil Sie es
witzig find en. Aber glauben Si e mir, es lenkt ungemein beim Lesen ab, und es ist daher

133
schlauer, sie servol zu nennen. Sofort weiß dam it jede r Leser des Progra mmcodes, da:
diese Variable mit einem Servo zu tun hat. Es bietet sich oftm als auch an, für vi ele E].
mente keine einbuchstabigen Bezeichnungen wie zum Beispiel f , sondern besser z.
frequenz zu verwenden. wenn es sich hier um eine Frequenz ha ndel t, ode r umdrehungE
statt einfach nur u.

6.1.3 Groß-/Kleinschreibung und Unterstriche


Vielleich t ist Ihnen im vorigen Absatz aufgefalLen, dass ich di e Beispiele mal groß- un
mal kleingeschrieben habe, ein Beispiel enthielt auch einen Unterstrich »_ «. Genere
sollten Sie Variablen- und Funktionsnamen (s iehe Abschnitt 6.8.3 ) kleinschreiben
also zum Beispiel umdrehungen oder schlafen(). Da Leerzeichen hier ni cht erlaubt sin1
müssen Sie längere Namen entweder mit einem Unterstrich oder durch Groß- un
Kle inbuchstaben gliedern, zum Beispiel: starte_kurvenfahrt_sofort() oder StarteKu1
venfahrtSofort() . Namen mit Unterstrichen sind etwas leichter lesbar, werden dafi
aber schnell sehr la ng. Sie können sie letztendlich so schreiben, wie Sie wollen, es git
jedoch gewisse Konventionen. Eine Orientierung an üb lichen Schreibweisen finden Si
im Google Style Guide2 - wen ngleich der Sourcecode in diesem Buch dem Style Guid
derzeit nicht im vollen Umfang entspricht.

6.1.4 Muttersprache oder Englisch?


Ich habe lange überlegt, ob ich die Programme in diesem Buch in englischer Sprach
oder auf Deutsch für Sie schreibe. Meiner Meinung nach gibt es viele Gründe für di
eine und viele für die andere Sprache. Wenn Sie Ihren Code auf Deutsch schreiben (als
deutsche Variablen, Funktionen und Kommentare verwenden), fcillt es Ihnen wah1
scheinlieh leichter, zu programmieren. Denn Sie müssen sich neben dem eigentliche
Programmieren nicht damit auseinandersetzen, ob dieser oder jener Begriff korre~
übersetzt ist oder wie Sie es in der englischen Sprache möglicherweise besser hätte
ausdrücken können. Dafür müssen Sie dann damit leben, da ss Schätzungen zufo lgE
nur 1,9% der Weltbevölkerung Ihren Code lesen können. Wäre Ihr Code in englischE
Sprache geschrieben, wären es immerhin 11 %. Fun-Fakt: In englischer Sprache würde
Sie nur die zweitgrößte Menge an Menschen auf der Erde erreichen . Am meisten wäre
es, wenn Ihr Code in Chinesisch geschrieben wäre (16 %4 ) - hier ist die Lernkurve für Si
jedoch vermutlich steiler. Die engli sche Sprache ist im Zwe ifel natürl.ich der »kleinst

2 https://code.google.com/ p/google-slyleguide/
3 http://www.wolfra malpha.comjin pulj?i=eng lish+germa n+spa nis h+la ng uage
4 http://www.wolframa lpha.com/inpu t/?i=ls t+ra n!?+Iang uage

134
~s.dass gemeinsame Nenner«, da es die derzeit international bedeute ndste Sprache is t (Welt-
ele Ele- sprache).
;er z. B.
·hungen
6.1.5 Kommentieren und dokumentieren
Ich kann es eige ntlich ga r nicht stark genug betonen: Schreiben Sie in Ihren Code so


viele Kommenta re zur Dokumentation wie nur möglich! Damit meine ich nicht, dass
Sie auflisten sollen, wann Sie was und warum gemacht haben 5, sondern was im Code
ß- und welche Funktion hat. Schreiben Sie im Zweifel über nahezu jede Anweisung einen
~ nerell Kommentar, der beschre ibt, wozu di ese dient. Ich spreche hier aus eigener Erfahrung:
iben- Die für meinen Roboter selbst entwickelte Software 6 glänzt sicher nicht durch Ein-
1t sind, fachheit, dafür aber du rch za hl re iche Ko mmentare. Diese haben mir selbst bereits
s- und sehr häufig geholfen, wenn ich mal wieder in einem sehr alten Abschnitt etwas nach-
teKur- gelesen habe. Auf einen Blick wa r so leicht nachvollziehbar, wozu die verschiedenen
' dafü r Anweisungen dienten . Und Si e können Ihre Kommentare sogar dazu nutzen, vollau-
es gibt tomatisch eine eigene Dokumentation daraus zu erstellen- mit der frei verfügbaren
len Sie Software Doxyg en 7.
Guide

6.1.6 Einheitlichkeit- Bleiben Sie Ihrem Stil treu!


Egal wie Sie sich bei Ihrem Programmierstil entscheiden: Bleiben Sie ihm treu- mindes-
tens innerhalb eines Projektes. Wechseln Sie also etwa nicht zwischen Namen mit
)rache Unterstrichen und zusammengeschriebenen Namen innerhalb eines Projektes oder gar
'ür die innerhalb einer Datei. Wechseln Sie auch nicht zwischen verschiedenen Sprachen (von
n (also eingedeutschten Begriffen wie Download abgesehen). Wenn Sie zu einem späteren
wahr- Zeitpunkt Ihre Meinung ändern, können Sie natürlich noch alles per »Suchen/Ersetzen-
liehen Funktion« ändern - dann aber bitte einheitlich und in der Gesamtheit.
orrekt
1ätten
tfolge 3 6.1.7 Zusammenfass ung
ischer Hier sehen Sie noch einmal die wichtigsten Tipps und Regeln zusammengefasst:
ürden
"' Rücken Sie Zeilen ein.
wären
für Sie "' Benennen Sie Elemente sinnvoll.
einste "' Nutzen Sie einheitliche Schreibweisen.

5 Für diesen Zweck gibt es Versionsverwaltungssysteme wi e git


(siehe auch http://de.wikipeclia.org/ wiki/ Gil)
6 http://www.direcs.de/ cloxygenj
7 http://www.doxygen.org

135
-
schlauer, sie servol zu nennen. Sofort weiß damit jeder Leser des Programmcodes, dass gemeinsame Nenner<<, da es die derzeit international bedeutendste Sprache ist (Wel t-
diese variable mit einem Servo zu tun hat. Es bietet sich oftmals auch an, für viele Eie· sprache).
mente keine einbuchstabigen Bezeichnungen wie zum Beispiel f, sondern besser z.B.
frequenz zu verwenden, wenn es sich hier um eine Frequenz handelt. oder umdrehungen
6.1.5 Kommentieren und do kument iere n
statt einfach nur u.
lch kann es eigentlich gar nicht stark genug betonen: Schreiben Sie in Ihren Code so


viele Kommentare zur Dokumentation wie nur möglich! Damit meine ich nicht, dass
6.1.3 Groß-/Kleinschreibung und Unterstric he sie auflisten sollen, wann Sie was und warum gemacht haben 5, sondern was im Code
Vielleicht ist Ihnen im vorigen Absatz aufgefallen, dass ich die Beispiele mal groß- und welche Funktion hat. Schreiben Sie im Zweifel über nahezu jede Anweisung einen
mal kleingeschrieben habe, ein Beispiel enthielt auch einen Unterstrich »_«. Generell Kommentar, der beschreibt, wozu diese dient. Ich spreche hier aus eigener Erfahrung:
sollten Sie Variablen- und Funktionsnamen (siehe Abschnitt 6.8.3) kleinschreiben- Die für meinen Roboter selbst entwickelte Software 6 glä nzt sicher nicht durch Ein-
also zum Beispiel umdrehungen oder schlafen(). Da Leerzeichen hier nicht erlaubt sind, fachheit, dafür aber durch zahlreiche Kommentare. Diese haben mir selbst bereits
müssen Sie längere Namen entweder mit einem Unterstrich oder durch Groß- und sehr häufig geholfen, wenn ich mal wieder in einem sehr alten Abschnitt etwas nach-
Kleinbuchstaben gliedern, zum Beispiel: starte_kurvenfahrt_ sofort() oder StarteKur- gelesen habe. Auf einen Blick war so leicht nachvollz iehbar, wozu die verschiedenen
ven.cahrtSofort(). amen mit Unterstrichen sind etwas leichter lesbar, werden dafür Anweisungen dienten. Und Sie können Ihre Kommentare sogar dazu nutzen, vollau-
aber schnell sehr lang. Sie können sie Jetztendlich so schreiben, wie Sie wol len, es gibt tomatisch eine eigene Dokumentation daraus zu erstellen- mit der frei verfügbaren
jedoch gewisse Konventionen. Eine Orientierung an üblichen Schreibweisen finden Sie Software Doxygen 7.
im Google Style Guide2 - wenngleich der Sourcecode in diese m Buch dem Style Guide
derzeit nicht im vollen Umfang entspricht.
6.1.6 Einheitlichkeit- Bleiben Sie Ihrem Stil treu!
Egal wie Sie sich bei Ihrem Programmierstil entscheiden: Bleiben Sie ihm treu- mindes-
6.1.4 Muttersprache oder Englisch?
tens innerhalb eines Projektes. Wechseln Sie also etwa nicht zwischen amen mit
Ich habe lange überlegt, ob ich die Programme in diesem Buch in englischer Sprache Unterstrichen und zusammengeschriebenen Namen innerhalb eines Projektes oder gar
oder auf Deutsch für Sie schreibe. Meiner Meinung nach gibt es viele Gründe für die innerhalb einer Datei. Wechseln Sie auch nicht zwischen verschiedenen Sprachen (von
eine un d viele fü r die andere Sprache. Wenn Sie Ihren Code auf Deutsch schreiben (also eingedeutschten Begriffen wie Download abgesehen). Wenn Sie zu einem späteren
deutsche Variablen, Funktionen und Kommentare verwenden), fä llt es Ihnen wahr- Zeitpunkt IhreMeinung ändern, können Sie natürlich noch alles per ))Suchen/Ersetzen-
scheinlich leichter, zu programmieren. Denn Sie müssen sich neben dem eigentlichen Funktion« ändern- dann aber bitte einheitlich und in der Gesamtheit.
Programmieren nicht damit auseinandersetzen, ob dieser oder jener Begriff korrekt
übersetzt ist oder wie Sie es in der englischen Sprache möglicherweise besser hätten
ausdrücken können. Dafür müssen Sie dann damit leben, dass Schätzungen zufolge 3 6.1.7 Zusammenfassung
nur 1,9 % der Weltbevölkerung Ihren Code lesen können. Wäre Ihr Code in englischer Hier sehen Sie noch einmal die wichtigsten Tipps und Regeln zusammengefasst:
Sprache geschrieben, wären es im merhin 11 %. Fun-Fakt: In englischer Sprache würden
~> Rücken Sie Zeilen ein.
Sie nur die zweitgrößte Menge an Menschen auf der Erde erreichen. Am meisten wären
es, wenn Ihr Code in Chinesisch geschrieben wäre (16 %4) - h ier ist die Lernkurve für Sie ~> Benennen Sie Elemente sinnvoll.
jedoch vermutlich steiler. Die englische Sprache ist im Zweifel natürlich der »kleinste ~> Nutzen Sie einheitliche Schreibweisen.

5 Für diesen Zweck gibt es Versionsverwaltungssysteme wie git


2 hltps://code.google.com/p/google-styleguidej
(siehe auch http://cle. wikipedia.orgj wiki/ Git)
3 hl tp://www. wolfra mal pha.com/i npu t/?i=engl ish+germa n+spa nis h+la ng uage 6 http://www.direcs.de/doxygen/
4 http://www.wolframalpha.com/ input/?i=lst+rank+language 7 http://www.doxygen.org

134
135
... Entscheiden Sie sich für eine Sprache (Muttersprache vs. Englisch) .
.,.. Kommentieren Sie, was das Zeug hält.
.,.. Bleiben Sie Ihrem Stil treu .
.,.. Haben Sie Spaß!

Der letzte Punkt ist durchaus ernst gemeint. Ich möchte Sie durch diese Regeln nicht
abschrecken. Es wird Ihnen helfen, sich diese Empfehlungen gleich zu Beginn anzueignen.
Sie machen sich das Leben leichter, und es wird Sie außerdem als »Profi« auszeichnen.

6.2 Kommentare

Wie bereits in Abschnitt 6.1.5 beschrieben, ist das Kommentieren und damit das Doku-
mentieren ihrer Software das »A und 0« guten Programmierstils. Zum Einfügen von
Kommentaren aller Art in Ihren Arduino-Programmcode gibt es zwei Möglichkeiten,
die wie in Listi ng 6.3 und Listing 6.4 aussehen können.

II Dies ist ein Kommentar in einer Zeile . Er beginnt mit zwei Schrägstrichen .
II Auch dieser Kommentar betrifft nur eine Zeile und geht bis zu deren Ende .

x = 9; II Auch dies ist ein Ko~~entar .


x = 41 + 1; II Das wird dahinter aber schnell unruhig beim Lesen .

II Besser ist es, Kommentare oberhalb des Befehls zu schreiben:


II Erhöhe x um eins .
x++;
listing 6.3 Kommentare in jeweils einer Zeile beginnen immer mit 1/.

I* Dieser Kommentar reicht über mehrere Zeilen . Er beginnt mit einem Schrägstrich / ,
direkt gefolgt von einem* . Danach können Sie beliebig viel Text einfügen -
auch über mehrere Zeilen . Auch Sonderzeichen wie Sterne oder Bindestriche (>>Minus«)
oder Zeilenumbrüche sind möglich :
-- --------- ----- ------------ -- -- ------ -- ---- ------------ ---- -- -- ----- ---
Hier geht der Kommentar weiter . Aber das soll jetzt auch reichen . Der Kommentar endet
umgekehrt , vlie er begann: mit einem Stern und einem Schrägstrich di~ekt dahinter. */
listi ng 6.4 Kommentare über me hre re Zeilen stehen zwischen/" und */.
6.3 Variablen
variablen dienen zum Speichern von Daten wie Buchstaben oder Zahlen. Sie kennen
das sicher aus der Mathematik, wo Formeln mit Buchstaben verwendet werden.
Genauso funktioniert das beim Programmieren. Wenn Sie zum Beispiel im Code die
Anweisung x = 42 ; schreiben, wird der Variable x der Wert 42 zugewiesen . Das heißt, in
dieser Variable hat Ihr Computer oder in diesem Fall der Arduino den Wert 42 in seinem
Speicher hinterlegt.

6.3.1 Das Semikolon


Wie Sie sicher bemerkt haben, endete die Anweisung x = 42 ; mit einem Semikolon. Jede
Anweisung endet mit einem Semikolon. Daranerkennt die Arduino-Software 8 das Ende
eines Befeh ls, wenn der Quellcode in ein für Ihr Arduino-Board verständliches Format
umgewand elt wird. Achten Sie also immer darauf, am Ende jeder Anweisung ein Semi-
kolon einzufügen.

6.3.2 Das Leerzeichen


Übrigens : Ob Sie die Anweisung mit Leerzeichen (x = 42) oder ohne (x=42) schreiben,
bleibt Ihnen überlassen. Die Arduino-Software versteht beides. Ich empfehle Ihnen die
Verwendung von Leerzeichen, da ich diese Schreibweise als leichter lesbar empfinde.

6.3.3 Deklaration
Bevor Sie in Ihrer Arduino-Software Variablen verwenden können, müssen Sie diese
deklarieren. Das bedeutet, dass Sie diese dem Programm »bekannt machen<< müssen.

6.3.4 Datentypen
Wenn Sie für Ihren Arduino Softwa re entwickeln, wollen Sie später unterschiedliche
Arten von Daten in Variablen speichern. Damit Ihr Arduino diese verschiedenen Arten
»versteht«, speichert er sie in unte rschi edlichen Typen von Variablen. Ich werde Ihnen
daher im Folgenden die wichtigsten Typen erläutern.

8 Genau ge nom me n tun dies Comp iler und Link'er, aber das ist hier nicht weiter re leva nt.

137
Der Typ »byte«
Einer der einfachsten Datentypen beim Arduino ist der Typ byte 9 . We nn Sie eine Varia-
ble mit dem Namen x vom Typ byte bekannt machen (deklarieren) wollen, lautet die
Anweisung dazu :

byte x;

Der Datentyp wird immer vor den Variablennamen geschrieben. Variablennamen wer-
den auch Bezeichner genannt. Der Wert, den Sie in der Variable speichern (ihr zuweisen)
wo llen, folgt immer nach dem Glei chheitszeichen. Am Ende der Ze il e steht wie bei jeder
Anweis ung das Semikolon. Wichtig: Va riablen vom Typ byte können nur Zahlen zwi·
sehe n 0 und 255 speichern. Warum das so ist, erfahren Sie gleich. Wenn Sie bei der
Deklaration der Variable gleich einen Wert zu weisen wollen, schreiben Sie zum Beispiel:

byte x = 800101010; //Hier wi rd der Wert '42 ' gespeichert .

I• Erst de kl arieren, dann verwenden!


Bevor Sie eine Variable in Ihrem Progra mm verwenden können, muss sie immer erst
deklariert werde n. Aus diese m Grund werde n Variablendeklaratione n in der Regel an
den Anfang eines Programms oder Blocks geschriebe n.

Generell empfiehlt es sich beim Programmieren, einer Variablen zu Beginn immer


einen definierten Wert zuzuweisen, selbst wenn es nur der Wert 0 ist. Das erste Zuwei·
sen eines Wertes nennt man übrigens initialisieren bzw. die Initialisierung . Wenn Sie
Variab len zu Beginn nicht initialisieren, können sie bei bestimmten Systeme n einen
undefinierten Wert beinhalten, weil sie auf einen Speicherbereich des Computers ver·
weisen, der nach dem Einschalten zufällige Werte enthält. Bei Ihrem Arduino ist das
anders, da es im Hinte rgrund besondere Mechanismen10 gibt, die dafür sorgen, dass
Variablen automatisch mit dem Wert null initialisie rt werden. So lange Sie aber keine
Speicherprobleme haben, weil Ihre Software fi.i r den Arduino zu groß wird, empfehle ich
Ihnen, sich die lnitialisierung von Variablen anzugewöhnen.

Bits, Bytes und Binäres


Besti mmt haben Sie sich gewundert, warum die Anweisung zuvor x = 800101010 lautete
und nicht x = 42 . In seinem tiefsten Innersten versteht ein Compu ter im Prin zip nur 0

9 http://ard uino.cc/ de/ Reference/byte


10 http://www.nongnu.org/ avr-libc/ user·manuai/FAQhtmlttfaq_ varinit

138
und 1. Man spricht daher auch vom Binärsystem oder Dualsystem 11 , denn es gibt nur die
'aria- zwei zustände 0 und 1 (lateinisch bini =» je zwei«). Und da die kleinste Einheit für den
-t die Computer ein Bit ist, kann dieses genau diese zwei Zustände annehmen. Eine Einheit
von acht Bit wird übrigens ein Byte genannt. Wie kann ein Computer aber nun in sei·
nem Speicher die Zahl 42 speichern? Ganz einfach: Er zerlegt die Zahl intern in diese
Nullen und Einsen. Und das tut er-Überraschung-m it dem Binärsystem. Jetzt wird es
etwas kompliziert. Sie können diesen Absatz, wenn Sie wollen, auch überspringen.
wer-
In unserem alltäglichen Dezimalsystem basiert jede Stelle einer Zahl auf einer Potenz
·isen)
zur Basis 10. Denn jede Stelle kann zehn verschiedene Zustände annehmen (0-9}. Hier
jeder
, sehen Sie zwei Beispiele, wie Zahlen im Dezimalsystem gebildet werden:
zwi·
i der 42 = 4 X 10 1 + 2 X 10° =4 X 1Q + 2 X 1
;piel: 256:2 X 102 + 5 X 10 1 + 6 X 10° = 2QQ + 5Q + 6

Und genauso funktioniert es in Ihrem Computer oder Arduino·Mikrocontroller. Nur


dass hier das Binärsystem zugrunde liegt. Das heißt, alle Zahlen werden nicht zur Basis
10 wie beim Dezimalsystem, sondern zur Basis 2 gebildet. Denn jede Stelle einer Zahl
kann nur zwei Zustände annehmen.
rst
an Auch hier folgt nun ein Beispiel für dieselben Zahlen, wie sie Ihr Ardui no intern behan-
delt Zur Unterscheidung ist die Zahl im Dezimalsystem mit einer 10 und im Binärsys-
tem mit einer 2 gekennzeichnet. Die führenden ullen im Teil der Anweisung 800101010
1m er habe ich hier weggelassen. Sie dienten im vorigen Beispiel nur zur Verdeutlichung. dass
1wei· es8Bit sind (ein Byte). Übr igens : Durch das Bvor den Zahlen weiß die Arduino-Software,
n Sie dass danach eine Binärzahl folgt.
·inen 4210
. ver· = 1010102
t das : 1 X 25 + 0 X 24 + 1 X 23 + Q X 22 + 1 X 21 + Ü X 2°
dass =lx32 10 +0xl6 10 +lx8 JO + 0 x4 10 +lx2 10 + O xl 10
~e ine = 32 10 + 8 10 + 2 10
eich
Kommt Ihnen etwas bekannt vor? 1, 2, 4, 8, 16, 32 ...? Aufgrund des internen Binärsystems
entsprechen die einzelnen Stellen eine r Zahl (von rechts gesehen) im Computer nicht
der!, 10,100,1000,10.000 sondern der 1, 2, 4, 8, 16, 32, 64,128,256 usw. Und jetzt wissen
1tete Sie auch, warum zum Beispiel der Hauptspeicher (RAM) in Ihrem Computer immer mit
wr 0
einem Vielfachen dieser Werte angegeben ist (zum Beispiel1 6 GB RAM). Und wenn Sie

ll http://de. wikipedia.orgj wiki/ Dualsystem

139
De r Typ nbyte« und J. Man spricht daher auch vom Bin ärsys tem oder Dua/system 11 , denn es gibt nur die
Einer der einfachsten Daten typen beim Ard uino ist der Typ byte 9 Wenn Sie eine Varia- zwei zustände 0 und 1 (lateinisch bini =>> je zwei «). Und da die kleinste Einheit für den
ble mit dem Namen x vo m Typ byt e bekannt machen (deklarieren) woll en. lautet die Computer ein Bit ist, ka nn di eses ge nau d iese zwei Zuständ e annehmen. Eine Ein heit
Anweisu ng dazu : von acht Bit wi rd übrige ns ein Byte ge nannt. Wie kann ein Co mputer aber nun in sei-
nem Speicher die Za hl 42 speichern ? Ganz einfach : Er zerlegt di e Zahl intern in die se
byte x; ullen und Einsen. Und das tut er - Überrasch ung - mit dem Binä rsyste m. Jetzt wird es
etwas kompli ziert. Sie können diese n Absatz, wenn Sie wo llen, auch überspringen.
Der Datentyp wird immer vor den Va riablennamen geschrieben. Variablen namen wer-
In unserem alltäglichen Dezimalsystem basiert jede Stelle ei ner Zahl auf einer Po tenz
den auch Bezeichner genannt Der Wert, den Sie in der Variable speichern (ihr zuweisen)
wollen, folgt immer nach dem Gleichh eitszeichen. Am Ende de r Zei le steht wie bei jeder zur Basis 10. Denn jede Stelle kan n zehn verschieden e Zuständ e an nehmen (0- 9). Hier
, sehen Sie zwei Beispiele, wie Zahlen im Dezimalsystem gebilde t werden:
Anweisung das Semikolon. Wichtig: Variablen vom Typ byte können nur Zahlen zwi-
schen 0 und 255 speichern. Wa rum das so ist, erfahren Sie gleich . Wenn Sie bei der 42 = 4 X 101 + 2 X 10° = 4 X 10 + 2 X 1
Deklaration der Variable gleich einen Wert zuweisen wollen, schreiben Sie zum Beispiel: 256 = 2 X lQ 2 + 5 X 101 + 6 X 10° = 200 + 50 + 6

byte x = B00101010 ; //Hier wird der Wert '42' gespeichert . Und genauso funktioniert es in Ihrem Computer oder Arduino-Mikrocontroller. Nur
dass hier das Binärsystem zugrund e liegt. Das heißt, alle Zahlen werden nicht zur Basis

I• Erst de kla rieren, dan n verwende n! 10 wie beim Dezimalsystem, sondern zur Bas is 2 gebi ldet. Denn jede Stell e einer Zahl
kann nur zwei Zustände ann ehm en.
Bevor Sie eine Va riable in Ihrem Programm verwenden können, muss sie immer erst
dekl ariert werden. Aus diese m Grund werden Va riable nd eklaratione n in der Regel an Auch hier folgt nun ein Beispiel für dieselben Zahlen, wie sie Ihr Arduino inte rn behan-
den Anfa ng eines Programm s ode r Blocks geschrieben. delt. Zur Unterscheidung ist die Za hl im Dezimalsystem mit einer 10 und im Binärsys-
temmit einer 2 geken nzeichnet. Die fü h re nd en Nullen im Teil der Anweisung B00101010
G_enerell e~pfieh lt es sich beim Programmi eren, einer Variabl en zu Beginn immer habe ich hier weggelass en. Sie di enten im vorigen Beispiel nur zur Verdeutlichung, dass
emen defimerten Wert zuzuweisen, selbst we nn es nur der Wert 0 ist. Das erste Zuwei- es 8Bit sind (ein Byte). Übrigens: Durch das Bvor den Zahlen weiß die Arduino-Software,
sen eines Wertes nennt man übrigens initialisieren bzw. di e Initialisierung. Wenn Sie dass danach eine Binärzahl folgt.
Variablen. zu Beginn nicht 1m · ·t·1a1·JSJeren,
· k"onnen ste
· be1· bestimmten
· Systemen einen 4210
undefimerten
. Wert beinhalten ·1 · f · · ·
. wei s1e au emen Speicherb ereich des Co mputers ver- = 1010102
wersen, der nach dem Einschalten zu fä llige Werte enthält. Bei Ih re m Ard uino ist das : 1 X 25 + 0 X 24 + 1 X 2 3 + 0 X 2 2 + 1 X 2 1 + Ü X 2°
and_ers, da es im Hintergrund besond ere Mechanismen10 gibt, di e dafür sorgen, dass :1 X 3210 + 0 X 1610 + 1 X 8 10 + 0 X 4 10 + 1 X 2 10 + 0 X 1 10
Va~ablen automatisch mit dem Wert null in itialisiert werden. So lange Sie aber keine = 3210+810 + 2l0
Sp elche~ro~l e m e haben. weil Ihre Software für den Arduino zu groß wird, empfeh le ich
Ihnen, s1ch die In itialisieru ng von Variablen anzugewöhnen. Kommt U1nen etwas bekannt vor ? l, 2, 4, 8, 16, 32 ... ? Aufgrund des internen Binärsystems
entsprechen die einzelnen St ellen einer Zahl (von rechts gesehen) im Computer ni ch t
Bits, Bytes und Binä res der I, 10, 100, 1000, 10.000 sondern der 1, 2, 4, 8, 16, 32, 64, 128, 256 usw. Und jetzt wissen
Bestimmt haben Sie sich ge d rt . . . Sie auch, waru m zum Beispiel der Hauptspeicher (RAM) in Ihrem Computer immer mit
. wun e . warum d1e Anwe1sung zuvor x = B00101010 lautete
und mcht x = 42. In seinem tiefst en Innersten versteht em
. Computer im Prinzip nur 0 einem Vielfachen di eser Werte angegeben ist (zum Beispiel16GB RAM). Und wenn Sie

9 http://arduino.cc/de/ Reference/byte
10 http://www. nongnu.org/ avr-libc/ user-manuai/ FAQhtmii!Jaq_ varinit
II hllp://de.wikipedia.org/ wiki/ Dualsystem

138
139
bis hierhin alles verstanden haben, wissen Sie jetzt auch. wa rum Va riabl en vom Typ Der Typ >> unsigned int«
byte nur Werte zwischen 0 und 255 speichern können: Weil sie intern einen Speicher- Wenn Sie keine nega tiven Zahle n, sprich keine Vo rze ichen, benötigen, können Sie statt
platz von 8 Bit, also einem Byte, belegen. Dara us folgt : llllll11 2 = 25510 . Alles klar? Wenn int auch un si gned int 14 ve rw enden. Da bei diesem Variablentyp der Bereich -32.768 bis
nicht, auch nicht so schlimm. Merken Sie sich einfach, dass Sie in Variablen vom Typ _ nicht zur Verfügung ste ht, we il all e 16 Bit für den Wert verfügbar sind, kann er hier für
1
bytekeine größeren Zahlen als 255 speichern können. positive zahlen genutzt werd en. Sie können mit dem Typ unsigned int also Werte vo n 0
bis 65.535 (16 Bit = 2 Byte = 215 = 65.535) speichern. Die Schreibweise (Sy ntax) fo lgt wie
Der Typ " int« immerdem gleichen Prin zip :
Sicherlich wollen Sie auch einmal größere Zahlen als 255 speichern. Das geht mit einem
lnteger-Datentyp, kurz int 12 (eng!. integer, dt. Ganzzahn . Ganzzahl bedeutet »Zahl ohne unsigned int x = 1;
achkommastelle«. Variablen vom Typ int können bei einem Arduino Uno ganze Zah-
len von -32.768 bis 32.767 speichern. Das liegt daran, dass dieser Wert im Speicher als 16· Wenn Sie mit noch größere n Zahlen arbeiten wollen, schauen Sie sich den Datentyp
Bit-Wert gespeichert wi rd (zwei Byte)- davon 15 Bit für die Zahl an sich und ein Bit für longlS an. Er speichert Werte m it 32 Bit(- 2.147.483.648 bis 2.147.483.647).
das Vorzeichen (2 15 =32768). Auf einem Arduino Due hingegen werden Variablen diesen
Typ s mit vier statt mit zwei Byte gespeichert (32 Bit statt 16 Bit). Der Wertebereich geht DerTyp nfl oat«
dort entsprechend vo n -2.147.483.648 bis 2.147.483.647 (2 31 ). Wenn Sie also Programme wenn Sie Zahlen mit Nachkommastellen speichern wollen, müssen Sie den Variablen
für einen Arduino Due entwerfe n, denken Sie daran, dass diese eventuell auf einem des Typs float iG verwenden (engl.jloat, dt. Fließkommazah/, Gleitkommazahn . Das ka nn
Arduino Uno nicht funktionieren. Eine Variable vom Typ i nt deklarieren Sie wie folgt: zum Beispiel für Frequ enzen notwendig sein, und Sie werden diesen Typ verwenden,
i nt x = 25 ; wenn Sie in Abschnitt 7.3.1 lernen, was ein Piezo ist und wie er verwendet wird, um Töne
zu erzeugen. Die Syntax funktioniert wie bei allen ande ren Typen auch:

+ Überlauf! Oder: Was kommt eigentlich nach 32.767? float x = 47 .11 ; II x speichert hier den Wert 47 , 11.
II Deklariere die Variable x und weise ihr den Wert 32767 zu .
in t x = 32767;
II Erhöhe den Wert von x um 1 (siehe Abschnitt 6.6)
Wichtig: Ein Komm a ist e in Punkt !
Wenn Sie einer float-Variable ei ne n Wert zuweisen, müssen Sie entgege n der deut-
+
X =X + 1;
schen Schreibweise einen Punkt an der Stelle des Kommas verwenden. Das liegt daran,
Haben Sie sich mal gefragt, was bei obigem Code passiert? Welchen Wert hat x jetzt? dass der Erfinder der Programmiersprache C, Denn is Ritch ie, ein Amerikaner war. in den
Null ? 32.768? Die richtige Antwort lautet: -32.768. Wenn Sie die Gre nzen der max ima l USA werden Kommazah len mit einem Punkt anstatt eines Ko mmas versehen. Übri-
zulässig~n Werte überschreiten, erfolgt ein Überlauf zum nächstmög lichen zu lässigen gens: Das gi lt in Texten auch umgekehrt: Den Tausenderpunkt in großen Zah len erset-
"'!ert. Mogl_l c h_e~ei se kennen Sie noch die alten mecha nisc hen Fallblattanzeigen 13, wie zen die Amerikaner durch ein Komma. So werden zum Beispiel aus 10.000,63 EUR dann
~Je z~m Be 1 sp~el1m Flughafen in Frankfurt am Main noch heute eingesetzt werden. So 10,000.63 EUR. Denken Sie daran auch, wenn Sie englische Kommentare oder Beschrei-
ahnlieh Wie d1ese umkippenden Blätter verh ält es sic h mit ei nem Überlauf be i Va ria b· bungen in Ihrem Code verwenden möchte n.
len: Es begin nt bei de r Zä hlung einfach nvo n vorn «. Achten Sie da her beim Programmie-
ren darauf
.
dass • wenn Sie zum se·s
• ..
· 1· · p · ·
I p1e 1n emem ragramm eme Vanab le regelmaß1g
·· ·
~m ems ~rho hen, nach sehr lan ger Programmlaufzeit ein sehr hoher Wert (hier 32.767)
uberschntten werden kann und Sie in Ihrem Progra mmcode darauf vorbere itet si nd.

12 hrtp://arduino.cc/ de/ Reference/int 14 htt p://arduino.cc/ de/ Reference/ Unsignedlnt


13 http://de.wikipedia.org/ wiki/Fa/lblattanzeige 15 http://arduino.cc/ en/ Referen ce/ Long
16 http://arduino.cc/ de/ Reference/ Float

140
141
Der Typ «boolean « geprüft. Sie erhalten also eine Fehle rmeldung, bevor der Code überhaupt jemals zur
Ein sehr einfacher, aber hilfreicher Variablentyp ist der Typ boolean 17 • Er kann genau Ausführung kommt - und Ihren Robo ter irgend wo anstoßen lassen würde.
zwei Zustände speichern: t rue oder false (wahr oder falsch):

boolean x = fal se · 6.4.1 vordefi ni e rte Konstanten


Die Arduino-Programmierspra che beinhaltet auch einige vordefinierte Konstanten18
Diesen Typ könne n S.ie verwenden, um sich Zustände zu merken. Wenn Sie zum Beispiel Diese wichtigsten sind :
prüfen wollen, ob eine bestimmte Funktion schon einmal aufgerufen wurde, dann set-
,. true (entspricht >> wahr«)
zen Sie an geeigneter Stelle eine Variable auf true. An anderer Stelle im Programmab-
laufprüfen Sie diese dann auf true. Sie könnten das auch mit einer Variable vom Typ int ,. false (entspricht >>falsch « oder 0)
tun und diese auf null oder eins prüfen. Eine Variable vom Typ int benötigt aber auf 19
" HIGH
einem Arduino Uno zwei Byte und auf einem Arduino Due sogar vier Byte, während "LOW
eine Variable vom Typ boolean nur ein Byte im Speicher belegt. Da Mikrocontroller in
" INPUT
der Regel einen recht kleinen Speicher (RAM) haben, kann das bei größeren Program-
men ein wichtiges Kriterium sein. " OUTPUT
Und fragen Sie mich nicht, warum true und false in der Arduino-Programmi ersprache
Weitere Typen kleingeschrieben sind .
Di es waren noch nicht alle Datentypen, die es gibt. Ich möchte mich aber hier auf die
wichtigsten in diesem Buch verwendeten Datentypen beschränken.
6.5 #define (Präprozesso r-Anweis ung)

6.4 Konstanten Zu Beginn einiger Listings werden Ihnen Zeilen m it dem Befehl #defi ne 20 begegnen.
Diese Anweisung ersetzt automatisch im gesamten Quellcode einen Text durch e.inen
Neben.Variablen, deren Inhalte beliebig geändert werde n können, gibt es noch Konstan- anderen, bevor das Programm für den Arduino umgewandelt wird- wie die Suchen-
t~n . Wie der Name schon sagt, bleibt der Inhalt von diesen konstant. Er kann also nur Ersetzen-Funktion einer Textverarbeitung. Nur geschieht diese Ersetzu ng im Hinter-
emma/ definie rt und im weiteren Programmverlauf nicht mehr verändert werden. Oie grund, Ihr Code bleibt also unve rändert. #define wurde in der Vergangenheit oftmals als
De~nit~_o n erfolgt durch die Verwendung des Schlüsselwortes const und sieht beispiels· Ersatz von Konstanten genutzt. Der Nachteil ist jedoch, dass bei seiner Verwendung
we1se fü r den Typ i nt wie folgt aus: keine Prüfung auf Richtigkeit durch den Compiler durchgeführt wird. Einige Beispiele:
const i nt SPANNUNGMAX = 23;
#define Nam e Ersatz Erk lärung
Sie kö nnen Konstante n auch kJ · h ·b . #define RIGHT 1 Ersetzt 1 durch RECHTS.
.. . . emsc re1 en, es 1st aber zur leichte ren Unterscheidung
ub!Jch, Konstanten vollständig in Groß buchstaben zu schreiben. Wa rum Sie Konstan-
ten anstatt Variablen verwende ll t ?
#defi ne LEFT 2 Ersetzt 2 durch LINKS.
. . . n so en. Zur Fehlervermeidung! Wenn Sie zum Bei-
spiel bei emem sehr teu R b . · ·
. ren ° oter emen Entfe rnungswert defin iert haben bei de m er ffdefine TE XTl "Hey !" Erset zt TEXTl durch "Hey ! ".
emem Hinderni s ausweiche LI d ·'
. . n so , ann wo 1len Sie diesen Wert während des Pro-
gramms S J~her mcht ve rsehentlich verändern . Davor schützen Konsta nten denn diese Tabelle 6.1 Beispiel für die Verwendung von »#define«
werden beim Umwandeln und Übertragen Ihrer Software auf den Ardu;no-Roboter
18 http://ardllino.cc/ de/ Reference/ Constants
17 http://a rdu ;no.ccjde/ReferencejBoolea n Variables l9 Was HIGH, LO W, INPUT und OUTPUT bedeute n, habe n Sie in Abschnitt 4.2.1 gelern t.
20 http://arduino.ccj en/ Reference/ Define

142
143
-- .• '.;n•• ~].'i6!(~[;';·,:
1 6 Programmiergrundlagen c .. ·:.~, -di,i.~~~:,;_
'

Es ist üblich, den amennach dem #define großzuschreiben. Im späteren Code können x--; 11 Subtraktion (entspricht x = x - 1)
die Namen dann wie Konstanten verwendet werden (siehe Listing 6.5). x*=2; 11 Multiplikation (entspricht x = x * 2)
xl=2 ; 11 Division (entspricht x = x I 2)
#define RIGHT 1
listing 6.7 Die gängigsten Operatoren in kurzer Schreibweise
#def ine LEFT 2
#define TEXTl "Hey! "

if (x = RIGHT) 6.7 Kontrollstrukturen


{
6.7.1 Der Befehl uif«
lcd .print(TEXT1) ;
Der Befehl ifZI dient dazu, eine oder mehrere nachfolgende Anweisungen nur unter
bestimmten Bedingungen auszuführen. Die Syntax für diesen Befehl sieht beispiels-
List ing 6.5 Die Verwendung von Namen, die per »#define« gesetzt wurden
wei e wie folgt aus:
Beachten Sie, dassamEnde einer #define-Zeile kein Semikolon steht!
i f (bedingung == 1)
{
6.6 Operatoren II Mach was
}
Operatoren dienen unter anderem dazu, arithmetische Operationen durchzuführen.
Stellen Sie sich vor, Sie wollen bei Ihrem Roboter die An zahl der erkannten Hindernisse II Und hier geht es weiter .
auf einem Display anzeigen . Dann müssen Sie bei jedem Hindernis einen Wert um eins
erhöhen (addieren). Eine Reihe Operatoren, die Sie beim Programmieren vermutlich
listing 6.8 Verwendung des »if«-Befehls
häufiger benötigen werden, sind Plus {Addition), Minus (Subtraktion), Mal (Multiplika·
tion) und Geteilt (Division). Diese werden in der Programmiersprache C für Ihren Hierbei werden alle Befehle, die innerhalb der geschweiften Klammern 0 stehen, aus-
Arduino beispielswe ise so wie in Listing 6.6 angewendet
geführt, wenn bedingung == 1 zutrifft (»wahr ist«). Danach- oder wenn die if-Bedin-
x= x+ 1; II Addition (Erhöhe x um eins) gung nicht zutri fft - wird der Programmablauf beim nächsten Befehl nach der
x =x+ 2; II Addition um zwei schließenden geschweiften Klammer ausgeführt.
x =x - 1; II Subtraktion (Subtrahiere eins von x)
x = x*
x= xI
2; II
2; II
Multiplikation (Nimm x mal zwei)
Division (Teile x durch zwei)
Mein Block- dein Block
Die geschweiften Klamm ern {} dienen dazu, Anweisunge n in Blöcke aufzutei len. Ein
+
Listing 6.6 Versch iedene Ope ratoren im Einsatz Block beginnt und endet immer mit einer solchen Kla mmer. Sie werden beim Them a
Variablen in Abschnitt 6.9.3, »Begre nzte Halt barkeit - oder: de r Gül tigkeitsbereich vo n
Umga ngssprachlich kann der erste Befehl wie folgt beschrieben werden: »N imm den Variablen«, noch erfahre n, wie wichti g solche Blöc ke sind.
aktu ellen Wert von x, addiere eins dazu, und speichere ihn danach wieder in x. « Da Pro-
grammierer gern Zeit beim Tippen sparen, gibt es für viele Operationen auch eine Kurz- Ein Beispiel in di esem Zusammenhang aus der Praxis: Sie wollen einen Blumentopf ~it
schreibweise, die das Gleiche durchführt wie die Zeilen zuvor. Diese ist in Listing 6.7 Wasser versorgen, wenn die Erde sehr trocken geworden ist (we niger als 10 % Feuc~ttg­
dargestell t.
keit). Dazu haben Sie einen Feuchtigkeitssensor in die Blumenerde gesteckt, der emen
x++ ; II Addition (ents pricht x = x + 1)
x+= 2; II Add i tion (ent spricht x = x + 2) 21 hltp://arduino.cc/ de/ Reference/ lf

144
145
Messwert von 0 bis 100 % Fe uchtigkeit liefert. Davon ausgehend, dass Sie den Sensor in
Syntax Bedeutung
Ihrem Programm bereits eingelesen haben, sähen die Anweisungen dann wie folgt aus:
(a>l) && (b>l) a ist größer 1 UND b i st größer 1
II Erde bereits trocken? Sprich: Feuchtigkeit < 10 %?
if (sensorMess1vert < 10) (!a) a ist NICHT wahr (z um Beispiel a = 0)
{
II Pumpe für eine Sekunde Wasser in die Blumenerde. Tabelle 6.2 Li ste möglic her Operatoren (Forts.)
pumpeE inschalten() ;

II Warte eine Sekunde.


delay(1000) ;
Achtung, potenzielle Fehlerquelle!
Achten Sie bei der Prüfung auf »ist gleich « darauf, dass Sie immer zwei Gleichheitszei-
I•
chen»== « verwenden statt nur einem >>=«.Die Arduino-Software wird be im Prüfen nicht
pumpeAusschalten() ; festste llen, wenn Sie versehentlich nur ein Gleichheitsze ichen verwendet haben. Mit nur
einem Gleichheitszeichen findet aber eine Zuweisung anstatt einer Prüfu ng statt (zum
II Warte 5 Minuten, bis Erde durchfeuchtet ist. Beispiel a = 1). Da in diesem Fall die Zuweisung a = 1 bei der i f -Prüfung immer >>wahr«
delay(3 00000) ;
} ergibt, wird der Code innerhalb der geschweifte n Klammern immer ausgeführt! Das ist
ein häufig vorkommender Tippfehler, der leic ht übersehen werden kann.
II Hier weiteren Code ausführen

List ing 6.9 Programmierbeispiel für den »if«-Befehl


Tipp
Sie können zum Beispiel anstatt if (a == 1) auch if (1 == a) schreiben. Die Ard uino·
+
Software >>versteht« auch diese Schreibweise. Hie r würde sie sofort erkennen, wenn Sie
Sie können beim Prüfen einer Variable versch iede ne Operatoren zum Vergleichen ver-
ein Gleichheitsze ichen vergessen hätten, und Sie mit einer Fehlermeld ung darauf auf-
wenden (Verg leichsoperatoren ).
merksam machen.
Syntax Bedeut ung
a == b a ist gleich b
6.7.2 Der Befehl "if...else«
a != b a i st ungleich b BeiderVerwendung des i f -Befehl s können Sie du rch die Nutzung von else 23 ei ne erwei -
a <b a i st kl ei ner als b terte Ko ntrolle über den folgenden Verlauf erlangen. Das Prinzip sieht wie folgt aus:
a >b a i st größer als b if (bedingung == 1)
{
a <= b a ist kleiner oder gleich b
II Aktion A
a >= b a ist größer oder glei ch b }
else
(a>1) II (b>1) a i st größer 1 ODER 22 b ist größer 1
Tabelle 6.2 Liste möglicher Operatoren II Aktion B
}
22 11. && und ! sind sogenannte boafesche Operat·oren
Listing 6.10 Verwendung des »if...e lse« -Befehls
(siehe auch http://arduino.cc/en/ pm wiki.php?n=Reference/ Boo/ean).

23 http://ardu ino.cc/de/ Ref erence/ Else


146
147
Das bedeutet : Wenn bedingung == 1 wahr ist, wird Aktion A ausgeführt; andernfalls
(else) wird Aktion Bdurchgeführt. Ein Beispiel aus der Praxis : Sie wollen eine Pflanze bei
sehr starker Sonne mit einem Sonnenschirm schützen . Wenn die Sonne aber nur leicht
scheint (normales Tageslicht oder leicht bedeckter Himmel). soll die Pflanze ganz nor-
mal im Licht stehen. Dann könnte der Programmcode so wie in Listing 6.J1 aussehen:

II Scheint die Sonne sehr stark?


if (sonneSchei ntSehrStark == true )
{
II Sonnenschirm ausfahren
schirmOeffnen () ;
}
el se
{
II Sonnenschirm schließen
schirmSchliessen();
}

Listing 6.11 Programmierbeispiel für »if. ..else«

Bei der if .. . else-Anweisung wird also zwi ngend eine der beiden Aktionen durch·
geführt. immer.

6.7.3 Die ))switch((-Anweisung

Wenn Sie ein Programm schreiben, bei dem Sie viele ve rschiedene Zustände ei ner Vari·
ablen abfragen und unterschiedlich darauf reagieren wollen, könnten Sie das mit
if · · · else tun. Dies wird aber - insbesondere aufgrund der Einrücku ngen und Ver·
Sc hachtel ungen- sehr schnell unübersichtlich, wie Sie in Listing 6.12 gut erkennen:
if (x == 1)
II Ausführu ng Aktion 1
else
if (x == 2)
II Ausführung Aktion 2
else
if (x == 3)
Ausführung II Akt i on 3
else
if (x == 4)
Ausführung// Akt ion 4
else
II und so weiter und so fort
Listi ng 6.12 Viele »if...e lse«-Anweisungen machen Ihren Code un übersichtlic h.

Es geht auch oh ne geschwe ifte Klammern, aber ...


ln Listing 6.12 habe ic h, um es etwas kürzer zu halten, auf die geschweiften Klammern
+
verzichtet. Das können Sie bei Befehlen wie if und for auch tu n. Ich rate Ihn en aber
dringend davon ab! Denn schnell vertut man sich mal mit eine r Zeile oder ei nem Semi-
kolon oder fügt etwas le ichtfertig ein . Die Arduino-Software ginge in diesem Fal l näm-
lich davon aus, dass nur die nächste Zeile zur if- oder else-Anwe is ung ge hört! Und das
ka nn schwere Folgen haben 24

Um unterschiedliche Bedingungen einfacher abzufragen, gibt es daher die swi tch.. .


case-Anweisung 25, die wie fo lgt genutzt wird :

switch (variable)
{
case 1:
I I Ausführung Aktion 1
break ;
case 2:
I I Ausführung Aktion 2
break ;
case 3:
II Ausführung Aktion 3
break;
defaul t:
II Ausführung, wenn zuvor keine Übereinstimmung .
II Der defa ult-Zwe i g ist jedoch optional .

Listing 6.13 Verwendu ng der »switc h...case« -Anweisu ng

Beim Durchlaufen der einzelnen Anweisungen wird zu Beginn die vari able auf ihren
Inhalt geprüft. Ist der Wert eins, werden die Befehle nach ca se 1: ausgeführt (eng!. case,
dt. Fall). Beim Wert zwei geht es weiter bei case 2: usw.- und zwar gena u bis zum darauf
folgenden break-Befehl. Eine Besonderheit ist hier noch der default -Fa ll (eng!. default,
24 iltlp://www.spiegel.de/netzwelt/ web/ gotoj'ail-a pplcsjurchtbarer-feh/er-a-955154. /l tml
25 http://arduino.cc/ de/ Reference/ SwitchCase
dt. Standard). Er ist optional, kann also weggelassen we rden. Er wird jedoch im mer aus-
geführt. wenn keine der vorigen case-Zeilen passten.
Sie können in der switch-Anweisung natürli ch auch auf andere Werte als 1, 2 oder 3
abfragen. Die einzige Bedingung ist jedoch, dass di e Variable vo m Typ int se in muss.

+ Potenzielle Fehlerquelle oder so gewol lt: die fehlende »break«-Anweisung


Achten Sie beim Programmieren peinlich genau darauf, die An weisung break innerhalb
der jeweiligen case-Biöcke zu setze n. Ansonsten wird die Bearbeitung im nächsten
Block fortge setzt I Das kann durchaus gewünscht sei n, wenn Sie zum Beispiel für einige
Fälle dieselben Aktionen durch fü hren wollen . Dies habe ich in List ing 6.14 als Beispiel
dargeste llt - auch wenn das in der Praxis wohl eher die Ausnahme ist.
switch (variabl e)
{
case 1 :
case 2:
II Ausführung von Aktion 1 und Aktion 2
break;
case 3 :
II Ausführung von Aktion 3
break ;
default :
I I Ausführung, v1enn zuvor keine Übereinstimmung .
II Der default-Zweig i st jedoch nicht Pflicht .
}

Listi ng 6.14 Der »switch ... case«-Befeh l mit zwei gleichen Fällen

6.8 Schleifen

Oftmals möchten Sie in einem Programm dieselben Befehle mehrfach hintereinander


ausführen. Sie wollen zum Beispiel später Ihren Roboter bei einem Hindernis dreimal
piepen lassen. 26 Für Vorgänge dieser Art dienen Sch leifen. Eine Schleife enthält einen
oder mehrere Befehle, die ausgeführt werden, solange eine bestimmte Bedingung
erfü ll t ist oder bis eine bestimmte Bedingung eintritt. Es gibt dazu verschiedene Arten
von Schleifen für unterschiedliche Zwecke, die ich Ihnen jetzt erläutere.

26 Wie Sie Ihren Roboter dazu bringen, Töne von sich zu geben, erfahren Sie in Abschni tt 7.3 , »Hört
mich jemand ?- Ausgabe von Signalen «.

150
G.8.1 Die ))for«-Schle ife
Eine for27_Schleife wird in der Regel verwendet, um Akt ionen eine bestim mte Anzahl
mal wiederholt auszuführen. Das erfolgt dadurch, dass zu Beginn eine Variable initiali-
siert wird und bei jedem Schleifendurchlauf die Befehle innerhalb der Schleife ausge-
führt werden. Anschließend wird der Wert um einen anderen Wert erhöht oder
verringert, bis die Variable den gewünschten Wert erreicht hat. Oftmals werden diese
variablen nur innerhalb der for- Schleife genutzt und darum auch erst innerhalb der
Schleife deklariert. Die Schreibweise sieht dann wie fo lgt au s:

for (int x = 0; x < 42 ; x++)

II Führe hier etwas 42-mal aus

listing 6.15 Die Anwendung der »for «-Schleife

Umgangssprachlich erklärt, bedeutet die vorige Anweisung: )) Deklarie re x, und setze


den Wert von x auf 0 (Initialisierung). Führe dann den Code innerhalb des Blocks aus,
solange xkleiner als 42 ist. Erhöhe danach x um eins (nach jedem Schleifendurchlaut).«

Achtung, mögliche Fehlerquelle: der Startwert und seine Prüfung I•


Bei for- Schleiten ist es wichtig, auf die exakte Formulierung der Prüfbedi ngung zu ach-
ten. Auch mir passiert es häufiger, dass ich mit dem Startwert 0 der Schleifenvariablen
durcheinanderkomme. Wenn Sie es als einfacher empfinden, können Sie da her au ch
folgende Sch rei bwe ise statt der vorigen verwenden:
!or ( int x = 1; x <= 42 ; x++)
{
II Führe hier etwas 42 -mal aus
}
Haben Sie den kleine n Unterschied bemerkt? Die Variab le x wird einfach mit eins initia-
lisiert, und die Prüfung bei jedem Durchgang lautet danach »solange kleiner oder
gleich ist«. Letztend li ch ist es eine Frage des Geschm acks, wie Sie das tu n. Es sei denn,
Sie benötigen den Wert null ausdrücklich, zum Beispiel bei der Verwendung von so-
genannten Arrays28.

27
http://arduino.cc/de/ Reference/Jor
28
http://arduino.cc/en/ Reference/ A rray

151
Natürlich können Sie auch Werte herunterzä hlen statt hoch. Dann sähe die Schleife
aus :

for (int x = 42 ; x > 0; x-- )


{
II Führe hier etwas 42 -mal aus
}

Listing 6.16 Diese »fo r«-Schleife zählt herunter.

Die for-Schleifeist übrigens mächtiger, als sie auf den ersten Blick auss ieht. Sie müs ~
nicht einfach Werte nur um eins erhöhen oder verringern. Beliebige math ematisc
Operationen sind an dieser Stelle möglich :

for (int X = 10; X <= 100; X = X + 10 )


{
II Führe hier et was 10-mal aus
}
Listi ng 6.17 Diese Schleife zäh lt in Zehnerschritten.

6.8.2 Die »while«-Schleife


Für den Fall, dass Sie nicht vorher schon wissen, wie oft Sie eine Aktion durchfühl
wollen, gibt es die ~1hile 29 -Schleife. Die Syntax dazu sieht wie folgt aus :

whi le (bedingung == 1)
{
II Führe hier etwas aus , solange die Bedingung erfüllt ist .
}

Listing 6.18 Die Anwend un g der »while«-Schleife

Das bedeutet, dass die Anwe isungen innerhalb der geschweiften Klammern stän<
wiederholt ausgeführt werden, solange die Bedingung erfüllt (wahr) ist- und das au
»unendlich« lange. We nn die Bedingung also durch einen Programmierfehler niem
>>fa lsch« oder »unwahr« ergibt, wird Ihr Programm hier festh ängen. Das nennt m
eine Endlosschleife. Da bei der wh ile-Schleife »oben« entschieden wird, ob der Blc
innerhalb der geschweiften Klammern ausgeführt wird, nennt man sie auch kop}
steuert. Ein Beispiel zur Verwend ung der wh ile-Schleife : Stellen Sie sich vor, Sie hab
Ihr Arduino-Board als Alarmanlage programmiert. Nun wurde Alarm ausge löst, und
29 http://a rduino.cc/de/ Reference/while

152
1leife so wollen, dass eine LED so lange blinkt (oder eine Hupe an- und ausgeht}, bis jemand den
Alarm ausschaltet. Das Ausschalten des Alarms erfolgt hierbei über einen eigenen
Reset-Taster, der die ganze Zeit abgefragt wird 30, solange der Alarm ertönt bzw. die LED
blinkt. Der Code dazu würde so wie in Listing 6.19 aussehen :

II Solange Taster nicht gedrückt ...


while ( resetTasterGedrueckt() == false
{
II Alarmton AN!
schalteLEDein () ;
müssen schalteHupeEin() ;
1atische
II Warte eine Sekunde.
delay( 1000) ;

II Alarmton AUS!
schal teLEDaus () ;
schalteHupeAus () ;

II Warte eine Sekunde .


delay(lOOO) ;
}
listing 6.19 Ein Beispiel für eine ••while «-Schleife
1führen

6.8.3 Die ))do... while«-Sch leife


Während die while-Schleife die zu erfüllende Bedingung zu Beginn überprüft, führt die
do ... while-Schleife31 diese Prüfung erst am Ende durch. Das macht auch ihren Haupt-
unterschied aus: Die innerhalb der Schleife enthaltenen Anweisungen werden mindes-
tens einmal ausgeführt. Der Aufbau ist ansonsten prinzipiell identisch:

do
ständig
{
as auch
II Führe hier etwas aus , solange die Bedingung erfüllt ist .
:~iemals
II Mindestens aber einmall
nt man
} 1vhile (bedi ngung == 1);
~r Block
kopjge- listing 6.20 Die Anwendu ng der »do ...wh ile«-Sch leife
~haben
und Sie 30 Wie Sie einen Taster oder Schalter an Ihrem Ard uino- Board anschließen und diesen abfragen,
lernen Sie in Abschnitt 7.2. 1 und Abschnitt 7.2.2 .
31 IJttp://ard ui no.cc/ de/ Refere nce/ Do Wh ile

153
' 0
·· · .. ·.
o- ~A o" o : '~ 0
· 6.8 Schleifen

at ürlich können Sie auch Werte herunterzähl en statt hoch . Dann sähe die Schleife so dass ei ne LED so lange blinkt (o der eine Hupe an- und ausgeht), bis jemand den
wo llen '
aus : Alarm ausschaltet. Das Ausscha lten des Ala rms erfolgt hierbei über einen eigenen
Reset-Taster, der die ganze Zeit abgefragt wi rd 30 , solange der Alarm ertönt bzw. die LED
for (i nt x = 42 ; x > 0; x-- ) blinkt. Der Code dazu würde so wie in List ing 6.19 aussehen:
{
II Führe hier etwas 42-mal aus II Solange Taster nicht gedrückt .. .
Hhile ( resetTasterGedrueckt () == false
{
Listing 6.16 Diese »for«-Sch leife zählt he runte r.
1I Alarmton AN!
schalteLEDein();
Die f or-Schleifeist übrige ns mächtiger, als sie auf den erste n Blick auss ieht. Sie mü ssen schalteHupeEin () ;
nicht einfach Werte nur um eins erhöhen oder verringern . Belieb ige mathemati ehe
Operationen si nd an dieser Stelle möglich : II Warte eine Sekunde .
delay(lOOO) ;
for (int X = 10; X <= 100; X =X + 10)
{ II Alarmton AUS!
II Führe hi er etwas 10-ma l aus schalteLEDa us () ;
schalteHupeAus () ;
Listing 6.17 Diese Sch leife zä hlt in Zeh nerschritten.
II Warte eine Sekunde .
delay (1000) ;
6.8.2 Die »while«-Schleife }

Für den Fall, dass Sie nicht vorher schon wissen, wie oft Sie eine Akt ion durchführen listing 6.19 Ein Beis piel fü r eine >>while«·Schleife
wollen, gibt es die while29 -Schleife. Die Syntax dazu sieht wie fo lgt aus:

while (bedingung == 1) 6.8.3 Di e ))do ...while «-Schl eife


{ Während die whil e-Schleife di e zu erfü llende Bedingung zu Beginn überprüft, führt die
II Führe hier e was aus , solange die Bedingung erfüllt ist . do ...while-Schl eife31 diese Prüfung erst am Ende durch. Das macht auch ihren Haupt-
}
unterschied aus: Die inn erh alb der Schl eife enthaltenen Anweisungen werden mindes-
Listing 6.18 Die Anwendung der "While«-Schleife tens einmal ausgeführt. Der Aufb au ist ansonsten prinzipiell identisch:

do
D~s bed eutet, dass die Anweisungen innerhalb der geschweiften Klammern ständig
Wi ederholt ausgeführt werden, solange die Bedingung erfü llt (wahr) ist - und das auch
»unendlich« lange · Wenn d1'e Bed'mgung a1so durch emen
· · · 1s II Führe hier etwas aus , sol ange die Bedi ngung erfüll t ist .
Programmterfehler mema
))fal sch« oder »unwahr e 'bt · d Ih II Mindestens aber einmal!
. · « rg1 , wtr r Programm h ier festhängen. Das nennt man
) while (bedingung == 1);
eme Endlosschleife. Da bei der wh ile-Schleife »oben« entschied en wird ob der Block
innerhalb der geschweiften Kl ammern ausge t uhrt
·· ·
wird, nennt man sie' auch kopfge· listing 6.20 Die Anwe ndun g der "do...while«-Sch leife
steuert E' B · · 1
· m eispie zur Verwendung der while-Schleife: Stellen Sie sich vor, Sie haben
fhr Ard uino-Board als Alarmanlage programm iert. Nun wurde Alarm ausgelöst, und Sie 30 Wie Sie einen Tas ter oder Sch alter an Ihrem Arduino-Board anschl ießen und diesen abfragen,
29 lernen Sie in Abschnitt 7.2.1 und Abschnitt 7.2.2.
http://arduino.cc/ de/Referencej while 31 http://arduino.cc/ de/ Reference/ Do While

152
153
Da bei der do ... \vh ile-Schleife am Ende en tschi eden wird, ob der Block danach ausge·
fü hrt wird, nenn t ma n sie auchfußgesteuert

6.9 Funktionen

Sobald Ihre Programme etwas größer werden, könn en sie auch schnell unübersichtlich
werden. Außerdem wird es mit der Zeit passieren, dass Sie mehrfach wiederkehrende
identische Codezeilen in Ihre r selbst geschriebenen Software haben. Um Programme
übersichtl icher zu gestalten, sollten Sie diese dah er möglichst modularisieren- sprich:
in kleine Teile {Module) zerlegen. Dieses erhöht ni cht nur di e Lesbarkeit, sondern auch
die Wiederverwendbarkeit von Code. Diese Module innerhalb Ihres Programms werd en
Funktionen genannt. Eine Funktion wird üblich erweise zu Beginn oder ganz am Ende
Ihres Programms eingefügt und kann daraufhin an anderen Stellen in Ihrem Programm
immer wiede r mit nur einer einfachen Anwe isung aufgerufen werde n. Das bedeutet im
Programmablauf, dass erst die >>norm alen « Befehle in Ihrer Softwa re der Reihe nach
abgea rbeitet werden. An der Stelle, wo der Aufruf der Funktion erfolgt, we rden die Zeilen
innerhalb dieser Funktion abgearbeitet. Danach wi rd di e Bearbeitung an de r Stelle fort-
gesetzt, an der die Funktion zuvor aufgerufen wurde.

Funktione n könn en eine Reihe von Befehle n ausführen und dabei ein Ergebnis zurück-
liefern - das müssen sie aber nicht t un. Typische Funktionen, die kein Ergebnis zurück-
liefern, könnten zum Beispiel »Fa hre geradeaus « oder auch »Setze alles auf die
Gru ndeinstellungen zurück« sein. Im Gegensatz dazu stehen Funktionen, die einen
Wert zurückgeben - den sogenannten Rückgabewert. Typische Beispiele dafür wären
»Addiere di e Za hlen A und B, und gib das Ergebnis zurück« oder »Rechne den Sensor-
wert X in eine Entfernung in Zen timetern um, und gib das Ergebnis zurück«. Grundsätz-
lich sollten Sie überall, wo es nur möglich ist, mit Rückgabewerten arbeiten. Denn diese
werden auch vielfach genutzt, um festzustellen, ob die Anweisungen innerhalb der
Funktion einwandfrei ausgefü hrt wurden. In diesem Fall werden häufig Rückgabewerte
wie t rue bei Erfolg oder false im Fehlerfa ll benutzt. Ein Be ispiel dazu : Die fu nktion
»Fahre ge radeaus«, bei der auf einen Rückgabewert verzichtet werden könnte, könnte
stattdessen besse r wie folgt geschrieben werd en :
.,.. Schalte Pi n fü r Motor-Bremse A auf LOW .
.,.. Wenn hierbei ein Fehler auftrat, gib f alse zurück .
.,.. Schalte Pi n für Motor-Bremse B aufLOW .
.,.. Wenn hierbei ei n Fehler auftrat, gib fa l se zurück.
.,.. Wenn alles ein wa ndfrei lief. gib true zurück.
Das ist nur ein einfaches Beispiel für dasgrundsä tzli che Prinzip. Wie werden aber Fu nk-
tionen genau definiert? Die Schreibweise (Syntax) für Funktionen ohne Rückgabewert
sieht wie folgt aus :

Funktion ohne Rückgabewe rt :

void funktionsname ()

II Anweisungen

Beispielfunktion :

void fahreGeradeaus ()
{
II Anweisungen
loeseMotorBremseA() ;
loeseMotorBremseB () ;
}

listing 6.21 Eine einfache Funkti on ohn e Rüc kgabewert

Sprachlich ko rrekt muss es heißen : »Der Rückgabetyp der Funk tion ist void«. Das Wort
void vor dem Funktionsnamen bedeutet übersetzt so viel wie >>leer«, was eben genau aus-
sagensoll, dass diese Funktion keinen Wert zurückgibt. Wenn Sie eine Funktion schreiben,
die keinen Wert zurückgibt, müssen Sie den Typ void zwingend davor schreiben. Ansons-
tenerhalten Sie beim Kompilieren Ihres Programmcodes folgende Fehlermeldung:

error : ISO C++ forbids declaration of ' xyz ' wi th no type

Funktionsnamen werden, wie auch Variablen, üblicherweise kleingeschrieben. Die


Schreibweise für Funktionen mit Rückgabewert sieht wie folgt aus :

Funktion mit Rückgabewert:

Rückgabetyp funktio nsname ()


{
II Amveisungen

return Rückgabewert ·
} )

155
Beispielfunktion: 6.9.1

boolean reset() Wiei1


{ spiel
II Im Fehlerfall nfalse« zurückgeben weite
if (datenSpeichern() == fa l se) wie fc
{
return false ; Funk

Rückg
II Allesokay :- )
{
return true;
} II
Listing 6.22 Ei ne Fun ktion mit Rückgabewert vom Typ »boolean « ret
Aufgerufen wird eine Funktion immer mit ihrem Namen und Kl ammern dahinter, zum
Beispiel so:
Beisr
reset() ;

Wie Sie sehen, ist der Rückgabewert in Listing 6.22 vom Typ boolea n. Er ist hier also
if
immer true oder false. Nichts anderes. Rückgabewerte werden mit dem Befehl return
zurückgegeben. Sie können Variablentypen jeder Art zurückgeben, al so zum Beispiel
auch i nt oder float .

I• Point of no return-es gibt ke in Zurück!


Beachten Sie, dass de r Befehl ret ur n nicht nur einen Wert zu rückg ibt, so nd ern dass
auch die Bearbeit ung des Codes in eine r Funktion an di eser Stel le beendet wird und an if
die Stelle des Aufrufs der Fu nktion zurückgekehrt wi rd. Alle Anwe isu ngen, die Sie nach
der r eturn-Zeile einfügen, we rd en also niemals ausgeführt!
boolean mei neF un ktion ()
{
II mach irgendetwas
II ...
II
return true; re

II Di ese Zeile wird niemals ausgeführt!


X = X + 1; listir

Listing 6.23 Ein e Fun ktion mit niemals erreichter Anweisung

156
6.9.1 Param eter und Argumente
Wieich bereits gesagt habe, ist es hi lfreich, sich wiederholende Aufga ben, wie zum Bei-
spiel Berechnungen, in Funktionen durchzuführen . Um Funktionen di ese We rte zur
weiteren Verarbeitung zu übergeben, werden Parameter gen utzt. Die Syntax dazu sieht
wie folgt aus:

Funktion mit einem Para meter (und Rückgabewert) :

Rückgabetyp Funkti onsname(Variablentyp Variablenname)


{
II Anweisungen

return Rückgabewert ;

Beispielfunktion mit einem Parameter (und Rückgabewert) :

boolean schalteMotorEin ( int motor)


{
if (motor == 1)
{
II Hier Motor 1 einschalten
II Wenn alles fu nktioniert hat , true zurückgeben:
return true ;
}

if (mot or == 2)
{
II Hier Motor 2 einschalten .. .
II Wenn alles funktioniert hat , true zurückgeben :
return true;
}

II Variable motor enthielt weder 1 noch 2.


return false ·
} '

listing 6.24 Eine Funktion mit einem Pa rameter vom Typ »int «

157
Beispielfunktion: 6.9.1 Parameter und Argumente

boolean reset () Wie 1.ch bere1·t s gesagt habe · ist es hilfreich, sich.. wiederholende Aufgaben,
. . wie zum Bei-
. Berec hnun gen . in Funktionen durchzuführen. Um FunktiOnen d1ese Werte zur
spiel
{
II Im Fehlerf all »false« zu r ückgeben . vera'·IJ eitung zu übergeben, werden Parameter genutzt. Die Syntax dazu sieht
weiteren
if (datenSpeichern() == false ) wie folgt aus:
{
return false ; Funktion mit einem Parameter (und Rückgabewert):
}
Rückgabetyp Funktionsname(Variablentyp Variablenname)
II Al l esokay :- )
{
return true;
}
11 Anweisungen
Listing 6.22 Eine Funktion mit Rückgabewert vom Typ »boolean« return Rückgabewert ;

Aufgerufen wird eine Funktion immer mit ihrem Namen und Klammern dahinter, zum
Beispiel so:
Beispielfunktion mit einem Parameter (und Rückgabewert) :
reset();
boolean schalteMotorEin( int motor)
Wie Sie sehen, ist der Rückgabewert in Listing 6.22 vom Typ boolean. Er ist hier also
immer true oder false. ichts anderes. Rückgabewerte werden mit dem Befehl ret urn if (motor == 1)
(
zurückgegeben. Sie können Variablentypen jeder Art zurückgeben, also zum Beispiel
auch int oder float. II Hier Motor 1 einscha lten . . .
II Wenn alles funktioniert hat , t rue zurü ckgeben :
I• Point of no return-es gibt kein Zurück!
return true;

Beachten Sie, dass der Befehl retu rn nicht nur einen Wert zurückgibt, sondern dass
auch die Bea rbeit un g des Codes in ei ner Funktion an diese r Stelle beendet wird un d an if (motor == 2)
die Stell e des Aufr ufs de r Funktion zurückgekehrt wird. Alle Anweisungen, die Sie nach (
der return-Zeile einfügen, we rde n also niemals ausgeführt! II Hier Motor 2 einschalten
boolean me ineFunktion() II Wenn alles funktioniert hat , true zurückgeben :
{ return true ;
II mach irgendet was }
II ...
II Variable motor enthielt weder 1 noch 2.
return true ;
return false ;
}
II Diese Zeile wird niemals ausgeführt!
X = X + 1; listing 6.24 Ei ne Fun kt ion mit ei nem Para meter vo m Typ »int «

Listing 6.23 Ei ne Funktion mit niemals erre ichter Anwe isun g

156
157
6.9.2 Argumente
6.9.3 Begrenzte Ha ltbarkeit- oder : der Gültigkeitsbereich von Variablen
Damit Sie später als Experte erkannt werden, so llten Sie sich gleich an die korrekten An dieser Stelle muss ich noch auf ein wichtiges Thema eingehen, das oft für Verwir-
Begriffl ichkeiten gewö hnen. Darum führe ich an dieser Stell e noch einen weiteren rung sorgt: den Gü ltigkeitsbereich von Va riabl en. Wenn Sie eine Variab le in Ihrem
neuen Begriff ein: das Argument. Als Argumente werden die Daten bezeichnet, die an Arduino·Programm außerh alb irgend einer Funkt ion deklarieren, können Sie diese
eine Funktion übergeben und von Parametern aufgenommen werden. Zu kompliziert? überall in Ihrer Software verw end en. Man sagt auch, es ist eine globale Variable. Im
Okay, hier ist ein einfaches Beispiel: Sie haben eine Funktion, di e die Zahlen A und B Gegensatz dazu stehen lokale Variab len. Diese sind nur innerhalb eines begrenzten
addieren soll. Das Ergebnis der Add ition (Summe) in der Funktion ist der Rückgabewert. Bereichs, also lokal. bekannt. l-Iierzu ein paar Beispiele. In Listing 6.27 sehen Sie die Ver-
Die Werte (Za hlen), die Sie add ieren wollen und an die Funktion übergeben, sind die wendung der globalen Variablen x, die überall im Code verwendet werden kann.
Argumente. Innerhalb der Funktion sind die Argumente dann in Form von Parametern
(hier a und b) wie Variablen verfügbar. Die Funktion sieht dann so wie in Listing 6.25 aus: 11 Die globale Variable x ist jetzt überall bekannt.
int x : 42;
i nt summe(int a, int b)
{
void setup ()
II Addi ere die Zahlen a und b, und gib die Summe zurück . {
return (a + b) ; II x kann hier verwendet werden.
X = 43 ;

listing 6.25 Beispielfun ktion mit zwei Parametern (»a« und »b«) vom Typ »int«

void loop()
Wie Sie sehen, können Sie bei Funktionen nicht nur einen, sondern beliebig viele Para·
{
meternutzen- sogar mit unterschiedlichen Variablentypen. Diese werden dann jeweils
II x kann auch hier verwendet werden .
durch ein Komma getrennt. Man spricht hier auch von einer Parameterliste. Die Syntax
X = 44 ;
dazu sieht wie folgt aus:

~üc kgabetyp Funktionsname(Typl Vari ablel , Typ2 Variable2 , TypN VariableN)


void meineFunktionl ()
II Am>~eisungen {
II x kann auch hier verwendet werden.
return Rückgabewert; X = 45;
} }

Listing 6.26 Funktion mit zwei Parametern (Syntax) Listing6.27 Verwendung ei ner globa len Variablen (»x«).

+ Funktion, Routine, Unterprogramm , Unte rfunkt ion?


ln Listing 6.28 finden Sie ein kurzes Beisp i.el für eine lokale Variab le, die innerhalb von
meineFunktionl deklariert wurde und dahe r auch nur dort bekannt ist und dementspre-
Noc~ ei n Hi nweis zur Verwend ung korrekter Begriffe: Viel e nennen Fu~ktionen auch chend nur dort verwendet werden kann. Beim Umwandeln wird die Ardu ino-Software
Rout1nen oder Unterprogramme o· t h' .
· 1ese un ersc tedliehen Bezeichnungen meinen in der dahereine entsprechende Fehlermeldung anze igen.
Rege l alle das Gleiche und st m ·
. a men me1st aus anderen Programmiersprachen . Verwen-
den Ste von Anfang an den korrekt B 'ff . .. void meineF un ktionl()
. , en egn , wenn Ste fur den Arduino programmieren :
Funktton. {
II x wird hier deklariert und kann nur hier ven~endet werden ·

158
159
~.-?~:.
ti,;,IJ

void meineFunktion2 (int a)


int x = 45;
{ // a wurde als Parameter deklariert und kann nur hier verwendet werden .
voi d meineFunktion2() a = 9;
{
II FEHLER ! ! x ka nn hier NICHT verwendet werden!
II FEHLER!! x kann hier NICHT verwendet werden!


X = 46 ; X = 48 ;
}
listing6.29 Lokale Variablen in Schleifen und Funktionen
Listin g 6.28 Verwendung einer lokalen Variablen

Genauso verhält es sich im Übrigen mit Variablen. die Sie als Parameter in Funktionen Und es kommt noch schlimmer
oder sogar innerhalb einer for-Schleife deklarieren : Sie sind nur dort bekannt und Schauen Sie sich einmal Listing 6.30 an, und überlegen Sie, was im Codeverlauf passiert.
haben daher einen sehr eng begrenzten Gültigkeitsbereich. Da es so wichtig ist, noch
einmal zur Wiederholung: Die Variablen, die Sie als Parameter einer Funktion definie· 11 Eine globa l e Variable namens x
ren, gelten nur innerhalb dieser Funktion (im Block, zwischen den geschweiften Klam· int x = 12 ;
mem). Die Variablen, die Sie innerhalb der for -Schleife bekannt gemacht haben, gelten
entsprechend auch nur innerhalb des dazugehörigen Blocks aus geschweiften Klam· void setup()
mern. In Listing 6.29 sehen Sie wieder die konkreten Beispiele dazu : {
}
void meineFun ktion1()
{ void loop()
II x wird hier dekl arier t und ka nn nur hier verwendet werden . {
int x = 45; int x = 13 ;
meineFun ktion1 (x) ;
for (int n=O; n<2 3; n++) }
{
II Die Vari able n kann nur i n der for- Schleife verwendet werden . void meineFunktion1( i nt x)
if (n == 5) {
{ X= 14;
II Erhöhe x um 1
x++; for (int x =O ; x< 77 ; x++)
} {
} if (x == 14)
{
II FEHLER!! n kann hier NICHT verwendet werden! I I Und? Wa nn wird diese Zeile ausgef ühr t ?
n = 18; II Genauer : WELCHES x ist hier WELCHES?
}
II Das hi er ist kein Problem }
X = 47; }
}
listing 6.30 Globa le versus lokale Variablen : We lches >>X« gilt hier?

160 161
wann, würden Sie sagen, wird der Code im Blockunterh alb der Anweisung i f (x ::
ausgeführt? Sofort? Falsch! Er wird ausgeführt, wenn die Va riable x aus der for-Sch/
den Wert 14 erreicht hat. Denn lokale Variablen haben Vorrang vor globalen Variab;
Sie werden mir sicher zustimmen, dass es generell keine gute Idee ist, globalen t
lokalen Variablen den gleichen Namen zu geben. Das Gl eiche gilt auch für Parame
die die gleichen amen haben wie globale Vari ablen. Das ist zwar möglich, trägt a
zur Verwirrung bei und sollte daher unbedingt vermieden werden.32

+ Vermeide n Sie globa le un d lokal e Variablen mit gleichem Namen!


Nicht alles, was techn isch möglich ist, ist in de r Praxis auch sinnvol l. Ihr Computer un1
der Mi krocont rolle r können globa le und lokale Variablen mit gle ichem Namen ausein
and erhalten- Sie jedoch können es im Zweifelsfall irgendwann nicht mehr. Vermeidet
Sie also gleiche Namen.

Warum ist das Ganze so kompliziert? Könnten Sie nicht einfach stets alle Variablen~
bal deklarieren? )a, das ist möglich. jedoch reserviert dann der Computer (hier
Arduino) für jede globale Variable dauerhaft Speicherplatz, auch wenn diese Variab
später vielleicht nur ein einziges Mal in einer for -Schleife benötigt werden. Und da Sf
eherplatz bei Mikrocontrollern in der Regel sehr begrenzt ist, empfiehlt es sich dur
aus, Variablen, die nur lokal in einem bestimmten Bereich (Block) benötigt werden, at
nur dort zu deklarieren. Denn beim Verlassen dieses Blocks wird der benutzte Speicl
automatisch freigegeben und steht dem restlichen Programm wieder zur Verfügu
Ein weiterer Grund, warum nicht alle Variablen einfach global definiert werden sollt
ist, dass es dann oft schwer vorhersehbare Nebeneffekte gibt, wenn diese Variablen
verschiedenen Funktionen mehr oder weniger gleichzeitig geändert werden.

6.10 Die »setup«-Funkt ion

Es gibt in der Arduino-Programmiersprache ein paar spezielle Funktionen. Eine dav


ist die Funktion setup. Setu p bedeutet übersetzt »Einrichtung« oder »Einstellun
Diese Fun ktion dient also dazu, alle notwendigen Einstellungen vorzunehmen, die
Beginn notwendig sind, damit Ihre Soft- und Hardware wie gewünscht funktionier
Das kann das Initialisieren von Variablen sein oder das Definieren bestimmter Pi
damit diese als Eingang oder als Ausgang dienen (siehe Abschnitt 6.13, >>Ein- u

32 Gute Compiler erkennen das übrigens und warnen vor di esem sogenannten Shadowing.

162
X == 14) Ausgänge «), oder das Akt ivieren der seriellen Schnittstelle auf Ihrem Arduino-Board
·-Schleife (siehe Abschnitt 6.14.2, ))Der se ri ell e Port - Ausgabe von Tex t «).
ariablen. Die setup-Funktion wird im Programm ablauf genau einmal aufgerufen, und zwar bei
den und jedemStart Ihres Arduino-Boa rd s - spri ch: immer dann, wenn Sie das Board mi t Strom
rameter, versorgen oder den Rese t-Taste r (s iehe Abschnit t 4.2.1) betätigen und das Programm
ägt aber dadurch neu startet Die Funktion setup m uss in Ihrem Programm immer enthalten
sein- selbst wenn sie wie in Listing 6.31 leer ist .

void setup()
er und {
usein- }
leiden Listing 6.31 Eine leere >>setup«-Funktion

Falls Sie vergessen haben, die setup-Funktion Ihrem Programm hinzuzufügen, werden
Jien glo- Sie beim Überprüfen die Fehlermeldung undef inded r efer ence erhalten, die ungefähr
hier Ihr wie folgt aussieht:
ariablen
da Spei- core.a(mai n.cpp.o) : In functio n ' ma i n' :
l durch- /Applicat ions/ Ardui no . app I Content s /Resources/J ava/hardware/arduino/ cores/
en, auch arduino/main . cpp: 11 : undefined reference to ' set up '
ipeicher
fügung. DieArduino-Software )) weiß«, dass immer eine Funktionnamens setup vorhanden sein
sollten, muss, und sucht nun in Ihrem Code danach, fi ndet aber keinen Verweis (Referen z) dar-
ablen in auf.

6.11 Die »l oop« -Funktion

Neben setup gibt es noch eine weitere besondere Funktion: loop. Loop bedeutet über-
~ davon setztProgrammschleife. Und dieser Begriffkönnte kaum zutreffender sein, denn wie in
~ llung « . einerEndlosschleife werden in dieser Funktion alle darin enthaltenen Befehle der Reihe
1,die zu nach bis zur letzten Zeile abgearbeitet. Danach geht es wieder von vom los. Immer wie-
mieren. der. Bis Sie Ihren Arduino ausschalten. Es gibt im Prinzip nur eine Ausnahme, wie Sie
er Pins, diese Schleife vorübergehend verlassen können: durch den Aufruf von Funktionen.
in- und Aber auch nach Ausführung selbiger geht die Programmausführung stets in der loop-
Funktion an der Stelle weiter, wo die Programmschleife zuvor verlassen wurde. Wie
auch die setup-Funktion ist loop Pflichtbestandteil Ihres Programmcodes. Sie müssen
sie also immer mitdefinieren.

163
Wann, würden Sie sagen, wird der Code im Block unterhalb der Anweisung if (x == 14) Ausgänge <<), oder das Akt ivieren der seriellen Schnittstelle auf Ihrem Arduino-Board
ausgeführt? Sofort? Falsch! Er wird ausgeführt, wenn die Variable x aus der for-Schleife (siehe Abschnitt 6.14.2, )) Der serielle Port - Ausgabe von Text«).
den Wert 14 erreicht hat. Denn lokale Variablen haben Vorrang vor globa len Variablen. Die setup-Funktion wird im Programmablauf genau einmal aufgerufen, und zwar bei
Sie werden mir sicher zustimmen, dass es generell keine gute Idee ist, globalen und jedem Start Ihres Arduino-Boards - sprich : immer dann, wenn Sie das Board mit Strom
lokale n Va riablen den gleichen Namen zu geben. Das Gleiche gilt auch für Parameter, versorgen oder den Reset-Taster (siehe Abschnitt 4.2.1) betätigen und das Progra mm
die die gleichen Namen haben wie globale Variablen. Das ist zwar mögli ch, trägt aber dadurch neu startet. Die Funktion setup muss in Ihrem Progra mm immer enthalten
zur Verwirrung bei und sollte daher unbedingt verm ieden werden. 32 sein-selbstwenn sie wie in Listing 6.31 leer ist.

+ Vermeiden Sie globale und loka le Variablen mit gleichem Namen!


Nicht alles, was technisch möglich ist, ist in der Praxis auch sinnvoll. Ihr Computer und
void setup()
{
der Mikrocontroller können globale und lokale Variablen mit gle ichem Namen ausein- )
and erhalten -Sie jedoch könne n es im Zweifelsfall irgendwann nicht mehr. Vermeiden listlng 6.31 Eine leere ))setup«-Funktion
Sie also gleiche Namen.
Falls Sie vergessen haben, die setu p-Funktion Ihrem Programm hinzuzufügen, werden
Warum ist das Ganze so kompliziert? Könnten Sie nicht einfach stets alle Variablen glo- Sie beim Überprüfen die Fehlermeldung undefinded reference erhalten, die ungefähr
bal deklarieren? fa, das ist möglich. jedoch reserviert dann der Computer (hier Ihr wiefolgt aussieht:
Arduino) für jede globale Variable dauerhaft Speicherplatz, auch wenn diese Vari ablen
später vielleicht nur ein einziges Mal in einer for -Schleife benötigt we rd en. Und da Spei- core.a(main .cpp .o) : In funct i on 'main ':
cherplatz bei Mikrocontrollern in der Regel sehr begrenzt ist, empfiehlt es sich durch· /Applica ions/ Arduino . app/Contents/Resour ces/Java/haraware/arduino/ cores /
aus, Variablen, die nur lokal in einem bestimmten Bereich (Block) benötigt werden, auch ardu · o/mai n. cpp : 11 : undefined re.!erence to ' setu p'

nur dort zu deklarieren. Denn beim Verlassen dieses Blocks wird der benutzte Speicher
automatisch freigegeben und steht dem restlichen Programm wieder zur Verfügung. DieArduino-Software )> weiß«, dass immer eine Funktionnamens set up vorhanden sein
Ein weiterer Grund, warum nicht alle Variablen einfach global definiert werden sollten, muss, und sucht nun in Ihrem Code danach, findet aber keinen Verweis (Referenz) dar-
ist, dass es dann oft schwer vorhersehbare Nebeneffekte gibt, wenn diese Variablen in auf.
verschiedenen Funktionen mehr oder weniger gleichzeitig geändert werden.

6.11 Die »loop«-Fu nktion


6.10 Die »setup«-Funktion
Neben setup gibt es noch eine weitere besondere Funktion: l oop. Loop bedeutet über-
Es gibt in der Arduino-Programmiersprache ein paar spezielle Funktionen. Eine davon setzt Programmschleife. Und dieser Begriff könnte kaum zutreffe nder sein, denn wie in
ist die Funktion setup. Setup bedeutet übersetzt »Einrichtung « oder )) Einstellung«. einerEndlosschleife werden in dieser Funktion alle darin enthaltenen Befehle der Reihe
Diese Funktion dient also dazu, alle notwend igen Einstellungen vorzunehmen. die zu nach bis zur letzten Zeile abgearbeitet. Danach geht es wieder von vorn los. immer wie-
Beginn notwendig sind, damit Ihre Soft- und Hardware wie gewünscht funktionieren. der. Bis Sie Ihren Arduino ausschalten. Es gibt im Prinzip nur ei ne Ausnahme, wie Sie
Das kann das lnitialisieren von Variablen sein oder das Definieren bestimmter Pins, diese Schleife vorübergehend verlassen können : durch den Aufruf von Funktionen .
dam it diese als Eingang oder als Ausgang dienen (siehe Abschnitt 6.13, ))Ein- und Aber auch nach Ausführung selbiger geht die Programmausführung stets in der loop-
Funktion an der Stelle weiter, wo die Programmschleife zuvor verlassen wurde. Wie
a~ch die setup-Funktion ist loop Pflichtbestandteilihres Programmcodes. Sie müssen
Sie also immer mitdefinieren.
32 Gute Compile r erke nnen das übrigens und warnen vor diesem sogenan nten Shadowing.

162 163
) . . . · . 6.13 Ein- und Ausgänge

6.11.1 Das kleinst mögliche Arduin o-Programm eine Mill isekunde (delay(l) ) könn en Sie auch di e Funk tio n delayMi croseconds 36 verwen-
Wenn ich den Abschnitt über das Thema Funktionen zusamm enfasse, sieht das kleinst· . der Name sc hon sagt ' is t hier die kürzes te »Schlafd auer« eine Mikrosekunde
den. wJe
mögliche Arduino-Programm so wie Listing 6.32 aus: (eine Millionstel Sekunde, 0 ,0000001 s).

voi d setup()
{ 6.13 Ein - und Ausgänge
II Hier den Code zur Einric ht ung einf ügen , der einmalig ausgeführt wird .
} Wie Sie in Abschnitt 4.2.1 erfa hren habe n, hat Ihr Arduino-Board sowohl Eingänge als
auch Ausgänge. Zur Erinnerung: An eine m Pin, den Sie als Ausgang schalten, wird eine Cl
void loop () Spannung ausgegeben. Ein Pin, an den eine Spannung oder ein Signal angelegt ~ird, um
{ diese bzw. dieses ein zulesen, ist dem ent sprechend ein Eingang . Um Ihrern Ardumo mit-
II Hier den Hauptcode ei nfügen , der dann endlos läuft . zuteilen, ob ein Pi n nun Ein- oder Ausga ng ist, wird die Funktion pinMode(Pi n, Modus)
} verwendet.
listing 6.32 Das kleiostmögliche Arduino-Programm
Befehl Modus

pinMode(pin , INPUT) Pin als Eingan g sc halten


6.12 Verzögerungen und Ze itste uerun g
pinMode(pin , OUTPUT) Pin als Ausgang scha lte n
Wie Sie vielleicht schon in dem einen oder anderen Listing zuvor bemerkt haben, habe
ich delay venvendet, ohne es zu erklären. De/ay ist Englisch un d bedeutet Verzögeru ng. Tabelle 6.3 Der Befeh l >> pinMode«
Es ist kein »Befehl << im eigentlichen Sinne, sondern ebenfalls eine Funktion, die
Bestandteil der Arduino-Software und der darin enthaltenen Standardbibliotheken ist. Dazu zwei Beispiele. In Ab schnitt 7.1.1 lernen Sie, wie Sie eine LED an Ihr Arduino-Board
Die Funktion delay ist sehr einfach, denn sie h at nur ei n Argum ent zur Übergabe: eine anschließen können . Da dieLEDeine Spannung benötigt, muss diese vorn Arduino aus-
Zeit in Millisekunden (ms). wobei eine Millisekunde 111000 Sekunde oder 0,001 Sekun· gegeben werden. Daher werden Sie den Pin m it der Anweisung pinMode(pin , OUTPUT) als
den entspricht. Der Aufruf sieht zum Beispiel wie folgt aus: Ausgang schalten. Wenn Sie danach in Abschnitt 7.2.3 ff. einen Sensor an Ihr Arduino-
Board anschließen, wird cüese r Sensor eine Spannung ausgeben. Diese liegt dann an
delay( l OOO) ; II Mach eine Sekunde lang nichts (1000 ms) . einem der Pi ns des Arduino an, der dann als Eingang geschaltet werden muss. Dies tun
Sie entsprechend mit dem Befehl pi nMode (p in, I NPUT) . Das ist auch schon fast das ganze
Die Verwendung von delay() ist nicht ganz unumstritten, denn ihr Nachteil ist, dass der Geheimn is um die Ein- und Ausgänge des Ardu ino.
Mikrocontro ller wäh renddessen nichts anderes ausführen kann. Er »sch läft « quasi 33 Es
können also parall el kei ne Aktivitäten, wie das Abfragen von Sensoren, durchgeführt
werden. Ich bin der Mein u ng, dass für Sie als Einsteiger dieses kei ne Einschränkung dar-
stellt. Wenn Sie sich eingehe nder mit dieser Thematik beschäftigen wollen, sc hauen Sie
Besonderheit »INPUT PU LLU P«
Der Befehl pinMode ken~t neben INPUT und OUTPUT noch einen dritte n Modus, de r mit
+
dem Argument INPUT PULLUP a kt iviert wird : pi nMode(pi n, INPUT_PULLUP) . Was es
sich die Funktionen millis 34 und micros 35 an. Übringes: Fü r kürzere Verzögeru ngen als
damit auf sich hat. erf~ hren Sie in Abschnitt 7.2.1 f., wo es darum geht, einen Scha lter
oder Taster mit einem sogen annten Pu/1-up-Widerstand einzulesen.
33 Genau genommen mach t er in dieser Zeit nich t »nichts «, sondern führt den Be fehl NOP so lange
aus, bis die gewünschte Zeit erreicht ist.
34 http://arduino.cc/ de/Reference/millis
35 hltp://ardu ino.cc/ de/ Reference/ micros
36 http://arcluino.cc/ dej Reference/ DelayMicroseconds

164
165
6.14 Feh lersu che/Debuggi ng und die Anzeige von Werten void loop()
{
Es kann immer mal vorkommen, dass lhr selbst geschriebenes Arduino-Programm [ ... )
nicht wie erwartet funktioniert, weil Sie einen Fehler im Programm haben. Das ist völlig }
normal und absolut mensch lich. Verzweifeln Sie also nicht, denn das passiert den erfah·
rensten Programmierern. 11 Diese Funktion lässt die LED >anzahl ' Mal blinken.
void LEDbl inker(int anza hl)
Ein Fehler in einer Software wird übrigens im Englischen bug 37 genannt, und das Suchen
von Fehl ern heißt auf Englisch entsprechend debugging (umgangssprachlich spricht
for (int n = 0; n < anzahl ; n++)
man auch im Deutschen davon, »etwas zu debuggen<<). Um herauszufinden, an welcher
{
Stelle der Fehler ist oder Ihr Programm vollständig »hängt<< , wäre die einfachste
II LED an
Methode, irgend·wie zu signalisieren, bis zu welcher Stelle das Programm noch ein- digitalWrite(led , HIGH);
wandfrei läuft. An einem Computer würde dazu Text auf dem Bildschirm ausgegeben 11 Warte eine Sekunde bis zum nächsten Blinken .
werden. Wie sollen Sie aber de n Fehler lokalisieren, wenn Sie doch an Ihren Arduino kei· delay(lOOO );
nen Bildschirm zur Anzeige von Text direkt anschließen können ? Um dennoch festzu· II LED aus
stellen, bis zu exakt welcher Stelle de r Code einwandfrei läuft, gibt es zwei einfache digita lWrite(led , LOW) ;
Möglichkeiten, die ich Ihnen im Folgenden näher erläutern werde : II Warte eine Sekunde bis zum nächsten Blinken .
.,.. die LED als Mittel zur Fehlersuche delay (1000) ;
}
.,.. der serielle Port zur Ausgabe von Text

II Warte noch eine Sekunde zum Abschluss .


6.14.1 Die LED al s Mittel zur Fehlersuche delay (1000) ;
}
Wenn Ihr Arduino-Board bereits in einem anderen Basteiprojekt oder auf einem Robo·
ter montiert ist, nutzen Sie die LED zum Debuggen: Signalisieren Sie durch Leuchten Listing 6.33 Diese Funktion lässt die LED »anzahl«-mal bl inke n.
oder Blinken der LED, welche Stellen im Programmcode gerade abgearbeitet werden.
Ein Beispiel dazu sehen Sie in Listing 6.33, das Sie sich auch als LEDblinker.ino zur eige· Indem Sie die Funktion LEDblinker in Ihren Code einfügen und die LED untersch iedlich
nen Verwendung herunterJ aden kö nnen. oft blinken lassen, können Sie genau feststellen, welcher Teil Ihres Programms gerade
abgearbeitet wird. In Listing 6.34 sehen Sie ein Beispiel, wie die Funktion genutzt wer-
II Pin 13 ist bei den meisten Ardu i no-Board s mit einer LED verb unden . den kann (Auszug). Dort blinkt vor jeder wichtigen Anweisung die LED - jedes Mal ein-
int l ed = 13;
mal meh r. Nachdem die LED zweimal geblinkt hat, folgt die fehlerhafte Anweisung. und
Sie würden beim Ausführen dieses Program ms die lange Verzögerung sehen - eine ein-
void setup()
{
fache, aber praktische Möglichkeit, FehJ er zu finden und zu beseitigen.
II Definiere den LED-Pin al s Ausga ng [ ... ]
pinMode(led, OUTPUT ); void loop()
{
II LED einmal blinken lassen
LEDblinker (1);

37 http://de. wikipedia.org/wiki/Programmjehler
II Beispiel -Code

166
167
X = 1000;
void setup()
delay(x) ·
{
11 Initialisiert den seriellen Port (USB) .
II LED zweimal blinken lassen Serial. begin (9600) ;
LEDblinker( 2) ·
11 Gibt einen Satz über den seriellen Port aus
II weit erer Beispiel-Code 11 (einschließlich Zeilenumbruch) .
x = 1000000; 11 < < < < < FEHLER ! ! Serial. println ("Der Arduino -Roboter sagt Hallo! ");
delay(x) ;
}

II LED dreimal blinken lassen void loop()


LEDblinker (3);
{
II Hier später weiteren Code eingeben .
II eiterer Code
}
[...]
} Listing 6.35 Das Programm »Seria ll.in o<<gibt eine Zeile Text seriell aus.

Listing 6.34 Beispielprogramm {Auszug) mit LED zum Debuggen


Innerhalb der Funktion setup wird der serielle Port {USB) des Arduino initialisiert- als o
für die Übertragung von Daten betriebsbereit gemacht. Dies geschieht mit dem Befehl
Machen Sie sich jetzt nicht allzu viele Gedanken darüber, wo das Einfügen der LED-
Serial.begin() 40 , der hier um das Argument 9600 ergänzt wurde. Dieser Wert stellt die
Blinkzeile sinnvoll ist und wo nich t. Sie werden mit der Zeit ausreichend Erfahrung sam-
Übertragungsrate dar, also die Geschwindigkeit, mit der die Daten über die USB-Schnitt-
meln und automatisch ein Gespür dafür entwickeln.
stelle übertragen werd en. In diesem Fall sind es 9600 Symbole pro Sekunde (Baud). Sie
können auch wesentli ch höhere Geschwindigkeiten für die Datenübertragung einstel-
6.14.2 Der serielle Port- Ausgabe von Text len. Derze it sind möglich: 300, 600, 1200, 2400, 4800, 9600, 14.400, 19.200, 28.800,
38.400, 57.600 und 115.200 Baud . Da Sie hier aber Text ausgeben wollen. ist es relativ
Auf Ihrem Arduino-Board ist eine USB-Buchse zum ü bertragen der Software von Ihrem
uninteressant, diesen extrem schnell zu übertragen.
Computer vorhanden . Aber diese USB-Verbindung ka nn noch mehr für Sie t un : Sie kön-
nen nämli ch nicht nur Programme, sondern auch eigene Daten vom und zum Arduino Wo können Sie den vom Arduino übert ragenen Text auf Ihrem Computer nun sehen?
übertragen. Da die USB-Schnittstelle die Daten serie/1 38 , also der Reihe nach, statt paral- Dafür gibt es in der Arduino-Software den Serial Mo nitor. Dieser zeigt die Kommunika-
lel überträgt, heißt die Klasse 39 dazu Serial. Mit ihr könn en Sie verschiedenste Daten tion der USB-Verbindung an; also Daten, die Sie in Ihren Programmen vom Arduino
über die USB-Verbindung übertragen. Sie können sie also nicht nur zum Anzeigen von ztun Computer übertrage n. Der Serial Monitor zeigt nicht das Übertragen des Pro-
allgemeinen Texten nutzen, sondern sich auch Werte von Arduino-Variablen auf ihrem gramms auf den Arduino an und kann auch während dieses Übertragungsvorga ngs
Comp uter anzeigen lassen - und das alles, während Ihre Arduino-Software läuft. Wie nicht zur Anzeige eigener Daten genutzt werden! Zum Ausprobieren laden Sie sich jetzt
geht das? Betrachten wir zunächst das einfache Listing 6.35, das einen Text vom bitte das Programm Seriall.ino herunter und übertragen es auf Ihr Arduino-Board. Kli-
Arduino zum Computer sendet, diesen also auf dem Bildschirm des Compu ters ausgibt: cken Sie danach in der Arduino-Software, wie in Abbildung 6.1 dargestellt, im Menü auf
TOOLS • SERIAL MONITOR .

38 http://de.wikipedia.org/ wiki/ Serielle Datenübertragung


39 Das Them Kl · · d -
. a _ a~sen ISt m _er Programmierungein Thema für sich , dessen Erklärung an dieserStelle
etwas zu weJt fuhrt. Es wud daher hi er nicht weiter vertieft.
40 http://arcluino.cc/e n/ Serial/begin

168
11';0
Serial.println{ "Hallo Welt! ") ;
Automatisch formatieren KT Serial. println( "Cooles Buch!");
Sketch archivieren
Kodierung reparieren & neu laden . · 6.36 Bei »pri ntl n« erscheint der Text zu Begin n der nächsten Zeile.
L1stmg
Serial Monitor OKM

Board
Serieller Port
. Die Ausgabe von Listing 6.36 sieht im Serial Monitor wie folgt aus:

Programme r Hallo Welt !


BootJoader Installieren
Cooles Buch!

Und nun die Verwendung von print :

Abb ildung 6.1 Aktivieren Sie den Serial Mon itor in der Ard uino-Softwa re. Serial.print("Hallo Welt! ") ;
Serial.pri nt("Cooles Buch!") ;
Anschließend sollte nach wenigen Sekunden die Anzeige wie in Abbildung 6.2 ausse·
listing 6.37 Nach »print« ersch eint de r Text direkt hinter der letzten Au sgabe.
hen. Falls nicht, betätigen Sie den Reset-Taster auf Ihrem Arduino -Board.
0'"' ') /dev/ny.LI5bmodemfa14 l 1 Die Ausgabe von Listing 6.37 sieht im Serial Monitor wie fo lgt aus:
( Senden )
Der Arduino-Roboter sogt Hallo! Hallo Welt !Cooles Buch!

Obwohl der Befehl print wegen des fehlenden Zeilenumbmchs auf den ersten Blick
unpraktisch erscheinen mag, so ist er doch gut für das Debugging geeignet, das im Fol-
~I genden beschrieben wird.

--
S1 Automatisch scrollen ~ Sowohl Nl als auch CR : ) ~ 9600 baud
"'
f;
6.14.3 Ausgabe vo n Va riablenwerten auf dem Serial Monitor
I: )
Die Befehle println und pr int können nicht nur Texte, sondern auch den Inhalt von
Abbildu ng 6.2 Textausgabe des Arduino im Serial Mon itor
Variablen ausgeben. Wenn Sie also zum Beispiel m it einem Sensor eine ~ntfern~ng
gemesse n haben, so können Sie sich diese auf dem Compu ter übe r den Senal Momtor
Der zweite wichtige Befehl zur Ausgabe von Text aus Listing 6.35 ist Serial . print 41 bzw. live anzeigen lassen.43
42
Serial . println . Be ide geben Text auf dem Serial Monitor aus, wobei nach println jede
Und der Befehl kann noch mehr: Er kann den Wert von Variablen n icht n ur als Dezimal-
darauffolgende Textausgabe in einerneuen Zeile (englisch new line) beginnt. Wenn Sie
zahl ausgeben, es ist auch eine Ausgabe im Hexadezima/-, Oktal- und Binärformat mög-
lediglich ei nen Hinweistext wie >>Hier startet mein Programm « ausgeben wollen, bietet
lich. Einige Beispielbefehle daz u finden Sie in Listing 6.38.
sich also pri ntln an. Wenn Sie stattdessen den Befehl pri nt verwenden, erfolgt die nach·
folgende Textausgabe direkt nach der vorigen Ausgabe von Text. Im Folgenden finden int x = 42 ;
Sie zwei Beispiele zur Verdeutlich ung.
void setup ()
{
II Initialisiert den seriellen Port (USB) .
41 http://arduino.ccj en/Seria/jPrint
42 http://arduino.cc/en/ Seriai/ Println
43 Wie das geht, lernen Sie in Abschnitt 7.2.4.

170
171
Serial . begin (9600); 11 Ausga be mit zwei Nachkommastellen . Anzeige : 20 . 76
} serial. println(x , 2) ;

void loop() V Ausgabe mit fünf Nachkommastellen . An zeige : 20 .76391


{ Serial.println( x, 5);
II Ausgabe des Inhalts von Variable x über den seriellen Port .
II Anzeige von x als Dezimalzahl delay( 10000 );
Serial . println(x) ;
)
II Ausgabe von x al s Hexadezi malzahl Listing 6.39 Anzeige von Fließkommazahlen mit Nachkommastellen
Serial . println(x, HEX);
19 0 0 /dev/tty.usbmodemfd131
II Ausgabe von x al s Okta l zahl
Serial . println(x , OCT) ;
\....
11
~. ----
- - - - - - - ----
---------------- l ( ~nd~ )
zu
29.76
II Ausgabe von x als Binärzahl 29.76391
Serial . println(x, BIN) ;
}
~Automatisch scrollen : Kein Zeilenende I : I : 9600 baud I: I
Listing 6.38 Ausgabe von Variableninhalten in verschiedenen Formaten
Abbildung 6.3 Ausgabe von Listing 6.39 auf dem Serial Monitor
println und print können noch viel mehr: Wenn Sie anstelle von int eine Variable von
Typ f loat haben, dann können Sie bei de r Ausgabe sogar die Anzeige der Nachkom- Sie sehen, dass ein so einfacher Befehl mit einigen Raffinessen aufwarten kann. Wie
mastellen bestimmen- einschließlich kaufmännischer Rundung auf die letzte Stelle. Ihnen bestimmt gleich zu Beginn aufgefallen ist, sind println und print natürlich keine
11 echten« Befehle wie zum Be ispiel i f ... el se. Es handelt sich hier auch um Funktionen,
Wie das funktionie rt, sehen Sie in Listing 6.39.
an die Argumente als Parameter übergeben werden - was Sie wahrscheinlich längst an
float x = 20. 763906; den runden Klammern () im Listing erkannt haben.

void setup()
Debugging durch Texta usgabe
{
II Initialisiert den seriel l en Port (USB). Die Möglichkeit, mit pr intln und print Variableninhalte auszugeben, macht es Ihnen
Seria l . begin (9600); sehr einfach, diese zum Debugging zu nutzen. Denn anstatt eine LED blinken zu lassen,
} können Sie sich jede beliebige Information auf dem Serial Monitor anzeige n lassen. In
Listing 6.40 habe ich ein Beispiel dazu aufgeführt:
void loop()
{ int x = o;

II Ausgabe des Inhalts von Variable x über den Serial Port .


vo ·d setup()
II Ausgabe mit keiner Nachkommastel le . Anzeige : 21
{
Serial . println(x, O) ;
II Serielle Schnittstelle initialisieren
II Ausga be mit ei ner Nachkommastelle . Anzeige: 20 . 8 Serial . begi n( 9600);
Serial . println(x , 1); Serial. println ( "setup gestart et . .. ") ;

172
173
.. . ~ . ..

X = 10; Wenn Sie das Programm selbst testen woll en : Der Dateiname zum Download ist Seria/-
Debugging.ino. Wenn Sie es übertragen haben und danach den Serial Monitor in der
II Wert von x ausgeben Arduino-Software aktivieren, sieht die Ausgabe so wie in Abbildung 6.4 aus.
Serial .print( "(Sc hri t t 1) x hat j etzt den Wert : ") ;
/dev/tty. usbmodemfa1411
Serial .println(x) ; ~" 0
} ( Senden )

setup gestartet. · ·
(Schritt 1) x hat jetzt den Wert: 10

I-
void loop() loop Start . ..
(Schritt 2) x hat jetzt den Wert : 1000
Serial.println( "loop Start . . . ") ; (Schritt 3) x hat jetzt den Wert: 1000

II Beis piel-Code .
X = 1000; ~ -- -- - - - - :
~Automatisch scrollen ( Sowohl NL als auch CR -I ! ) : 9600 baud l :j
II Wert von x ausgeben Abbildung 6.4 Debugging mit dem Seria l Monitor
Serial .print( "(Sch ritt 2) x hat jetzt den Wert : ") ;
Seria l .println(x) ; Da in diesem Programm mit den Anweisungen

II Wartex Millisekunden X= 1000000; II < < < < < FEHLER ! !


delay(x) ; delay(x);

II Wert von x ausgeben absichtlieb ein Fehler eingebaut wurde, sehen Sie nach einiger Wartezeit eine Ausgabe
Seri al . print ("(Schritt 3) x hat jet zt den Wert : ") ; gemäß Abbildung 6.5.
Seria l . print l n( x);
10" 0 / dev/tty.usbmodemfa1411
II War te x Mill i sekunden ( Senden )

X = 1000000 ; II < < < < < FEHLER ! ! setup gestartet . . .


delay(x); (Schritt 1) x hat jetzt den Wert : 10 it
loop Start .. .

II Wert von x ausgeben


(Schritt 2) x hat jetzt
(Schritt 3) x hat jetzt
den Wert: 1000
den Wert : 1000
II
(Schritt 4) x hat jetzt den Wert : 16960
Serial .print( "(Schritt 4) x hat jet zt den Wert : ") ;
Seri al . println( x) ;
~

T
II Warte x Millisekunden ~ Automatisch scrollen : Sowohl NL als auch CR l : J ~ 9600 baud I: )
X = 1000;
delay(x); Abbildung 6.5 ln der letzten Zeile ist die feh lerhafte Ausgabe zu erke nnen.
}

Listing 6.40 »println« und »print« zum Debuggen nutzen Wie Sie im Programmcod e leicht erkennen können, wurden zur Fehlersuche viele
print-Anweis ungen eingefügt. Wenn Sie auch einmal einen Bug in Ihrer Arduino-Soft-
ware haben, können Sie genauso vorgehen und sich zum Beispiel Variableninhalte oder

174
175
...
~1~~~ '
.. .
f~)'
' .., .._",.

die Stelle anze igen lassen, wo sich der Programmablauf gerade befindet. Um bei dem , ss dieses Kapitels zeigte ich Ihnen, wie Sie Fehlersuchen (Debugging) mit-
zum AbSC h.l U . .. .
konkreten Beispiel hier zu bleiben : ln Abbildung 6.5 sehen Sie sehr schön, dass x plötz- .0 A teuerung durchführen können und den senellen Port (USB) für dte
tels LE - ns . . ,. . .
teuern Hierbei kamen ausgiebig dte Befehle pnntln und pnnt zur
lich den Wert 16960 statt 1000 bzw. 1000000 gemäß Sourcecode hat. Zur Erklärung: Hier Textausga be ans · , . . . .
tritt gerade der berühm t-berüchtigte Überlauf-Feh ler ein, den Sie bereits im Kasten Anwen dung. Am End e erfuhren Sie noch ' was es rrnt Btbltotheken auf s1ch hat.
Ȇ berlauf! << in Abschnitt 6.3.4 kennengelernt haben.
Gut gemaC1I t : SI·e be!1 errschen J·etzt alles ' was Sie als Handwerkszeug zur Arduino-Pro-
. . . .
· ng beno"tigen · Wenn Sie noch mehr erfahren wollen, schauen Sie bttte m dte
gramnueru
vollständige Arduino-Referen z im Internet.4S
6.15 Bibl iotheken (Libraries)

Sie haben bis hierhin die wichtigsten Elemente der Arduino-Programmiersprache ken-
nengelernt. Es gibt aber noch eine Vielzahl weiterer Funktionen, die ichhier nicht weiter
vertiefen möchte. Mit diesen Funktionen können Sie beispielsweise viele Arduino-
Erweiterungen (sogenannte Shields, siehe Abschnitt 7.2.7) ansteuern. Damit diese Funk-
tionen leicht auffindbar sind, werden sie thematisch zu sogenannten Bibliotheken (eng!.
libraries) zusammengefasst. Eine Übersicht der verfügbaren Arduino-Bibliotheken fm-
den Sie wie immer auf der Arduino-Projektseite.44 Zusätzlich gibt es im Internet zahlrei-
che weitere Bibliotheken, die von anderen Anwendern kosten los zur Verfügung gestellt
werden. Hier hilft je nach Bedarf die Suchmaschine Ihrer Wahl weiter.

6.16 Fazit

Ein ganzes Stück Arbeit und viele doch sehr theoretische Themen liegen nun hinter
Ihnen. Das soll belohnt werden, denn im nächsten Kapitel werden Sie endlich prakti·
sehe und spannende Experimente mit Ihrem Arduino-Board durchführen!
Dafür haben Sie in diesem Kapitel nicht nur die wesentlichen Bestandteile der
»Ardu ino-Programmiersprache<<kennengelernt Sie haben ebenfalls gelernt, dass beim
Programmieren auch der Stil ei.ne wichtige Rolle spielt.
Danach erhielten Sie eine Übersicht über die verschiedenen Datentypen (wie byte, int,
float ode r bool ean) und erfuhren, wie for-, while- und do .. . while-Schleifen funktionie-
ren. Nachdem Sie dann Kontrollstrukturen wie i f ... elsegezeigt bekamen, ging es um
Funktionen, Parameter und den nicht immer ganz so leicht durchschaubaren Gültig·
keitsbereich von Variab len.

Im Anschluss erhielten Sie Erläuterungen zu den Funktionen setu p und loop. Danach
lernten Sie delay für die Arbeit mit Verzögerungen kennen und haben danach erfahren,
wie Sie mit pinMode die Pins des Arduino als Eingang oder Ausgang definieren.

44 http://arduino.cc/ de/ Reference/ Ubraries


45 http://ardtlino.cc/en/ Reference/ l·Iom ePage

176 171
r

Kapitel7
L<'S ~el.\i-'s! - Evsi-e Pv~)CtS
Sie haben bis zu diesem Kapitel durchgehalten. Das ist ein gutes Zeichen. Denn Sie
habenestrotz viel Th eorie bis hierher geschafft, und nun soll es endlich mit prakti-
schen Experimenten losgehen .

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

7.1 Der erste Ko ntakt mit der Hardware
Das erste Experiment wird ganz einfach daraus bestehen, die orange LED auf Ihre m
Ardu ino-Board zum Bli nken zu bringen. Traditionell wird das erste eigene Programm,
das eine LED zum Blinken bringt, 8/inky genannt. Das ist vielleicht nicht sehr einfa ll s-
reich, aber dafür einprägsam.

7.1.1 nBii nky«- Ansteuerung einer LED


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

II II II II II II II II II II II II II II II II II
Checkliste
t/ ein Arduino Board
t/ ein pas sendes USB Kab e l

Schließen Sie das Ardu ino-Board mit einem USB-Kabel an Ihren Compute r an. Das pas-
sende USB-Kabel hat auf der »Comp uterseite« einen USB-A-Stecker und auf der
11
Arduino-Seite« einen US B-8-Stecker und ist in Abbildu ng 7.1 dargesteJlt.

179
Abbildung 7.1 USB -8-Stecker (lin ks) 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) .

Abbildung 7.2 Die orange leuchtend e LED »L«

Sollte auf Ihrer Plat ine nu r die grüne ON-LED leuchten, die orange LED aber nicht.
machen Sie sich keine Sorgen. Denn Sie erste llen jetzt ja Ihr erstes Programm, das die

180
LED zu m Blinken bringen wird. Sollte die LED bei Ihnen bereits blin ke n, so ist wahr-
scheinlich bereits ein Programm ab Werk auf dem Arduino. Das macht nichts, denn Sie
lernen dann jetzt, wie Sie den Blinkrhythm us veränd ern könn en. In Listing 7.1 sehen Sie
das vollstä ndige Programm dazu. Sie finden die Datei Blin ky. ino wie imm er zum Down-
load unter http ://robotiklabor.de/ litera tu r/.

11 An Pin 13 ist auf den meisten Ardui no-Boards


II eine LED angeschlossen.
II
II Definieren der Variable 'led'
II und Setzen auf den Wert 13 ( Pin 13)
int led = 13 ;

II Die setup- Funktion läuft einmal zu Beginn .


void set up ()
{
II Den digitalen PIN zur Ausgabe (Output) festlegen .
pinMode(led , OUTPUT) ;
}

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


void loop()
{
II schal te die LED an (HIGH)
digita lWrite(led, HIGH);

II warte eine halbe Sekunde


delay(SOO);

II schalte die LED aus (LOW)


digitalWrite(led , LOW ) ;

I I wart e ei ne hal be Sekunde


delay(SOO) ;
}

Listing 7.1 Ihr erstes Arduino-Progra mm : >> Bii nky«

Wie Sie sehen, besteht das Programm aus n ur wen igen Zeilen, wovon die meisten nur
aus Komm entaren besteh en. Zur Erinneru ng: Kom mentare, die sich auf eine Zeile
beschränken, beginnen jeweil s mit zwei Schrägs trichen. Dabei ist es unerheblich, ob sie
am Anfang oder End e einer Zeile st ehen :

181
II Dies ist ein Kommentar .
x: 1; II Das ist noch ein Kommentar .
Nun aber zu r 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 me isten Arduino-P latinen 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 sig nalisieren.
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()
{
II Den digitalen PIN als Ausgabe (Output) festlegen .
pi nMode( led, OUTPUT) ;
}

lmme r, wenn Sie den Arduino einscha lten, werden die Zeilen der setup-Funktion ein·
ma lig ausgefü hrt. Dies kann durch Anschluss an einen ComputerperUSB-Kabel oder
über die Stromversorgungsb uchse oder nach Drücken des Tasters Reset geschehen. Wie
bereits in Abschnitt 4.2.1 erläutert, können die Pins des Arduino-Boa rds als Eingang
(INPUT) oder Ausga ng (OUTPUT) betrieben werden. Das heißt, es wird entweder eine
Spannung erwartet (Eingang) oder eine Spannung am Pin ausgegeben (Ausgang). Da Sie
in diese m 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 HIGHau szugebe n. Nun zum »Hauptprogramm «:

void loop()
{
II schalte die LED an (HIGH)
digitalWrit e(led , HIGH) ;

II warte eine halbe Sekunde


delay(SOO);

II schalte di e LED aus (LOW)


digit alWr i t e(led , LOW) ;

182
11 warte eine halbe Sekunde
delay( 500) ;
}

zur Erinnerung: Die loop-F unktion wird automatisch abgearbeitet, nachdem das setup
beendet ist. Zum Scha lten eine r Spannung auf einen der Ausgänge dient der BefehJl digi -
talW rite. 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 djent die
Anweisung delay(500) . Denn der Wert fü r delay wird in Mjllisekunden angegeben, und
500 MilJjsekunden entsp rechen O,S Sekunden. Nachdem der Arduino gewartet hat, wird
rue LEDmit LOW ausgeschaltet. Und wieder wartet das Board danach für 500 Millisekunden
durch den zweiten delay(SOO) -Befehl. Wenn das Ende der loop-Funktion bei der schJje-
ßenden geschweifte n Kl ammer } errei cht 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 funktion iert, wollen Sie es natürlich endlich in Aktion sehen.

7.1.2 Übertragen der Software au f d as Arduin o-Boa rd


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

Experten-Wissen zum Angeben


Die Software, die Sie auf das Arduino-Board übertragen, wird auch Firmware ge nannt.
+
Sie haben davon vi elleicht schon einm al gehört. Ein e Firmware besteht aus dem Pro-
grammcode und allen darin gespeicherten Daten und bleibt beim Ausscha lten des
Gerätes dauerhaft bestehen. >> Dauerhaft« desha lb, wei l 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 eine n Mikrocontroller enthalten, haben auch eine
Firmware im Speicher, die beim Ein schalten ausgefü hrt wird- zum Beispielihre Wasch-
maschine, die verschiedene Waschprogramme ausführen kann, eine Verkehrsampel,
die ein Tages- oder Nachtprogramm ausführen kann , ode r viel leicht Ihr Anzeige instru-
ment im Auto, das live den Benzinverbrauch ausrechnen und anzeigen kann.

Öffnen der Datei


Um die Software nu n endli ch zu übertragen, laden Sie die Da tei Blinky.ino herunter und
starten di e Arduino-Software. öffnen Sie die heruntergeladene Date i Blinky.ino im
Menü über DATEI • Ö FFNEN (sieh e Abbildung 7.3).

Genau genommen ist es kein Befehl, sondern eine Funktion. Umga ngss prachlich sprechen aber die
meisten von ein em Befehl oder einer Anweisung - auch wenn es nicht ganz korrekt ist!

183
~rd ul no •. Bearbeiten Sketch Tools Hilfe
Neu XN
öffnen~:: - 3CO
Sketchbock "'
Belspiele "'
Schließen XW
Speichern XS
Spe.ichem unter... <OXS
Upload :M:U
Uploa.d mit Programmer <O:l!lU
Papierformat <OXP
Drucken XP

Abbi ldu ng 7. 3 Öffnen eine r v orhandenen Date i in der Arduino-Software

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

II etne
II
II Definieren der Vortable ' led '
II und Setzen auf den Wert 13 ( Ptn 13)
tnt led = 13 ;

II Dte setup Rouhne lauft einmal nach Dr·ücken


II der Reset-Taste :
void setup()
{
II Den digitalen PIN zur Ausgabe (Output ) festlegen.
pin l~o de(led , OUTPUT ) ;
}

II Die loop Routine Lauft 111111er vneder - unendllch:


votd l oop()
{
di g1talW r1te( led , HI GH) ; II schalte d1 e LED an (HIGH)
delay( 5e0) ; II warte e1ne halbe Sekunde
dlgital Wri te( led , LOW) ; II schalte d1e LED aus (LOW)
deloy( 500) ; II warte ewe halbe Sekunde
}

Abbildung 7.4 Das ge la dene Progra mm »Biinky« in der GUI

184
Auswahl des Arduino-Boa rds
oamitdieArduino-Software weiß, aufwelchen Typ Arduino-Board das Programm über-
tragen werden soll, wählen Sie einmalig im Menü TooLs • BoARD den Punkt ARDUINO
UNO aus (siehe Abbildu ng 7.5 ).

Arduino Datei Bearbeiten Sketch Hilfe


Automatisch formatieren XT
Sketch archivieren
Kodit:rung reparieren & ne.u laden
Serlal Monitor OICM

Board • v Arduino Uno


Seriell er Port Arduino Ouemilanove W/ ATmega328
Arduino Diecimlla or Duemilanove w/ Almega168
Programm er Arduir.o Nano w/ Almega328
Bootleader instaJiieron Arduino Nanow/ ATmegal 68
Ardulno Mega 2S60 or Mega ADK
Arduino Mega (Almega1280)
Arduino Leonardo
Arduino Esplora
Atduir.o Miere
Arduino Mini w/ Almega328
Arduino Mini wf Almegal68
Ardulno Ethernet
Ardulno fio
Ardulno BT w/ Almega328
Ardu ino BT w/ AlmegalES
UlyPad Ardulno USB
UlyPad Ardulno w/ Almega328
UlyPad Arduino w/ Almega168
Ardulno Pro or Pro Mini (SV, 16 MHzl wl Almega328
Arduino Pro or Pro Mini (SV, 16 MHz) w/ ATmegal68
Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATm•ga328
Ardulno Pro or Pro Mini (3.3V, 8 Mliz) w/ ATmega168
Ard ui no NG or oldor w/ ATm•ga168
Arduino NG or older w/ Almeg•8
Arduino Robot Control
Arduino Robot Motor

Abbildung 7.5 Auswahl des passenden Ard uino-Boards

Auswahl des USB-Ansch Iusses


Nun müssen Sie noch den passende n VSB-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
letzteTeil des Namens mit ))xxx« immer unterschiedlich und könnte zum Beispiel/ dev/
tty.usbmodernfal411 oder auch / dev/ tty.usbseria/-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 Windovvs heißen die Anschi üsse
für das Arduino-Board zum Beispiel COM2 oder COM3, wobei hie r die Ziffer im Namen
variiert. Solange Sie das gleiche Board immer am gleichen USB-Anschl uss Ihres Compu-
ters verwenden, müssen Sie diese Ei nstellung nur einmal durchführen. Ihr Arduino-
Board wird dann automatisch erkannt.

185
,
Auswahl des Arduino-Boards
Ardu lno Bearbeiten Sketch Tools Hilfe
Neu XN Damitdie Arduino-Software weiß, aufwelchen Typ Arduino-Board das Programm über-
Offnen...
Sketchbook ..
:CO
tragen werden soll, wählen Sie einmalig im Menü TOOLS • BOARD den Pun kt ARDU JNO
Beispie le
xw UNO aus (siehe Abbildung 7.5 ).
Schließen
Speichern xs
Speichern unter... oxs Anluino D•tol Burbtiten Sketch Hilfe
Upload xu Automatisch format i ~ren
Sketch archivieren
KT
Upload mit Programmer oxu Kodierung reparieren & neu laden
Papierformat OXP Serial Monitor OXM
Drucken XP Board ., .t Arduino Uno
Seriell•r Port Ard uino DuemiJanov• wf ATmega328
Arduino Dieclmlla or Duemllanove w/ ATmega168
Programm er
Bootload•r instaillt.ron
• Arduino Nano wt ATm•ga328
Abbi ldung 7.3 Öffnen einer vorhandenen Datei in der Arduino-Software Arduino Nano wt ATm•ga.l68
Ardu ino Mega 2560 or M•ga ADK
Ard uino M•ga (ATm•ga1280)
Arduino leonardo
Ihre Arduino-Softv,rare sollte jetzt so wie in Abbildung 7.4 aussehen. Arduino Esplora
Arduino Micro
Arduino Mini w/ ATm«ga328
Ard uino Mini w/ ATmoga!68
Arduino Ethernet
Ardulno Fio
Ardulno 8T w/ ATmoga328
Ardulno 8T w/ ATmoga.l68
UlyPad Ardul no USB
tst auf den me1sten UlyPad Arduino w/ Alme<Ja328
II e1ne LED angeschl ossen. UlyPad Ardu ino w/ ATm09al68
Arduino Pro or Pro Mini (SV, 16 MHz) w/ ATmoga328
II Arduioo Pro or Pro Mini (SV, 16 MHz) w/ ATmogal68
II Def1n1eren der Vartable led" Arduir.o Pro or Pro Mini ß .3V, 8 MHz) w/ ATmoga328
II und Setzen auf den Wert 13 (Ptn 13) Arduino Pro or Pro Mini ß .3V, 8 MHz) w/ ATmega168
int led = 13; Ardu ino NG or oider w/ ATmegal68
Ardu ino NG or oidor w/ ATmegaB
Arduino Robot Controi
II D1e setup ou:1ne lauft e1nmal nach Oruclen Arduino Robot Motor
I der Reset-Taste :
vo1d setup()
{
I Den d1g1talen PIN zur ~Jsgabe (Output) festlegen. Abbildung7.5 Auswahl des passenden Arduino-Boards
ptnMode( led , OUTPUT) ;
}
Auswahl des USB-Anschlusses
II Dte loop Rou 1ne lauf t~er 1eder - unendllch:
votd loop() Nun müssen Sie noch den passenden USB-Anschluss Ihres Computers auswählen. Dies
{ geschieht wieder unter dem Menüpu nkt TooLs und dann durch den Unterpunkt SERI-
d1g1talWr1te(led , HIGH); II schalte di e LED an (HIGH)
delay(SOO); ELLER PORT. Unter Mac OS he ißen die USB-Ports jdev/tty.usbxxx. je nach Board ist der
II warte etne halbe Se~unde
d1gttalWr1te( led , LOW) ; II schalte die LED aus (LOW) letzteTeil des Namens mit »XXX« immer unterschiedlich und könnte zum Beispiel/dev/
delay(SOO); II warte e1 ne hal be S~kunde
} tly.usbmodemfaJ411 oder auch / dev/tty. usbseriai-A5005BPZ lauten. Wenn Sie sich bei
der Auswahl des richtigen Anschlusses nicht sicher sind, beenden Sie die Arduino-Soft-
warc, ziehen alle nicht benötigten USB-Geräte von Ihrem Computer ab und lassen nur
das Arduino-Board verbunden . Dann starte n Sie die Arduino-Software erneut und
schauen, was an Anschlüssen zur Auswahl steht. Unter Windows heiße n die Anschlüsse
fürdas Arduino-Board zum Be ispiel COM2 oder COM3, wobei hier die Ziffer im I amen
vari iert. Solange Sie das gleiche Board imm er am gleichen USB-Anschluss Ihres Compu-
ters verwenden, müssen Sie diese Einstellu ng nur einmal durchführen. Ihr Arduino-
Abbildung 7.4 Das ge ladene Programm "Bi inky« in der GU I Board wird dann automatisch erka nnt.

184 185
7 los geht's!- Erste Praxis . .

Üb ertragen de r Software erfolgreich programmiert un d dami t die Grundlage für alle weiteren Schritte auf dem
Der einfachste Teil ist nun das Übertragen der Software auf das Boa rd. Kl icken Sie hierzu Weg zu Ihrem eige nen Roboter gelegt! Weite r geh t's.
einfach auf die UPLOAD-Schaltfläche in der Arduin o-Software. Der Rest geht automa-
tisch : Die Software prüft den geschriebenen Programmcode vor dem Übert ragen noch
7.1.3 Fehle rsuch e
einmal auf Fehler, wandelt ihn in ein für den Mikrocontroller verständli ches Format um
Falls Sie eine Fehlermeldung erhalten haben, schauen Sie auf die Arduino-Projektseite.
(kompiLiert un d linkt) und überträgt das Ergebnis auf das Arduino-Boa rd (fla sht). Abbil·
Dort gibt es einen ausführli chen Troubleshooting -Bereich.2 Die dort beschriebe nen
dung 7.6 zeigt die GUI, wenn der Vorgang erfolgreich abges chl ossen wurde: In der
Lösungen we rde n Ihnen helfen, die me isten Probleme zu beseitigen. Alternat iv kopie-
Statuszeile unten steht dann >> Upload abgeschlosse n. «.
ren Sie einfach die erste Fe hlermeldung aus de r Arduino-Softwa re in die Suchmaschine
IhrerWahL Sie können davon ausgehen, dass bereits vor Ihnen jemand dieses Problem
hatte und eine Lösung im Internet zu finden ist.

lS den me1sten Ardu1no Boards


II elne LED angeschlossen. Übung macht den Me ister
II Experimentieren Sie mit dem Programm Blinky ruhig noch etwas herum. Lassen Sie die
II Def1nieren der Varlable 'led '
II und Setzen auf den Wert 13 (P1n 13) LEDzum Beispiel ganz schnell blinken oder nur all e zwei Sekunden. Oder lassen Sie die
lnt led = 13; LED nur ganz kurz blinken und dann eine lange Pause einlegen. Übertragen Sie jedes
II D1e setup Rout1ne lauft e1nmal noch Drucke~ Mal den geänd erten Code auf das Ardu ino- Board, und schauen Sie sich die Auswirkun-
II der eset-Taste: gen sofort an. Sie beko mmen so ei n Gefühl dafü r, wie leicht es ist, Änderungen vorzu-
vo1d setup()
{ nehmen Lmd diese per Up load zu übertragen.
II Den d1g1talen PIN zur Ausgabe (Output) festlegen.
} pinMode( led , OUTPUT) ;

7.1.4 Herr Ohm und sein Gesetz


II_ Die loop Rout1ne Lauft 1mmer wl eder- unendlich:
vo1d loop() Wie ich bereits in Abschnitt 7.1.1 ervvä hnt habe, hat die orange LED an Pin 13 des
{
digltalWrlte( led , HIGH) ; Arduino-Boards einen Vorwiderstan d. Was hat es nun mit dem Widersta nd auf sich?
II schaltedle LED an (HIGH)
delay(SOO); II warte e1ne halbe Se~unde Vielleicht habe n Sie ja im Zusammenhang m it Widerstä nden schon einmal vom ohm-
dlgitalWrite(led , LOW); II schalte dle LED aus (LOW)
delay(SOO); II warteewehalbe Selunde
sehen Gesetz3 gehö1t.
}

Das ohmsehe Gesetz


Das ohmsehe Gesetz beschreibt, wie sich der durch ein Objekt fließe nde Strom in seine r
+
Stä rke verändert, wenn eine elektrische Spannu ng an ei n Objekt anlegt und diese Span -
nung verändert wird.
Anders formul iert: Die Stärke des elektrischen St roms, der durch ei n Objekt fließt, ve r-
ändert sich im gleichen Verhältnis (proport iona l) wie die elektrische Spa nnung am
Abb 1'ldung 7.6 Das Ubertragen
-· der Arduino-Soft ware (Up load) ist beendet. Objekt. Das bedeutet automatisch, dass der Widersta nd des Objekts gleich bleibt (kon-
stant), ega l wie sich Spannung und Strom ändern. Dieser Zusammenhang ka nn in einer
Hat alles funkt ioniert ' blinkt d'Ie LE'D au f d em Ardumo-Board
. nun in einem Rhythmus
von O,S Sekunde n· He rzlich en c 1··uckwunsc h. ! S1e
. haben nun das erst e Mal Ihren Ardu111o
.
littp://arduino.ccjen/ Guide/Troubleshooting
Benannt nach Georg Sirnon Ohm

186 187
7 Los geht's!- Erste Praxis · .. ·

die LED nur 20 mA an Strom I fließen dürfen, haben Sie alle Werte zusammen, die Sie
einfa chen Formel beschrieben werden . Wird die Stromstärke mit/, die Spannung mit u
zur Berechnung des benötigten Widerstandes benötigen:
und der Widerstand mit R bezeichnet, lautet sie:
U=2,8 V
R = U bzw.: U = R x 1 bzw. : I= U 1=0,02 A
I R
R= ?n
Eingefügt in die Formel des ohmschen Gese tzes sieht das so aus:
Praktische Anwendung des ohmschen Gesetzes
R= ~ = 2,8 V = 14 Q
Und wozu brauchen Sie das nun? Ganz einfach. Eine LED zum Beispiel ist ein verhältnis- I 0,02A
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 Sie benötigen somit einen Widerstand von mindestens 140 Ohm (140 0), damit die LED
und eine maximale Stromstärke L 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
I• Vo rsicht!
Wert hier150 O.ln der Praxis macht das für die Helligkeit der LED keinen Unterschied.
Fließt ein zu hoher Strom durc h eine LE D, geht sie sehr sch ne ll kaputt. Sie ka nn dabei
sogar explod ieren. Und wenn dabe i die Ku nststoffummantel ung in meh rere Te ile zer·
platzt, kan n das im wa hrsten Sinn e des Wortes schnel l ins Auge gehen. Seien Sie also Wichtig! I•
bitte se hr vorsi chtig, und schaue n Sie in das Datenblatt des Herstellers der LED, welche Bitte denken Sie immer daran , dass jede LED an dere Span nunge n un d Ströme verträgt.
Spa nnungen und Ströme die LED maximal verträgt! Hier hilft Ihnen das Datenblatt des Herstellers weiter, das Sie in der Rege l on li ne fi nden,
oft auch dort, wo Sie die LEDs gekauft haben. Die LED-Span nung wi rd übrigens meist
mit Ufangegeben (Uf = forward va/tage).
Vorwide rstä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 Widerstand sberechnung für LEDs vollautomatisch
berechnen, wird - Überraschung! - das ohmsehe Gesetz mit obigen Formeln benutzt. Falls Sie sich nicht die Mühe machen möchten, LED-Vorwiderstände jedes Mal »von
Die Einheit des Widerstandes lautet übrigens Ohm (n). Wie praktisch, was? Hand« zu berechnen, so finden Sie im Internet passende Widerstandsrechner6 .

Eine orange Standard-LED wird typischerweise mit ei ner Spannung von 2,2 Volt (V) und
Anschluss weiterer LEDs
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 ansch li eßen, der ja 5 Möchten Sie auf dem Arduino-Board eine weitere LED an einen anderen der Pins
Volt Spannung liefert (siehe Abschnitt 4.2.1), benötigen Sie einen Widerstand, um den anschließen, sähe das auf einer Steckplatine so wie in Abbildung 7.7 aus.
Strom und die Spannung an de r 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
Widerstände und ihre Farbcodierung
Der Wert von Wid erständen ist nicht als Zahlenwe rt auf sie aufgedr uckt, son dern
+
V ü brig, der am Widerstand R verbrauch t4 werden muss. Da Sie jetzt wissen, dass durch anhand von farbigen Ringen kodie rt. Eine Erläuteru ng daz u find en Sie im Internet_? Fü r
denAufbau des Roboters ist das in diese m Buch nicht relevant.
4 Tatsächl_ich wi rd Strom nicht »verbraucht«, denn jede Art von Ene rgie geht nie verloren. Sie wird
nur m ~~~e ande re Form umgewandelt. In unserem Beispiel findet ei ne Umwandlung in Wärme
slatt, die Jedoch so gering ist, dass sie nicht spürbar ist. Umgangssprachlich spricht dennoch jeder llttp://de.wiki pedia. org/ wi ki/Widersta nd sreihe
vom »Energieverbrauch «. Zum Beispiel ht tp://www. leds.de/ Widerstand rechner/
llttp://de. wikipedia.org/wiki/Widersta nd_ (Baue/ement)11 Fa rbkodierung_ auf_ Widerst.C3.A4nden

188 189
, 1 Los geht's!- Erste Praxis

Pulsweitenmod ulation
Stellen Sie sich vor, Sie sind in einem ziemlich dunklen Raum und Sie haben eine
.... .... .. ...
... .. Taschenlampe. Wenn Sie die Tasch enlampe nun einschalten, ist es vollständ ig hell
.. .................... .. .......... . ....... .......
........
(HIGH), und wenn si e 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 ged imm t. 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 Pulswei tenmodulation ist, schauen Sie sich einmal Abbil-
dung 7.8 genauer an.

• tls
6 7 8

!' T

Abbild ung 7.7 Eine we itere LED mit Wide rstand am Ardu ino-Board 8 Abbildung 7.8 Pu lsweitenmodu lation

ln dem Diagramm ist die Taschenlampe innerhalb einer Zeitdauer t von in sgesamt
7.1.5 Wie dimme ich eine LED?
acht Sekunden viermal für eine Sekunde ausgescha ltet und vierma l für eine Sekunde
In diesem Abschnitt lernen Sie, wie Sie eine LED dimmen können und warum das wich· eingeschaltet. In der Dauer von acht Sekunden war sie also SO % der Zeit an- und 50 %
tig für die Ansteuerung Ihres Roboters sein wird. Generell kennt ein digitaler Arduino· ausgeschaltet. Natürlich würde das Auge einen so langsamem Wechsel deutlich wahr-
Ausgang nur zwei Zustände: HIGH (5 Volt) und LOW {0 Volt). Damit könnte eine LED nur nehmen. Das Beispiel in Abbildung 7.8 dient nur zur einfacheren Berechn ung der 50%
ein- oder ausgeschaltet sein. Was also tun S.ie, wenn Sie die LED in der Helligkeit regeln -sprich der halben Helligkeit.
wo llen? Könnten Sie nicht einfach eine geringere Spannung anlegen, damit die LED
DerName >>Pulsweitenmodulation<< (PWM) komrnt daher, dass die Lä nge der Impulse,
dunkler leuchtet ? Nein . Denn anders als bei Glühlampen ist der Spannungsbereich, in
also die We ite im Diagramm, verändert (moduliert) wird. 9 Es m uss ja kompliziert klin-
dem eine LED arbeitet {leuchte t), sehr eng begrenzt. Die LED benötigt je nach Typ eine
gen,denn Sie sind nun schon fast ein Arduino-Fachmann, und da brauchen Sie auch ein
sogenannte Durchflussspannung (englischforward va/tage), ab der sie überhaupt erst
paar Fachausdrücke zum Angeben.
anfangt 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 erstel lt mit Fritzing 9 Die Pulsweite nmodu lation (PWM) wird übrigens auch Pulsdauermodu lation (PDM) genannt.

190 191
~~;;/t't':~~~~~~fkti'\;~.,~~g~. ~·'?-I;·'~.,.
~-•>;~,·~~:..,Vrt~~;~.J;~,:.-;h-1:'' .,, <•.. ' ,-.• ·,
I J·:;' •
·' 7.1 · Der erste Kontakt mtt der Hardware
,• ~ ' • l_ •.. '"' t..;.~ ,_.,r.... •\::'~ , ~I L' t , ,, , , I

+ Ganz formell
ln
Hintergrund abarbeiten kann! Auße rdem ist es nicht sehr einfach, mittels delay die Ein-
schaltdauer exa kt zu definieren. Weitere Detai ls dazu finden Sie im Internet im Artikel
heneiner
: Formel würd e die Berech nung der Helligkeit aus dem Diagra mm oben so ausse- ))The secrets of Arduino PWM «IO

t1 ls PWM für Profi s: »analogWrite«


T = = 0,50~50%
25 Praktischerweise haben die Entw ickler auch hier vorgesorgt und PWM gleich »mitgeli e-
Man spricht hierbe i auch von einem duty cyc/e von 50% Duty I b d . . fert «. Anstatt mittels delay einen Pin in einem bestimmten Rhythmus zwischen HIGH
Einschaltdauer oder Tastverhältnis . o. cyc e e eutet so vtel Wie
und LOW wechseln zu lassen, gibt es fo lgenden Befehl:
Wenn die .Lam pe innerhalb einer Sekunde nur 0,1 Sekunden !an an w" ..
emen Hellig keitswert {duty cycle) von 10 %: g are, ergabe das analogWri te ( Pin, Wert)

t O,ls DerBefehl benötigt zwei Parameter: Der erste ist der anzusteuernde Pin, der zweite eine
-T1 = - = 0,10 ~ 10 %
ls
Zahl von 0 (=» immer aus«) bis 255 (= »immer an «).

Beispiel:
Pulsweitenmodulation nachgeb ildet Der Befehl analogWri te(S , 128) schaltet den Pin 5 auf 50 % des maximalen Wertes von 5
Um die Pulsweitenmodulation auf dem A d . . Volt, also 2,5 Volt (255 = 100 % = 5 Volt, 128 = 50 % = 2,5 Volt). Natürlich liegen für einen
den Code 8/inky.ino aus Listing
71
T S~ ~no .nachzubilden, benötigen Sie wieder Teil der Zeit immer noch 5 Volt am Ausgang des Ports an, denn dieser wechselt ja wie
Werte in die Klammern ein: . . ragen te r dJe delay-Anweisungen folgende neue
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-
digitalWr ite(led, HIGH) ; II schalte die LED an (HIGH) tiv nur 2,5 Volt messen (Mittelwert).
delay(100) ; II warte 0,1 Sekunden
digit alWr ite(led, LOW) ; Und wenn Sie nun mittels ana l ogWri te (S, 64) effektiv nur ca. 1,25 Volt messen würden,
II schalte die LED aus (LOW)
delay(900 ); II warte 0, 9 Sekunden 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-
Wenn Sie nun den geänderten Code auf Ihren Ard . . chen Messgeräte sind zu träge, um die schnellen Wechsel in der Gleichspann ung
dass die LED nur halb so hell ers h . t . . umo hochladen, werden Ste sehen, messen zu können. An einem sehr präzisen und vor allem schnell en Oszilloskop sind
c em - Wie In de B . . .
Sie haben nämlich die LED nur noch für . . m eisplel m1t der Taschenlampe. die Wechsel zwischen 0 und 5 Volt gut zu sehen. In Abbildung 7.9 sehen Sie so eine Mes-
. k 100 Millisekunden an u d d fü' 900 M'l
IJse unden wieder ausgeschaltet . D'Jeses schn elle Flack -. n ann r J- sung mit dem Oszilloskop. Hier ist deutlich der gemessene Mittelwert MEA mit 1,28
wahrgenommen, als wäre die LED . 1 d k ern Wtrd von Ihrem Auge so 11
vJe un !er geword S . Volt zu erkennen, aber eben auch der Maximalwert MAXIMUM mit 5,28 Volt.
zwei Werten für die delay-Anweisun d en . ptelen Sie ruhig mit den
g, un versuchen s· .
bilden. te, wettere Helligkeitsstufen zu 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

Einmal "de lay«, immer »delay«? werden.

. Befehl delay ist die simpelste Methode, um mt.t d em Ard .


Der
btlden. Jedoch hat diese Methode auch Nacht ., S wno-Board PWM nachzu-
eJ e. o kann derB f hl
Wert nur 1 übernehmen, also eine Millisekund S 11 . e e delay als kleinsten
.. .. . e. o ten Ste also . .. . .
Auflosung benottgen, ginge das mit delay nicht D . eme spater eme femere lO http://arduino.cc/ en/Tutoriai/ SecretsOJArduinoPWM
. . er wesenthebe N h . . 11 Eigentlich so ll ten das hier genau 5,0 Voll sein . Aber so spielt das Leb n : Offenbar lagen zum
Jedoch, dass während der Ausfüh rung dieses Befehls der Ar . ac .tet l von delay tst Zc ilpunkl d s Experiments an meinem Board 5,28 Volt an.
dumo mchts and eres im

192 193
I• Wichtig! Warum ist PWM so wichtig?
Oie Pulsweitenmodulation ist nicht nur praktisch, um LEDs zu dimmen . Wenn Sie
Der Arduino Uno kann nicht auf jedem Pin ein PWM-Signal ausgebenIE . d
se h p· d. d. · s sm genau später in Absc hnitt 7.5, »Ich mu ss hier weg! - Ansteuerung von Motoren «, die Motoren
c s_ ms. Je lese Fu n.ktion nutze n können. Damit Sie sich diese nicht merke n mü-
Ihres Roboters ansteuern, werden Sie PWM verwenden, um den Motor nicht nur mit
sen, smd Sie auf der Pl atin e mit einer Tilde (-)vor der jewei li gen Pin-N k s
ze1ch net. ummer ge enn- maximaler Geschwindigkeit (100 % = HIGH), sondern auch langsamer (zum Beispiel
mit 25 %) drehen zu lassen.

Üb rigens: HIGH ist nicht gleich HIGH- ode r: 3,3 Vo lt vs. 5 Volt
Viele neue Bauteile nutzen als HIGH-Zustand statt 5 Volt oft nu r noch 3,3 Volt, we il
+
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 be nötigt,
die die Spannungen auto mati sch von 3,3 nach 5 Volt und umgekehrt wan deln. Im Inte r-
net finden Sie diese zum Beispiel unter der engl ischen Bezeich nung Valtage Level Trans-
lator. Sie kosten nur wenige Euro.

Übung
Erstellen Sie jetzt bi tte ein Programm, das eine LED auf 25 % Helligkeit herunte rregelt
(dimmt). Schließen Sie dazu eine LED mit Vorwiderstand an Pin 5 an. Wenn Sie sich
nicht mehr sicher sind, wie dieLEDangeschlossen wird, blä ttern Sie dazu kurz zu Abbil-
dung 7.7 zurück. Das Programm besteht aus sehr wenigen Zeilen und sollteamEnde so
wie PWM_LED. ino in ListLng 7.2 aussehen:
Abbildung 7.9 Schneller Wechsel der Pegel ZWISC
. hen 0 und 5 Volt II An Pin 5 i st ei ne LED mit Widerstand angeschlossen .
int led = s;
In Abbildung 7.10 sehen Sie die markierten PWM- fc' h· .
a Igen Pms 3, 5, 6, 9,10 und 11.
void setup ()
{
I I Den Pin zur Ausgabe festlegen .
pinMode(led , OUTPUT) ;
}

void loop()
{
II 64 entspric ht ca . 25 %von 255 .
II Die LED leuchtet nun mit 25 %Helli gkeit .
analogWrite (l ed, 64 ) ;
Abb ildung 7.10 Die PWM-Pins sind mit einer Tilde (- ) gek enn ze1.chnet. }
Listing 7.2 Das Programm »PWM_LED.ino« dim mt eine LED auf 25 %.

194 195
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 ohmsehe Gesetz lernten Sie im Anschluss, warum
LEDs immer Vorwiderstä nd e benötigen. Als Letztes haben Sie anhand einer Taschen·
Iampe gelernt, was Pulsweitenmodulation (PWM) ist und dass Sie diese später zur
Motorsteueru ng aufihrem Roboter benötigen werden.

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

In Abschnitt 7.l.J 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· ..................
..... ..... .. . . . . ..
weit 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 Scha lter a bfragen
....... .. . .. . .: ............. ..
:::::::::::::: ........... ... ..
Das einfachste Element, das Sie an einem Ard uino-Pin >>einlesen« können, ist ein simp·
!er Schalter. Diese Teile benötigen Sie für den nachfolgenden Aufbau:
.......... .. ... ... .. .....
... .. .. .. .. .. .. .. ... .... .
II II II II II II II II II II II II II II II II II Abbi ldung 7.11 Eine einfache Schaltung m it Schaltern
Ch eck lis t e
. .. r die oe!be Leitung mit einem Widerstand von 10
~ ei n Ardu ino - Board Wie Sie sehen, ist Pin 5 des Ardumo ube o D dere Ende des Widerstandes
. S h lters verbunden. as an
~ ein Pa s sendes US B- Kabel kn und mit einem Kontakt des c a D) b nden Der mittlere Kontakt
. .t d r Masse (GN ver u .
Rl ist über die schwarze Leitung ml e . b d n Zur Verdeutlichung zeigt
.
des Schalters Sl ist über d1e rote el n L ·ru g mit SV ver un e .

Um einen Arduino-Pin einzulesen, muss natürlich ein Signal auf den Pin gegeben wer· Abbildung 7.12 den dazu passenden Schaltplan. .
den, das der Arduino »versteht<<. Wie Sie sich bestimm t schon gedacht haben, ist das .. . k belung mit einem extra Widerstand notwendig,
Warum ist eine so umstandliehe Ver a . Uen ~ Noch einmal: Würde der
einfachste Signal ein HIGH oder LOW. Dazu wird gleich ein Pin des Arduino-Boards mit . . 1 Schalter emlesen wo · .
wenn Sie doch nur emen s1mp en .. h lt geöffnet bzw. in die eine R1ch-
der Masse (GND =LOW-Signal) und mit 5 Volt (HIGH-Signal) verbund en. Wenn Sie näm- . d d ware der Sc a er .. .
Wtderstand weggelassen wer en un . d A duino-Pins einen willkurliehen
li ch den Wert eines Arduino-Eingangs einfach einlesen würden, ohne dass etwas mit .. S· beim Emlesen es r
tung geschoben, so wurden Je . d p· ·n der Luft« hängen würde und
dem Pin verbunden ist - dieser also quasi »in der Luft hängt«-, dann bekommen Sie Wert als Ergebnis zuruckbekommen, weil er m » 1
.. ,
jedes Mal ein nicht vorhersagbares Ergebnis. Bauen Sie nun das Experiment mit dem
Schalter so wie in Abbildung 7.11 dargestellt auf.
12 Abbildung erstell t mit Fritzing

196 197
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
Aus lesen des Pins ergibt somit den definierten Wert LOW. Schieben Sie den Schalter in
die and ere Ri chtung. liegen am Pin des Arduino 5 Volt an. Sie haben also ein definiertes
HIGH-SignaL

00/RX
RESET2
Dl/TX
AREF
02
IOref
D3 PWM
---re
04
AO 2
DS PWM
1
Al
D6PWM 51
Arduino
Al
Uno
A3 (Rev3)
A4/SDA
A5/5CL
010 PWM/55
Oll PWM/M051

1-'

Rl
N/C lO kO

Ardu ino Uno

Abbi ldung 7.12 Der Schalt pl an zu Abbil dung 7.111 3

+ Expertenwissen zum Angeben

Ein Widerstand, der einen Pin wie beschrieben »herunter auf Masse zieht« wird übri-
gens Pu/I-down -Widerstand genannt. Das Gleiche gibt es auch Richtun ' HIGH : Ein
Widerstand vom Pin zur positiven Versorgungsspannung heißt Pul/-up-Wid!rstand.

13 Ab bil d ung e rstell t mi t Fri tzing

198
. . . . . . . .~r-:-....~~~J•'•'Wolll-.... -. . . . .· ,)
~·· ·.' ,' _~,. ;'·.· :: . · 7.2 Ist da jemand?- KÖntakt mit der Außenwelt
~ ' ' < • ' I

r- DerBefehl zum Ein lesen ein es digitalen Arduino-Pins lautet:

digitalRead ( Pin) ;
!S
Der Befehl benötigt beim Aufruf n u r den Parameter Pin, also die Num mer des digitalen
Pins, der eingelesen werden solL Als Ergebnis liefert der Befehl den »Wert e< HIGH oder
LOW zurück. Aber am einfachstenverdeu tlicht dies das kleine Progra m m Scha lter_ ein-
lesen.ino in Listing 7.3 , das Sie bitte aufihr Arduino-Board übertragen und mit de r Schal-
tung aus Abbildung 7.11 a usprobi eren.

int ledPin = 13 ; II LE D verbunden mi t Digi tal-Pin 13


in i nPin = 5; II Sc halt er verbunden mit Digital-Pin S
int zustand = LOW; II Di ese Variable speichert den Schalterzustand

void setup ()
{
pinMode(ledPin , OUTPUT) ; II Digital -Pin 13 als Ausgang defi nieren
pinMode(inPin , INPUT) ; II Digital-Pin 7 als Eingang definieren
}

void loop()
{
zustand = digitalRead(inPi n) ; II Schalterzustand (Pin) ei nlesen
digitalWrite(ledPin , zu sta nd); II LED gemäß Schalterzustand schalten
}

Listing 7.3 Ein lesen ei nes Schalters und Ausgabe mittels LED

Wie erwartet soJlte nun der Scha lter die LED des Arduino-Boards ein- und ausschalten.

Warum einfach , wenn es auch umständlich geht?


Haben Sie sich beim Lesen des Programmcodes gefrag t, warum es so viele Zeilen sind
bzw., genauer gesagt, warum eine Variable ve rwe ndet wird ? Natürli h hätte der Code
auch wie in Listing 7.4 wesen tlich kürzer geschrieben werden können.

void set up ()
{
II Digital- Pin 13 al s Ausga ng def inieren
pinMode(13 , OUTPUT);

199
. .
7 Los geht's!- Erste Praxis . . . ,

II Digital-Pin 7 als Eingang definieren


pinMode( 7, INPUT) ;
}

void loop()
{
II Schalter einlesen und LED sofort ein-/ausschalten
digit alWr i t e(1 3, digita1Read(7)) ;
}

List ing 7.4 Einlesen eines Schalters- kurz, aber unvorteilhaft

Auf den ersten Blick ersche int 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 Ven'>'endung 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 hand elt . 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üss ten Sie dazu nun im Programmcode verändern? Richtig: An jeder Stelle müss-
t en Sie für den Schalter die 7 aufn ändern und für die LED die 13 auflO . Vernenden Sie
stattdessen den Code mit den Variablen, müssten Sie lediglich die zwei Zeilen mit led-
Pin und inPin aktualisieren. Die lange Codeva riante ist auf den ersten Blick vielleicht
umständlicher, aber wesentlich leich ter zu warten. Denken Sie nur daran, an wie vielen
Stellen Sie Pin-Nummern aktuali sieren 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 h aben Sie gelernt, wie Sie einen Schalte r anschließen , diesen ausle-
sen und warum hierzu ein Widerstand notwendig ist. Des Weiteren haben Sie erfahren,
warum es sich meistens lohnt, Variable n in Programmen zu verne nden, statt sie so kurz
wie möglich zu schreiben.

7.2.2 Taster abfragen

Was mit einem Schalte r geht, geht mit einem Tastergenauso ein fach. Und das testen Sie
jetzt. Sie benötigen für d en n achfo lgenden Aufbau:
II II II II II II II II II II II II II II II II II
Checkliste
t/ einen Taster
t/ einen Widerstand , 10 kQ
t/ ein paar Leitun gen (Jumper Wire )
t/ eine Steckplatine
t/ den Arduino Uno

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 be im 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 Abb.i ldung 7.13 leicht feststellen werden .

14
Abbildun g 7.13 Sc halt ung zum Auslesen ein es Tast ers

14 Abbildung erslcl ll mit Fritzing

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

00/ RX
01/TX 52
02
D3PWM
04
DSPWM L------,
D6PWM
Ardumo
Uno 07
{Re\'3)

M/50/i
AS/SCL 010 PWM/55
Oll P\'IM/M051

Rl
l OkO
N/ C
0
z
Q

ArduinoUno

Abbildung 7.14 Schaltplan zu Abb ildung 7.1315

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


Siek .. n n n den Autbau au bbil du ng 7.13 du rch Akti ieren iner be anderen Funktion
t ra \ id r tand aufbauen . Dazu nutz n i d
Ri ht ig. rd erb ut
r:t"nde, d i
..ikll

D mtt . p, r n ie. t h in n · p rat n \ id r:tand b im bfra n n T tern der


halt rn. B a hten ie aber, da i h di Lo ik beim u le en de Pin »umkehrr«.

15 Abbildung erstellt m it Fritzing

202
Denn ' der Pin wird standa rdm äß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 Bau teil.

!IR

a
r~a
••••
• 1

§. •
.. .. ...... ................ ....
....
•• j!;l
II
• " -----1:·~·~·~·~·~·~·~·~:~:~: : : .................
~

:::::::::::::::::
~ g -·.
~~I &, + ........ ...... .... ... .- .........
............. ....... ... .
.
.. .... .. .... .... .. ........ .... ............ .......... ........
'~
~ ' r • • • • • • ••••••••••••••••


0 f _:
t -·

.'
...,..". .
c 1
~ II '
"""' 11
• •
Abbildung 7.1 5 Versuch mit Taster und internem Pull-up-Widerstand 16

Pre llende Taste r u nd Sc halter


Taster und Schalter haben eine Eigenschaft, d ie Prellen (engl. bounce) genannt wird. Das
bedeutet. Wenn ein Schalter oder Taster betätigt wird, werden die Kontakte in der Regel
nicht ei nfach geschlossen, so nd e rn im winzigen Millimeterbereich mehrfach hinterein-
ander kurz geschlossen und wieder geöffnet. Das kann man sich wie einen Handball
vorsteLl en, der a uf de n Boden fällt und dabei ein paarmal springt, bis er endgü lt ig liegen
bleibt. Dieses Verh alten ist technisch bedingt und unerwünscht. Beim Schalten einer
LED ist dieses Prellen nichtweilertragisch und auch nicht wa hrnehmbar.

\\1 nn Si aber zum Beispiel jede Betätigung eine Tasters zählen wollen, so nimmt der
Arduin die Mehrf chb tätiaungen durch das Prellen aufgrund mehrerer schneller
I un n wä hrend de Tastendru k wahr. Ein scheinbar einmaliger Druck auf den
Ta t r ' ir dann zum Bei piel als >fünfmal betätigt« gezählt. Das kann dann bei Aus-
wertun en in einer oft\ are zu einem Problem werden. In Abbildung 7.16 sehen Sie, wie
ein Tast r mehrfach Z\ i chen AU und EI wechselt, bis er am Ende eingeschaltet
bleibt.

16 Abbildung erstellt mit Fritzing


Abbildung 7.16 Ein prellender Scha lter 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
17
Bounce-Bibliothek 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_ entprel/t.ino. Der Aufbau der Tes tschaltung dazu ist in Abbildung 7.15 dar-
geste llt. 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 PI N 2 II Pin für den Taster (gegen GND)


#defi ne LED PIN 13 I I Di e übliche Arduino-LED

II Erstel le ein Bounce-Objekt , das das Entprel len regelt.


Bounce ent pr eller = Bou nce () ;

void setup ()
{
II Taster-Pin als Eingang definieren

17 http://playground.arduino.cc/code/ bounce
pinMode(TASTER_PIN , INPUT);

II Internen Pull -up-Widerstand aktivieren


pinMode(TASTER_PIN , INPUT _PULLUP) ;
II Entprellfunktion aktivieren
entpreller .attach (TASTER_PIN) ;
entpreller .interval( S);

II LED-Pin als Ausgang definieren


pinMode(LED_PIN,OUTPUT) ;
}

void loop()
{
II Entpreller (entprel ler) akt ualisieren
entpreller .update() ;

I I "Korrigierten" Wert des Tasters lesen


int wert= entpreller .read() ;

II LED ein- oder ausschalten


II (LOW = EIN, weil Pull-up-Widerstand!)
if (wert == LOW)
{
I I LED an
digitalWrite(LED PIN, HIGH) ;
} -
else

II LED aus
digitalWrite(LED PIN , LOW) ;
} -
}

Listi ng 7.5 Taster einlesen und automatisch entprellen

Die meiste n Ze ilen dürften für Sie nicht mehr neu sein. Spannend ist lediglich die Zeile

zu Beginn:

Bounce entpreller = Bounce() ;


Hier wird ein Objekt namens entpreller erstellt, das di e gan ze Magie für Sie regelt.
Beachten Sie weite rhin die in der set up-Funktion enthaltene Anweisung pi nMode(TAS-
TER_P IN INPUT_PULLUP), die den internen Pull-up-Widerstand im Arduino für den Tas-
ter-Pin aktiviert (siehe Abschnitt 7.1.4). Wie die Entp rellfunktion in te rn 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-Funk tion:

II Entprellfunktion aktivieren
entpreller .attach(TASTER_PIN) ;
entpreller .interval(S) ;

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

II Entprell er (entprell er ) aktualisieren


entprel ler .update() ;

II "Korrigierten " Wert des Taster s lesen


int wert = entpreller .r ead() ;

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 Senso ren

Aber nun zu etwas Spannenderem als simplen Tastern und Schaltern : Sensoren . Ein Sen-
sor ist so etwas wie ein »Füh ler«, de r bestimmte Eige nschaften seiner Umgebung erken·
nen kann. Er nimmt Messungen vor und stellt die Ergeb nisse an seinen Anschlüssen zum
Auslesen an elektrischen Schaltungen, wie dem Arduino, zur Verfügung. In den fo lgenden
Absch itten wi ll ich Ihnen drei Sensoren vo rstellen, die in der Robotik häufig Anwendung
finden. Einen davon werden Sie selbst später an Ihrem Arduino-Roboter nutzen!

7.2_4 Infra rotsensor

Es gibt verschiedenste Sensoren, die sich mit der Messung von Infra rotlicht beschäfti-
gen. Infrarotlicht ist Licht im für den Menschen unsi chtbaren Bereich. Dabe i sind wir
ständig davon umgeben, sogar in unserem Wohnzimmer - zumi nd es t, wenn Sie einen

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

206
Fernseher oder eine Stereoanlage mi t Fe rnbedi enung besitzen. denn die gängigen Fern-
bedienungen haben alle eine Infrarot-LED (JR -LED). die Signale an das zu steuernde
Gerät überträgt. Mit vielen Digitalkam eras oder Webcams können Sie die Infrarotstrah -
lung sogar sichtbar mac hen : Halten Si e doch einmal in sehr dunkler Umgebung Ihre
Fern seherfernbedi enung vor e ine Kamera, betätigen eine der Tasten und schauen Sie
aufdas Bild. Es dürfte un gefä hr wie in Abbildung 7.17 aussehen . Der nun sichtbar leucht-
ende Punkt ist die lnfrarot-LED.

Abbildung 7.17 lnfrarot licht, 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 Ta te 4 auf der Fernbe-
dienung eine and ere Information al bei Taste 2 an das zu steuernde Gerät übertragen
wird. In Abbildung 7.18 sehen Sie einen Infrarotsensor (IR-Sen sor).

-~

Abbildun g 7.18 Der Infrarotse nsor (IR-Senso r) TSOP38238

207
• • - "-'-} "' ro• ... •'.-:' • •""' •

7 los geht's!- Erste Praxis _.' , :". ·..~_.; :!};, ~~~--.,: ..:.:: .'

Der Vorteil der Infrarotsensoren ist, das s sie relativ günstig sind . Sie haben aber auch
einen Nachteil: Da die Sonne ebenfalls einen sehr hohen Anteil an Infrarotlicht aussen-
det, funkt ionieren viele IR-Sensoren im Außenbe reich 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 im mer eindeutig erkennen. Für Innenberei-
che können sie also gut eingesetzt werden, während draußen andere Sensoren besser
geeignet sind.

Der Infrarotsensor Ih res Robot ers


Der Infrarotsensor, der später auf Ihrem Arduino-Roboter zum Einsatz kommen wird,
ist eine Kombination aus Infrarotsender und -empfanger: der Sharp-lnfrarotdistanz·
messermit dem kurzen und leicht zu merkenden Namen GP2YOA21YKOF. Dieser Sensor,
den Sie in Abbi ldung 7.19 sehen, enthält eine Infrarotdiode (IR-Diode) und einen IR·
Empfanger. Die IR-Diode sendet Infrarotlicht aus, das von einem Objekt reflektiert und
vom IR·Empfanger 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 einJesen .

Abbildung 7.19 De r Sharp-lnfrarotd ista nzmesser »GP2YOA21YKOF«

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

Farbe Belegung
Rot +5 Volt

Schwa rz M asse (GND)

Weiß Signal

Ta bell e 7.1 Die Be legung des Sensor-Anschlusska bels

208
Fürdas nachfolgend e Experim en t benötigen Sie fo lgende Teile :

I I II II II II II II II II II II II II II II II II
Checkl iste
~ 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.

19
Abbildung 7.20 Der lnfrarot dista nzse nsor, angesch lossen am Ard uino

Vorsicht, empfindliche Buchse am Sensor! I•


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 fa lsch herum stecken und den Sensor ansch li eßen. w ird
mindestens der Sensor dauerhaft Schaden ne hmen!

19 Abb ildung erstellt mit Fri tzing


, ~ ~<•~ '~~, -.~ ... "Pt-.'"~ ' "
7 Los geht's!- Erste Praxis ' · , :'· ,.,:, ·:··.( :;,,,

Abbildung 7.21 De r Stecker des Se nsors hat einen Steg in der Mitte.

Dieser Sharp-Sensor kann Distanzen zu einem Objekt in ca. 10 bi s 80 cm Entfernung


messen und gibt entsprechend zu den Entfernungen einen analogen Spannungswert
auf der weißen Signalle itung aus . Beispielsweise:

.. ca. 2,3 Volt bei 10 cm Entfernung


.. ca. 1,0 Vo lt 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
>
:§_
""
c:
:::>
c:
2,0
:;
Cl.
1,5
"'
1.0

0,5

0,0

10 20 30 40 so 60 70 80
Abstand zum reflektierenden Objekt (in cm)

Abbildung 7.22 Die Ausga ngsspannung in Abhängigke it zur Entfernung


Wie sie sehen, handelt es sich um eine analoge Spannung. die alle Werte zwischen 0 bis
ungefahr 3,1 Volt annehmen kann. Daraus fo lgt das nächste Experiment mit dem
Arduino und einerneuen Funktion: das Einlesen einer analogen Spannung m it 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 aufihr Arduino-Board:

int ledPin = 13 ; I I Der übliche LED-Pin


int IRpin = AO; I I Der Pin für den Infrarotsensorausgang

void setup ()
{
pinMode(ledPin , OUTPUT) ; II LED-Pin ist ein Ausgang
pinMode(IRpi n, INPUT); II IR-Pin als Eingang definieren

II Serielle Ausgabe auf dem Bildschirm starten


Serial. begin(9600 );
}

void loop()
{
II Sensor (Pin) einlesen
float spa nnungswert = analogRead(IRpin) ;

II umrechnen in cm
float entfernung = (6787 I (s pannungswert - 3)) - 4;

II Solange Distanz <= 80 cm


if (entfernung <= 80 )
{
II Distanz ausgeben
Serial. print ("Messwert: ") ;
Serial . print(spannungswert);
Serial. print (" I Entfern ung: ") ;
Serial.print(entfernung) ;
Serial . print( "crn" );
}
else
{
Serial.print( "> 80 cm") ;

Serial .println() ;
delay(SOO) ;
}

Li sting 7.6 »IR_ Distanz _SeriaiOut.ino« zum Anze igen der Entfernung

IJ! n n
/dev/tty.usbmodemfa t411
lll --==
> 80 an ~
------------------------------------------ J (se~~)
> 80 Oll
> 80 Cl!
> 80 Oll
> 80 an
> 80 an
> 80 an
> 80 an
> 80 an
Messwert: 108.00 I Entfernung: 65.38 cm
Messwert: 134.00 I Entfernung: 49 .04 an
Messwert: 137.00 I Entfernung : 47.66 an
Messwert: 138 .00 I Entfernung: 47.22 an
Messwert: 158 .00 I Entfernung: 39.84 an
Messwert: 150.00 I Entfernung: 42.50 an
Messwert : 176.00 I Entfernung: 34.93 an
Messwert: 190.00 I Entfernung: 31. 87 an
Messwert: Z19 .00 I Entfernung: 26.98 an
Messwert: 245.00 I Entfernu·ng : 23. n an
Messwert: 295.00 I Entfernung: 19.25 an
Messwert: 319.00 I Entfernung: 17.65 an
Messwert: 408.00 I Entfernung : 13. 49 an
Messwert: 439.00 I Entfernung: 12.47 an
Messwert: 463.00 I Entfernung: 11.78 an
Messwert: 487. 00 I Entfernung: 11.16 an
Messwert: 473.00 I Entfernung: 11.51 an
Messwert: 225.00 I Entfernung : 26 .15 an
Messwert: 130.00 I Entfernung: 51.00 an
Messwert: 130.00 I En-tfernung: 51.00 an
MesSVtert: 118.00 I Entfernung: 57.95 an
Messwert: 114.00 I Entfernung : 60.71 an
Messwert: 118.00 I Entfernung: 57 .95 an
Messwert: 122.00 I Entfernung: 55 .43 an
1-lesswert: 114.00 I Entf ernung: 60.71 an
> 80 an
> 80 Cll1
> 80 011
> 80 011
> 80 an
> 80 an
> 80 an

jO Automallsch scrollen
rSowohl NL als auch CR 1 :l illöfbaur=JD
Abbildung 7.23 Ausgabe der Entfernung auf dem Bi ldsc hi rm

212
Nach dem Übertragen der Softwa re aktivi eren Sie den in Abschnitt 6.14.2 beschriebenen
Serial Mo nitor in der Arduin o-Softwa re üb er die Me nüpunkte TOOLS · SERIALMO NITOR.
Halten Sie nun di e I-land vor den Sensor, und verändern Sie dab ei die Ent fernung. Die
Ausgabe auf dem Bildschirm zeigt die ungefähre Entfernung der Hand vom Sensor an.
in Abbildung 7.23 sehen Si e ein Be ispiel.
Wenn Sie den Code einm al näher bet rachten, werden Sie feststell en, da ss die ganze
Magie auf zwei Zei le n besch ränkt ist. Erst wird die an aloge Spannung vom Sensor am
Arduino-Pin mittels anal ogRead eingelesen und gleichzeitig in der Variable ent fernu ng
gespeichert:

II Sensor (Pin) einlesen


float spannungswert = analogRead( IRpin) ;

Gleich danach wird der eingelesene Spannungswert in die Entfernung in Zentimeter


umgerechn et. Die spezielle Formel 20 ist hie r an den verwendeten Sensor angepasst . Bei
einem anderen Senso r müsste n Sie hi er eine Anpassung vornehmen :

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

Die Entfernung mittels LED signalisieren


Schauen Sie sich nun Listing 7.7 an, und übertragen Sie die Datei IR_Distan z_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 ; II Der übliche LED-Pi n


int IRpin = AO; II Der Pin für den Infrarotsensora usga ng

void set up()


{
pi nMod e(l edPi n, OUTPUT ) ; II LED-Pi n als Ausgang def inieren
pinMode(IRp i n, INPUT); II IR- Pin als Eingang def inier en
}

void loop()
{
II Sensor (Pi n) ei nlesen
floa t spa nnungswer t = analogRead(IRpin) ;

20 Sieh e auch http://www.acronam e.com/ articles/linearizing-sharp-ranger.htm l

213
II Umrechnen in cm
float entfernung = ( 6787 I (spannungswert - 3)) - 4;

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

if (entfernung < 10)


entfernung = 10;

II Entfernung für delay umrechnen


i nt zeit = 0;
zeit = map(entfernung , 10 , 80 , 100, 1000) ;

II LED blinkt
digitalWrite(ledPin , HIGH) ;
delay(z eit) ;
digitalWrite(ledPin , LOW) ;
delay(zeit);
}

List ing 7.7 Blinke nde LED in Abhängigkeit zur Entfern ung der Hand

Je näher Sie nun die Hand in Richtung Sensor bewegen, desto schnell er bLinkt die LED.

+ Hilfreich- die Funktion "map«

Ein paar Worte zu der hier verwendeten map-Funktion : Diese ist äußerst hilfreich, um
Werte ei nes bestimmten Bereichs auf einen anderen abzubilden (zu »mappen«). Um es
etwas anschau lich er zu sagen : Wenn Sie zu m Beispiel einen Temperatursen sor haben,
der von - 100 bis +100 · cels iu s misst, und Sie die Helligkeit ei ner LED vo n 0 bis 255 in
Abhängigke it zur Temperatur einstellen wollen, dann geht das mit der map-Fun ktion
wie folgt :

helli gkei t LED = map (tempe ratur, - 100, 100, 0, 25 5) ;

Einfach, aber gen ial, oder? Sie find en die komp lette (englische) Referenz zum map-Befehl
wie im mer im lnternet. 21

21 http://arduino.ccjen/ Ref erence/ Map

214
• ~~ .. ~«JJ:::!!IT.~":.'Q..&~~-"''\'f. ~· ~'

I · ·.) ~ '"'.'~·.':? .: .1X: L


J• t '' !:-"' ·- ,~ ...
··'·
• I •
• '
•-·

' '
7.2 Ist da jemand?- Kontakt mit der Außenwelt

Und wozu das Ganze?


Wie Sie sich bestimm t vorstellen können, sind die vorangegangenen Beispiele hilfreic h,
wenn Sie später den Infra ro tse nsor auf Ihrem Roboter einsetzen werden. Denn schließ-
lich soll der Robote r ja rechtzeitig vor einem Hind ern is 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, we rden Sie den Roboter in Abschnitt 9.2,
nHinderni svermeidung «, dazu bringen, nach links oder rechts auszuweichen.

Übung
Experimen tieren Sie wieder etwas mit dem Code. Ändern Sie da s Programm I R_Dis-
tanz_ LED so, dass es di e Helligkeit einer externen LED in Abhängigkeit von der Entfer-
nung de r Ha nd zu m Sensor änd ert. Tipp: Schauen Sie sich dazu vielleicht noch einmal
Abschnitt 7.1.5 an . Übung macht den Meister! 22

7.2.5 Ultrascha llsensoren


Gegenüber den in Abschnitt 7.2.4 vorgestellten Infrarotse nsoren haben Ultraschallsen-
soren de n Vortei l, da ss sie gegen Sonne nlicht unempfindlich sind. Das heißt, wenn Sie
Ihren Roboter einmal im Garten fahren lassen wollen, eignen sich Ultraschallsensoren
besser - auch wenn diese dra u ßen ebenfall s vor Nässe geschützt werden müssen. Ein
weiterer wesentlicher Vorteil ist die maximal messbare Entfernung: Die in Abbildung
7.24 gezeigten Senso ren SRF04/05 von Devan tech können eine Entfern ung bis sechs
Meter messen. Der Nachteil der Sensoren liegt in Ihrem Preis : Verglichen mit IR-Senso-
ren sind s.ie fa st doppelt so teuer in der Anschaffung.

Abbildun g 7.24 Der Ult ra schall sensor »SRF04/0S« von Devant ech

22 Ich will Ih n en die Lösung n icht vo rent halt en: Sie find en s ie als Download m it dem Dateiname n
IR_ Distanz_ LED_ He/ligkeit.ino.

215
7 Los geht's!- Erste Praxis ' .;~ .'~ ~ _.,, · .__ , ', ·, · ..
~ I -~J- ~ ' '

Auch die Ansteuerung der Ultraschallse nsoren ist komplexer: Dem Sensor muss erst
ein Start -Impuls gegeben werden, dam it er eine Messung startet. Da nach »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 ein en nicht so einfach
zu programmieren und zum anderen nicht so leichterweiterbar 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·
lieh unzählige Shields und damit Erweiterungsmöglichkeiten. Um sich einen kleinen
Überblick über die Vielfalt an Arduino-Shields zu verschaffen, schauen Sie sich di e nach·
folgenden Abbildungen an. Wenn Sie damit noch immer nicht genug Anregungen für
spätere Projekte erhalten, suchen Sie im Internet nach >>Ardui no Shield «. Sie werden
zahlreiche Ergebnisse für Inspirationen erhalten.

Abbildung 7.25 Da s »Arduino Motor Shield «

Das Arduino Motor Shie/d aus Abbi ldung 7.25 dient zum leich ten Anschluss und Betrieb
von Motoren und Servosam Arduino-Board . Dieses Sh ield werden Sie auf Ih rem Robo·
, .~ ?~~~~r:y.r··~ist··~~ J~~~·~d?- K~ntakt mit der Außenwelt I

~rst ter nutzen, und ich zeige Ihn en in Abschni tt 7.4, >>Der Diener - An steuerung von Ser-
«er vos«. bzw. Abschnitt 7.5, »Ich m u ss hier weg! - An steuerung von Motoren«, wie das
funktioniert.

tch

:n.
Je)
10·
en
t
:n

ür

Abbi ldung 7,26 Das »Arduino Wireless SD Shield« 23

Sie wollen eine SO-Karte fi'tr 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 A rduino Wireless SD Shield aus Abbildung 7.26 ist das Shield Ihrer Wahl.

24
Abbildung 7,27 Spezielle »Xßee«·Funkmodule zur Funkdatenübertragung

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


24 Bi ld: Mark Fi cke tt, CC BY-SA 3.0

217
Wenn Sie Ihren Arduino Daten an zeigen lassen und ihn per Touchscreen steuern wol-
len, dann soll ten Sie sich näh er mi t dem TFT To uch Shield aus Abbildung 7.28 beschäf-
tigen.

Abbildu ng 7.2 8 Das »TFT Touch Shield «25

Verbinden Sie Ihr Ardujno-Proje kt doch später einmal mit Ihrem heimischen Netzwerk
- per WLAN mit dem WIFI Shield au s Abbildung 7.29 . Sie könnten zum Beispiel Ihr Pro·
jekt aus dem heimischen . 1etz twittern lassen oder vom Internet aus auf Ihr Arduino·
Board zugreifen. Und einen SD-Karten leser hat dieses Shield au ch noch mi t dabei.

Abb ildun g 7.29 Das »Ardui no WIFI Sh ield «26

25 Bild : h ttp://www.adafrui t.com/ products/l65l


26 Bild: http:/ /a rdu ino.cc, CC BY-SA 3.0

21 8
I· wenn Sie mal einen Roboter bauen wollen, der fa st überall erreichbar ist, dann sollten
f. 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 Adafruit FONA
einmal näher anschauen. 27

rk

28
Abbildung 7.30 »Arduino GSM Shie ld « auf einem Arduino Uno

Immer noch nicht gen ug ? Dann entwickeln Sie doch Ihr eigenes Arduino·Shjeld. Mit
dem Arduino Proto Shield aus Abbild ung 7.31 haben Sie Platz für eigene Lötarbeiten oder
zur Entwicklung eines Prototyps für Ihr eigenes Shield.

27 http:// www.ada.fru it.com/ product/ 1963


28 Bild: http:/ /a rduino.cc. CC BY·SA 3.0

219
00
ARDUI NO
PROTO
SHIEL D

Abbildung 7.31 Das »Arduino Proto Shield «29

7.2.7 Zwischenfazit

Wie Sie sehen, gibt es wirklich jede Menge Möglichkeiten, um Ihr kleines, aber feines
Arduino-Board zu erweitern oder mit dem Rest der Welt zu verbinden. Sie haben in die·
sem Kapi tel als Erstes gelernt, wie Sie Schalter und Taster abfragen können. Danach
habe ich Ihnen erläutert, was Prellen in diesem Zusammenhang bedeutet.
Anschließend haben Sie einen Infrarotdistanzsensor ausgelesen und in Abhängigkeit
von der Distanz zum Sensor eine LED zum Blinken gebracht. Nach ein paar weiteren
Übungen damit erhielten Sie zum Schluss einen Einblick in die weite We lt der zahlrei·
chen Arduino-Sh ield s.

7.3 Hört mich jemand?- Ausgabe von Signalen

In diesem Abschnitt zeige ich Ihn en, wie Sie mit dem Arduino-Board und nur einem
einzigen weiteren Bauteil Töne erzeugen können. Denn schließlich soll sich Ihr Robo·
ter später bestimmt einmal bemerkbar machen können. Eine Signalisierung mittels

29 Bild : h ttp://a rdu ino.cc, CC BY·SA 3.0

220
Tönen is t fü r Ro bote r in der Praxis sehr hilfreich. Denken Si e einmal an die Stromver-
sorgung Ihres späte ren Robote rs, de r du rch Akkus sei ne Energie erhält. Es wäre doc h
sinnvoll, wen n der Roboter dan n du rch Töne signalisiere n könnte, dass die Akk us bald
leer werden.
Auch wä re es denkbar, dass Ihr Roboter später lau t piept, we nn er sich in ein e ausweg-
lose Situatio n verfah ren hat und vor laute r Hinderni ssen keinen Weg mehr aus einer
Ecke in Ihrer Wohnung findet. Schauen Sie sich also jetzt an, wie die Ausgabe von Tönen
funktioniert.

7.3.1 Der Piezosi gna lgeber


Das einfac hste und gün st igste Bau teil, mit dem man dem Arduino ein paar Töne entlo-
cken ka nn, ist der sogena n nte Piezos ig nalg eber, auch Piezoschallwandler, Summer. Buz-
zeroder kurz Piezo genannt. Der Begri ff Piezo (altgriechisch »drücken «) rü hrt daher.
dass bestimmte Kristalle bei Dru ck eine Spannung erzeugen, beim Anlegen einer Span-
nung sich aber auch verformen. Und gena u Letzteres wird beim Piezosignalgeber
gen utzt. Piezos kosten heutzutage unter einem Euro, und es gibt sie in verschiedensten
Ausfü hrungen. Eine gä ngige, recht lau te und sehr unempfi nd liche Bauform sehen Sie in
Abbildung 7.32 .

es
e-
h

Abbildung 7.32 Ein Piezosignalgeber

m Neben dem günstigen Preis ist auch ein Vorte.il, dass Piezosignalgeber ohne weitere
Bauteile direkl am Arduino-Board angeschlossen werden können. Tun Sie nun genau
da s, und verbinden Sie bitte einen Piezo gemäß Abbildung 7.33 mit Ihrem Board. Sie
benötige n dazu :

221
II II II II II II II II II II II II II II II II I I
Checkliste
t,/ einen Pi ezo
t,/ zwei Jumper Wires
t,/ das Ar duino - Board

Laden Sie sich anschließend das Programm Piezo_Pieps.ino herunter, und übertragen
Sie es auf das Arduino-Board.

Abbi ldung 7.33 Piezosignalgeber am Ardu ino-Board 30

Sie sollten nun im Abstand von einer Sekunde einen Ton von ca. 0 ,2 Sekunden Dauer
{200 ms) hören. Zusätzlich geht die orange LED aufdem Arduino-Board an, während der
Piezo piept.

30 Abb ildung erste ll t m it Fritzing

222
Wie funktioniert das?
Schauen Sie sich kurz den dazugehör igen Quell code (Sourcecode) in Listing 7.8 an.

HAn Pin 5 ist der Piezo angeschlossen.


int piezo = 5;

II Die On-board-LED .
int led = 13 ;

void setup()
{
II Die Pins zur Ausgabe festlegen .
pinMode(piezo, OUTPUT) ;
pinMode(led , OUTPUT) ;
}

void loop()
{
II LED zur Kontrolle einschalten .
digitalWrite(led , HIGH) ;

II Ton mit 1000 Hz für 200 ms spielen.


playTone(lOOO, 200) ;

II LED ausschalten .
digitalWrite(led , LOW) ;

II Eine Sekunde warten.


delay( 1000) ;
}

I I Frequenz in Hertz (Hz)


I I Dauer i n Millisekunden (ms)
void playTone(float frequenz, lang dauer)
{
II Dauer umrechnen in Sekunden
da uer *= 1000 ;

II Umrechnen von Frequenz in Periodendauer 31


float periode = (1.0 I frequenz) * 1000000 ;
lang l auf zeit = 0;

31 http://www.elekt rotechni kjach wissen.dejwechselstrom/ periodenda uerjreq uenz.ph p

223
while (laufzeit dauer)
{
digitalWrite(piezoJHIGH);
delayMicroseconds(periode * 0 . 5);
digitalWrite(piezoJ LOW);
de l ayMicroseconds(periode * 0 . 5);

l aufzeit += periode;
}
}

Listing 7.8 Das Programm »Piezo_Pieps « erzeugtjede Sekunde einen Ton.

Wie Sie sehen, enthalten sowohl die setup-Funktion als auch die loop-Funktion nur sehr
wenige Anweisungen. Entscheidend für die Tonausgabe ist die Anweisung play·
Ton e (lOOO J 200). Sie lässt den Piezo einen Ton von lDOO Hz für eine Da uer von 200 ms
erzeugen. Es gibt zwar eine ähnliche Arduino -Funktion namen s tone 32, aber um zu zei·
gen, wie das Prinzip der Piezo-Ansteuerung funktioniert , h a be ich in List ing 7.8 eine
eigene Umsetzung verwendet. Bestimmt haben Sie schon e rkann t, da ss der Piezo in der
Fu nktion playTone durch einen simplen regelmäßigen Wech sel zwisch en HIGH und
LOW zum Piepen gebracht wird:

digitalWrite(piezo , HIGH) ;
delayMicroseconds(periode * 0.5) ;

digitalWrite(pi ezo, LOW) ;


delayMicroseconds(periode * 0 . 5);

Die restlichen Zeilen der Funktion playTone dienen lediglich dazu , den Ton in der
gewünschten Frequenz (Tonhöhe) und Länge abzuspielen. Um de n Ton zu stoppen,
setzen Sie einfach den Piezo-Pin aufLOW :

digitalWri te(pi ezo , LOW) ;

Ausprobieren!

Experimentieren Sie auch hier wieder mit verschiedenen Werten im Aufruf der Funk·
tion playTone. Ändern Sie die Tonda u er, ändern Sie die Tonhöhe. Sie werden merken,
dass lhr Piezo nicht bei allen Werten (Frequenzen) einen Ton von sich gibt. Es hängt
immer vom jeweiligen Bauteil ab, mit welchen Frequenzen es funktioniert. Auch hier

32 http://arduino.cc/de/ Reference/Tone

224
hilft ein BUck in das Datenblatt des Piezos, das Sie meist auf den Internetseiten des Bau-
teilherstellersoder in On! ine-Shops gängiger Elekt ronikfachhändler finden.

7.3.2 Melod ien programm ieren


Sie können mit Ihrem Arduino-Board und der Funktion playTone auch ))richtige« Noten
spielen. Sie müssen nur die passenden Frequenzen und damit die Tonhöhen kennen.
Auch hier hilft das Internet weiter und ermöglicht Ihnen zum Beispiel unter der Seite
http://rechneronline.de/ note/, auf einer Klaviatur für jede Taste die entsprechende Fre-
quenz anzuzeigen. Die Töne e·iner Oktave habe ich Ihne n in Tabelle 7.2 aufgeführt.

Ton -Nr. Note Frequenz in Hertz

hr 28 c 130,813

ns 30 d 146,832
ei· 32 e 164, 814
ne
er 33 f 174, 614
1d
35 g 195,998

37 a 22 0,000

39 h 246,94 2

40 c' 261, 626

Tabelle 7.2 Beispielnoten und ih re Frequenz (Tonhö he)

er Stellen Sie sich vor, Ihr Roboter fährt eines Tages durch die Wohn ung und spielt beim
n, Auftreffen auf ein Hindernis 1>Zum Geburtstag viel Glück«. Lassen Sie Ihrer Fantasie
freien Lauf, und bringen Sie Ihren Ard uino dazu, eine Melodie zu spielen . Zu langweilig?
Im fo lgenden Abschn itt 7.3.3 zeige ich ih nen, wie Sie mit dem Infrarotsensor und dem
Piezo eine Art Musikinstrument nach bauen.

7.3.3 Ein Musi kinstrument


, Ietzt zeige ich Ihnen, wie Sie ein sehr spezielles Musikinstrument nachahmen können:
t das Theremin33. Vielleicht kennen Sie den Film Mars Attacks!34 von Tim Burton. In die-
[

33 http://de.wikipedia.org/ wiki/Theremin
34 http://de.wikipedia.org/ wiki/Mars_A ttacks!

225
sem Film wird der Klang des Theremins als schaurige, fast nervige Musikuntermalung
genutzt. Es ist a ußerdem das einzige weit verbreitete Musikinstrument, das berüh·
rungslo s gespielt wird. Berührungslos? Das können Sie auch! Nehmen Sie dazu den
Ve rsu ch saufbau aus der Abb ildung 7.33 zur Han d, und erwe itern Sie ihn um den
Infrarotdista nzsenso r aus Abschnitt 7. 2.4 . Sie benötigen di e folgenden Teile :

II II II II II II II II II II II II II II II II II
Checkli ste
..t e inen Piezo
..t zwei Jumper Wires
..t einen Infrarotdis ta nzsensor
..t da s Arduino- Board

Das Ganze sollte aufgebaut so wie in Abbildung 7.34 aussehen.

Abbildung 7.34 Der Ardu ino als Th ere m in35

35 Abbildung erstellt mit Fritzing

226
Laden Sie anschl ießend das Programm Musikinstrument.ino (siehe Listing 7.9) herunter,
n- und übertragen Sie es auf Ihren Arduino. Wenn alles geklappt hat, soll ten Sie aus dem

~n
Piezo in kurzen Abstä nden einen tiefen Ton hören.
~n Bewegen Sie nun Ihre Hand vor den Infrarotsensor, und verändern Sie den Abstan d zu
ihm- mal näher, mal weiter weg. Je näher die Hand dem Sensor kommt, umso höher
wird der Piepton au s dem Piezoschallwandler.

int ledPin = 13 ; I I Der übliche LED- Pin


int IRpi n = AO; I I Der Pin für den Infrarotsensor
~t piezo = 5; II An Pin 5 ist der Piezo angesch lossen .

void set up ()
{
pinMode(ledPin , OUTPUT) ; II LED-Pin als Ausgang definieren
pinMode( IRpin, INPUT); I I IR-Pin als Eingang definieren
pinMode(piezo, OUTPUT) ; II Piezo-Pin als Ausgang
}

void loop()
{
II Sensor (Pin) einlesen
float spannungswert = ana l ogRead( IRpin) ;

I I Umrechnen in cm
float entfernu ng = (6787 I (spannungswert - 3)) - 4;

II Den delay -Wert begrenzen


if (entfernung > 80 )
ent fern ung = 80;
if ( entfernung < 10 )
entfernung = 10;

II Entfernung auf Tonhöhe mappen


i nt tonhoehe = O;
tonhoehe = map(entfer nung, 10, 80, 1000 , 100);

I/. LED an
digi talWrit e( ledPin, HIGH);

227
II Sp i ele Ton mit "tonhoehe" Hz für 100 ms ab .
playTone (tonhoehe , 100) ;

II LED aus
digita lWrite (ledP in, LOW ) ;

II 0, 05 Sekunden Pause zwischen den Tönen


delay( SO) ;
}

II Frequenz in Hertz (H z)
II Da uer in Mil l i sekunde n (ms)
void pl ayTone( int f r eque nz, long da uer)
{
dauer *= 1000;
float per iode = (1 .0 I frequ enz) * 1000000 ;
long lauf zeit = 0;

while ( l aufzeit < daue r )


{
digita l Writ e(p i ezo ,HIGH) ;
delayMicroseconds( periode * 0.5) ;
digital~Jrite ( p ie zo , LOW) ;
delayMicrosecond s ( per iode * 0 . 5) ;

l auf zeit += periode ;


}
}

Li sti ng 7.9 Das Programm »Mus iki nstrument.ino«

Wie funktio niert das?

Die Funktionsweise des Programms ist sehr simpel. Bestimmt erinnern Sie sich an die
unterschiedlich schnell blinkende LED in Verbindung mit dem IR-Sensor aus Abschnitt
7.2.4. Das gleiche Prinzip wird au ch hier genutzt, indem in der Hauptschleife l oop als
Erstes der Sensorper anal ogRea d( I Rpin ) ausgelesen und dann der ge lesene Spannungs-
wert in eine Entfernung (cm) umgerechnet wird. Über den bekannten Befe hl map erfolgt
danach eine »Umrechnung« der Entfernung in Hertz (Hz). also in die Tonh öhe:

228
I
II Entfernung auf Tonhöhe mappen
int tonhoehe = 0;
tonhoehe = map (entfernu ng, 10 , 80, 1000 , 100) ;

Genauer gesagt: Die gemessene Entfernung wird von 10 cm bis 80 cm aufTonhöhen


von1000Hz bi s 100Hz gemappt (abgebildet) .

Übung 1
Verändern Sie den Code so, dass der Ton tiefer wird, je näher Sie die Hand zum Sensor
bewegen, bzw. höher, je weiter Sie sie entfernen.

Übung 2
Verändern Sie den Code so, dass bei Änderung des Sensorabstands nicht die Tonhöhe,
sondern die Geschwindigkeit des Piepsens verändert wird- je näher Sie die Hand zum
Sensor bewegen, desto schneller soll es piepsen.

Übung 3
Verändern Sie den Code so, dass be·i Änderung des Sensorabstands nicht die Tonhöhe,
sondern die Dauer des Tons verändert wird (Tonlänge).

Verloren? Nichts funkti oniert mehr?


Das passiert jedem einmal. Wenn Ihr Programm nach vielen Änderungen gar nicht
mehr funktion iert, laden Sie sich einfach den Originalcode Musikinstrument.ino erneut
herunter, übertragen ihn auf Ihr Board und starten das Experiment von vorn .
Und wenn Sie sich die fert igen Lösungen anschauen wollen, finden Sie die Dateien
Musikinstrument_ Uebungl.ino, Musikinstrument_ Uebung2.ino und Musikinstrument_
Uebung3.ino wie immer auch als Download.

7.3.4 Zwischenfazit
Ein weiterer Abschnitt ist erfolgreich durchgearbeitet. Sie haben den Piezo kennenge-
lernt und erfahren, wie Sie ihm Töne entlocken können. Ich hoffe, Sie hatten danach
auch Spaß als »Musiker« mit dem Musikinstrume nt im EJo.:periment mit dem Infrarot-
senso rund dem Piezo. zum Schluss haben Sie in Üb ungen den vorhandenen Code so
veränd ert, dass sich die Tonhöhe oder die Tondauer veränderten.
7.4 Der Diener- Ansteuerung von Servos

In diesem Ab chnitt kommt nun erste Bewegung in die ganze Sache, denn es geht um
den ersten Aktor (siehe Abschnitt 2.2.3) an Ihrem späteren Arduino-Robote r: den Servo.

7.4.1 Was sind Servosund wie funktionieren sie?

Der Begriff Servo leitet sich von dem lateinischen Wort servus ab, das »Die ner<• oder
36
»Sklave« bedeutet. Das trifft es ganz gut, denn ein Servo macht, was Sie wollen, bzw.
bewegt sich so, wie Sie es wollen. Im Modellbau oder auch in der Robotik be teht ein
Servo aus einem Motor, verbunden mit einer speziellen Elektronik zum Ansteuern, und
einem Getriebe. In Abbildung 7.35 sehen Sie einen Servo.

Abbi ldung 7.35 Ein transparenter Miniservo mit sichtbarem Innen leben

AufderOberseite des Servos ist eine geriffelte Welle, auf der in der Regel ein sogenannter
Servo-Arm montiert wird. Dieser Arm dient dazu, den durch den Servo zu bewegenden
Gegenstand leichter mit der Servowelle zu verbinden. Der Arm kann in einem Halbkreis
von 180• bewegt werden- im Prinzip wie ein Scheibenwischer im Auto. Im Modellbau
betätigt ein Servo zum Beispiel bei einem ferngesteuerten Auto den Gashebel oder des-
sen Lenkung. ln Abbildung 7.36 sind verschiedene Servoarme mit Zubehör dargestellt.

Neben der Mechanik enthält ein Servo einen speziellen Widerstand namens Potenzio-
meter (kurz Poti, von der alten Schreibweise )> Potentiometer«). Es ist das gleiche Bau teil,
das in den meisten etwas älteren Radios als »La utstärkedrehknopf« verbaut ist. Das Poti
ist ein Widerstand, dessen ohmscher Wert sich beim Drehen von klein nach groß verän·

36 siehe auch http://de. wikipedia.org/wiki/Servo

230
dert. Er is t innerhalb des Servos kaum erkennbar mit dem Motor verbu nden und sorgt
dafür, dass di e Elektro nik durch ständiges Messen des Pariwiderstandes erkennt, in wel -
cher Position sich der Servoarm ge rade befind et. Und nicht nur das: Durch die ständige
Kontrolle des Wid erstande s rege lt die El ektronik auch fortwähren d die Position nach,
wenn sich di e Position des Za hnradesam Ausgang verä ndert hat.


Abbildung 7.36 Verschiedene Servoarme mit Zubehör

Vorsicht, sensibel! I•
Servos sind empfindliche Bauteile. Die günstigen Servos haben Getriebe aus Kunststoff,
die keine all zu große Belastung aushalten. Leider sind einfache Modellbauservos auch
nicht in der Lage, festzuste ll en, ob sie überlastet sind. Ei ne Überlastung tritt zum Bei-
spiel auf, wenn ein Servo sein en Arm in eine Position drehen soll, die durch ein Hi nder-
nis blockiert ist. Das kann schnell zur Überlastung der Servoelektronik oder zur
Zerstörung des Getriebes führe n. Gehen Sie also vorsichtig mit den kleinen Helfern um !

ln Abbildung 7.35 lässt sich ganz gut das Innenleben des Servos erkennen. Auf der einen
Seite ist der Motor zu se hen, darübe r befinden sich einige Zahnräder als Getriebe. Dieses
Getriebe sorgt dafür, dass der in der Regel recht schwache Motor am Ende verhältnism ä-
ßig viel Kraft anwe nden kann. Servos gibt es be reits für wenige Euro zu kaufen. Aber
auch hier sind nach oben kei ne Grenzen gesetzt: Extrem starke Servos kos ten schn ell
meh rere Hundert Euro ! Aber keine Angst: Fü r Ihren Roboter reicht ein kleiner, gü nsti-
ger Servo. Aber dazu später mehr. Erst einmal möchte ich Ihnen in Abschnitt 7.4.2 ze i-
gen, wie Sie eine n Servo ansteuern.

231
7.4.2 Wie we rden Servos angesteuert?

Servos haben in der Regel einen Stecker mit drei Kontakten un d den dazugehörigen
farbigen Leitungen. Leider sind die Farben je nach Servoherstell r unterschiedlich. Die
Belegung ist üblicherweise wie folgt:

Leitungsfa rbe Belegung


Schwarz oder Brau n GND
Orange oder Weiß Signal
Rot +S Volt

Ta bel le 7.3 Servo leitungen und ihre Belegung

Um einen Servo in eine bestimmte Position zu bewegen, wird ein pulswe itenmodulier·
tes Signal benötigt. Pulsweitenmoduliert? Richtig: Die gute alte PWM, die Sie bereits in
Abschnitt 7.l.S kennengelernt haben. Wie muss dieses PWM-Signal nun für Servos aus·
sehen? Schauen Sie sich dazu einmal das Diagramm in Abbildung 7.37 genauer an,
bevor ich es Ihnen erläutere.

UN
Pulsdauer zwischen 1·2 ms

~· -~-·---···-··--··-···-··-··-···-···-··-··-·"··-··-····-·····-···-·····- ·· . ··-·····-····

8 10 12 14 16 18 20 22 24 26 28

Periodendauer 20 ms .. !
i
i
Abbi ld ung 7.37 Solche PWM-Signale benötigt ein Servo zur Ansteuerung.

Wie dort dargestellt, muss innerhalb ein er Gesamtdauer von 20 Millisekunden (Perio·
dendauer) jeweils ein kurzer Puls mit eine r Dauer zwischen einer und zwei Millisekun·
den gesendet werden. Aber wie weiß der Servo nun, wie weit er seinen Arm in welche
Richtung drehen soll? Ganz einfach : Die Pulsdauer bestimmt die Position.

Pulsdauer
Servoarmposition
ca . 1,0 ms Arm ga nz links 0

Tabelle 7.4 Die ungefähre Pulsdauer im Verhältnis zur Servoarmpos ition

232
Pulsdaue r Se rvoa rmposition

ca. 1,5 ms Arm in der Mitte 0

ca. 2,0 ms Arm ganz rechts 0

Tabelle 7.4 Die ungefähre Pul sdaue r im Verhält ni s zu r Servoarm pos it ion (Forts.)

n
;-
l,

Abbildung 7.38 Die Pulsdauer bestimmt die Servoarmpos ition

Gut zu wissen!
Leider baut jeder Hersteller se ine Servos mit untersch iedlic her Gen auigkeit. Das bedeu-
+
tet, dass einige Servos bei ei nem Pu ls von 2,0 ms Länge den Arm nach ganz recht s fah-
ren und andere stattdesse n nach ganz links. Auch die Da uer von 1,0 ms bis 2,0 ms sind
nur ungefähre Werte und variieren ein klein wen ig: Es kö nnen also zum Beispiel statt
1,0 ms auch mal 0 ,9 ms sein.

Servoansteuerung fix und fertig


Alles zu komplizierte Theorie? Nun, Sie sollen ja hier auch ein bisschen was lernen. Aber
erneut haben es Ihnen die Ardui no-Entwickler leicht gemacht und ganze Arbeit geleis-
tet: Es gibt nicht nur eine fertige Bibli othek mit einfachen Befehlen, sondern auch gleich
ei n fix und fe rti ges Beisp iel innerhalb der Arduino-Software. Um dieses Beispiel zu öff-
nen, wäh len Sie in der Arduino-Software aus dem Menü die Punkte DATEI • BE I SPI ELE •
SERVO· SWEEP, wie in Abbildung 7.39 dargestellt.

233
Neu
Cffnen ...
Sketchbock ,.
Beispiele ., -- ,, ·" q ,.

,....
Ol.Basics
Schließen XW 02.Digital
Speichern XS
,....
03 .Analog
Speichern unter... frXS 04.Communication
Upload XU OS.Control ,.
Upload mit Programmer frXU 06.Sensors ,.
07.Display ,.
Papierformat
Drucken
frXP
XP 08.Strings ,.
,....
09.USB
lO.StarterKit
ArduinoiSP

Adafruit_LEDBackpack ,.
TimerOne ,.
EEPROM ,.
,....
Esplora
Ethernet
Firrnata ,.
GSM ,.
,....
LiquidCrystal
Robot_Control
Robot_Motor ,.
SD ,.
SoftwareSerial
SPJ
...
,.
Knob
. ..
Stepper
TFT
...
WiFI
...
Wire
...

Abbi ld ung 7.39 Das Beispielprogramm »Sweep« zur Servoansteuerung

Automati sch öffnet die Software ein vollständiges Beispielprogramm. In Listing TIO
finden Sie den kompletten Code von Sweep noch einma l auf Deutsch (Programm zum
Download: Servo_ Radar.ino) .

#include <Servo.h>

Servo servol ; II Erstellt ein Servoobjekt zur Steuerung


II Maximal 8 Servos können angesteuert werden.

234
.. ·~~-»'-"4b~rt.~'b~.~~.f'"'~t ••

.' • 1~ : .. ' 7.4 Der Diener- Ansteuerung von Servos ,

void setup ()
{
pinMode( 9, OUTPUT); II Pin 9 als Ausgang definieren
servol. attach (9) ; II Vebindet Pin 9 mit dem Servoobjekt
}

void loop()
{
int pos = 0; II Variable zur Speicherung der Position

for (pos = 0; pos <= 180; pos++) II Geht von 0 bis 180 Grad
{ II in Schritten von einem Grad .
servol .write(pos) ; II Bewege Servo zu Position "pos" .
delay( 15) ; II Warte 15 ms , bis Position erreicht .
}

for (pos = 180 ; pos >= 0; pos -- ) II Geht von 180 bis 0 Grad
{
servol .write(pos) ; II Bewege Servo zu Position "pos ".
delay( lS) ; II Warte 15 ms , bi s Position erreicht .
}
}

Listing 7.1 0 Das Programm »Servo_Radar.ino« zur Servoansteuerung

Entscheid end sind in diese m Programm lediglich drei Zeilen. Als Erstes wird die Biblio-
thek Servo eingebunden, damit die Servobefehle im Programm zur Verfügung stehen.
Dies geschieht durch die Anweisung #i nclude :

#include <Servo . h>

0
Danach wird ein Servoobjekt mit dem Namen servol erstellt:

Servo servo l ;

Zusätzlich wird dem Servoobjekt die Information gegeben, an welchem Pin des
Arduino-Boards die Servoste uerleitung angeschlo ssen ist (PWM-Signal):

servol .att ach(9);

235
Im weiteren Verlaufwird der Servo mit folgendem Aufruf bewegt:

servol . 1vrit e(pos );

Die Variable pos erhält hier übrigens einen Wert von 0 bis 180. Sie brauchen also nicht
umständlich PWM-Signale im Millisekundenbereich zu erzeugen, das wird alles für Sie
versteckt und im Hintergrund du rchgeführt. Und die 0 bis 180 entsp rechen natürlich
der Grad zahl des Winke ls des Servoarms (0" =ganz links, 90" = Mitte,l80" =ganz rechts).

Der Se rvo und seine St romve rso rgu ng


Noch ein paar Worte zum Aufbau der Testsc haltung mit Ihrem Servo, denn sicher wo!·
Jen Sie endlich das Erlernte sofort ausprob ieren. Wie Sie in Abschnitt 4.2.1 erfahren
ha ben, ka nn ei n Pin des Arduino nu r einen geri ngen Strom liefern. Abe r auch die SV·
Pins de s Arduino-Boards können nur begrenzt Strom liefern (wenngleich der Strom für
einen kleinen Servo durchaus ausreichen würde). Zusätzlich erzeugen Servos aber häu-
fig kleine Störungen auf den Spannungsleitungen, die den Arduino sogar zum Abstür-
zen bringen könnten. Ein Servo sollte daher immer eine eigene Stromversorgung
bekommen!

+ Zwei Spannungsversorgungen- eine Masse!


Wenn Sie zwei Spannungsversorgungen nutzen, müsse n di ese einen gemeinsamen
Bezugsp un kt für ihre Spannungen haben. Und das ist immer di e Masseleitung {GND).
Wen n Sie also mit einem Netzteil oder dem USB- Port Ihr Arduino-Boa rd mit Strom ver-
sorgen und mit einer anderen Stromquelle den Servo betreiben, dann müssen Si e beide
GND -Leitu ngen miteinande r verbind en. An sonsten wird Ih r Servo nicht reagie ren oder
Unvorherseh bares machen!

Aufbau der Servoschaltung

Einfache Servos sind, was ih re Stromversorgung angeht, recht genügsame Bau teile. Sie
arbeiten in der Regel auch noch mit Spannungen von 4 Vo lt oder 6 Vo lt. Daru nter oder
da rüber so llten Sie aber nicht gehen. Wenn Sie also ein Netzteil zur Hand haben, nutzen
Sie dieses für die GND- und 5-Volt-Leitung des Servos. Alternativ verwenden Sie vie r 1,5-
37
Volt-Batterien oder -Akkus in einem passenden Halter (s iehe Abbildung 7.40).

37 De r Umwelt zu liebe sollten Si e generell nur au fl adba re Akkus an statt Batterien verwend n.

236
I
01
'· ~~-~.,.-~~rr~'"'R'' .~·· ...
' · . ', ,..: ,~· ~ :. ';-_. ·: . ·· , 7.4 Der Diener- Ansteuerung von Servos ,

Abbildung 7.40 Ansch luss eines Servos mit eigener Spa nnungsverso rgung 38

Los geht's. Fo lgende TeUe werden benötigt:

II II II II II II II II II II II II II II II II II II
Checkliste
t/ ein Batteriehalter mit Batterien/Akkus oder ein Netzteil
ein Servo
-' das Arduino - Board

Bauen Sie jetzt die Schaltung wie in Abbildung 7.40 auf. Laden Sie anschließend das Pro-
gramm Servo_ Radar.ino herunter, und übertragen Sie es auf Ihren Ard uino. Der Ser-
voarm sollte sich daraufhin un entwegt von links nach rechts bewegen. Denken Sie

38 Abbildung erstell t mit Fritzing

237
0

daran, auch die Stromversorgung für den Servo zu verbinden bzw. einzuschalten, sonst
passiert wahrscheinlich gar nichts !

Ein Radar- oder: Die Stuhlbeinprob lem atik


Vielleicht haben Sie sich bereits gefragt, warum der Name des Programms Servo_
Radar.ino lautet. Der Grund ist, dass Ihr Roboter späte r den Servo wie ein Radargerät
bewegen wird, weil Sie auf dem Servoarm den Infrarotsensor montieren werden, den
ich in Abschnitt 7.2.4 beschrieben habe. Der Sensor bewegt sic h also - ähnlich einem
Radar auf einem Flughafentower- hin und her und >s ieht « dabei nach links und rechts.
Würden wir den Sensor fe t montieren und ihn nur genau geradea us »sehen« lassen,
könnte es in der Praxis passie ren, dass Ihr Roboter mit sei nem »Tunnelb!ick« an einem
dünnen Stuhlbein knapp vorbeisieht und mit einem überstehenden Rad ge nau dage·
genfährt. In Abbi ldung 7.41 habe ich Ihnen diese Stuh lbeinproblematik dargestellt.

i /

Abbi ldung 7.41 Die Verme idung der »Stuhlbeinprob lematik«

Links in Abbi ldung 7.41 »sieht« der Roboter das Stuhlbein nicht u nd fährt geradeaus
gegen das Stuhlbein (roter Pfeil). Rechts hat sich der Sensor auf de m Servo gerade nach
links gedreht, der Roboter erkennt das Stuhlbein und weicht daraufhi n in Richtung des
grünen Pfeils aus. Erkennen Sie den Vorteil dieser Konst ruktion fü r unseren kleinen
Freu nd?

238
' Zwischenfazit
Geschafft. In diesem Abschnitt haben Sie Servos kennengelernt und erfahren, wie diese
funktionieren. Danach haben Sie erfolgreich ein en Servo angesteuert und sind dadurch
erneut der PWM begegnet. Wa rum eine extra Stromversorgung für Servos sinnvoll ist,
habe ich Ihnen ebenfalls vermittelt. Zum Schl uss haben Sie gelesen, was es mit der selt-
sam benannten, aber wichtigen Stuhlbeinproblematik auf sich hat und wie Sie Ihren
it
Roboter durch eine Art »Ra dar« bald s icher durchs Leben bringen können.
n
n
:s.
n, 7.5 Ich muss hier weg!- Ansteuerung von Motoren
m
In diesem Abschnitt gehen wir noch einen Schritt weiter: Nachdem Sie in Abschnitt 7.4,
:e· ))Der Diener - Ansteuerung von Servos «, gelernt haben, wie ein Servo angesteuert wird,
erfahren Sie jetzt, wie Motoren angesteuert werden. Schließlich wollen Sie Ihren Robo-
terdoch mal durch die Gegend fahren lassen können, oder? Also, weiter geht's im Text!

7.5.1 Arten von Motoren


Es gibt viele Arten von Motoren, die elektrisch angetrieben werden : Wechselstrommo-
toren, Gleichstrommotoren, Motoren mit Bürsten, bürstenlose Motoren, Schrittmoto-
ren usw. In der Robotik werden meistens zwei Arten von Motoren verwendet:
Schrittmotoren und Gleichstrommotoren (mit Bürsten). Auf eine ausführliche
Beschreibung der verschiedenen Motorarten und die Frage, was es mit den ominösen
Bürsten auf sich hat, verzichte ich an dieser Stelle. Das ist fü r die Verwendung auf Ihrem
Arduino-Roboter nicht weiter wichtig. Eine ausgiebige Aufzählung verschiedener Moto-
ren finden Sie in der Wikipedia. 39

Gleichstrommotoren
Wenn Sie die Anschlüsse eines normalen Gleichstrommotors mit Plus und Minus einer
Stromquelle verbinden, dreht sich die Motorwelle so lange, wie Strom fließt.
Probieren Sie es doch mal aus: Nehmen Sie einen Motor wie den aus Abbildung 7.42,
und schließen Sie ihn an ein Netztei l oder eine Batterie an. Wichtig ist hierbei, dass Sie
die maximal zulässige Spannung des Moto rs nicht überschreiten! Die e ist je nach
Motortyp unterschiedlich. Auch hier gilt wieder einma l: Schauen Sie nach, was das
s
h Datenblatt zu dem Motor angibt oder welche Spannung der Lieferant angegeben h a t.

39 htlp://de. wikipedia.org/wiki/ Kategorie:Eiektromotor


daran,
. auch die Stromversorgung für den Se rvo zuverinenbzwe·
b. d 1 Zwischenfazit
passiert wahrscheinlich gar nichts ! . mzusc 1alten, sonst Geschafft.ln diese m Abschnitt haben Sie Servos kennengelernt und erfahren, wie diese
funktionieren. Danach haben Sie erfolgreich einen Servo angesteuert und sind dadurch
erneut der PWM begegne t. Warum eine extra Stromversorgung für Servos sinnvoll ist,
Ein Radar- oder: Die Stuhlbeinproblematik habe ich Ihnen ebenfa ll s vermitte lt. Zum Schluss haben Sie gelesen, was es mit der selt-
Viellei~ht haben Sie sich bereits gefragt, warum der Nam sam benannten, aber wichtigen Stuhlbeinproblematik auf sich hat und wie Sie Ihren
Radar.mo lau tet. Der Grund ist· dass Ih r Rob oter spater
.. den eSedes Programms
. . Servo-
ewegen wird, weil Sie auf dem Se d rvo wi e em Radargerät Roboter durch eine Art >> Radar« bald sicher durchs Leben bringen können.
b· rvoarm en Infrarotse n ·
Ich in Abschnitt 7.2.4 beschrieben h a be. Der Sensor bewegtsor· montieren
h 1 .. werden, den
Radar auf einem Flughafentower- I . dh . SJC a so - ahnlieh einem
.. 1111 un er und »S ieht « d b . h ["
Wurden wir den Sensor fest montieren d "h a el nac mks und rechts. 7.5 Ich muss hier weg!- Ansteuerung von Motoren
könnte es in der Praxis passieren d !I un I n nur ge nau geradea us >> sehen« lassen
· ass 1r Robote r m ·t · ' in diesem Abschni tt gehen wir noch einen Schritt weiter: Nachdem Sie in Abschnitt 7.4,
dünnen St uhlbein knapp vorb . . h . . I semem »Tunne lblick« an einem
elsle t und mlt em .. b >>Der Diener - Ansteuerung von Servos«, gelernt haben, wie ein Servo angesteuert wird,
genfahrt. Tn Abbildung 7.41 habe ich Ih . em u . erstehend en Rad genau dage·
. nen dJese Stuhlb emproblematik dargestellt. erfahren Sie jetzt, wie Motoren angesteuert werden. Schließlich wollen Sie Ihren Robo-
ter doch mal durch die Gegend fa hren lassen können, oder? Also, weiter geht's im Text!

7.5.1 Arten von Motoren


Es gibt viele Arten von Motoren, die elektrisch angetrieben werden: Wechselstrommo-
toren, Gleichstrommotoren, Motoren mit Bürsten, bürstenlose Motoren, Schrittmoto-
ren usw. In de r Robotik werden meistens zwei Arten von Motoren verwendet:
Schrittmotoren und Gleichstrommotoren (mit Bürsten) . Auf eine ausführliche

i / Beschreibung der verschiedenen Motorarten und die Frage. was es mit den ominösen
Bürsten auf sich hat, verzichte ich an dieser Stelle. Das ist für die Ven-vendung auf Ihrem
Arduino-Roboter nicht weiter wichtig. Eine ausgiebige Aufzählung verschiedener Moto-
39
ren finden Sie in der Wikipedia.

Gleichstrommotoren
Wenn Sie di e Anschlüsse eines normalen Gleichstrommotors mit Plus und Minus einer
Stromquelle verbinden, dreht sich die Motorwelle so lange, wie Strom fließt.
Probieren Sie es doch mal aus : Nehmen Sie einen Motor wie den aus Abbildung 7.42,
und schließen Sie ihn an ein Netzteil oder eine Batterie an. Wichtig ist hierbei, dass Sie
Abbildung 7.41 Die vermeJ·d ung der »Stuhlbeinproblematik« die maximal zulässige Spannung des Motors nicht überschreiten! Diese ist je nach
Motortyp unterschiedlich. Auch hier gilt wieder einmal : Schauen Sie nach, was das
Links in Abbi ldung 7.41 »sieht« der Roboter das SL hlb . . Datenblatt zu dem Motor angibt oder welche Spannung der Lieferant angegeben hat.
gegen da s Stuhlbein (roter Pfeil) . Rechts h t . h d u em ni cht und fährt geradeaus
[" k a SIC er Sensor f d
m s gedreht, der Roboter erkennt das Stuhlb . d . au em Servo gerade nach
.. p·f . em un weicht d fh .
runen etl s aus. Erkennen Sie den Vort .1 d. arau · m in Richtung des
gFreund ? . eJ .1.eser Konstruktion für un seren kleinen 39 http:// de. w; ki pedia.orgj wiki/ Ka tegorie:Elektromotor

239
7 Los geht's!- Erste Praxis · · , · · ~ ·:"· .....~ .·· ·~··· .. ~.-"- _ ...
. . . ' : . ; . :_;•_t:(··t.·(::.<: ..,

7.5.2 Wie werden Motoren angesteuert?


Da normale Gl eichstromm otore n sehr einfach anzu steuern und vor allem sehr günstig
sind, beschränke ich mich hi er auf die An steuerung diese r Motoren. Der wes entliche
Grund aber dafür ist, dass das Arduino Moto r Shield, das für Ihren Roboter verwendet
werden wird, nur die Anste uerun g eines Schrittmotors, aber zweier Gl eichstrommoto-
ren ermöglicht. Und da der Roboter später zwei Motoren benötigt, schlagen wir hier
sozusagen zwei Fli egen mit einer Klappe. Außerdem haben Schrittmotoren aufgrund
ihrer Bet riebsa rt einen wesentlich höheren Stromverbrauch.

Die H-Schaltung
un noch ei n wenig Theorie. Wie Sie vi elleicht beim Testen der Gleichstrommotoren
Abbildu ng 7.42 zwe ·GI · hStrommotore n mit Getriebe
i elc bemerkt habe n, änd ert sich die Drehrichtung des Motors, wenn Sie die Kabel am Motor
tauschen: je nachdem, ob Sie Plus an den einen und Minus an den anderen Anschluss
Schrittmoto ren
oder eben umgekehrt anschließen, dreht sich die Motorwelle einmal rechts- und einmal
Ein Schrittmotor wird auch St epper Motor oder kurz St ( linksherum. Das Einfach ste wä re es doch also, für Ihren Roboter vier Schalter zu neh-
genannt. Er hat im Gegensatz zu h k.. . epper engl. step, dt. Schritt)
. er omrnlicben Gleich t men und diese jeweUs für die gewünschte Motorrichtung zu betätigen, oder? Schauen
sc lussleit unoen. Er weist oft . h . s rommotoren mehr als zwei
dAn h b ZWIS C en Vler und acht A hl .. Sie sich doch einmal Abbildung 7.44 an. Die dort abgebildete Schaltung wird aufgrund
ung 7.43). Aus djesem Grund k.. . . nsc usse auf (s iehe Abbil·
. . onnen Sie emen Sch 'tt ihres Aussehens auch H-Schaltung genannt. Undgenauso eine Schaltung benötigen Sie
emer Stromquelle verbinden d d . n motor auch nicht einfach mit
d un er reht dann los Ei .t . .
ungsmerkmal ist nämli ch dass S h . . n wei eres wtchtiges Unterschei· fü r Ihren Roboter.
Sch . , c nttmotoren nicht f . d h
ntten von üblicherweise 1 80 d h . . » ret re en«, sondern sich in
. , re en. Sie smd also seh .. . Versorgungsspannung
erung emes solchen Motors J·ed S h . r prazise. Wenn bei der Ansteu· Versorgun gss pannung
. er c ntt per Soft . . ..
exa cte Position der Motorweil b k . ware mitgeza hlt wird, ist stets die
· k e e annt. Die Schritt · o •
retch, denn so kann mit 200 Sch 'tt . weite von 1,8 tst hierbei sehr hilf·
n en ge nau eme voll t .. d.
wer en (200 x 1,8° = 360°). s an tge Drehung nachvollzogen
d

Abbildung 7.44 Eine einfacheH-Scha ltungzur Motoransteuerung


Abbildu ng 7.43 Ein Schrittmotor

240
Abbildung 7.42 Zwei Gleichstrommotoren mit Getriebe

Schrittmotoren

Ein Schrittmotor wird auch Stepper Motor oder kurz Stepper (eng!. step, dt. Schritt)
genannt . Er hat im Gegensatz zu herkömmlichen Gleichstrommo t oren mehr als zwei
Anschlussleitungen. Er weist oft zwischen vier und acht Anschlüss e auf (siehe Abbil·
dung 7.43). Aus diesem Grund können Sie e in en Schrittmotor auch nicht einfach mit
einer Stromquelle verbinden und er dreht dann los . Ein weiteres wichtiges Unterschei·
dungsmerkmal ist nämlich, dass Schrittmotoren nicht »frei drehen «, sondern sich in
Schritten von üb licherweise 1,8· drehen . Sie sind also sehr präzise. Wenn bei der Ansteu·
erung eines solchen Motors jeder Schritt per Software mitgezäh lt wird, .ist stets die
exakte Position der Motorwe lle bekannt. Die Schrittweite von 1,8· ist hierbei sehr hilf-
reich, denn so kann mit 200 Schrilten genau eine vollständige Drehung nachvollzogen
werden (200 x 1,8· = 360. ).

Abbildung 7.43 Ein Schrittmotor

240
I
7.5.2 Wie werden Motoren angesteuert?
Da normale Gleichstro mmotoren sehr einfach anzusteuern und vor allem sehr günstig
ind, beschränke ich mich hier auf die Ansteuerung dieser Motoren. Der wesentliche
Grund aber dafür ist, dass das Arduino Motor Shield, das für Ihren Roboter verwendet
werden wird, nur die Ansteuerung eines Schrittmotors, aber zweier Gleichst rommo to-
ren ermöglicht. Und da der Roboter später zwei Motoren benötigt, sc hl agen wir hier
sozusagen zwei Fliegen mit ein er Klappe. Auße rdem haben Schrittmotoren aufgrund
ihrer Betriebsart einen wesentlich höheren Stromverb rauch.

Die H-Schaltung
Nun noch ein wenig Theorie. Wie Sie vielleicht beim Testen der Gleichstrommotoren
bemerkt haben, ändert sich die Drehrichtung des Motors, wenn Sie die Kabel am Motor
tauschen: Je nachdem, ob Sie Plus an den einen und Minus an den anderen Anschluss
odereben umgekehrt anschließen, dreht sich die Motorwelle einmal rechts- und einmal
lt)
linksherum. Das Einfachste wäre es doch also, für Ihren Roboter vier Schalter zu neh-
rei
men und diese jeweils für die gewünschte Motorrichtung zu betätigen, oder? Schauen
lil-
Sie sich doch einmal Abbildung 7.44 an. Die dort abgebildete Schaltung wird aufgrund
lit
ihres Aussehens auch H-Schaltung genannt. Undgenauso eine Schaltung benötigen Sie
ei-
für Ihren Roboter.
in
~u -

Versorgu ngss pannu ng Versorgungsspannung


Jie
lf-
en

L c

B D B D

1 I
r =
Masse Masse

Abbildung 7.44 Eine einfacheH-Schaltungzur Motoransteuerung


Um den Motor mit dieser Schaltung rechtsherum d rehen zu lassen, müssen lediglich die
Schalter Aund D geschlossen werden. Der Strom fließt dann im Schaltplan vom Pluspolder
Versorgungsspannung über den geschlossenen Schalter A zum Pluspol des Motors, du rch
den Motor zum Minuspol und von dort weiter über den ebenfalls geschlossenen Schalter
D zur Masse. Umgekehrt wäre es, wenn der Motor sich linksherum drehen soll : Schalter A
und D wären wieder geöffnet. Dann werden Schalter C und Bgeschlossen. Der Strom fl ießt
dann von Plus über Schalter C zum Minuspol des Motor , durch den Motor, weiter zu des·
senPluspol und zum Schluss überSchalterB zur Masse. In Abbildung 7.45 habe ich Ihnen
das noch einmal anschaulich dargestellt - ein Bild sagt mehr als tausend Worte.

Versorgungsspan nung Versorgungsspannung

A c A c

B D B D

Masse Masse

Abbi ldung 7.45 Die H-B rücke mit rechts- und linksdrehendem Mot or

I• Vorsicht, Kurzschluss !
Es ist keine gute Idee, in dieser Schaltung gleichzeitig die Schalter A und B oder gleich-
zeitig C und D oder gar alle Schalter gleichzeitig zu schließen: Die Folge wäre eine
direkte Verbindu ng von Plus mit Minus (Masse) in der Stromversorgung - ein Kurz-
sch luss !

Das Motor Shield


Nun werfen Sie bitte einen Blick auf das Mo to r Shield in Abbildung 7.46, das fi.ir Ihren
Roboter genu tzt wi rd.

242
lie
ter
eh
:er
·A
ßt
~S ·

en

Abbildung 7.46 Das »Arduino Motor Sh ield«

Zweifelsfrei sind au f dem Motor Shield keine vier Taster zur Ansteuerung eines Motors
montiert - und schon gar nicht acht Taster, die man für zwei Motoren bräuchte. Das
Motor Shield macht Ihnen das Leben leichter und integriert die vo llständige H·Brücke
aus Abbildung 7.44 in einen integrierten Schaltkreis (englisch Integrated Cil·cuit, kurz TC)
mit dem Na m en L298 . Und dieser kleine IC enthält nicht nur die »Schalter« in seinem
Inneren. Es sorgt auch für das richtige >> Schließen der Schalter«, damit sich die Motoren
in die richtige Richtung drehen, bzw. schaltet die Motoren an oder aus .
Der L298 leistet darüber hinaus noch viel mehr: Zusammen mit den restlichen Bautei-
len auf der Platine können Sie mit dem Motor Shield entweder zwei normale Gleich-
strommotoren oder auch einen Schrittmotor ansteuern. Auch Servos können mit
diese m Shield betrieben werden. Außerdem kann nicht nur die Drehri chtung d er Moto-
ren darüber gesteuert werden. Auch die Geschwindigkeit, also die Drehzahl, lässt sich
bequem einstellen - unabh ängig von beiden Motoren.
Selbst den Stromverbrauch der Motoren können Sie mit dem Motor Shield ermitteln
und an Ihr Arduino-Board übertragen. Wozu das prakt isch ist ? Wenn Sie einm al einen
größeren Roboter bauen, ist es immer gut zu wissen, wi e viel Strom die Motoren gerade
verbrauchen, um ein Gefühl dafür zu bekommen, ob die Energieversorgung au srei-
en

243
7 Los geht's!- Erste Praxis .· .. ·

chend dimensio ni ert ist - sprich : ob die Akkus lange ge nu g Energie li efern kön nen u.
der Roboter nicht nach fünf Minuten bereits mit leeren Akku s steh en bleibt. WeitE
Details über die Möglichkeite n des Motor Shi elds fi nd en Sie wie üblich auf der Arduin
Projektseite 40

I• Wichtig: Die Stromversorgun g der Mot ore n


Wie ich bereits in vorangegangenen Abschn itten erwähn t ha be, liefern die Ausgänge
des Arduino-Boards nur einen sehr geringen St rom . Diese r reicht ge rad e mal aus, um
eine LED zum Leuchten zu bringen . Da ein Mot or wesentlich mehr Strom als eine LED
be nötigt, brauchen Moto ren wie auc h Servos immer eine eigene Stromversorgung
(siehe auch Abschnitt 7.4.2) . Zum Anschluss die se r Stromversorg ung hat da s Motor
Shield einen extra Anschlussnamens Vin und GND an den vie r Sch raubklemmen auf der
Platine. Da wir bei unserem Roboter recht kleine Motoren verwenden, reichen hier vier
1,5-Volt-ßatterien ode r Akkus oder ei n kleines Netztei l mit 6 Volt Ausgangsspannu ng
(4 x 1,5 Vo lt = 6 Volt) au s. Und das Motor Shield übernimmt beim Zusammenstecken
mit dem Ard uino auch gleich das Verbinden der beiden Ma sse-Anschlüsse (GND).

7.5.3 Motoransteue rung realisieren

Genug der Theorie! unsollen Sie end lich das Motor Shield mit Ih rem Arduino verbir
den und einen Motor anschließen. Sie benötigen dazu:

II II II II II II II II II II II II II II II II II II
Checkliste
J ein e n Motor
J einen Batteriehalter mit Batterien/Akkus
oder e i n Netzteil
J einen Taster
~ zwei 5 bis 6 cm l a nge Drähte
~ ein Arduino - Board
J ein Arduino Motor Shield

40 http://ardu ino.cc/ de/ Main/ ArduinoMororShieldR3

244
' . 7.5 Ich muss hier weg!- Ansteuerung von Motoren

nen und Die wichtigsten An schl üs se


Bevor Sie das Motor Shield nutzen, möchte ich noch kurz die wichtigsten Pins erläutern,
Weitere
die wir gleich im Testprogramm verwenden werden. In Abbildung 7.47 sehen Sie die
1rduino-
Buchsen zum Anschluss der Motoren und von deren Spann ungsverso rgung.

gänge
s, um
e LED
rgung
v\otor
Jf der
~r vier
nung
~ cken

Abbildung 7.47 Die Motoransch lussbuchsen auf dem Motor Shield

verbin·
Buchse Bedeutung

B.
Minus-Ansch luss für den zweiten Motor (Moto r B)
II B+ Plus-Anschluss für den zweiten Motor (Motor B)

A- Minus-Anschluss für den ersten Motor (Motor A)

A+ Plus-Anschluss fü r den ersten Motor (Motor A)

V;n Plus-Anschluss der externen Stromversorgung


GND Masse-Ansch lu ss der externen Stromversorgung

Tabelle 7.5 Die Buchsen des Motor 5hield und ihre Bedeutung

Um dem Motor Shield mitzuteilen, in welche Richtung welcher Motor drehen und
wann er »bre msen « (englisch brake) soll, verwenden Sie die Pins an der Oberseite der

Platine aus Abbildung 7.48.

245
' . ~ .•..
7 Los geht's!- Erste Praxis _ _ _ - -:' , _

eh end dimensioniert ist - sprich : ob die Akkus lange genug Ene rgie liefern können und
der Roboter nicht nach fünf Minuten bereits mit leeren Akkus stehen bleibt. Weitere
Details über die Möglichkeiten des Motor Shields find e n Sie wie üblich auf der Arduino-
Projektseite.40

I• Wi chtig: Die Stromversorgung der Motoren


Wie ich bereits in vorangegangenen Abschn itten erwähnt habe, liefern die Ausgänge
des Arduino-Boards nur einen sehr geringen Strom. Dieser reicht gerade mal aus, um
ei ne LED zum Leuchten zu bringen. Da ein Motor wesentlich mehr Strom als eine LED
benötigt, brauchen Motoren wie auch Servos immer eine eigene Stromversorgung
(siehe auch Abschn itt 7.4.2). Zum Ansch luss dieser Stromversorgung hat das Motor
Shield einen extra Anschlussnamens Vin und GNO an den vier Schraubklemmen auf der
Platine. Da wir bei unserem Roboter recht kleine Motoren verwe nde n, reichen hier vier
1,5-Volt-Batterien oder Akkus oder ein kleines Netzteil mit 6 Volt Ausgangsspannung
(4 x 1,5 Volt = 6 Volt) aus. Und das Motor Sh ield übernimmt beim Zusammenstecken
mit dem Ardu ino auch gleich das Verbinden der beiden Masse-Anschlüsse (GND).

7.5.3 Motoransteue rung realisie ren

Genug der Theorie! Nun soll en Sie endlich das Motor Shield mit Ihrem Arduino verbin-
den und einen Motor anschließen. Sie benötigen dazu :

II II II II II II II II II II II II II II II II II I
Checkliste
J eine n Motor
J einen Batteriehalter mi t Batte rien/Akkus
oder ei n Netzteil
J einen Taster
~ zwei 5 bis 6 cm lange Drähte
~ ein Arduino - Board
J ein Arduino Motor Shield

40 http://arduino.cc/ de/ Main/ ArduinoMotorShieldR3


Diewichtigste n Anschlüsse
Bevor Sie das Motor Shi eld nutzen, möchte ich noch kurz die wichtigsten Pins erläutern,
die wir gleich im Tes tprogramm verwenden werden. In Abbildung 7.47 sehe n Sie die
Buchsen zum Anschluss der Motoren und von deren Spannungsversorgung.

Abbi ldung 7.47 Die Motoranschlussbuchsen auf dem Motor Shield

Buchse Bedeutung
Minus-Anschluss für den zweiten Motor (Moto r B)
B-
Plus-Anschluss für den zweiten Motor (Moto r B)
B+
Minus-An schluss für den erst en Motor (Motor A)
A-
Plus-Anschluss für den ersten Motor (Motor A)
A+
Plus-An sch luss der externen Stromversorgung

Masse-Anschluss der externen Stromversorgung


GND

Ta belle 7.5 Die Buchsen des Motor Shield und ihre Bedeutung

Um dem Motor Shield mitzuteilen, in welche Richtung welcher Motor drehen und
wa nn er »bre msen « (englisch brake) soll, verwenden Sie die Pins an der Oberseite der

Plat ine aus Abbi ldung 7.48.

245
' ' ' -..
7 Los geht's! - Erste Praxis ,: ~ · · ',
I

Abbi ld un g 7.48 Die Pins zum Ansteue rn der Motoren am Motor Shie ld

Pi n Bedeutung

DIRA Bestimmt die Richtung für Motor A (HIGH oder LOW}.

DIR B Bestimmt die Richtung für Motor B (HIGH oder LOW}.

PWMA Bestimmt die Geschwindigkeit für Motor A (PWM).

PWMB Bestimmt die Geschwindigkeit für Motor B (PWM}.

BRAKE A >> Bremst « Motor A (schaltet ihn ab, wenn HIGH}.

BRAKE B »Bremst « Motor B (schaltet ihn ab, we nn HIGH} .

Tabelle 7.6 Die Pins zum Ansteuern der Motoren und ihre Bedeutung

Das Boa rd m it d em Shield verb ind en

Nehmen Sie jetzt das Arduino-Board, und stecken Sie das Motor Shield so, wie in Abbil-
dung 7.49 dargestellt, oben drauf. Achten Sie dabei darauf, dass das Shield nur in eine
Richtung auf den Arduino passt : >>huckepack« übereinander, sodass die Reset-Schalter
be ider Platinen quasi genau übereinander sind.

Praktischerweise werden dabei alle Pins vom Arduino-Board direkt mit dem Motor
Shield ve rbunden. Es ist also für unser erstes Experiment mit einem Motor fast kein
Löten notwendig.

I• Wichtig: Pin ist nicht gleich Pin !

We nn Sie si ch die Pinbeschriftungen des Motor Shield aus Abbildung 7.48 angeschaut
haben, werden Sie vielleicht bemerkt haben, dass die Beschriftung nicht mehr die glei-
che ist w ie auf de m Arduino-Board - und das, obwohl doch die Stecker w ie in Abbi ldung
7.49 exakt ineina ndergesteckt we rden. Wi e geht das?
Ganz einfach : Wie Sie zu Beginn des Buches gelernt haben, kann auf dem Arduino-
Board fast alles an di e Pin s angesch lossen werden, zum Beispie l eine LED, w ie sie stan-
dardmäßig an Pin 13 fest verbunden ist. Die LED ist natürlich immer noch auf dem
Ardu ino-Board vorhanden. Aber Pin 13 ist auf dem Motor Shield jetzt der Pin DIR 8, also
für die Richtung (eng!. direction) von Motor B verantwortlich. Denn der Aus gang 13 vom
Arduino-Board geht direkt in das Motor Shield hinei n und steuert j etzt die Richtung des
Motors durch das IC auf dem Shie ld . Achten Sie also bei Ih ren Programm en darauf ,
wenn Sie vorhandenen Code wiederverwenden, in dem zum Beispie l ei ne LED an Pi n 13
angesteuert wurde. Dieser Cod e würde jetzt an Pin 13 den Motor die Richtu ng wechseln
lassen. Das würde einen schönen Fehle r geben, was?

bbil-
eine
~ Jter

otor
kein Abbildung .4 Das M otor Shie ld •• huckepack« auf dem Ardu ino-Boa rd
7 9

Anschlu ss der Motoren


Um di Motore n m i t dem Motor Shield zu verb i nden, isolieren Sie zwei Drähte ab und
ut löten jeweils ein Ende an den Motor. 41 Das Ergebnis sollte dann ungefahr so wie in

~i-
41 Wie da Löten funktioniert. haben Sie in Abschnitt 5.6 gelernt. Alternativ fragen Si jemanden. der
die bei~en Drähte für Sie anlötet. Es sind di e ei nzigen, die für Ihren Roboter gelötet werden müssen.

247
Abbildung 7.50 aussehen . Für unser Experimen t in di ese m Ab schnitt reicht ein Motor
aus, Sie kön nen aber die Drähte am zweiten Motor eben falls anlöten, wenn Sie schon
ein mal dabei sind. Denn für Ihren Roboter komm e n ja später auch zwei Motoren zum
Einsatz.

Abbi ld un g 7.50 Am Motor ange lötete Drähte

Nehmen Sie dann ein Netzteil zur Hand, und stellen Sie die Ausgangsspannung auf6
Volt ein. Alternativ verwenden Sie einen Batteriehalter mit vier 1,5-Volt-Batterien oder
1,2-Volt-Akkus wie in Ab bildu ng 7.51.

Ab bi ld ung 7.51 Batterie halter für vier 1,5-Vo lt -Batterien ode r Akk us

248
or Als Nächstesverbinden Sie alle Te ile wie in Abbildu ng 7.52 miteinander.42
Oll
1m

6
er 43
Abbildu ng 7.52 Motor, Batterien, Ardui no und Motor Shie ld verbinden

Denken Sie daran, dass der Ard uino im Aufbau aus Abbildung 7.52 unter dem Motor
Shield steckt! Wundern Sie sich also nicht, dass er in der Darstellung kaum zu erkennen
is t - lediglich an der Oberseite der USB-Buchse, die etwas übersteht. Der untere Teil mjt
dem Taster auf der Steckplati ne dürfte Ihnen bereits bekannt vorkommen: Es ist der
gleiche Aufbau wie in Abschnitt 7.2.2 - jedoch ohne Widerstand, da erneut der interne
Pull-up-Widerstand des Arduinos gen u tzt wird.

Der Motortest
Jetzt kommt wie immer ein kleines Testprogramm zum Einsatz. Laden Sie die Software
Motortest.ino herunter, und übertragen Sie diese auf ihr Arduino-Board. Wenn Sie jetzt

4-2 In Abb ildung 7.52 ist der Motor mit einer gelben und mit einer grünen Le itung mit dem Motor
Sh ield verbunden. an Ihrem Mo tor sind jedoch zwe i grüne Drähte angelötet. Lassen Sie sich
dadurch ni chl irritieren. Zu diesem Zeitpunkt ist die Reihenfolge der Motoransc hlüsse noch nicht

so wichtig.
43 Abbi ldung ersteUt mit Fritzing

249
den Taster einmaJ kurz betätigen, startet der Motor und dreht sich in eine Richtt
Drücken Sie den Taster rneut, dreht der Motor sich in die entgege ngesetzte Richtt
Beim Loslassen dreht er wieder wie zu Beginn.

int tasterPin = 2; II Pin für den Taster

int ri cht ungA = 12; II Richtu ng Mot or A


int geschl~indigkeitA = 3 · II Geschwindigkeit Motor A
int bremseA = 9; II Bremse Motor A

void setup()
{
II Taster-Pin als Eingang definieren
pinMode(tasterPin, INPUT) ;

II Internen Pull-up -Widerstand aktivieren


pinMode(tasterPin, INPUT_PULLUP) ;

II Motor A initialisieren
II
II Pin für Richtung MotorAals Ausgang
pinMode(richtungA, OUTPUT) ;

II Pin für Bremse MotorAals Ausgang


pinMode(bremseA, OUTPUT) ;

II Halbe Geschwindigkeit
ana logWri te (gesch1-1i nd igkei tA , 128) ;

II "Bremse anziehen" (Motor aus)


II Man weiß ja nie ...
digitalWrite(bremseA, HIGH) ;
}

void loop()
{
II Prüfen, ob Tast er gedrückt ist
II (LOW = EIN , weil Pull-up-Widerstand!)
if (digitalRead (tasterPin ) == LOW)

250
Richtung.
I I eine Motorrichtung
Richtung.
motorRichtu ng(HIGH);

I I Bremse lösen
II Wird eigentlich nur beim ersten Tasterdruck benötigt .
digitalWrite(bremseA , LOW) ;
}
else

II andere Motorrichtung
motorRichtung(LOW);

I I Bremse lösen
II Wird eigentlich nur beim ersten Tasterdruck benötigt .
digitalWrite(bremseA , LOW) ;
}
}

void motorRichtung( int richtu ng)


{
II neue Motorrichtung stellen
digitalWrite(richtungA, richtung) ;
}
Listing 7.11 Da s Testprogra mm »Motortest.ino« zur Motoransteuerung

Wie übli ch w ill ich Ihnen noch erläutern, was das Programm im Einzelnen so fü r Sie
macht. Ich geh e alle An weis ungen durch, die Sie noch nich t kennen. Die Te ile, die Sie
bereits aus vorigen Kap iteln ke nn en, übersp ringe ich an di eser St elle jedoch . Wenn Sie
sich hier noch etwas unsicher sind, blättern Sie kurz in den Kap iteln zurück.

De r Sourcecode
Grund sätzlich gibt es in diese m Listing keinen n euen Befehl. Als Erstes werden wi.e
immer ein ige variablen defi ni ert. Sie defi nieren in diesem Fall die Pins des Mot or

Sh ields :

251
den Taster emmal
· kurz bet .. r
Drücken
B. Sie den Taster erneut
a Jgen,
dr lstartet
td
der Moto r und d re h t S ICh
. . .
etm Loslassen dreht er wi d ' .e 1 er Motor sich in die ent Jn eme Richtung. II eine Motorrichtung
. e er Wie zu Beginn. . gegengesetzte Riebtun1 motorRicht.ung(HIGH);

'"' taste•Pin • 2.' II Pln


. für den Taster II Bremse lösen
II Wird eigentlich nur beim ersten Tasterdruck benötigt .
int
· r i cht ungA = 12 · II R.
~nt geschwindigkeitA = 3: lchtung Motor A
digitalWrite(bremseA , LOW);
lnt bremseA ' II Geschwindigkeit Motor A }
= 9; II Bremse Motor A else
void setup()
I I andere Motorrichtung
{
motorRichtung ( LOW);
II Taster-Pin al s Eingang
. d f·
pinMode(taste p· e 1nieren
r 1n, INPUT) ; I I Bremse lösen
II Wird eigentlich nur beim ersten Tasterdruck benötigt .
II. Internen Pul l - up-Wlderstand
. k . digitalWrite(bremseA, LOW) ;
plnMode(tasterP · a t1vieren
ln , I PUT_PULLUP) ; }
)
II
II Motor A init'la l_lsleren
..

void motorRicht ung ( int richtung)


II.Pi n für Richt ung Motor A l
plnMode(richtungA a s Ausgang {
' OUTPUT) ; II neue Motorrichtung stellen
digitalWrite(richtungA, richt ung) ;
II Pin für Bremse Motor
pln~ode(bremseA ' OUT PUT) A; als Ausgang }
listing 7.11 Das Test programm nMotortest.ino« zur Motoransteuerung
II Halbe Geschw·ln d'1gkeit
Wie übli ch will ich Ihnen noch erläutern, was das Programm im Einzelnen so für Sie
analogWrite(geschwi ndigkeitA ' 128) j
macht. Ich gehe alle Anweisungen durch, die Sie noch nicht kennen. Die Teile, die Sie
II
"B remse anziehen " (M bereits aus vorige n Kapiteln kennen, überspringe ich an dieser Stelle jedoch. Wenn Sie
II
Man weiß . otor aus) sich hier noch etwas unsicher sind, blättern Sie kurz in den Kapiteln zurück.
d' . Ja nie . . .
} lgltalWrite(bremseA, HIGH);
Der Sourcecode
Grund sätzlich gibt es in diesem Listing keinen neuen Befehl. Als Erstes werden wie
void loop() immer einige variablen definiert. Sie definieren in diesem Fall die Pins des Moto r
{
II
II Prüfen ob T
(LOW =' E as ~er gedrüc kt ist
Shields:
. IN, well Pull-u .
lf (digitalRead(t . p-Wlderstand!)
ast erP1n) == LOW)

251
250
7.5 Ich muss h1er weg! s g

i nt richt ungA 12; II Richtung Motor A motorRichtung( HIGH);


int ges chwindig keitA = 3; II Geschwindig kei t Motor A
int bremseA 9'. II Bremse Motor A II Bremse lösen
II Wird eigentlich nur beim ersten Taster druck benötigt .
Da nur Motor
.. A ang eschlossen tst,
. we rd en ledi glich d rei Ze il ... digi talWri t e(bremseA , LOW) ;
Motoren waren es dementsprechend d 1 . en Code benotJgt. Bei zwei
· oppe t so vtele Jede d y ·
emen de r Pins des Arduino-Bo d d ' . . er anab len steht hier für Hier wurd e nun die eigene Funktion molor Ri cht ung() mit dem Argument HIGH aufgeru-
. ar s, Je Ja nun zum M t Sh . I
Zum Setsp iel entspricht bremseA - 9 f d o or Je d durchgeführt sind
- au em Motor sh · !d d · · fen. Diese Funktion finden Sie am Ende des Listing 7.11:
nung B RAKE A. Da in der Schaltung a f . . Je em Pm 9 mit der Bezeich·
. u emen W1derstand T ..
muss m der set up-Funktion de . t am aster verzichtet wurde void motorRichtung( int richtu ng)
. r m erne Pull-up-Widerstand aktiviert werde n: '
{
pinMode (tasterPi n, I NPUT_PULLUP) ; II neue Motorrichtung stellen
digitalWr ite(richtungA, richtung ) ;
Anschließend werden die Pins als Aus an . . . . .. }
rung zustä nd ig sind - fü r die R' 1 t g g g~se tzt (mlt Jal!stert), die für die Motorsteue·
IC 1 un g und fü r die >> Brem se«:
Der Aufbau ist simpel. Es soll ihnen ja schließlich auch noch Spaß machen beim Lernen!
II Mot or A init ialisieren Die Funktion motorRichtung() kan n entwed er mit HIGH oder LOW als Argum en t aufgeru-
II fen werden. HIGH dreht den Motor in die ei ne und LOW in die andere Richtung. Dazu dient
II.Pin für
( Ri cht ung Motor A a1s Ausgang die einzige Anwe isung, die den Pin richtungA auf dem Motor Shield entsprechend setzt.
p1nMode r ic htungA, OUTPUT);
Und? Haben Sie sich bereits gewundert, warum die Geschwindigkeit über den Befehl
II. Pin f ür Br emse Motor A als Ausgang analogWrite gesetzt wird? Richtig : Das Motor Shield arbeitet ebenfalls mit Pul sweit en-
p1nMode (bremseA , OUTPUT ) ; modulation (PWM). die Sie bereits kennen und angewendet haben.

De r Befehl analogWrite (geschwindig keitA 128


Motors au f halbe Geschwindigkeit (lZS) H~ . ) setz~ danach die Geschwindigkeit des
255 mog .. 1'tch . Anschließend wird · d . Ier tst
Rechtsherum, linksheru m? Wie denn nun?
Bestimmt ist Ihnen als aufmerksamer Lese r nicht entgangen, dass ich mich bei de n
+
. auch Jed er an. d ere Wert zwischen 0 und Motorrichtungen im Text me isten s um das Wort »rec hts « oder »links« gedrückt habe.
. h m er gleJchen R .
sp n c der Motor ausgeschaltet St' ch . . outme >>di e Bremse angezogen(( Das hat eine n einfachen Grund: Jeder Hersteller baut sei ne Motoren ande rs. Das bedeu-
E' · er 1st stcher. D . . . •
mschalten des Arduino-Boards auf LOW enn Vtell eicht tst der Pin nach dem tet in der Praxis, dass zwar die meisten Gleichst rommotoren mit einem Plus und Minus
U d' und der Mot ..
m Ie »Bremse« also zu aktiviere n . or wurde dann sofort losdrehen! beschriftet sind, es aber nicht sicher ist, in we lche Ric ht un g sich ein bestimmter Motor
, mu ss der Pm auf HIGH gesetzt werden .
dreht. Hier hilft nur Ausprobieren. Tauschen Sie im Zweifelsfall beide Ansch lüsse
digital Write(bremseA, HIGH) ; '
gegene inan der.
Zum Lösen der Breme, also um de n Moto r dreh
eh end a u f LOW· Aber das kommt später im c d en zu lasse n·setzen Ste . den Pin entspre·
spann en d er. A1s Erstes wird
. der Pin aus o e. ln de r loop-F· un k twn
. wtrd. es jetzt etwas Hat alles geklappt?
E t . ge1esen, an de d Hat beim Testen des Motors all es funktioniert? Ne in? Das ist nicht schli m m und kann
rs wenn d teser betätigt wi rd, also auf HIGH h m er Taster angeschlossen ist.
Moto r Sh Je
· Jd gegeben, um den Motor .in einege t, werd en weitere·
· immer m al passiere n. Hier sind ein paa r Tipps, wa s Sie ausprobieren können, um die
Richt Anweisungen an das
ung zu starten: Fehlerursache herauszufinden :

252 253
II II II II II II II II II II II II II II II I I II Pin für Bremse Motor A als Ausgang
pinMode(bremseA , OUTPUT) ;
Checkliste
II "Bremse anziehen " (Motor aus)
Sind al l e Kab el und Bauteile richti und fest in der
digitalWrite(bremseA, HIGH) ;
Steck platine gesteckt?
}
Sind die Drähte am Motor und Batteriehalter
einwandfrei angelötet?
void loop()
Sind alle Drähte in den Motoranschlussbuchsen {
im Motor Shield korrekt abisoliert und verschraubt? II Motorrichtung stellen
Sprich : Haben sie richtig Kontakt? digitalWrite(richtungA, HIGH) ;
Geht die korrekte
für die Motoren an
II Maximale Geschwindigkeit!
das Motor Shield?
analogWrite(geschwi ndigke i tA , 255) ;
Wenn Sie ein externes Netzteil verwenden : Liefert es aus-
reichend Strom für den Motor? Das können Sie einfach testen, 11 "Bremse lösen" . Los geht ' s!
v1enn Sie den Motor direkt mit dem Netzteil verbinden. Oder ist digitalWrite(bremseA, LOW) ;
viel l eicht eine Strombegrenzung am Netzteil aktiviert? } . . m
Vielleicht ist der Motor zufällig beschädigt? Tauschen Sie Listing 7.12 Das Motortestprogramm, reduzie rt auf ein Mmlmu
ihn qeqen einen anderen aus und testen Sie diesen .

7.5.4 Ein Sensorventilator . A duino-Board verbinden und


. . . en Motor mit Ihrem .r . . . Art
Nachdem Sie jetzt wissen, wie Sie em . t ln oder? Sie können sich Jetzt ei~e
wichti ansteuern können, w1r. d es W1·ederZeJtzumBas · ed Dazu
' .. .
benotigen . f as tdiealeichen
SJe o
noch einmal auf eführt die aus - rangesteuert Wir .
Ventilator bauen, der per Senso Abschnitt 7.5.3:
reichen , dami t sich der Motor einfach die ganze Zeit dreht - Teile wie beim letzten Experiment aus
ohne Taster , ohne internen Pull - up-Widerstand . Die entspre -
II II II II II II II II II II
chende Datei zum Download heißt MotortestMini . ino . II II II II II II 11 11

int richtungA 12;II Richtung Motor A


int geschwi ndi gkeit A
~=~e~i~n~I~n~f~r~a~r~o~~::~~~~~.Q~d&e~r~P:a:p:p:=e========================~
3; II Geschwindigkeit Motor A
int bremseA . Karton
9; II Bremse Motor A etwas festes Pap~er ,

~ eine Schere Nage l


void setu p() ,._ d r ei n spitzer
../ eine Stecknadel o e
{
I I l~otor A initialisieren -1 etwas Tesafilm

II Pin für Richtung MotorAals Ausgang


pinMode(ric htungA, OUTPUT); f lgende Teile zum Einsatz:
Zusätzlich komme n noc I1 o

254 255
7 Los geht's!- Erste Praxis . ·. , ·. · ·:·· -'::-· _: .~~· · .

II II II II II II II II II II II II II II II II II
Checkliste
t/ einen t-1oto r
t/ einen Ba tteri e halter mit Batter i e n/ Akku s ode r
ein Netzteil
t/ ein Arduino - Board
t/ ein Arduino Motor Shie l d

Für einen Ventilato r brauchen Sie als Erstes natürlich e in en Propeller. Schließlich wol·
Jen Sie ja Wind machen. Ich habe in Abbildung 7.53 eine Vorlage für Sie vorbereite~ die
Sie wie immer auch zum Download finden. Der Datein ame ist Propeller.png.

E
u
0
ro
E
' )(

"'
E

maximal1o cm

Abbildun g 7.53 Die Pro pel lervorlage »Prope lle r.png«

256
.. . . . -· . .. :, . . _,
· ··~ ·. :.>·::·;~';;-!. {:·:,:.>··· · . .
r: ~ .~~~··~~-~r.~~:~~.fif.-....: ~~ ~

7.5 Ich muss hier weg I- Ansteuerung von Motoren

Der Aufbau
Drucken Sie sich di e Vo rl age auf etwas fest erem Papier aus, und schneiden Sie diese aus.
Wenn Sie sich di e Vorl age a usdrucken, achten Sie darauf. dass sie nicht automatisch in
voller DIN-A4-G röße ged ru ckt wird . Da wir für unseren Roboter verhältni smäßig kleine
Motoren nehm en, soll te der Propell er ni cht viel größer als 10 cm im Durchmesser sein.
Wenn Ihr Drucker dickeres Papier nich t drucken kann, drucken Sie die Vorlage auf nor-
males Papier, schneiden sie aus und legen sie als Schablone auf eine dickere Pappe und
schneiden dann di e Pappe darunter aus. Vergessen Sie dabei nicht, die Mitte mit einer
Nadel oder einem spitzen Nagel einmal als Markierung zu du rchstechen.
Als Nächstes stecken Sie den Papp-Propeller in der Mitte auf die Welle des Motors- und
>I· zwa r so, dass die Motorwelle ein wenig durchschaut. Nun kleben Sie den Propeller mit
ie Tesafilm an der Motorwe lle fest. Das Ga nze ma chen Sie am besten sowohl von der Ober-
seite als auch von der Unterseite des Propellers, damit er auch gut hält. Es geht ja hier
mehr um das Pri nzip als um einen echten Ventilator mit Kunststoffpropellerl

44
Abbildung 7.54 Der Sensorventilator komplett aufgebaut

44 Abbildu ng erst·ellt mit Fritzing


Jetzt zur Elektronik. Nehmen Sie den letzten Aufbau au s Abbildung 7.52 zur Hand, und
entfernen Sie den Widerstand und den Taster. Ergänze n Sie dann den lnfrarotdistanz.
sensoraus Abschnitt 7.2.4 so wie in Abbildung 7.54 dargestellt.

I• Achtung!

Bevor Sie nun die Software a uf Ihr Arduino- Board übertragen, denken Sie daran, dass Sie
den Motor se nkrecht aufstellen oder in der Hand halten I Wenn Sie das nicht tun und
der Prope ller gleich im Liegen losdreht, wird er sich sofort von der Motorwe ll e lösen
oder kaputtge hen- wä re doch sc hade um die Arbeit.

un aber los : Übertragen Sie die Software Sensorventilator.ino auf Ihr Arduino-Board,
un d schauen Sie, was passiert, wenn Sie sich mit der Hand dem Sensor nähern. Danach
erläutere ich Ihnen das dazugehörige Listing 7.13 .

int I Rpin = A2; II Der Pin für den Infrarotsensorausgang

int r i chtungA = 12; II Pin für Ri chtung Motor A


int geschwindigkeitA = 3; II Pin für Geschwindigkeit Motor A
int br emseA = 9; II Pin für Bremse Motor A

void setup()
{
II IR-Sensor- Pin als Eingang definieren
pinMode(IRpin , INPUT) ;

II Motor A initialisieren
II Pin für Richtung MotorAals Ausgang
pinMode(richtungA, OUTPUT) ;

II Pin für Bremse MotorAals Ausgang


pi nMode(bremseA, OUTPUT) ;

II "Bremse anziehen " (Motor aus)


II Man 1-1eiß ja nie .. _
digi t alWri te (bremseA, HIGH);
}

void loop()
{
II Sensor (Pin) einlesen

258
1
d int sensorwert = analogRead(IRpin);
IZ·
II Wenn Entfernung sehr hoch (Wert klein): Motor AUS
II (98 ist sehr weit weg)
if (sensorwert < 98 )
{
II "Bremsen". Motor stoppen.
digitalWrite(bremseA, HIGH);
}
else

·d, II Ansonsten Motorgeschwindigket gemäß Entfernung


:h
II Entfernung für Motorgeschwindigkeit umrechnen
II (Sensor liefert Werte von 630 - 90)
int drehzahl = map(sensorwert , 630 , 0, 255 , 0);

II Motor drehen!
motorDrehen(HIGH, drehzahl) ;
}
}

void motorDrehen( int richtung , i nt geschwindigkeit)


{
II Motorrichtung einstellen
digitalWrite(richtungA, richtung) ;

II Geschwindigkeit je nach Argument


analogWrite(geschwindigkeitA, geschwindigkeit) ;

II "Bremse lösen" . Los geht ' s!


dig i talWrite (bremseA, LOW) ;
}
Listing 7.13 Der sourcecode zu »Sensorventilator.ino«

De r Sourcecode
Wie üblich fo lgen an diese r Stelle einige Erläuterungen zur Software - wenngle ich Ihnen
bereits a ll s bekan nt vorkommen dürfte. Denn Sie haben zuvor g lernt, wie Sie inen

259
7 los geht's!- Erste Praxis ·

Infra rotdistanzsen or einlesen. Als Erstes werden in der setup- Funktion wi~ immer die
Pins als Eingang oder Ausgang definiert. Da nun zu sätz li ch der Infrarotsensor eingele·
sen wird, kom mt d er Pin AO des Arduin o-Boards als Einga ng zum Einsatz :

pinMode( I Rpin, INPUT) ;

In der Hauptschleife loop werden dann folgende Schritte ausgeführt :

~ Einlesen des Infrarotdistanzsensors


~ Überprüfen, ob ein »Hindernis « weiter als 80 cm entfernt ist
~ Wenn ja: Motor/ Ventil ator ausschalten
~ Wenn nein :
- Entfernung in Motorgeschwindi gkeit umrechnen (0-255)
- Motor mit entfernungsabhängiger Geschwind igkeit drehen la ssen

je n äher Sie also Ihre Hand an den Sensor bewegen, desto schneller dreht sich der Ven-
tilator. Das kommt Ihnen bekannt vor? Glückwunsch! Sie haben offenbar das Experi-
ment, bei dem die LED bei Annäherung an den Infrarotsensor imme r schneller blinkte,
erfolgreich ausprobiert- nur dass jetzt nicht wie im Programm IR_ Distanz_ LED.ino mit
dem Befe hl delay gearbeitet wi rd, sondern wieder mit PWM. Das können Sie gut an fol-
gendem Code im Programm erkennen:

void motorDrehen( int richtung , int geschwindigkeit)


{
II t~torrichtung einstellen
digitalWrite(richtungA , richtung);

II Geschwindigkeit je nach Argument


analogWrite(geschwindigkeitA, geschwindigkeit) ;

II "Bremse lösen" . Los geht's!


digitalWr ite(brems eA, LOW);
}

Als Erstes ist Ihnen hier aber möglicherweise aufgefallen, dass es fast der identische
Code aus Listing 7.11 ist. Klar, Sie müs se n ja das Rad nicht jedes Mal neu erfinden . Außer-
dem zeichnen sich gute Programme dadurch aus, dass Teile von ihnen leicht in anderer
Software wiederverwendet werden können. Und genau das wurde hier mit der Funktion
motorDrehen gemacht. Sie wurde ledigli ch umbenannt und um den zusätzlichen Para-
meter gesch~oündigkeit erweitert. Und genau di eser Para meter wird - wie bei PWM

260
üblich - mit dem Befehl analogWri te an den entsprechenden Pin des Motor Shield
geschrieben :

analogWrite(geschwindigkei tA , geschwindi gkeit) ;

Siehaben also gerade qua si »im Vorbeigehen « ge lernt, wie Sie mit dem Motor Shield die
Geschwindigkeit der Mo toren regeln : Einfach einen Wert zwischen 0 und 255 mittels
analogWrite an den Pin PWM A für Motor A oder PWM B für Motor B schreiben. Fertig.

7.6 Fazit
Das war jetzt wirklich ein ziemlich langes Kapitel, und Sie haben es sich erst mal ver-
dient, sich etwas zurückzulehnen. Lassen Sie sich das Erlernte zum Schluss noch einmal
kurz durch den Kopf gehen: Als Erstes haben Sie in Abschnitt 7.5.1 gelernt, was Gleich-
strom- und Schrittmotoren sind. In Abschnitt 7.5.2 ging es dann um die H-Brücke und
wie diese funktioniert . Danach haben Sie das Motor Shield kennengelernt und in
Abschnitt 7.5.3 Ihre n ersten Motor erfolgreich angesteuert. Zum Schluss gab es noch ein
kleines »Spaßprojekt«, bei dem Sie den Infrarotdistanzsensor in Kombination mit
einem Motor als eine Art Ventilator genutzt haben - und dabei wieder einmal PWM
genutzt haben . Sie sehen, da war wirklich einiges an Inhalt dabei. Ich hoffe. es hat Ihnen
bis hi erhin Spaß gemacht. denn. jetzt geht es richtig los: In Kapitel 8, »Keine Schraube
locker - Die Montage des eigenen Roboters «, werden Sie endlich Ihren Roboter Schritt
für Schritt vollständig aufbauen!

7.6.1 Letzte Vorbereitung vor dem Zusammenbau des Roboters


Als allerletzte Aktion in diesem Kapitel bauen Sie alles wieder auseinander und entfer-
nen auch da s Motor Shield vom Arduino Board. Schließen Sie anschließend das
»nackte « Arduino-Board ohne irgendwe lche extra Bauteile an Ihren Computer an, und
übertragen Sie die Software Blinky.ino. Dies ist eine Sicherheitsmaßnahme und eine
Vorbereitung für den folgenden Roboterzusammenbau.
Kapitel 8
)(el\\e 5c~v~l.\'oe \oc~ev - l)ie ~o\\i-~~e
~es ei~e\\e\\ Ro'ooi-evs
Endlich : ln diesem Kapitel geht es um den vollständigen Zusammenbau Ihres
Roboters. Schritt für Schritt werde ich Ihnen genau zeigen, was zu tun ist.

Der Zusammenbau Ihres Roboters (Montage) sieht aufgrundder zahlreichen Abbildun-


gen auf den ersten Blick vielleicht etwas aufwendig aus. Das ist er aber nicht. Ich möchte
lediglich sichergehen, dass jedes Teil an der richtigen Stelle ist und Sie hinterher viel
Freude mit Ihrem Arduino-Roboter haben. Darum habe ich im Zweifelsfalllieber eine
Abbildung oder Erklärung mehr eingefügt. Als Erstes erhalten Sie gleich einen Überblick
über die einzelnen Teile. Nach dem Zusammenbau wird es mit ein paar Tests weiterge-
hen, damit bei der ersten »Probefahrt« auch alles einwandfrei funktioniert.

8.1 Überblick
Wie ich bereits zu Beginn des Buches erläutert habe, sind alle Teile des Roboters, die Sie
1
hier sehen, fertig zusammengestell t als Kit bei Watterott electronic erhältlich. Sie kön-
nen sich die Teile zwar auch einzeln selbst zusammenstellen, ich empfehle Ihnen aber,
das Kit zu nutzen, da Sie mit der Summe der Einzelteile teurer liegen dürften und mit
dem Kit auch sicher sein können, dass nichts fehlt und alles genau zusammenpasst.
2
Außerdem geht ein Teil des Erlöses an die Community Bot Makers , denen ich die Ver-
wendungdieses Roboters für dieses Buch verdanke.
Jetzt aber noch einmal ein kurzer überblick über die einzelnen Teile, die Sie benötigen.
Legen Sie sich diese für den Zusammenbau schon einmal bereit, und haken Sie am bes-
ten jedes Teil in der Liste ab. Ein aufgeräumter und gut beleuchteter Tisch hilft hierbei
ungemein . Denn nichts ärgert oft mehr, als wenn man nach einer kleinen Mutter oder
einem kleinen Stecker sucht und ihn in der Unordnung nicht wiederfindet. Ich werde

1 http://www. wauerott. com/de/ StarterKiL ·Roboter


2 http://botmakers.de
263
beim Zusa mmenbau vo r jede m Schritt noch ei nma l auffü hren, was jeweils dafü r genau
be nötigt wird. Eine Checkliste der für den Zusamme nbau benötigten Werkzeuge finden
Sie im Anschluss an die Teileliste für den Roboter.

8.1.1 Die Tei le für den Arduino-Roboter

II II II II H II II II H II H ij

Checkliste
ein Arduino Uno R3
ein Arduino Mocor Shield
"" drei Jumper Wires , Buchse - Buchse , c a . 10 c m,
weiß roc schwarz

~ ,~~e~i~n~J~u~m~p~e~r~W~i~r~e~,~s~t~e~c~:~
Ke~r~--s~t~e~c~k~e~rL,~c~a~·~l~O~c~m~,~g~e~lb~--------------

v ei n Batteriehalter , 4 x Ji.A mit Anschlussleitung


ei n Standard- Servo »HS - 3 11«
- e in Sharp-Infrarotdistanzmesser/Infrarotsensor »GP2Y OA2 1YKOF«
v e in Anschlusskabel für den Sharp- Infrarotsensor
zwe i Getriebemotoren »GM9« , 143 : 1 go•
..., z wei Kunststoffräder »GM« mit zwei 6 mm langen
Blechschrauben
~ e in Stützrad bzw . ein e La ufrolle (Kugellager )
»Pololu Ball Caste r 3/8 " «
v c a. 20 cm Schrumpfschl a uch , 3 mm Durchmesser

~~~c~a~-~4~0~c~m~g~r~ü~n~e~L~~~
-t~z~e~,_0~,~
2~5_mm~-·---------------------------------­
ca . 10 cm rote ~itze , 0 , 25 mm 2 -

falls Batceriefach ohne Kabel


•., ca . 10 cm , schwarze Litze , 0 , 25 mm 2 -

falls Batteriefach ohne Kabel


gelaserte Acrylplatten und - teile als Robot e r - Ch ass i s
~ vier Schrauben , M2 , 5 x 30 ( f ü r d i e Get r iebemo t oren)

264
.. ,

13 Schrauben , M2 , 5 x 10 (für die Acrylteile)


- '\7
~ ~~z~w~e~i~S~c~h~r~a~u~b~e~n~-M~
· =2~S~x~1~5~~f~ü~r~d~e~n~~I~n~t~rEa~r~o~t~s~e~n~s~o~r~----------------
zwei Schrauben M2 x 10 für das Batteriefach
o1 zwei Schrauben , M2 x 18 (für das Stü tzrad )
vier Muttern M2 Stützrad und Batteriefach

v zwei Unterlegscheiben , M2 , 5

8.1.2 Die Werkzeuge für den Zusammenbau des Arduin o-Roboters

II II II II II II II II II II
H II II II
"
Checkliste
eine kleine Schere oder ein kleine r Na el
~ eine kleine feine Feile

etwas Tesa film

: ein Schlitzschraubendreher ,
ein Schlit zschraubendreher
0, 6
0, 8 X
2, 8 mm
4 , 0 mm

: ein Schlitzschraubendreher ,
ein spitzes Messer
0' 4 X 2 , 0 mm oder

ein Kreuzsch1 i tzschraubendreher , Größe PH 1


eine Abisolierzan e oder ein nicht zu scharfes

kleines Küchenmesser
~/ eine kleine Flachzange
eventuell eine Pinzette oder ein sehr kleiner Finger)

: ein Feuerzeug
:__J. etwas Gedu l d

265
Abbi ldung 8.1 Alle Teile Ihre s Roboters im Überblick (o hne Schraube n)
'. '

8.1.3 Arten der Mo ntage


Bevor es gleich »ans Eingemacht e<• geht und Sie den Roboter zusammenbauen, möchte
ich Ihnen noch ein paa r Hinweise zur generellen Art der Montage geben. Als der Robo-
ter seinerzeit entw ickelt wurde, wa r es das Ziel, ihn Einsteigern so preiswertwie mög lich
anbieten zu können. Schließlich gab und gibt es noch immer eine große Zahl an Bausät-
zen, die um ein Vielfachesteu rer sind als dieses Kit, und der Roboter soll te nicht durch
einen hohen Preis vom Ka uf ab halte n. Falls Si e sich nich t für das fertige Kit entschieden
und sich die Te ile selbst zusa mm engesucht haben, ist dieser Abschnitt für Sie nicht
ganz unwichtig. Denn er zeigt auch, wie die unterschiedlichen Roboterteile miteinander
verb unden werd en kön nen. Falls Sie das Kit nutzen, können Sie die folgenden
Abschnit te auch überspringe n und in Abschnitt 8.2 gleich mit der Montage loslegen.

Doppeltes Kle beba nd


In der Vergange nheit war der Arduino-Roboter oh ne irgendein Grundgerüst m it
dickem doppelseitigem Klebeband zusammengeba ut (siehe Abbildung 8.2 und Abbil-
dung 8.3}. lm Pri nz ip hing alles mit Klebeband am Batteriefach.

Abbildung . Doppel seiti ges Kle be ba nd (Robotervo rderse it e)


82
Abbi ldu ng 8.3 Doppe lseitiges Klebeband (Roboterrückseite)

Das doppelseitige Klebeband hatte den Vorteil, dass es extrem günstig war und die Teile
auch einigermaßen zusammenh ielt. »Ein igermaßen« war aber leider nicht » daue rhaft~~.
Nach einiger Zeit m ussten die Teile immer w ieder zusammenge presst werden, damit
der Roboter nicht auseinanderfieL Das Klebeband hatte zwar den Vorteil, da ss die Teile
zur erneuten Verwendung gut wiederverwertet werden konnten, aber auch den Nach-
teil, dassesnicht wirklich lange hielt. Auch um die Stabilität des Roboters war es bei die-
ser Art der Montage nicht sehr gut bestell t. Was also tun, wenn der Roboter weiterhin
für Einsteiger bezahlbar b leiben sollte? Davon mal abgesehen, dass die teuersten
Bestandteile des Roboters die be iden Arduino-Piatinen sind.

Montage mit Heißkleber

Im Hobby- und Basteibereich findet Heißkleber3 eine sehr große Verbreitung. Er hat den
Vorteil, dass er viele verschiedene Materialen in kürzester Ze it schnell und einfach mit-
einander verbinden kann. Ein Nachteil ist zwar, dass eine spezielle HeißkJebepistole
zum Verarbeiten benötigt wird, diese ist jedoch sehr preiswert zu bekommen.

3 http.//de. wikipedia.org/ wiki/Schmelzklebstoff

268
Abbildung 8.4 Eine typisc he Heißklebepistole

Der wesentliche Nachteil bei der Arbeit mit Heißkleber ist die Temperatur des Klebers :
Er wird a uf ca. 200 •celsius erhitzt, um flüssig auf die zu klebenden Teile aufgebracht zu
werden. Bei der Verarbeitung ist also äußerste Vorsicht angebracht und er ist für Kinder
daher überhaupt nicht geeignet. Der heiße Kleber erzeugt bei Hautkontakt äußerst
unangenehme Verbrennungen. zudem zieht er bei der Verarbeitung immer sehr heiße
c. Fäden, die gern überall kleben bleiben. Aufgrund dieser Nachtei le kam diese Art der

Montage nicht infrage.

e
Montage mit Fahrgest el l au s Acryl
Auch we nn es das Ziel war, den Roboter so preiswert wie nur möglich zu bauen, schie-
den aus den bereits genannten Gründen die zuvor beschriebenen Arten der Montage
aus. In sp iriert durch andere Hobby-Roboter entwickelte Aleks, der Macher der Online-
4
Community Bot Makers, ein raffiniertes Fahrgestell aus Acry/ . Acryl oder umgangs-
sprachlich Acrylglas ist ein ziem lich stabiler Werkstoff. der günstig zu bekommen ist.
Außerdem kann dieser Stoffper Laser extrem genau zugeschnitten werden. Genau das
wurde bei den Teilen für Ihren Arduino-Roboter gemacht.
Übrigens, falls Sie sich liebe r ein selbst entwickeltes Fahrgestell Iasern lassen wollen,
5
schauen Sie sich einmal die Webseite von FORMULOR an. Hier können Sie sich sogar
e Einzelteile preiswert herstellen las en. In Abbildung 8.5 sehen Sie bei pielsweise die
gelaserte Grundp latte Ihres Arduino-Roboters. Und wenn Sie sich generell für fertig ent-

4 Genauer: Polyrnethylrnethacrylat
5 ht:tp:/jwwwjormulor.de
wickelte Bauteile interessieren, dann ollten Sie die Webseite von Thingiverse 6 auf-
suchen. Dort gibt es Tausende von fertigen Bauteildateien zur Weiterverwendung in
eigenen Projekten.

Abb il dung 8.5 Ge laserte Bauteile aus Acryl

Wie Sie sicher erkennen können, bietet diese Art der Mon tage den Vorteil, dass jederzeit
alle Bauteile wieder leicht voneinander gelöst werden können (alles ist nur ver·
schraubt). Zusätzlich erhält der Roboter eine sehr hohe Stabilität. Und wie heißt es so
schön im Volksmund: >> Billig kauft man immer zweimal!« Aus diesem Grund sind in
dem Roboter-Kit nun diese gelaserten Teile enthalten. Und seien Sie ehrlich: Es sieht ja
wohl auch viel professioneller aus, oder?

8.2 Los geht's- Schritt für Schritt zum Bot

Wenn Sie diese Anleitung lieber als vertontes Video sehen wollen, finden Sie es im Inter-
net?, wo Sie auch alle Sourcecodes zum Download finden. Alle Schritte werden dort genau·
so ausführlich erklärt wie hier im Buch. Falls nicht, lesen Sie einfach hier im Buch weiter.

8.2.1 Vorb ereit ung

Als Erstes gilt es, die gelaserten Acrylteile aus ihrem Rahmen zu befreien. Drücken Sie
wie in Abbildung 8.6 vorsichtig alle Teile heraus. Belassen Sie die Schutzfolie dabei noch
auf den Teilen, um sie etwas zu schonen.

6 http://www.thingiverse.com
7 ht tp://robotiklabor.de/literatur
lf·
in

Abbildung 8.6 Drücken Sie die gelaserten Teile vorsic htig aus dem Rahme n.

Vo rs icht: Stabil, aber spröde! I•


Seien Sie vorsichtig beim Herausdrücken: Acrylglas ist zwar sehr stabil, aber auch etwas
spröde. Es kann daher auch mal durchbrechen.

)
Bei sehr kleinen gelaserten Löchern sind manchmal noch die »Füllungen « enthalten.
Drücken Sie diese mit der Schere oder einem Nagel wie in Abbildung 8.7 heraus. Sie wer-
den nicht benötigt und können entsorgt werden.

Abbildung 8.7 Entfe rn en Sie die Reste aus de n kleinen Löchern .

211
Entfernen der Schut zfolien

Ziehe Sie jetzt die Schutzfolie von all en Kunststoffte ilen ab . Das geht am besten mit den
Fingernägeln und von einer Ecke her sta rt end (siehe Abb.i ldung 8.8 ).

Abbildung 8.8 Entfernen Si e die Folien von alle n Acry lteilen .

8.2.2 Die Grundplatte

Für den nächsten Schritt benötigen Sie folgende Tei le (siehe Abbildung 8.9) :

II II II II II II II II II II II II
Checkliste

~ ~e~i~n~e_G~r~u~n~d~p~l~a~
tt~e~a~u~s~A~c~r~y~l--------------------------------­
vier Schrauben , M2 , 5 x 10
--~·~-2~~~~~~~~-~~~---------------------------------
vier Muttern , M2 , 5
~ einen Schraubendreher

272
Schritt für Schritt zum Bot

Abbild ung 8.9 Achten Sie da rauf, dass die Grundpl atte richtig herum liegt.

Stecken Sie die erste Schraube durch das Loch wie in Abb ildun g 8.10.

Abbildung 8.10 Acht en Sie auf die rich t ige Seit e der Grund platte!

273
Drehen Sie die Grundplatte herum während Sie die Schraube dabei festhalten, dan
sie nicht herausfällt (sieh e Abbildung 8.11).

Abbildung 8.11 Die Grundplatte mit gesteckter Schra ube

Schrauben Sie die Mutter m it der Hand leicht fest wie in Abbildung 8.12.

Abbildung 8.12 Di e Unterseite mit Mutter

274
n, damit Fixiere n Sie die Schraube so mit einem Schra ubendrehe r, dass sich die Mutter nicht
mehr drehen lässt (siehe Abb il dung 8.13). Ziehen Sie die Sch raube dabei aber nicht zu

fest an'

Abbild ung 8.13 Festsch rauben , aber nicht zu fest, damit nichts bricht.

Diese Beschreibungen waren bis hierhin sehrdetailliert Verfahren Sie nun mit den drei
weiteren Sch rauben wie zuvor beschrieben. Achten Sie darauf, die richtigen Löcher auf
der Grundplatte zu verwenden.

Abbildung 8.14 Die Grundpla tte von oben

275
... .

Drehen Sie die Gru ndplatte herum, wä hrend Sie die Schra ube dabei festhalten, damit . . Schraubendreher, dass sich die Mutte: nicht
sie nicht hera us fä llt (s iehe Abbildung 8.11). :0
FLxieren Sie die Schraube so tt em;~) Ziehen Sie die Schraube dabei aber mcht zu
mehr drehen lässt (siehe Abbildung . .
fest an!

damit nichts bricht.


Abbildung 8.11 Die Grundplatte mit gesteckter Schraube b r nicht zu f es t •
Abbildung 8.13 Festschrauben, a e . . drei
. . rfahren Sie nun mtt den
. . rhin sehr detatlllert. Ve . . i en Löcher auf
Schrauben Sie die Mutter mit der Hand leicht fest wie in Abbildung 8.12. Diese Beschreibungen waren b ts hle . b Achten Sie darauf, dJe ncht g
. zuvo
weiteren Schrauben wte . r beschne en.
der Grundplatte zu verwenden.

Abb ildu ng 8.1 2 Die Unterseite mit Mutter d Iatte von oben
Abbildung 8.14 Die Grun p

275
274
Wenn Sie all e vier Schrauben durchgesteckt, mit Muttern versehen und mit d,
Schraubendreher angezogen haben, so llte das Ergebnis so aussehen wie in Abbildu
8.14 und Abbildung 8.15 .

Abbildung 8.15 Die Grundplatte von unten

8.2.3 De r kleine Motorhalter


Für den näc hsten Schritt benötigen Sie fo lgende Teile:

1111111111111111111111 H N II H Ull

Checkliste
die Grundolatte
~ eine k l eine Motorhalterolatte
(siehe Abbildung 8 . 16 links) l
eine Schraube M2 5 x 10
! eine Mutter , M2 , 5
einen Schraubendreher

276
nit dem
)bi!dung

Abbil dung 8.16 Der kleine Motorhalter (l inks im Bi ld)

Stecken Sie die Mutter in den Motorhalter und halten Sie diese fest, soda s sie nicht h r-
ausfallen kann (siehe Abbildung 8.17}. Achten Sie darauf, dass der Halter eine unt r-
schiedli.che Ober- und Unterseite hat.

II

Abbi ldung 8.17 Qer kleine Motorh alter mit Mutte r

271
..
Wenn S.ie alle vier Schrauben durchgesteckt, mit Muttern versehen und mit dem
Schraubendreher angezogen ha ben, so llte das Ergebnis so aussehen wie in Abbildung
8.14 u nd Abbildu ng 8.15 .

Abbildung 8.1 6 Der kleine Motor h alt er (links im Bi ld)

d halten Sie diese fest, sodass sie nicht her-


Stecken Sie die Mutter in den Motorhalterun s· darauf dass der Halt er ein e u nter-
Abb ildung 8.15 Die Grundplatte vo n unten .
ausfallen kann (siehe Abbildung 8·17) · Achten Je ·
schiedliche Ober- und Unterseite hat.
8.2.3 Der kleine M otorha lter

Für den nächsten Schritt benötigen Sie folgende Teile:

II II II
II II II II II II II II 1111 H H 1111

Checkliste
~ die Grundplatte

eine kl e ine Motorhalterp latte


(s iehe Abbildung 8 . 16 l i nks )

~•--e=~=·n~e~S=c=h=r=au=b=e~,~1=2~·~5__x _l~O~-----------------------------------
~ eine Mutter , M2 , 5
einen Schraubendreher
~-~~~~~~~~~~~----------------------~--------------

276 277
Stecken Sie den Motorhalter a uf d ie Grund p latine wä hrend . . Ziehen Sie die Schraube mit der Hand so we it es geht an (sie he Abbildung 8.20 ).
festhalten (s iehe Abb ild u ng .1 ). ' Sie dJe Mutte r noch immer
8 8

Abbildung 8.20 Festdrehen der Schraube mit der Ha nd


Abb ildung 8.18 Stecken des klein en Motorhalte rs in die Gru ndplatte
Ziehen Sie danach die Schraube mit dem Schraubendreher fes t an. Aber erneut Ach-
Stecke n Sie von der Unterseite der Grund Iatte a . tung : Nicht zu fest an ziehen, damit das Acry l n icht bricht! Fertig montiert sehen Sie den
den Mot orhal ter festzuschraub ( . h p . us dle Schra ube durch das Loch, um
en ste e Abbildung 8.19 ). kleinen Motorh alter in Abbildung 8.21.

Abbildung 8.19 Stecken der Sch raube durch die Grund platte Abbildung . De r kleine Mot orh alter fertig montiert auf der Grundp latte
8 21

219
8·2·4 Der große Motorhalte r Stecken Sie eine Mutter nach dem vorigen Prinzip in den große n Motorh alter (siehe
Für de n nächsten sch ntt
· benotlgen
.. . Sie folg ende Teile:
Abbildung 8.23 ). Beachten Sie auch die richt ige Richtung des Ha lters, der nur auf eine
Weise auf die Grundplatte gesteckt werde n ka nn.
II II H II 11 II II II II II II II II II II II
Checklis t e
• die Grundplatte
v eine große Motorhalterplatte
(siehe
. Abbildung 8 · 22 ~m
. Vordergrund)
~ zwe~ Schrauben t M2 t 5 X 10

Abbildun g 8.23 Die erste Mutter im großen Motorha lter

Stecken Sie den Motorhalter in die Gru ndplatte, und halten Sie dabei die Mutter fest

(siehe Abbildung 8.24).

Abb ildung 8.22 Der große M ot orhalter mit der Grun d pIatte

Abbildung 8.24 Stecken des große n Motorhalters

281
280
Steck~n Sie wie zuvor von der Unterseite der
und Ziehen Sie anschließend die Schra b _Grundplatte aus die Schraube in den H I 8.2.5 Löten der Drähte bzw. Litze an die Moto ren
fahren · u e mit dem Sehr b a ter
. Ie genauso mit der zweiten . au en drehervorsichti fe ,
Abb ildung 8.25). Manchmal ist es etwSchraube und Mutter für den Motorha~erst.Ver· Für den nächsten Schritt benötigen Sie folgende Teile:
»fum~el~g<<, die Mutter in die kleinen S ~;~he
zu bekommen. Hier hilft dann eine p·maszette, II H H II II II H II II II N II II II II II II
d.Je Sie auch in Abb'ld c Jtze
I ung 8.25 sehen.

Che c kliste
~~4~0~c~m~g~r~u~
··n~
.e~L~i~t~z~e~o~d~e~r~D~r~aDh~t __________________________________
eine Abisolierzange oder ein Kabelmesser
(siehe Abschnitt 5 . 3, »Werkzeuge« )
._ Lötkolben , Lötzinn , Lötschwamm/Messi n g~rolle

(siehe Abschnitt 5 . 6 »Löten« )

Dies ist nun das einzige Mal, dass Sie an Ihre m Roboter etwas löten müssen. In
Abschnitt 5.6 haben Sie gelernt, wie das funktioniert. Isolieren Sie zunächst vier 10 cm
lange Stücke Litze oder Draht ab. Versehen Sie anschließend die abisaUerten Enden m it
Lötzinn, wie Sie es gelernt haben. Wenn Sie nicht selber löten wol.len oder dürfen, fragen
Ab bi ldung 8.25 Stecken Sie die zweite Mutter in den Motorhalter. Sie an dieser Stelle einen Freund oder Ihre Eltern. Es geht wirklich sehr schnell. ach
dem Abisolieren sollten die Drähte ungefähr so aussehen wie in Abbildung 8.27.
Die fertig m t'
an Jerten Motorhalter (kl .
aus. em und groß) s h . .
e en dann so Wie in Abbildung 8.26 Achtung: Kinder löt en ni cht alle in! I•
Wie ich be reit s in Abschnitt 5.6 erwähnt habe, sollten Kinder niemals allein löten, da ei n
Lötkolben mit Temperaturen von übe r 300 ·celsi us arbeitet! Es reicht, wenn ein
Erwa chsener die Arbeit überwacht oder- je na ch Alter- das Löten kurz selbst über-
nimmt.

Ab bild ung 8.26 Seide Motorhalter a uf der Grundpl tt .


a e mo ntiert
Abbildung _27 Vier zu m Anlöten vorbe reitete Drähte fü r die Motoren
8

283
Nachdem Sie die Drähte an die Motoren ange löte t h aben . sollte das Ergebnis so ausse·
hen wie in Abbildung 8.28 .

Abb il dung 8.28 Die Motoren mit angelöteten Drähten

Das war es auch schon mit dem Löten. Nun geht es weiter mit der Montage der rest·
liehen Teile Ihres Arduino-Roboters.

8.2.6 Mot oren mit Schraube n und M uttern versehen


Für den nächsten Schritt benötigen Sie folgende Tei le:

II II U II II II II II II II
Check lis t e
~ beide Motoren (miL angelöLe ten Drähten)
vier Schrauben M2 5 x 30
zwei MULLern , M2 , 5
einen Schraubendreher

In diesem Schritt werden beide Motoren m it den Schrauben versehen, um sie später in
die Motorhalter zu schrauben. Stecken Sie in jeden Motor zwei der langen Schrauben.
Achten Sie dabei darauf, dass Sie diese wie in Abbildung 8.29 von der Seite der Motor·
welle aus stecken.

284
Abbildung 8.29 Von der Motorwelle aus werden die Schrauben gesteckt.

Drehen Si e di e Mutte rn auf die Schrauben, ziehen Sie djese aber nicht vollständig an

(siehe Abbildung 8.30 ).

Abbildung 8.30 Auf drehen der Mut tern

285
Es reicht aus, wenn die Muttern nur ein kleines Stück weit auf die Schrauben gedreht
werden (siehe Abbi ldung 8.31). Sie we rden erst später festgezogen, wenn die Motoren
montiert werden.

Abb il du ng 8.31 Die Schrauben und Muttern am Motor

Wiederholen Sie diese Schritte für den zweiten Motor, sodass das Ergebnis be i beiden
Motoren wie in Abbildung 8.31 aussieht.

8.2.7 Mo ntage des linken Motors


Für den nächsten Schritt benötigen Sie folgende Teile:

II II II II II H II II II II II II lf II II II

Checkliste
~ die Grundp l atte
..j einen Hotor
" einen Schraubendreher

286
Abbildung 8.32 Ausrichten des ersten Motors für die Montage

Schieben Sie den ersten Motor vorsichtig so auf die Grundplatte, dass die Muttern
genau in die Schlitze der kleinen Motorhalte rung passen. Eventuell müssen Sie hierzu
die Muttern noch etwas auf der Schraube vor- oder zurückdrehen, damit sie die richtige
Position haben. Oftmals reicht es auch aus, dass Sie einfach die Schrauben im Motor
etwas vor- oder zurückziehen (siehe Abbildu ng 8.33 ).

Abbildung 8.33 Der erste Motor in der kleinen Motorhalterung


Achten Sie bei der Montage darauf, dass die »Nase « des Motors genau in die große Hal-
terung auf der Grundplatte vorne passt (s iehe Abbildung 8.34).

Ab bi ld ung 8.34 Die »Nase « des Motors in der großen Motorhalterung

Ziehen Sie nun beide Schrauben mit dem Schraubendreher vorsichtig an (siehe Abbil·
dung 8.35). Da die Motorhalterung teilweise sehr dünne Stege hat, seien Sie hierbei ext·
rem vorsichtig ! Auch hie r gilt das alte Sprichwort:» Nachfest kommt ab« .

Abbi ldu ng 8.35 Festz iehe n der Schraube n am Motor- bitte se hr vorsicht ig!

288
Iai- Falls sich beim Anziehen der Schrauben di e Mutter m itdreht, halten Sie die einfac h
etwas mit der Hand fest (siehe Abbildung 8.36).

Abbildung 8.36 Event uell m üssen die Mu ttern etwas fest gehalt en werden .

Jil·
lrt· Fertig monliert sieht es dann aus wie in Abbildung 8.37.

Abbildun g 8.37 Die Schrauben am Motor sind f estgeschra ubt

289
8.2.8 Montage des rechten Motors
Für den nächsten Schritt benötigen Sie fo lgende Teile :

II II II U II ~
"
Checklis t e
die Grundplatte
einen Motor
einen Schraubendreher

Gehen Sie bei der Montage des zweiten Motors genauso wie beim ersten vor. Das Ergeb-
nis mit beiden Motoren sieht dann so aus wie in Abbildung 8.38.

Abbildu ng 8.38 Die beiden montierten Motoren auf der Grundplatte

8.2.9 Befestigung der beiden Motoren vorne


Für den nächsten Schri tt benötigen Sie folgende Teile:

290
II U H H II II II N II H N U ß U U ß H II

Checkliste
~ die Grundplatte mit den Motoren
zwei Schrauben M2 5 x 10
zwei Muttern , M2 5
einen Schraubendreher

~~e~t~w~a~s_T~e~s~a~f~~~·l~m~·-----------------------------------------------

Die Befestigung der Vorderseite der Motoren im großen Motorhalter erfolgt nach dem
gleichen Schema wie bisher. Stecken Sie die Mutter wie in Abbildung 8.39 beim ersten
Motor in den dafür vorgesehenen Schl.itz. Damit sie nicht immer durch das Loch fallt,
können Sie auf der Rückseite etwas Tesafilm befestigen.

Abbildung 8.39 Einlegen der Mutter- darunter ist ein Streifen Tesafilm.

Stecken Sie jetzt die Schraube leicht schräg in die r-Ialterung und durch die »Nas e« des
erste n Mo tors (siehe Abbildung 8.40).

291
Abbi ldung 8.40 So stecken Sie die Schraube in d ie »Nase« des Motors.

Zieh e n Sie wie im mer die Schrau be an. Der Schraubendreher muss hi erbei etwas schräg
vo n der Seite ben utzt werde n {sieh e Ab bil du ng 8.41).

Abbild ung 8.41 Anzie he n der Schra ube am ersten Motor

292
verfa hren Sie mit der Mo ntage des zwe iten Motors genauso. Entferne n Sie danach die
Tesafilms treifen unter bzw. hinter den Muttern. Das Ergebnis sieht nun so au s wie in
Abbildung 8.42.

äg
Abbildung 8.42 Die befestigte n »Moto rn asen «

8.2.10 Monta ge der oberen Platte


Für den nächsten Schritt benötige n Sie folgende Tei le :

II II II II II II II II II II II II II II II II II II

Checkliste
v die Grundplatte mit den Motoren
die obere Platte des Roboters

...,. eine Schraube , M2 , 5 x 10


~ eine Mutter. M0~5~--------------------

;l einen Schraubendreher

Stecken Sie die Mutter in den oberen Schlitz des klei nen Motorhalters (siehe Abbil-

dung 8.43).

29 3
Abbildun g 8.43 Die Mutter im kleinen Motorhalter

Legen Sie die Grundplatte mit den Motoren vorsichtig auf den Tisch, sodass die Mutter
aus dem Motorhalter nicht herausfallt (siehe Abbildung 8.44).

Abbi ldung 8.44 Kurz vor de r Montage der oberen Platte

Nehmen Sie die obere Platte, und halte n Sie diese so herum, dass die Aussparungen
li nks oben genau über d ie Aussparung der Grundplatte links unten passen (sie he Abbil
dung 8.45).

294
Abbildung 8.45 Die Aussparung oben muss zu Aussparung unten passen.

utter Drücken Sie nun die obere Platte vorsichtig auf die senkrechten Motorhalter (sjehe
Abbildung 8.46) .

Tipp
Falls die obere Platte nicht genau auf die Motorhalter passt, lösen Sie die Sc hrauben auf
+
der Unterseite der Grundplatte etwas. Dann können Sie die Motor halter etwas hin und
her bewegen, sodass die obere Platte passt.

1gen
bbil-

Abbildung 8.46 Die obere Platte passt gen au in die Stege der Moto rhalter.

295
Ab bildung 8.43 Die Mutter im kleinen Motorha lter
Abbildung 8.45 Die Aussparung oben muss zu Aussparung unten passe n.

Legen Sie die Grundplatte mit den Motoren vorsichtig auf den Tisch, sodass die Mutter . . f die senk rechten Motorhalter (siehe
Drücken Sie nun die obere Platte vorsichtig au
aus dem Motorhalte r nicht herausfä ll t (siehe Abb ildung 8.44}.
Abbi ldung 8.46 ).

Tipp . M t ha lte rpasst lösen Sie die Schra uben auf


· genau auf d1e o or..
Fa lls die obere Platte n1cht s· di e' Motorhalter etwas hm
· und
der Unterseite der Grundplatte etwas · Dann konne n le
her bewegen, sodass die obere Platte passt.

Abbildu ng 8.44 Ku rz vor der Montage der oberen Platte

Nehmen Sie die obere Platte, und halten Sie diese so herum, dass die Aussparungen
links oben genau über die Aussparung der Grundplatte Links unten passen (siehe Abbil·
dung 8.45}.

. bere Pl atte passt genau ·n


I
die Stege der Motorhalter.
Abbildung 8.46 Die 0

295
294
2

Fixieren Sie d ie obere Platte mit der Schraube (siehe Abb il dung 8.47) .

Abbildung 8.47 Die Sch raube geht gen au in den kleinen Motorhalter.

Die Schraube aus Abbildung 8.47 passt dabei genau in die Mutter darunter. Wenn alles
m it dem Schraubendreher festgezogen wurde, sieht es von der Seite so aus wie in Abbil-
dung 8.48 bzw. von hinten so wie in Abbildung 8.49.

Abbildung 8.48 Di e mont ierte obe re Platte vo n der Se ite bzw. von hinten

296
Abbildung 8.49 Die fertig montierte obere Platte von oben
. alles
\bbil- 8.2.11 Der Batteriehalter bzw. Akkuhalter
Für den nächsten Schritt benötigen Sie folgende Te ile:

II II II II II II II II II II II
H II U II M II

Checkliste
die bereits montierten Te i le Ihr werdender Robo t er

zwei Schrauben , M2 X 10

zwei Muttern , M2
einen Schraubendreher
~~_~::~et~w~a~s~T~e~s~a~f~il~m~-------------------------------------------­
eventuell eine Pinzette

Stecken Sie eine der Muttern in den linken verblieben en Schlitz des große n Motorhal-
ters (siehe Abbildung 8.50). Damit sie nicht herausfällt, kleben Sie wieder etwas Tesa-

fi lm hinter den Schlitz.

297
Fix ieren Sie di e obere Platte mit der Schraube (siehe Abbildung 8.47) .

Abbildung 8.47 Die Schraube geht genau in den klei nen Motorhalter.
. montierte
Abbildung 8.49 Die fertig . o bere Platte von oben
Die Schraube aus Abbildung 8.47 passt d abei genau in d ie Mutter darunter. Wenn alles
mit dem Schraubendreher festge zogen wurde, sieht es von der Seite so a us wie in Abbil· . bzw. Akkuhalter
dung 8.48 bz w. von hinten so wie in Abbildung 8.49 . 8.2.11 Der Battenehalter .
.. . Sie folgende Teile:
Für den näch sten Schritt benottgen
II II II II II II
II II II II u II II II II II II

Checkliste
"
. rten Te il e Ihr werde nder Roboter
_____",'
=~d~·~e~b:e~r~e~i~t:s~m:o~n~t~~~e:;~~_BlE~~~==========================
einen Batteriehalter
bzw Akkuhalte r
.
~~ M2 X 10
zwei Schrauben ,

: ./
zwei Mutte r n , M2
einen Schraubendreher

1 eventuell e~

Abbildung 8.48 Die montierte obere Platte von der Seite bzw. von hinten . verbliebenen Schlitz des großen Motorhal-
. Muttern in den lmken . Sie wieder envas T sa-
Stecken Sie etne der .t ·e nicht herausfallt, kleben
. . n 8 50). Damt st
ters (siehe Abbtldu g ·
fi lm hinter den Schlitz.

296
Abbildung 8.52 ... und dann durch die obere Platte.
Abbi ld ung 8.50 Die Mutter im linken obe ren Sch litz des Motorhalters
. hnt fest. Wenn . s·te wie hier abgebildet Kunststoff-
. .
Drehen Sie die Schraube Wie gewo . . l b . Metallschra uben, damrt keme
Nehmen Sie jetzt den Batteriehalter, und stecken Sie eine der Schrauben durch den Ha!· . S. twas vorsJchttger a s eJ .
schrauben verwenden, seten Je e . h .tt für die rechte Seite des Battene-
ter und die obere Platte des Roboters (siehe Abbildung 8.Sl und Abbildung 8.52). Achten .. . d"e gleichen Sc n e .
beschädigt wird . Fuhren Sie nun t . . . Abbildung 8.53. Ent fe rnen Sie zum
Sie dabei darau f, dass die Kabel des Batteriehalters Richtung Motorkabel zeigen! ·
halters durch , sodass das Erge b DIS so aussieht WJe m
Schluss noch den Tesafilm.

rf montierte Batterie halter


Abbildung 8.53 Der f e tg
Abb ildung 8.51 Stecken Sie erst die Schraube durch den Halter ...

299
298
8.2.12 Das Stützrad bzw. Kugellager
Für den nächsten Schritt benötigen Sie folgende Teile :

N H n H H II II

Checkliste
__., d.:e nere.:..cs montierten ':'eile
ein Stützrad

__., ~
alle Acrylteile aus Abbildung 8 . 54
...,. zwei Schrauben , M2 X 18 (für das Stützrad)

~~z~w~e~i~M~u~t~t~e~r~nL-M~2~--------------------------------------------
~ ~e~~~·n~e~n~S~c~h~r~a~u~b~e~
n~d~re~l~1e~r~---------------------------------------

. Schrauben gesteckt.
Abbildung 8.55 Alle Teile werden auf die

· ·n Abbildung 8.56 ·
Das Rad sollte nun so aussehen Wle l

Abbi ldung 8.54 Al le Teile des Stützrades

Stecken Sie das Rad und alle Acrylteile auf die Schrauben (siehe Abbildung 8 .55 ). Die Rei·
henfolge der einzelnen >>Scheiben « ist hierbei egal. rf e Stützrad
Abbildung 8.56 Das fe 1g

300
••• Schritt zum Bot

Stecken Sie die Sch rau ben des Rades durch d . L.. h
dung 8.57). Verwenden Sie dabei dJ·e L.. I Je oc er vor dem Batteriefach (siehe Abb'l Das Ergebnis sehe n Sie in Abbildung 8.59 (von oben).
. oc1eraufderab d I·
0 as vmd später die Vorderse ite des Roboters. gerun eten Seite der Grundplatte!

Abbildung 8.57 Das Stützra d wrrd


. gesteckt.
Abbi ldung 8.59 Das montierte Stützrad (auf der Roboterunterseitel

Befestigen Sie das Rad mt.t d en zwet. Mutte ( . .


Schrauben wie gewo hnt fest. rn Siehe Abbildung 8.58), und ziehen Sie die
8.2.13 De r Servo
Für den nächsten Schrjtt benötigen Sie folgende Teile:

II 11 II II II II
H II H

Checkliste
die bereits montierten Teile

einen Servo
M2 , 5 X 10
../ zwei Schrauben ,
z11ei Muttern , M2 , 5
M2 , 5
V
zwei Unterlegscheiben

Stecken Sie den Servo durch die große Öffn ung in der oberen Platte. Führen Sie das
Ka bel dabei nach oben heraus. Achten Sie dabei darauf, das Kabel nicht einzuklemmen

Abbi ldu ng 8.58 Fixie rung des Rades m it de n M utte rn (siehe Abbildun g 8.60 ).

302
bendurch den Servo un d die obere Grundplatte
b Sie dann die Schraube von o . le"ch den Schraubendreher
Schrau en . Nehmen Sie dafür am besten g 1
in die festgehaltene Mutter.
(siehe Abbildung 8.62).

Abbi ldung 8.60 Das Kabel passt gut durch den Sch litz am Servo.

Stecken Sie die Unterlegscheiben jeweils auf eine Schraube (ohne Abbildung), und legen
Sie die Schrauben vorerst beiseite. Nehmen Sie nun mit einer Hand eine der Muttern,
und halten Sie diese genau an ein Loch des Servos (siehe Abbildung 8.61). Abbildung 8.62 Festschrau ben des Servos . . ht
·m Ergebms so ausste
fü die zweite Schraube, sodass es I
Wiederholen Sie den Vorgang r
wie in Abbildung 8.63.

Abbildung 8.61 Halten Sie die Mutte r unter die Pl atte.

304
8.2.14 Das Servorad oder Servokreuz
Für den n ächsten sc h ntt
· benötigen Sie fo lgende Tei le ·
Wichtig!
I•
BevorSie das Rad oder Kreuz festschrauben, prüfen Sie, ob ein Arm des Kreuzes ode r
U I U U U H H H N N n .n eine Reihe der Löcher auf dem Roboter genau nach »vor ne« zeigen (zu r abgeru ndet en
U U N II l
Check l i ste
" Seite der Acryl platten) . Wichtig ist hierbe i, dass Sie das Rad ode r Kreuz vo n diese r
Position aus genauso weit nach lin ks wie nach rec hts drehen kön nen . Das ist wichtig,

"" die bereits montierten Teile damit Ihr Roboter später auch ganz nach links und rechts schauen kann. Drehen Sie

e i n Servorad
-
~
0 d er Servokreuz
das Rad oder Kreuz nur m it »sanftem Druck« , damit das Getriebe des Se rvos dabe i
nicht beschädigt wird! Manchmal hilft es, das Rad oder Kre uz erst nur ein we nig hi n
j e nach Lieferumfang des S
eine ervos und her zu drehen.
~ Kr e uzschlitzschraube (beim Servo
~ ei n Kre uzschraubendreher enthalten)
Fal ls sich beim Teste n das Rad oder Kreuz nicht ga nz na ch links drehen lässt, also die
Endposition des Servos bereits er reicht ist, ziehe n Sie es vo rsicht ig hoch, drehe n es
etwas weiter nach lin ks un d stecken es w ieder auf die Servowe lle. Drehe n Sie nu n das
Stecken Sie da s b etm
. Servo mitgeliefe Rad oder Kreuz erneut ganz nach links und rechts. Füh ren Sie diesen Vorgang so lan ge
Abbildung 8.6 ). rte Rad o de r Kreu z auf d ie we11 e d es Servos (stehe
. durch, bis beim Rad eine Re ihe m it den Löchern ode r ein Arm des Kreuzes ge nau na ch
4
vorne zeigt, wenn er in der Mittelposition des Servos steht.

Schrauben das Rad o de r Kreuz fest (siehe Abbildung 8.65). Falls sowohl ein Rad als auch
ein Kreuz im Lieferumfa ng enthalten sind, verwenden Sie das Rad. Es ist etwas stabiler.

Abbildung 8 64 M
.. ontage eines Servorades bzw S
· ervokreuzes

Abbildung .65 Fest schrauben eines Servo kreuzes


8

306 307
8.2.1 5 Das Arduino-Board

Für den nächsten Schritt benötigen Sie folgende Teile :

II II II II II II H II ll

Checkliste
die bereits montierten Teile
ein Arduino - Board
~ --V~l~·e~r~M~u~t~t~e~r~nL,_M~2~5~--------------------------------------~
---J ~e~i~n~e~k~l~e~i~n=e~Fl~a~c~h~-~o~d~e~r~S~p~i~t~z~za~n~g~e~----------------------~

Stecken Sie das Arduino-Board auf die hervorstehenden Schrauben auf der Robot
p lattform (s iehe Abbildung 8.66 und Abbildung 8.67).

Abbildung 8.66 Die Roboterplattform - hier noch ohne Arduino-Board

Abbild ung 8.67 Da s gesteckte Arduino-Boa rd auf den Sch rauben

308
Schrauben Sie die Muttern auf jede der vier Schrauben. Ziehen Sie anschließend die
Muttern vorsichtig mit der Zange an (siehe Abbildung 8.68).

I I

Abbildung 8.68 Fi xie rung der Muttern am Arduino-Board mit einer Zange
Roboter·

8.2.16 Das Roboter-Gesicht


Für den nächstenSchritt benötigen Sie fo lgende Teile :

ll
H II II II II II II II II II II
II II

Checkliste
'"' ein Arduino Board
~ die Acrylteile aus Abbildung 8 . 69
_,.. eine Schraube , M2 , 5 x 10
~ eine Mutter , M2 , 5

..-&
"".",
- -

Abbildung 8.69 Die Teile für das Roboter-Gesicht

309
Schrauben Sie die Muttern auf jede der v;er Schrauben. z;ehen s ;e anschl;eßend d;e
8.2.15 Das Arduino-Board
Muttern vorsichti g mit der Za nge an (s iehe Abbildung 8.68).
Für den. nächsten sch ntt
· benötigen Sie fol gende Teile·

II I II g H ü II II . II II H II I l
Checkliste
v die bereits montierten Teile (die
ein Arduino Board Roboterplattform)

~ vier Muttern, M2 , 5
~ eine kleine Flach oder Spitzzange

Abbildung 8.68 Fixierung der Muttern am Ardui no-Board mit einer Zange
Stecken Sie das Ard umo-Board
. auf die h
plattfo rm (siehe Abbildung 8 66 d .ervorstehend en Schrauben auf der Rob t .
__ · un Abbildung 8 .67 ). o er
8.2.16 Das Roboter-Gesicht
Für den nächsten Schrit t benötigen Sie folgende Teile :

""""""" """
=
II U
" " n
Checkl i ste

X 10
- :: eine schraub€t M2 , 5
~- eine Mutter , ~2 , 5

\
I
-- ~
-

Abbi ld un g 8.6? 0 as gesteckte Ard umo-Board


. auf den Sch ra uben
L---Abbil dun g _ Die Teile für das Roboter-Gesicht
8 69

308
ln Abbildun g 8.72 seh e n Sie d as Erge bnis.
Stecken Sie wie bisher die Mutte r in de n passen den Schli tz (s ie h e Abb ildung 8.70).

. b'tte recht fre undlich !


Abbildung 8.72 Das fertige Gesicht- I
Abbildung 8.70 Die Mutter im »Ha ls« des Roboters

Stecken Sie das Gesicht- und Hals-Teil zusa mmen, und v erschra ube n S.ie beides mitein- 8 2 17 Das Kabel zum Infrarotsensor .
a nd er (siehe Ab bildung 8.71}. . . .. . Sie fo lgende Teile:
II ll II II
Für den n äch sten Schritt benongen \1
II 11
" U ll U II U II II II II

--------~--========-~====
Checkliste
für den I
________--- r (siehe ~~bi l dung 8 . 73)
n fr~a~r=o~t~se~n~s~ou&n~ß.__9~e.llbQ.....!U>!Jn}SdUr:Qo~tL--===

Abbi ldung 8.71 Fixieru ng des Gesichts

311

310
.. er Wires an nur einer Seite den Stecker ab (siehe Ab~il -
Kneifen Sie an allen dret jump . 1' am Ende ohne Stecker auf ungefahr
dW1g 8'75) ' Entfernen Sie ebenfa ll s dte Iso Jerung
einem Zentimeter Länge.

Abbi ldung 8.73 Die benötigten Tei le; links unten das Kabel für den Sensor

Damit das Kabel des Sensors später auf das Arduino Sh ield gesteckt werden kann, verse-
hen Sie es jetzt mit Buchsen. Entfernen Sie dazu an allen drei Leitungen am Ende des ·t I
Abbildung 8.75 Ab mit dem Stecker-a bernu r aneinerSel e. ..
Sensorkabels die Isolierung auf circa einem Zentimeter Länge. Drehen Sie anschließend
di e Litze ein paarmal in die gleiche Richtung, damit diese nicht »a usfranst« oder ))auf- . . · Stück Schrump·fsc hlauch von circa zwei Zentimetern Lange
ribbelt« (siehe Abbildung 8.74). Stecken Sie jetzt 1ewet 1s em ( . he Abbildung 8.76).
über jedes der drei. Ka be.1des Sensors Sie _ _.."...-,..............,--'Cl

Abbildung 8.74 Entfernte Isolierun g fschlauch auf dem roten Kabel


Abbildung 8.76 Der sc hwarze Schrump
ritt für Schritt

Verdrillen Sie jeweils einen der Jumper Wires mit jeweils einem der Kabel vom Sensor. E d nd sind wieder isoliert (siehe Abbildung 8.79).
Die Kabel habe n damit Buchsen am n e u
Idealerweise verwenden Sie dabei die gleichen ode r zum indest äh nliche Farben - zum
Beispiel Schwarz mit Schwarz, Rot m it Rot und Weiß mit Gelb. Biegen Sie anschließend
da verdri llte Kabel so wie in Abbi ldung 8.77. Wenn Sie möchten, können Sie zur Sicher·
heit die verdrillten Kabel auch miteinander ve rlöten. Das macht die Verb indung noch
haltbarer. Es ist aber nicht zwingend notwendig.

. ·t teckba ren Buchsen.


Abbildun g 8.79 Fertig ist das Sensorkabe l- Jetzt mi s

8.2.18 De r Inf rarotsensor- die ))Augen <<


.. .
Für den nächsten Schritt benotlgen Ste
· folgende Teile:

II II II II II II II II II II
II II H

Abbildung 8.77 Ei nes der verdrillten Kabel "


Checkliste
mit Stecker und Kabe l
Schieben Sie nu n den Schrumpfschlauch über die abisolierten Enden. Erhitzen Sie den •, einen Intrarotsensor
Schlauch für weniger als eine halbe Sekunde, sodass er schrumpft (s iehe Abbildung das Robocer-Gesicht

8.78). Warten Sie da nach immer ein paar Sekunden, bis der Schlauch wieder erkaltet ist! . die Acrylte~ e
zwei Schrauben , M2 , 5 X 15
V
zwei Muttern , M2 , 5

. .
tlichen Tel·le für das Roboter-Gesicht
Abbildung 8.78 Der Schrumpfvorgang. Bitte nur ganz kurz erh itze n! Abbildung 8.80 Dieres

315
. h . ·mmer die Schrauben vorsichtig fest. Fertig ist das Gesicht (siehe
tecken Sie das Kabel an den Sensor. Achten Sie darauf, das es nur in eine Richtung in Ziehen Sie danac wle I
die weiße Buchse passt! Stecken Sie anschließend die Schrauben von vorn durch die Abbildung 8.83)!
seitlichen Löcher des Gesichts, und halten Sie diese fest. Wenden Sie das Gesicht, und
stecken Sie das zwe ite Acrylteil auf die Schrauben (siehe Abbildung 8.81). Achten Sie
dabei auf die richtige Seite der Aussparung, die vom »Mund « weg zeigt.

----
Abbil dung 8.83 Das fertige Gesicht mit Sensor

Abbildung 8.81 Stecken Sie das zweite Acryltei l auf die Schrauben .

Stecken Sie den Sensor so auf die Schrauben, dass die Buchse auf dem Gesicht vom
Checkliste
Mund weg zeigt. Fixieren Sie anschließend den Sensor mit den zwei Muttern (siehe
Abbildung 8.82).

Abbildung 8.82 Der gesteckte Se nsor. Eine Mutter ist bereits verschra ubt. -- - . - zur Montage des Kopfes
· Teile
Abbildung 8.84 Die

317

316
H_alten Sie den ~o bo terkopfmit sein em Ha ls so auf das Rad oder Kreu . Drehen Sie den Roboter so, dass er mit der geraden Seite (>~ hin ten«) zu Ihnen zeigt (siehe
Locher sehen konnen (siehe Abbildung 8 _85 ). z, dass S1e dessen
Abbildung 8.87).

Abbild ung 8.85 Der Robote rkopf kurz vor der Mo ntage

Schrauben Sie den Kopffest (siehe Abbildun 8 86 .. .


dem Schraubendreher auf d R d g · ). Drucken Ste dabei nicht so stark mit
as a oder das Kreuz. Es ist meist sehr biegsam.

Abbildung 8.87 Kurz vor der Montage des Motor Shields

Stecken Sie das Motor Shield auf das Arduino-Board (siehe Abbildung 8.88). Ad1ten ie
darauf, dass die Kontakte exakt in die Buchsen gesteckt werden und kein Stift über teht.
Achtung: Oie Stecker des Motor Shields verschwinden dabe i n icht vonständig in den
Buchsen .

Abbildung 8.86 Festsch raube n des Kopfes

8.2.20 Das Arduino Motor Shield


Für den nächsten Schritt benötigen Sie fo lgen d e Tetl. e:

II II II II II II 11 11 11 11 II
II II II II II II II
Checkliste
~ die Roboterolattform
ein Arduino Motor Shield
Abbildung 8.88 Montage des Motor Shields - hu cke pack auf dem Ard uino
8 .2.21 Die Spannungsversorgung und Motorkabel
Stecken Sie die schwarze Leitung des Batteriehalters in die Buchse GND des Motor
Für den nächsten Schritt benötigen Sie folgendes Tei l:
Shield s, und ziehen Sie die Schraubklemme fest (siehe Abbild ung 8.91).
n u u n II II II II II H N II
Che c k li s t e
~ die Roboterplattform

S~ecken ~ie die rote Leitung des Batteriehalters in die B


ziehen SJe die Schraubklemme ~ t ( . h . uchse Vin des Motor Shields, und
1 es sie e Abbildung 8.89).

Abbildung 8.91 Verbinden der Masseleitung (»Minus«)

Do ppelte Kont rolle hält besse r!


I•
Ko nt rol lieren Sie unbedingt noc h einma l das rote und sc hwa rze Kabel. Es muss genau
so ausse hen wie in Abbildung 8.91 . Wenn Sie die Drähte versehentlic h ve rtausch en,
kann das Motor Sh ield zerstört we rd en!
Abb ild ung 8.89 Ve rbinden der Plusleitung
Stecken Sie nun die obere Leitung de s linken Motors (von hinten auf den Roboter ge·
I• Vors icht, Kurzsch lussgefa hr! sehen) in die linke Minusbuchse (siehe Abbildung 8.92) .
Achten Sie. beim Stec ke n der Leit ungen unbedm. gt da f d .
aus der L1tze löst. Ein so w· . rau • ass s1ch kein einzelner Draht
. . lnZiger Draht wie in Abb'ld
1 ung 8.90 re1.cht bereits aus um
einen orde ntlichen Kurzschi
uss zu erzeugen ! ·
r-~---=-----

Abbildung 8.90 Acht ung, hier


. herrscht Kurzsch lussgefa hr !
Abbildun g 8.92 verbind en der erste n Motorle it ung {Minus)

320 321
Schritt zum Bot

Stecken
R b . ~...
Sie ans chlie ßend die untere Le itung d es , rn~<en Moto rs (vo h'
8.2.22 Der Servostecker- mit Hack
.
o oter gesehen ) in die linke Plu sbu h se (s1.e 11e Abbildung 8.93). n mten auf den Für den näch ste n Schritt b en ö tigen Sie folgende Teile:
~~~~~--~--

II II II n II II H H U H II II II II
II N II II

Check liste
.., die Roboterplattform
.., etwas Schrumpfschlauch
~ ·~e~i~n~e~n~S~e~i~t~e~n~s~c~h~ne~~~·d~e~r~o~d~e~r~e~i~n~
e~Sc~h~e~r~e~------------------------
• einen sehr kleinen Schlitzschraubendreher
oder ein spitzes Messer
__J ,~e=~~·n~F~e~u~e~r~z~e~U~9------------------------------------------------
• einen Jumper \'Iire

Abbildung 8 . 93 Verb ·ln d en d er zweiten Motorleitung (Pl us)


An dieser Stelle werden Sie einen kleinen Hack 9 vornehmen. Das heißt, Sie werde n
etwas so umbauen und nutzen, wie es eigentlich nicht direkt gedacht ist. Aber der Reihe
Verfah
• ren Sie genauso m·tJ d em rechten Motor· Ste k
zwerte Minusbuchse Verb · d . .
s· d . .
c e n Je Ie obere Leit ung in die nach . Je nach verwendetem Servo kann dieser gelegentlich mehr Strom ben ötigen, als
. 111 en Sie danach die t L . .
buchse. Sch ra uben Siebeid L 't un ere eit ung mit de r zweiten Plus· das Motor Shield an der Servobuchse zur Verfügung stellt. Das kann zur Folge haben,
dung 8.94 . e ei ungen fest. Das Ergebnis sieht d a nn so aus wie in Abbil· dass die Stromversorgung kurzzeitig zusammenbricht und das Ard uino-Board sich neu
startet (Reset). Aus diesem Grund lösen Sie jetzt die Plusleit ung (rot) des Servosaus d em
Stecker heraus und verbinden sie direkt mit der Stromversorgung des Motor Shields
bzw. Arduinos. Hebe ln Sie dazu m it einem sehr klein en Schraubendrehe r vorsichtig den
Kontakt mit der rote n Leitung des Steckers auf (sieh e Abbild u ng 8.95 ).

Abbildung 8.94 Alle Motorleitungen sind verbund e n.8

Abbildung 8.95 öffnen eines Ko ntakt es vom Servostecker

8 Tipp ·• Dam 1·t ct·Je LeJtungen


· nichts 0 ·· b d' ..
auch d·urc h d en Schlitz . in der Grundplatt
u ere führen
Je Rucks
! ite de s Ro b oters hm
· aus hä ngen, können Sie sie 9 http://de.wikipedin.org! wiki/ Hack

323

322
Ziehen Sie gleich zeitig die Leitung au d
bendreherwieder (s ie he Abb 1"ld ung 8.96).
s em Stecker, un d entferne n Sie den Schrau-

Abbildung 8.98 Der Schrumpfschlauch kurz vor de r Erhitzung

Abbildung 8.96 Ziehen Sie di e rote Leitung


. Erhitzen Sie mit dem Feuerzeug kurz den Schrumpfschlauch, bis er ausreichend
vorsichtig heraus.
geschrumpft ist (siehe Abbildung 8.99).
Schneiden Sie ca. 1,5 cm Sch rump fschlauch ab
ge d .
d . zogenen Stecker (sie he Abbildung 8 97 d, un schieben Sie diese über den heraus·
Je Buchse am Ende noch zu sehen J·st. dun Abbildung 8.98). Achten Sie daraufda s
un gena u mit. d em Schlauch abschließt. •

Abbildung 8.99 Kurzes Erhitzen des Schr um pfschlauchs

Warten Sie danach ein paar Sekunden, bis der Schlauch erkaltet ist! Stecken Sie dann ein
Ende des Jumper Wires in den KonLakt des Servosteckers (siehe Abbildung 8.100). Las-
Abbildung 8.97 0 er hera usgelöste Steckkontakt
sen Sie sieb nicht durch den etwas losen Kontakt irritieren, es sollte ausreichend halten.

324
8 2 23 Der Se nso rstecker .
·· . . . . . d d
Infrarotsensor verbun enen 1ump er Wires nache mander
.
Stecken Sie Jetzt die mit _e m 2 ( . h Abbildung 8.102). In dieser Abbildung Ist
auf das Motor Shield in di e Buchse IN Sie e . .
Rot = Plus, Gelb = Signal und Schwarz= Masse/Mmus.

Abb ildung 8.100 Dergestecke Jumper Wire im Servosteckerkonta kt

Stecken Sie jetzt den weißen Servostecker auf dj e Buchse Ou t --..s des Motor Shields.
Achten Sie dabe i unbedingt auf die richtige Richtung des Steckers! Stecken Sie danach
das freie Ende des Jumper Wires in die Buchse Vin auf dem Motor Shield (siehe Abbil·
dun g 8.101 ).

Achtung: Steckerbe legung des Se rvos beachten!


• Denken Sie daran, dass nicht al le Servos die gleiche Stecke rbelegung und Kabelfarbe
. ld verbundene Se nsorstecke r
Abbildun g 8.102 Der mit dem Motor Shle
haben (s iehe Abschnitt 7.4.2) . Wichtig ist, dass das brau ne oder schwarze Kabe l (M inus)
wie in Abbildung 8.101 von der oberen schwarzen Buchse weg zeigt. Die mittle re Leitung
8.2. 24 Finale : Die Räder
muss die ora nge oder ge lbe Leitung des Servos sein (PWM-Signal). f I nd
. mm enbau Ihres Robol
Für den letzten Schritt be im Zusa
Teile:

II II II II II II II II II II II II II II II II

Checkliste

.~z:w:e~zweii~R:ä:Kreuzsc
4

d~e:r::===-~~~::~~:-----=========================
hlitzschrauben, 6 mrn
. · Offn
Roboters ge nauer: Schauen Sie in die .. ung ..ct ·l s·e
.I
gleich
Betrach te n Sie em Rad des s· bei·m Stecken darauf dass das Rad nchtig herum
k Ach ten te ' . 03)
auf den Motor stec en. . . k' e Aussparung passt (si he Abbildung 8.1 .
Ab bild ung 8.101 Der Servostecker, verbund en mit dem Motor Shield .
gesteckt wud un g d enau m d1e ec 1g

327
326
Das Gesamtergeb ni s sollte nun ungefcihr so aussehe n wie in Abbildung 8.105 und Abbi l-

dung 8.106.

Abbildu ng 8.103 o·le Inne nseite


. eines Rads für lh ren Robote r
Abbildung 8.105 Eines der montierten Räder auf dem nun fert igen Roboter
Fixieren
mit dem Sie das
· Rad mit d Schraube (s iehe Abbildun
zweiten Rad. Es isterdabei ga 1 g 8.104) . Verfahren Sie genauso
nz ega , welches Ra d an welche Seite montiert wird.

Abbildun g 8.104 Festsc hraube n des Rades Abbildung 8.106 »Geschafft!«


Glü ckwunsch, sie haben es geschafft! Fertig ist lhr eigener Arduino-Roboter!

328
8.3 Alles bereiP· _ E'Jn paar Tests Strom. wenn keine Akkus eingelegt sind. Das ist aber nicht weiter schlimm : Schließen Sie
in diesem Fall ein Netzteil an die Stromversorgungsbuchse (Hohlstecker) des Arduino an
In diesem Abschnitt werden Sie .
Ihrem Roboter alles korrekt ver:~~~:~:tTue~~s emwandfrei
~urchführen,funkt
um sicherzugehen
. . , dassauf
oder legen Sie Akkus in das Batteriefach. Falls sich der Servo gar nicht dreht, prüfen Sie, ob
IOnJert. aUe Leitungen korrekt verbunden sind (siehe Abschnitt 8.2.22). Prüfen Sie auch. ob das
Motor Shield korrekt auf dem Arduino Board steckt. Falls Sie vielleicht das Motor Shield
8 .3.1 Stromversorgungstest falsch gesteckt haben (zum Beispiel um einen Pin versetzt in der Buchse des Arduino),
trennen Sie die Stromversorgung und stecken dann das Motor Shield korrekt. Prüfen Sie
I• Vorsicht: Nicht den Rob ot er wegfah
»Bocke n« Sie d R
1
ren assen!
als Letztes, ob die schwarze und rote Leitung der Stromversorgung am Motor Shield rich-
tig verbunden sind. Sehen Sie ebenfalls nach, ob der extra Stecker für die Stromversor-
en oboter »auf« ind .
le n, sodass die Räd
e~ . ' em Sie ihn zum Beis .
nicht durch eine v Sich fre i drehen können . Das soll P'_ehlauf ei n klein es Holzteil stel·
onge Soft SIC erstell d
gung des Servos richtig steckt.
Tisch zu fahren , obw hl ware oder irgendein e Feh lfun kf en, assder Roboter
o er per Kabe l mit Ihrem C Ion versucht, einfach vom
ompute r verb unden ist 8.3.3 Sensortest
Übertragen Sie jetzt das Programm Roboter_ SensortesUno auf Ihren Arduino. Wenn es
Verbinden Sie nun d en Arduino
E
.
nde von Kapitel7, »Los eht' ,_ per USB-Kabel mit Ihrem Com . . übertragen wurde, sollte sich der Servo nicht mehr bewegen. Stattdessen blinkt die LED
Software Blink . g s. Erste Praxis « ver .. puter. Falls SJe es am auf dem Arduino-Board im Sekundenrhythmus. Bewegen Sie nun langsam die Hand in
y.mo auf Ihr A d · ' saumt haben ··b
bewegen und nurd· r umo-Board. Als Ergeb . 'u ertragenSie jetztdie Richtung lnfrarotsensor. Oie LED sollte immer schneller blinken. je näher die Hand am
teLEDaufd ms sollte s· h .
erkennen da J·a d M em Arduino blinken D . tc . mchts am Roboter
. as J otor Sh . ld . as Ist vielleicht Servo dran ist (siehe Abschnitt 7.2.4 ).
ganz gut sehen. te aufgesteckt ist. Sie könn en es aberetwas schwierig
von der zu
Seite aus

Mögliche Feh lerque llen


Wenn die LED bei Annäherung der Hand zum Sensor nicht sehneUer blinken sollte, ist
83 ·2 Se rvot est
der Sensor wahrscheinlich nicht korrekt angeschlossen. Prüfen Sie, ob er auf der richti-
Zum Testen des Servo .. b
Arduino-Board · Al s Ergebnis · d Sie gleich dieS ftw are Robot s
s u ertragen 0
gen Buchse steckt und ob die
Reihenfolge der einzelnen Leitun g korrekt ist (siehe
dig vo n rech ts nach l. k wu sich der Roboterkopf h . er_ ervotest.ino auf das Abschnitt 8.2.17). Möglicherweise sind auch die einzelnen Leitungen nicht korrekt mit-
m s und zurück. m und her bewegen - vollstän- einander verbunden. Dies können Sie mit einem Messgerät prüfen (einem sogenann-

ten Durchgangsprüfer).
I• Vorsicht : Gefa hr d er Se rvobesch .. d'
Sobald Sie die S ft .. a lgun g!
o ware ubertra
nach rechts- eventuell zu w . ' ge n haben, dreht der Servo se . 8.3.4 Mot o rtest
nicht ga nz mitt' eJt. Da Servos nicht II . hr we Jt na ch links und Als Letztes werden Sie jetzt die Motoren testen. Denken Sie daran, dass Sie auch dazu
8 auf der Serv
1 di A d . owelle platz iert wurde k a e gle1ch sind d d
eim Bewegen an o er er Kopfvielleicht den Roboter so aufstellen. dass die Räder sich fre i in der Luft drehen können, damit er
b e r Ulno PI t' , ann es pass ·
gung vom Ardu ino (US - a lne stößt. Trenn en s· lere n, dass der Kopf nicht vom Tisch fährt oder irgendwo herunterfällt. übertragen Sie jetzt das Programm
B Netzte'! d le dann sofort . d
an. Passen Sie dort d. ' ' o er Batterien) und h Je e Stromversor- Roboter Motortest.in o aufdas Arduino-Board. Sobald es übertragen ist und der Roboter
b . Je maximal , sc auen Sie s· h d
estlmmen den Wink I d en Werte für SERVO LINKS Je en So urcecode mit aus;ei hend Strom (Netzteii/Batterien) versorgt ist, passiert Folgendes:
e , en der Servo max ima l Ii k- und SERVO- RECHTS an. Diese
n s undrechts anfährt.
1. Beide Räde r stehen zwei Sekunden still.
2. Das rechte Rad dreht für zwei Sekunden vorwärts (von hinten, also in Fahrtrichtung
Mögliche Fehlerquell en .
auf den Roboter gese hen).
SFalls der Servo ext rem ruckelt d .
~ e: Sichaus.
t romverso rgung des USB-Portsnicht seltsam
Denn unruhig
d' bewegt. 10'reicht
.
vermutli ch die Ein wenig .,ziuern« des Servos ist in dieser Preisklasse isLdurchaus normal.
330 lese versorgt d en ganzen Roboter mit 10
331
3. Beide Räder stehen zwei Sekunden still.
4. Das linke Rad dreht für zwei Sekunden vorwärts.
Kapite19
5. Weiter mit dem ersten Schritt. l)vive ~e
Übrigens: Welcl1e Motorleitung gerade wie angesteuert wird, sehen Sie auch anhand der . . R boter zum Leben erwec kt und erste Fahrstunden
. .
Aufgeregt? ln diesem Kaptte l wtrd Ih r o . Fahrt mit automatischer Hmderms-
LEDs A und B neben der blauen Buch se auf dem Motor Sh ield.
machen! Oan ach kommt das volle.. Programm .
erkennung un d Ausweichmanovern .
Möglich e Feh lerque llen
Folgende Fehler könn ten beim Motortes t auftreten :

." Nichts dreht sich? Überprüfen Sie die vier grünen Drähte an den Motoranschlusslei-
tungen +und-. .t
.. di durch die Gegend fahren. Dami
I we it · Ihr Roboter soll selbststan g . al die Grundrichtungen zu
.". Es dreht sich immer nur ein Motor? Überprüfen Sie, ob die Leit ungen am nicht dre- Nun ist es a so so . St.eJ·etzt erst emm '
das am Ende einwand fret· kl a ppt, lernen ·
henden Motor richtig verlötet sind. Vielleicht hat eine davon eine kalte Lötstelle
(siehe Abschnitt 5.6.3). Vielleicht ist in den blauen Mo tor-Shield -Buchsen auch einer programmieren .
der Drähte nicht richtig abisoliert und hat deshalb keinen Kontakt.
... Die Motoren drehen extrem langsam? Versorgen Sie den Roboter mittels Netzteil
9 1 Roboterchoreografie un
oder Batterien m it Strom- die USB-Schnittstelle kann nicht sehr viel Strom liefern.
. . bestimmter fe tgelegter Be' hnitt 7.
.". Einer oder beide Motoren drehen sich rückwärts statt vorwärts? Tau schen Sie die Eine Choreografie ist beim Tanzen ~nboter durchführen Ia en. In . .,I h
grünen Leitungen des falsch drehenden Motors an der blauen Buchse gegeneinander genau diese n sollen Sie nun Ihren : toren «, haben Sie bereits gel rnt, Wl in n
(+und -). t uerung von o
muss hier weg! - Ans e . ld ansteuern können.
• Beim Start des Programms dreht sich der linke Motor zuerst und nicht der rechte? Motor mithilfe des Motor Shle s
Dann haben Sie wahrscheinlich die Lei tungen für Motor A mit Motor B vertauscht.
Sch lagen Sie in Abschnitt 8.2.21 die richtige Zuordnung der grünen Leitungen nach,
und korrigieren Sie diese. 9 11 Gr undrichtu nge n ·· rec htshemm u nd
orwärts rückwarts,
.. d" Grundrichtungen v , eh dem Einschalten
· tzt um Je d den Roboter na
.". Sie wissen nicht mehr, welcher Motor richtig dreht bzw. mit welchem es losging? Als Erstes geht es Je . Sie ein Programm. as ··rrs fahren lässt. Dann
h Sehretben k de lang vorwa
Der Roboter startet das Programm immer mit dem rechten Motor (in Fahrtrichtung linksherum dre en. .. d danach eine Se un . . Sekunde lang rück-
zwei Sekunden warten lasst un l n und anschließend Wieder eme
auf den Roboter gesehen). Starten Sie gegebenenfalls da s Programm durch Betätigen
soll er für zwei Sekun d er1 an ha te
des Reset-Tasters neu. Dann haben Sie einen definierten Startpunkt zum Testen.
wärtsfahren . U n d so weiter.

8.4 Fazit .. kwärts .


· t7 WissenSteno eh · wte
· es funk-
Vo rwärts und ruc e Vorstellung, was zu tun ts . . t wt"rklich einfach. Als
. . ·ne genau h denn es tS
Haben Sie bereitS el . !leicht noch einma l kurz nac , d finieren . Das Warten geht
tioniert? Denken Sle.vle tsprechenden Pins als Ausgang ~ en Sie nur die richtigen
Ein weiteres langes, aber dafür wenig theoretisches Kapitel ist geschafft. Sie haben Ihren
Arduino-Roboter voll einsatzfähig vor sich stehen und ihm Leben eingehaucht! In Kapi- .. Sie die en f h1 Ansonsten muss .
Erstes mussen k nnten delay-Be e . . . r·· die Motorrichtung. Dte
tel 9, ))Drive me crazy?- Die erste Fahrstunde «, wird es darum gehen, ihn mit etwas . dem be a t en· die Pms ur . I
natürlich mJt . Jd auf HIGH oder LOW se z . H. empfehle ich, erst emma
»lntelligenz« auszustatten. Schließlich soll er doch zukünftig selbst Hindernisse umfah- Pins des Motor Shle s n sollten Sie auch festlegen . ter
ren können. . . der Motore
Geschwindigkeit

333
332
9.1 Ro oterc oreo

mit einem geringen Wert wie 128 und ni ht gleich mit 255 als Ma x imalwert zu starten.
delay( 2000) ;
Dafür benötige n Sie wie in Abschnitt 7.5.3 wieder PWM . Bevor Sie ich die fertige Lösung
in Listing 9.1 anschauen, versuchen Sie es erst selbst zu schreiben! Es ist eine alte, aber I I beide Motoren "vorwärts " .
wahre Weisheit: Sie lernen mehr, wenn ie es nicht gleich nachlese n. Den n beim Ent- digitalWrite(ri chtungA, HI GH ) ~
wickel n eigener Lösungen passieren a uch Fehler, und durch das Behebe n dieser Fehler digit alWr i te(r i chtungB, HIGH) ,
bleibt mehr Wissen hängen. Ich sp rech e aus eigener Erfahrung.
.. " . Los geht ' s .1
I I "Bremsen l osen
int richtungA = 12; II Richtung Motor A
int richtungB = 13 ; digitalWrite (bremseA , LOW);
II Richtung Motor B digit a1 Write( bremseB, LOW) ;
int pwmA 3;
II Geschwi ndigkeit Motor A
i nt pwmB 11;
int bremseA
II Geschwindigkeit Motor B II 1 Sekunde fah ren ...
g·)
II Bremse Motor A delay( 1000) ;
int bremseB = 8;
II Bremse Motor B
II "Bremsen anziehen " (Motoren aus)
II Geschwindigkeit der Motoren.
II 255 ist der Maximalwert! digitalWr i te (bremseA, H I GH) ~
int geschwindigkeit = 128; digitalWri te( bremseB, HIGH),

void setup() II 2 Sekunden stehen


{ delay(2000) ;
II Pins für Motorenrichtungen als Ausgang 11 bei de Motoren "rückwärts ".
pinMode(richtungA , OUTPUT);
digita l Write(richtungA , LOW) ~
pinMode(richtungB, OUTPUT);
digitalWrite(ric htungB , LOW),
II Pins für Bremsen als Ausgang .. " · Los geht ' s!
11 "Bremsen l osen
pinMode(bremseA, OUTPUT);
pinMode(bremseB, OUTPUT) ; digitalWr i te (bremseA, LO:) ~
di gital Write(bremseB , LO ),
II
Geschwindigkeiten setzen
11 1 Sekunde fahren
analogWrit e(pwmA, geschwindigkeit);
delay(1000) ;
analog~Jrite(pwmB , geschwindigkeit) ;
I I "Bremsen anzi.ehen" (Mot oren aus)
II "Bremse anziehen " (Motoren aus) . (bremse A' HIGH);
d. 'talWrite
II Man weiß ja nie ... Igl HIGH).
digitalWrite(bremseB , '
digitalWrit e(bremseA, HIGH) ;
di gita lvJr ite ( bremseB, HIGH) ;
} } "rts und rückwärts fah ren.
L. t ' 9 1 >>Choreografiel.ino« lässt den Bot vorwa .I
ts mg · th lt Der we entltc 1
void l oop() . b k nn ten Bef hl en a 11 .
Das Programm soll te kein fürSte un e a . . s·
rigen Kap il ln ist I dtgh h, dass l hi r zwei Mol r n
{
über den vo . I.
Unterschied gegen . zum Beispi I an di r t II tm .
II 2 Sekunden stehen gleichzeit ig anste uern. wt
9 Drive me crazy?- Die erste Fahrstunde

II beide Motoren "vorwärts " Drehrichtu ng


Drehung der Räder des Roboters
digitalWrite(richt ungA , HIGH) ;
digitalWrite(richtungB , HIGH ) ; links herum
rechtes Rad vorwärts (HIGH)
linkes Rad rückwärts (LOW)
II "Bremsen lösen ". Los geht 's!
rechts herum
digi t alWr ite(bremseA, LOW ) ; rechtes Rad rückwärts (LOW)
digita l Write(bremseB , LOW) ; linkes Rad vorwärts (HIGH)
BI" k in Fahrtrichtung)
Nun könnten Sie vi elleicht denken : ))Aber dann sta rtet ja erst der eine Motor und Tabelle 9.1 Drehrichtungen des Roboters ( JC
anschließend der andere? « ja, das ist korrekt. Es pas iert ta tsächlich nicht gena u gleich- .. .
notwendig die Sie in Listing
. . 1 . d dazu die Anderungen , . .
zeitig. Aber der Unterschied ist nicht wahrnehmbar, da Ihr Arduino die Befehle extrem Im Sourcecode aus Llstmg 9. sm h R boterfährt im Kreis ... « smd hier
.. d Kaste n »1 r 0 J' . ·
schnell hintereinander ausführt. 9.2 sehen. Die Anderungen aus em . s· it unterschiedlichen Geschwmdig-
. d Vorteil, dass te m
bereits eingearbeltet. Das hat en
+ Ih r Robot e r fäh rt im Kreis statt geradeaus? keiten für die Räder arbeiten können.

Es kan n sein, dass Ihr Roboter nicht exakt geradeaus fährt. Das kann gut sein und 11 "linksherum" drehen
kommtaufgrundverschiedener Taleranzen auch bei hochwe rtigeren Motoren vor. Die· digitalWrite(richtungA, HIGH) ;
ser Fehler lässt sich aber ganz gut korrigieren : Lassen Sie einfach die Motoren mit unter· digitalWrite(richtungB , LOW) ;
schiedlichen Geschwind igkeiten drehen! Wenn Ihr Roboter also zum Beispiel immer
eine le ichte Rechtskurve fährt, lassen Sie den linken Motor etwas langsamer drehen. II "Bremsen lösen" . Los geht ' s!
Fügen Sie dazu in Listing 9 .1 zu Beginn eine weitere Variable für die Geschwindigkeit digitalWrite(bremseA , LOW) ;
hinzu. Ändern Sie die Zei len zum Beispiel wie folgt : digitalWri te(br emseB, LOW) ; d h
.. d Robote r um sich selbst re en.
int geschwindigkeitA = 128; II rechter Motor . ·· d
Listing 9.2 Eine kle1ne An eru ng lasst en .
int geschwindig keitB = 127 ; II linker Motor< < < langsamer! t .. gt den Namen Choreogra.fie2.mo.
.. dioen Software ra . -
Zusätz lich müssen Sie im set up noch diese Anweisungen anpassen : Die Download-Datei mit der vollstan o R boter und probieren Sie es aus. Expenm~n
ana logWrite(pwmA, geschwindigkeitA ) ; II rechter Motor
° '
Übertragen Sie das Progra mm auf Ihren Ändern Sie den Code so, dass der Roboter sich
"t dem Programm. s· ·h so um dass der
an a logWrit e(p~~B , ges chwindigkeit B); II linker Motor tierenSie ein wenig mt . hts dreht. Oder schreiben te 1 n ·. .
um ca . go• nach links oder nach rec l"nien. Kurvenfahrten erreichen Sie, mdem
Das war's. Testen Sie sich langsam an einen passenden Wert heran, bis Ihr Roboter eini- JT hrt oder Schlangen I d . ht en ansteuern.
Roboter ein Quadrat a · . . . h n Geschwindigkeiten un Rtc ung
Sie die Motoren mit unters~hicdh\,~enn Sie sich nicht alles selbst ausdenken wollen,
germaßen geradea us fä hrt. Zum besseren Testen empfiehlt es sich noch, die Fahrtdauer
zu verlängern. De n vollständigen Sourcecode dafür finden Sie als Download unter dem
Lassen Sie lhrer Fantasie frelen Lahu :tten zwei weitere Beispiele zum Download.
Namen Choreografiel_links_langsamer.ino. . . f I enden Absc 111
finden Sie m den g °
. . kzack fahren lassen .
Drehung nac h links und Dreh ung nach recht s 9 1 2 Den Roboter tm Ztc . das den Roboter im Ztckzack
.. .. bitte jetzt em Programm, . .
Vermutlich gehört nicht viel Fantasie dazu, das vorige Programm dahingehend zu Schreiben Sie als weitere Ubs~n~ndem Sie ihn zum Beispiel im Sekundenrhythmus wte
änd ern, dass Ih r Roboter sich rechts- und linksherum dreht. Damit sich Ihr Roboter erreichen te,
fahren lässt. Das
dreht, müssen die Ränder sich einfach in gegensätzliche Richtungen drehen. fo lgt fahren lassen:

337

336
9 Drive me crazy?- Die erste Fahrstunde

. wollen schauen Sie sich jetzt die


1. geradeaus fah ren ·e lieber gleich die fertige Funktwn nutzen ,
wenn S'
2. kurz stehen bleiben Lösung in Listing 9.3 an .
3. 90° nach links drehen
II Lässt den Roboter drehen .
4. geradeaus fahren
II false = linksherum
5. kurz stehen bleiben II true = rechtsherum
6. 90° nach rechts drehen void drehen(boolean richtung)

Und so weiter. . die der Roboter sich dreht .


II Dauer ln ms ' . ht man ca goo
II Bei genau abgestimmter Zeit errel c .
int drehdauer = 600 ;

if (richtung == false)
{
11 "linksherum" drehen
digitalWrite( r icht ungA, HIGH);
digitalWrite (r ichtungB , LOW);
}
else

11 "rechtsherum" drehen
digitalWr i t e(richt ungA , LOW);
digitalWrite( richt ungB, HIGH) ;
}

.. eht' s!
II "Br emsen lösen · LosLOW)
g
.
Abbil dung 9.1 So sollte die Fahrt des Roboters aussehen. digita lWrite(bremseA , '
LOW) .
digit alWrite(br emseB , '
Beginnen Sie beim Schreiben Ihres Programmsam besten damit, das s Sie eine Funktion
schreiben, die den Roboter um 90° drehen lässt. Sie können zwei getrennte Funktionen I I dr ehen . · ·
ohne Rü ckgabewert (void) schreiben oder aber eine Funklien (siehe Abschnitt 6.9 , delay (drehdauer) ;
»Funktionen «), die den Roboter mittels Parameter rechts- oder linksherum drehen (Motoren aus)
lässt. Bevor Sie sich das fert ige Programm anschauen, hier noch ein Hinweis zu den 90': II "Bremsen anziehen"
·t (bremseA , HIGH);
Der Roboter ist nicht so präzise, dass Sie diese exakt hinbekommen werden . Es kommt digitalWrl e HIGH);
. (bremseB,
auch n icht so genau darauf an. Machen Sie es sich ganz einfach, und lassen Sie ihn für digitalWnte
eine bestimmte Zeit links- oder rechtsherum drehen, bis die gewü nschte Richtung } . h um ca . 900 drehen.
. 1.. t den Roboter SIC
erreicht ist. Experimentieren Sie mit der Drehdauer, b is das Resu ltat Ihnen gefällt. . Funktion ass
Listing 9.3 Diese

339

338
nve me crazy?- Die erste Fahrstunde

Die restlichen Befehle sollten S. b . . 9.1.3 Den Roboter in einer Spirale fahren lassen
ttn~
chen Anweisungen aus List" J a er wtrkhch selbst sc hreiben können . . mplizi rter m La. n
als Download mit deJn D 9.1 , nur anders kombiniert. Das fertige P. Es smd die glei- jetzt mit
Das war doch gar nicht chwer. Wie, är fährt. I. wi b i I r
a emamen eh rogramm ·b
n.'
Fun:~i
Programm ausgiebig Funktion oreogmfie3.ino. Übrigens, ich habe . gt te; Sie den Roboter im ' reis fahr

a~s ~lnenl~<) .
Da rum sieht die loop auch nur :: kverwendet (siehe Abschnitt 6.9, » dtesem Spirale in Abbildung 9 . ~.
genz< steckt hier in den Funktionenurz wte m Listing 9.4. Die eigentliche
eme loop schö n u.. berstchtli
. ch, was? gera
Auß eaus,
d drehen und bremsen. Das macht doch
nte h·
anderen Programmen wiederverwenden ~ em lassen sich die Funktionen prima :o
auch Fehler. . as spart nicht nur Zeit• son d ernverhindertn

void loop()
{
II 2 Sekunden geradeaus fahren
geradeaus( 2000);

II kurz warten
delay(lOOO) ;

II linksherum drehen
drehen(LOW) ;
Abbildung 9.2 Auch auf die Gefahr hin, dass ihm schwindelig wird ...

II kurz warten ... Haben Sie schon eine Idee, wie Sie diese Fahrweise in einem eigenen Programm umset-
delay( lOOO); zen könnten? Falls nicht, gehen Sie zu dem Abschn itt 9.1.1 . »Grundrichtungen «, und dort
in den Unterabschnitt »Vorwärts und rückwärts « zurü k, wo es um in präzi Gerad -
II 2 Sekunden geradeaus fahren ausfahrt ging. Dort ist beschrieben. wie Sie eine un erwü n chl Kurv n hn ll r _ R b •
geradeaus( 2000); ters verhindern können. Auf die gleiche Art könn n Si naLürli h u h in Kurvenfahrt
herbeiführen: Ein Rad mu ss sich langsamer dreh n als d s anc.l r . nc.l um d n R 11 l r
I I kurz ~1 arten
delay( lOOO) ; - .. eine Spirale wie in Abbi ldung 9.2 fahren zu lassen, mü ss n Si iJ r eh in R cl Ihr
Roboters mit der Zeit immer langsamer drehen lass n als das and r . So infa h g ht
das. Die fertige Lösung will ich Ihnen hier nicht vorenthalten. Sie finden das dazugehö-
II rechtsherum drehen rige Programm in Listing 9.5 und als Dateinamens Choreograjie4.ino zum Download.
drehen(HIGH) ;

int richtungA = 12; // Richtung Motor A


II kurz warten . ..
int richtungB ~ 13 ; II Richtung Motor B
delay(lOOO) · int pwmA = 3; II Geschwindigkeit Motor A
} )

int pwmB = 11 ; II Geschwindigkeit Motor B


Listing 9.4 Eine aufgerau
.. mte "loop«- Fu nktion i nt bremseA 9; II Bremse Motor A
int bremseB 8; II Bremse Motor B

341

340
II Geschwindigkeit der Motoren.
I I 255 ist der Maximahvert! if (geschwindigkeitß > endGeschwindi gkei tß)
~nt geschwindigkeitA = 148 ; II rechter Motor
{
lnt geschwindigkeitB = 147 '· 11 11n
. ker Motor II Geschwindigkeit Motor B um 1 verringern
geschwindigkeit B-- ;
~I Zielgeschwindigkeit linker Motor
1nt endGeschwi ndigkeitB = 40 . II Geschwindigkeiten setzen
analogWrite(pwmB , geschwindigkeit B) ;
void setup()
{ II warte ein klein wenig , damit die Fahrtrichtung kurz beibehalten wird
I~ Pins für Motorenrichtungen als Ausgang delay (150);
p~nMode(richtungA , OUTPUT) ; }
plnMode(richtungB , OUTPUT); }

I~ Pins für Bremsen als Ausgang II Lässt die Bremse anziehen oder lösen .
plnMode(bremseA, OUTPUT) ; II true = Bremse angezogen
pinMode( bremseB , OUTPUT); II false = Bremse gelöst
void bremsen(boolean aktiviert)
II Geschwindigkeiten setzen {
analogWrite(pwmA, geschwindigkeitA)· if (aktiviert == true )
analo gw
rl·t e (pwmB , geschwindigkeitB) ;' {
II "Bremsen anziehen" (Motoren aus)
II "Bremse anziehen " (Motoren aus) digitalWrite(bremseA, HIGH) ;
II t-\an weiß ja nie . .. digitalWrite(bremseB , HIGH) ;
bremsen(true ); }
else
II 2 Sekunden stehen . Zur Sicherheit . .. {
delay( 2000 ); I I "Bremsen lösen " . Los geht ' s!
digi ta lWrite (bremseA, LOW) ;
II fahre vorwärts digitalWrite(bremseB , LOW);
d~g~talWrite(richtungA , HIGH); }
dlgltalWrite(richtungB , HIGH) ; }
Listi ng . »Choreografie4.ino« lässt den Roboter eine Spira le fahren .
II "Bremsen lösen " 95
bremsen( false ); Nun können Sie Ihren Roboter in verschiedenste Richt unge n fa hren lassen. Experimen-
}
. . ·t !Jen Choreografie-Programmen etwas herum! Lassen Sie Ihren Roboter
tteren
. ll . h m1
S1e . a 1 ru··ckwärts im Zickzack fa hren. Oder lassen Sie ihn beim Fahren einer
vte. etc t ewma
. h ·t ·g immer schne ller werden. So bekommen Sie ein gutes Gefühl dafür,
void loop() Sptra 11
1e g
. . h Th Rzeboter in welcher Fahrsituation verhäl t. Aber passen Sie auf, dass er dabei
1etc
{ WJe SlC r 0
nirgends anstößt.
343
342
9 Drive me crazy?- Die erste Fahrstunde

. . auch wenn Sie eine Straße überqueren wollen: Sie


9.2 Hindernisvermeidung herbewegen. Das Gleiche machen Ste Ia d :.f ob ein Auto kommt. Sobald der Sensor
. d h rechts un pru en,
schauen nach lmks un nac "h . talsder in der Software hinterlegte Entfer-
Nachdem Sie nun in der Lage, sind Ihren Roboter in alle möglichen Richtungen fahren . . d . rkennt das na er IS . . .. h
später also em Hm erms e • . d . ht'gste Vorgang. Erst dann wtrd tm nac s-
zu lassen, wird es höchste Zeit, dass er lernt, Hindernissen auszuweichen. Es ist offen- Rbt -daststerwtc ' ..
nungswert, stoppt der o o er . besten ausweicht. Denn es tst Ia am
sichtlich, dass Hindernisvermeidung aus verschiedensten Gründen sinnvoll ist. Zum ten Schritt geprüft. in welche Rtchtu.ng ~r am d ht wo er kein Hindernis »sieht«,
. h kt" ·n d1e Rtchtung re · -
einen sollte der Roboter bei seiner Fahrt nicht beschädigt werden. Er fährt zwa r nicht so sinnvollsten, wenn er stc a tV ' . h b . der er sofort wieder stoppen würde, wet1
große Geschwindigkeiten, dass er bei einem Aufprall gleich einen Totalschaden erleidet. . R' ht g auszuwelC en, et llt
anstatt in irgendeine tc un . h Sie diesen Vorgangdargeste :
Aber auch, wenn er langsam genau in eine Ecke fährt, so drehen die Motoren immer dort ebenfalls ein Hindernis ist. In Abbüdung 9.4 se en . .
weiter und verbrauchen viel Strom. Auch drehen dann die Räder die ganze Zeit durch . dernis erkannt (gestrichelte LJme).
1. Die Stuhlbeine werden als Hm ' d h rechts (180.).
und das Profil kann dadurch ab nutzen oder das Getriebe der Motoren Schaden nehmen. r k eh vorne un nac
2. Der Roboter blickleinmal nach 111 s, na
Der Roboter könnte aber auch eine kleine Blumenvase umstoßen, und das Wasser
würde sich auf dem Fußboden verteilen. Oder die Katze schläft in der Ecke und der 3 Rechts sieht er die Wand (roter Pfeil). .
· . ( üner Pfetl).
Roboter scheucht sie unsanft auf. Bei einem größeren Roboter könnten in einer Woh- 4. Er weicht anschließend nach ltnks aus gr
nung die Türen oder Möbel verschrammt werden, oder er fährt einem Ihrer Gäste über
den Fuß. Wie erklären Sie das der Versicherung?

9 .2.1 Wie funktioniert Hindernisvermeidung?


Das Prinzip der Hindernisvermeidung für Ihren Roboter ist ganz einfach, und Sie haben
es bereits in Abschnitt 7.4.2 als Stuhlbeinproblematik kennengelernt Sehen Sie sich zur
Erinnerung noch einmal Abbildung 9.3 an.

i
. ht nach links aus (grüner Pfeil).
R0 boterweiC
Abbildung 9.4 Der

· die Praxis
9 2 2 Umsetzung m d m Anwender Florian' der Roboter-
Abbildung 9.3 Erkennung eines Stu hlbeins als Hindernis . . .. h en Arduino-Roboter wur e vo . . d twas anders als bei
Oie Software fur I r . kelt Daher ist auch der Stlltm Co e e
. t Makers entwJc .
Comrnuntty Bo
Im ersten Schritt gilt es, das Hindernis zu erkennen und den Roboter nicht einfach nur
geradea us schauen zu lassen. Dazu wird er später seinen Kopf mit dem Sensor hin - und - - - -votma - kers.de/mitglieder/Jlorian/
I http://WWW.
345
.- leerste Fahrstunde

sehen Namen arbeitet, die Kommentare aber deutsch sind. Ersteres soll Sie also nicht
den
rungrestlichen Programmen in d.tesem Buch Ich h b
en vorgenommen. Einm
beschriebenen Vorga d al ~uflhren
ng er Hmdern · .. f
. a e lediglich ein
Roboter übertragen füh ·t
,
~aar .
klemere Ände·
r Slege naud
weiter stören. Der Programmablauf ist wie folgt:
~ Zu Beginn werden diverse Konstantenper Jtdefine festgelegt.
geht's• Laden Sie die Datei R b
Ihren Roboter D h
rspru ung und -vermeidun d en zuvor
o oter_ Software.ino herunter d .. . g urch . Okay, los ~ ln der setup-F unktion werden wie üblich die Ein- und Ausgänge bestimmt.
. anac legen Sie Akk
nichts passiert G
. ' un obertragen s·
·us ein und werde 1 re dieseauf ~ Am End e der set up- Funktion wird der Sensor so lange ausgelesen. bis etwas vor dem
· enauer gesagt · Oe R b n eststellen da Sensor erkannt wird (CLOSEST _OISTANCE > Sensor-Wert). Der Roboter wartet also auf
den so. Sobald Siek urz II1re Hand
. vr od oter fahrt nicht los . Das tst
. aus Sich
. ss Ischei nbar
und der Robotec fahrt I U or en Sensor halten, wird d F emitsgrün- die Hand vor dem Sensor.
os. nd das macht er so lange b' . er ahrmodus aktiviert
. h ' Js semeAkk usleer sind ~ ln der loop-Funktion wird zu Beginn immer der Sensor ausgelesen.
' Danach wird die Funktion SeekingPositionWithCloses tDaoger aufgerufen Dort hä \t

+ S1e ab en lh r Zie
· l erreicht I

dSie sind nun im Besitz emes


. . autonome
er selbstständig Hind ernlssen
. ausweicht.
lb
n, seHerzlichen
st zusammengeb
GI uc
·

au t en Arduino-Roboters '
.. kwunsch!
der Roboter an, und der Servo wird einmal von rechts nach lin ks bewegt. Oie Endpo-
sition des Servos wird dabei über den per #define festgelegten Wert SERVO_LEF1

~ bestimmt.

r - - - - -- - Während der Servobewegung wird bei jedem Schritt der Sensor ausgelesen.
,.. Wenn bei einer der Servopositionen ein Hindernis näher dran ist als das zuletzt
gespeicherte, wird dieser wert in MinimumDistance gespeichert. Gleichzeitig wird die
Servoposition in Min imumSer,oPosi tion gespeichert. Dies ist also die Position mit der
»höchsten Gefahr«, sprich: die Richtung, in der ein Hindernis am nächsten ist.
' Am Ende der funktionfährt der Servo an die Position des nächsten Hindernisses und
übergibt die Servoposition an die loop-Funktion.
' Zurück in der loop-Funktion dreht sich der Roboter durch 1urn(R!GKT) nach rechts,
falls das nächste Hindernis lin ks war, bzw. nach links, wenn es rechts war.
' übrigens, in der Funktion Turn steckt noch weitere Jntelligem• ln ihr dreht sich der
Roboter so lange in die perParameterübergebene Richtung, bis der Sensor ein Hin-
dernis misst, das weiter weg als CLOSEST_DISTANCE ist.
• Anschließend fährt der Roboter in der loop-Funktion geradeaus, und der Ablauf

beginnt von vorn.

9.2.3 Der Roboter als Haustier


ln diesem Abschnitt sollihr Robol r s in V rh lt n "nd rn. Er wir i• r., mn
bekommen, das ihn sich ein bisschen wi ein Hau ti r v rhall n 1; L •r ·
Abbildung g .S s·le haben jetzt emen
. autonomen Roboter! Hand zuwenden, wenn Sie diese vor d n Sensor halten - s al würd n i
chen vor ein Hündchen halten und dieses folgt d m I k ren Full •r. Al · r ndl, g-
Wie funktioniert
Ge .. d as Programm genau) könnten s ie dazU das vorang gangene Programm Roboter_Sojtwor.e.ino verwend n
W rne mochte
. ich Ih nen noch e 1.. . . und unter einem neuen Namen spei hem. folgender Ablauf ist gewü mch t
enn Ste sich den Quel!cod e ansehen
r autem, s· Programm
Wie das
werden l' i.m Detatl. funktioniert
' te reststeil en, d ass er zwar mit engli-'

347

346
9.2 Hindernisverme1 ung

1. Der Roboter steht und dreht seinen Kopf (Servo) hin und her.
#define BRAKE _A 9 11 Bremse Motor A
2. Er wartet dabei auf eine Hand vor dem Sensor.
#define BRAKE _B 8 11 Bremse Motor B
3. Sobald eine Hand vor dem Sensor erkannt wurde, stoppt der Servo. #define SERVO 5 II Servo wird an Pin 5 angesteuert
4. Da nn dreht sich der Roboter genau in Richtung der Hand 2.
5. Nun fahrt der Roboter geradeaus (also Richtung Hand). II 255 ist Vollgas . Langsamer fa hren ist bei di esem Progr amm schlauer .

6. Solange die Hand in einem bestimmten Abstand ist (diesen können Sie selbst fest- #define FULL-SPEED ~~~ II Links drehen bei LOW
legen), fahrt der Roboter weiter geradeaus. #define LEFT HIGH II ... und rechts bei HIGH
#define RIGHT ll der Roboter die Hand erkennen
7. Wenn derRoboterdie Hand nicht mehr >>sieht <<(weil sie zu weitweg istoderzur Seite II Ab diesem Wert am IR-Sensor so .
bewegt wurde). hält er an. t KLEINER ist die Hand weiter weg .
II Es
-> Ist der Wer ' f"hr zwischen 50 und 600 .
II funktionieren Sensorwerte unge a
8. Er sollte ebenfalls anhalten wenn er zu dicht an der Hand angelangt ist. Schließlich
#define HAND_DISTANCE 350
könnte es ja auch eine Wand sein, auf die er sonst »bis zum bitteren Ende« zufahrt!
9. Wenn die Hand wieder »weg« ist, soll er erneut mit dem ersten Schritt starten. II Ab diesem Wert am IR- . . ht an eine Wand fährt .
Sensor soll der Roboter st oppen ' damlt er nlc
Dann legen Sie mal los! Es ist sicher nicht gerade die einfachste Aufgabenstell ung. Aber #define TOO_C LOSE 500 f dem Servo links an? Ggf . anpas sen!
II Bei welchem Winkel sto"ßt der Sensor au
Sie haben mittlerweile sehr viel Erfahrung gesammelt und besitzen alle nötigen Pro-
gram mie rken ntnisse. Sie können das! Versuchen Sie es wirklich selbst. Mit etwas #define SERVO_LEFT 45 R boter genau geradeaus . Ggf . anpassen!
II Bei diesem Wert schaut der o
Übung können Sie dieses Programm an einem langen Abend entwickeln. Auch wenn Sie
länger benötigen, macht es mehr Spaß, am Ende selbst auf die Lösung gekommen zu #define SERVO_MIDDLE .. 95 Servo-Sensor rechts an? Ggf. anpassen!
II Bei welchem Winkel stoßt der
sein. Wie immer will ich Ihnen aber auch hier die Lösung zur Verfügung stellen. #define SERVO_RIGHT 180
Schauen Sie sich in Ruhe Listing 9.6 an, und testen Sie die dazugehörige Datei Roboter_
Haustierl.ino m it Ihrem Roboter. Oder vergleichen lhre Lösung mit meiner. t . ngeschlossen!!
II Werte, wenn am Netz ~1 1 'ak ·t während des Drehen
Geht es Ihnen auch so? Empfinden Sie es auch als >>niedlich «, wenn Ihr Roboter sich bei II Sehr langsame Geschwlndlg el
Annäherung der Hand zu Ihnen dreht? Sehen Sie, so einfach ist es, einem Roboter etwas ll#define TURN_SPEED.. S~eim Drehen des Robot r
II Bestimmt die Verzogerung
Menschliches oder in diesem Fall etwas Tierisches beizubringen. Ich habe hier bewusst
ll#define SERVO_DELAY lO
das vollständige Listing aufgeführt, da es oftmals einfacher ist, es in vollständiger Form
vor sich zu haben, um Anmerkungen oder eigene Ideen zu notieren. . mversorgung!!
II Wertebel Akku-Stro . i keit wä hrend des Drehens !
II Bibliothek zur Ansteuerung der Servos II Sehr langsame Geschwind g
#i nclude <Servo .h> 90
IIdefine TURN _S PEE D .. n bei m Drehen des Roboters
II Bestimmt die Ver zogeru g
II Funktion Pin Beschreibung ffdefi ne SERVO_DE LAY 15
#define IR_SENSOR 2
#define DIR A
II Der Infrarotsensor ist an Pin 2 .
II Mit diesem ObJekt . d der Servo gesteuert
w1r
12 II Ri chtung Motor A Servo SensorServo; MIDDLE· II Mittelposition des Servos (geradeaus)
#define DIR_B . t · n = SERVO '
13 II Ri chtung Motor B byte servoPosl 10 - . II Drehrichtung des Servo s
#defi ne PWMA II Variable für den IR-Sensor
3 II PWM Motor A boolean servoRichtung = RIGHT,
#define PWM B 11 II PWMMot or B int sensorVa lue -- o·,

2 Das ist der schwierigste Teil.

349
II Sucht nach einer Hand vor dem IR-Sensor .
II Dreht den Kopf (Sensor) dabei hin und her
II Hand entdeckt. Position zurückgeben
int handSuchen() return handPosition;
{ }
i nt handPosition = 0; }

//----------------~-----

II Erst mal Roboter anhalten 11 Servo von links nach rechts drehen
digitalWrite(BRAKE_A, HIGH); 11---------------~-~- - ---~~ ;~;--~~ ~~~ -~ervoPosition <=SERVO_
digi t al Write (BRAKE_B, HIGH) ; for (int servoPos1t1on
RIGHT ; servoPosition++)
II Servo zu Beginn ganz nach RECHTS drehen {
SensorServo .wri te(S ERVO_RIGHT) ; II Servo um einen Schritt ~r~hen .
SensorServo .write(servoPosltlon) ,
II Solange die Distanz zum nächsten Objekt zu groß ist,
II sch\oJenke Servo hin und her . 11 Warten, bl·s Servoposition erreicht ist
do delay( lO);
{
Hand zu find en t I
11-- ----- ---- ----- -- ------------------ II Sensor auslesen , um
t t roße D
.
1stanz .
Großer Wert= geringe Dis an z.
11 Servo von rechts nach links drehen 11 Kleiner Wert bedeu e g
sensorValue = analog Read(IR- SENSOR) ;
11--- ----- -------- -- ------- --- ------ --
for (int ServoPosit i on
LEFT; servoPosit i on --)
SERVO_RIGHT; ServoPosition >= SERVO
II Ist der gemessene Wert klel·ner als der minimale Wert?
{ II Spri ch : Ist Han d nac h genug dran?
if (sensorValue >= HAND- DISTANCE)
II Servo um einen Schritt drehen
{
SensorServo .write(servoPosi tion);
II Ja : gemessenerWert ist der , wo ein Objekt (Hand) am nächsten ist .
d'le Servo- Hand -Position .
II Merken wir uns .. . bzw.
II Warten, bis Servoposition erreicht ist handPosition = servoPosltlon ,
delay(lO);

II Sensor auslesen , um Hand zu finden 11 Hand ent dec kt · Position zurüc kgeben
ret urn hand Position ;
II Kleiner Wert bedeutet große Distanz . Großer Wert =geringe Distanz!
}
sensorValue = anal ogRead( IR_SE NSOR);
}

II Ist der gemessene Wert kleiner als der minimale Wert? < HAND DISTANCE) ;
II Sprich : Ist Hand nah gen ug dran? } wh1'l e (sensorVal ueweit weg- vom Sensor
if (sensorVa l ue >= HAND_DISTANCE)
II solange Hand zu
{ . wird eigentlich nie erreicht
I I Diese Zelle · e musste
.. hl. er ein return stehen . Arduino akzeptiert das .
II Ja : An dieser Position ist ein Objekt (Hand ) am nächsten . II Korrekterwels
II Merken wir uns die Servo- bzw . Hand -Position .
}
handPosition = servoPosit i on ;

351
350
9 Drive me crazy?- Die erste Fahrstunde 9.2 Hindernisvermeidung

II Vonvärts fahren und die Distanz zur Hand prüfen 11 Kurz innehalten
void fa hreGeradeaus() delay( lOOO);
{
}
II Zur Sicherheit noch mal: Servo geradeaus
SensorServo .wri te(SERVO_MIDDLE) ;
11 Lässt den Roboter nach links (LEFT) oder rechts (RI~HT ) drehen.
II
BeideMotoren auf geradeaus stellen 11 zusätzlich wird die Position der Hand (des Servos) ubergeben.
digitalWri e(DIR_A, HIGH) ; void drehen(boolean Direction, int servoPos)
ri te(DIR_B , HIGH) ;
digit alW
II Bremsen
II Geschwindigkeit setzen digitalWrite(BRAKE_A, HIGH) ;
analogWrite(PWM_A, FULL_SPEED) ; digitalWrite(BRAKE_B , HIGH);
anal ogWrit e(PWM_B, FULL_SPEED) ;
11 Motor A entgegen der "RICHTUNG" drehen
IILosfahren! digitalWrite (DIR_A, ! Direction);
digitalWri t e(BRAKE_A, LOW); 11 Motor ß in die "RICHTUNG" drehen
digitalWrite(BRAKE_B, LOW) ; digitalWri te(DIR_B , Direction) ;

ll ----- -- ----- ---- ------- ----- ------ ---- ----- ----- ---- 11 Geschwindigkeit für das Drehen ei nstellen
11 Fahre die ganze Zeit weiter , solange Hand in Sicht analogWrite(PWM_A, TURN_S PEED);
11------- --- -- -- --- ------ -- ---- -- ------- -- ---- - ---- --- analogWrite( PWM_B, TURN_SPEED) ;
do
{ do
II Sensor auslesen, um Hand zu finden
II Kleiner Wert bedeutet große Distanz. Großer Wert = geringe Distanz! II Bremsen lösen
sensorValue = analogRead(IR_S ENSOR) ; digitalWrite(BRAKE_A , LOW) ;
digitalWrite(BRAKE_B , LOW) ;
II kleine Pause
delay( lO) ; II Servo um eine Position drehen
SensorServo .write( servoPos) ;
} whi le ((sensorValue >= HAND_DISTANCE - 30) && (sensorValue <= TOO CLOSE)) ;
II solange Ha~d nah genug dran am Sensor (-30 um ganz sicher zu geh;n) II Roboter l inksherum drehen
II und (&&) d1e Hand nicht zu di cht dran ist! if (Direct ion == LEFT)
{
11- -- --- -- -- ---- ---- ------ ----- -- ------- II Servo nach rechts drehen
11 Hand ist weg oder zu nah dran! servoPos++;
11-- -- -- -- -- --- ----- -- -- ----- -- ---- -- - }
1I Anhalten! else
digitalWrit e(BRAKE_A, HIGH) ;
digitalWrite(BRAKE_B, HIGH) ;

353
352
9 Drive me crazy?- Die erste Fahrstunde

II Roboter rechtsherum drehen II Servo zu Beginn in die Mitte drehen


II Servo nach links drehen SensorServo .write(SERVO_MIDDLE) ;
servoPos - -;
} II Zur Sicherheit eine Sekunde warten
delay (1000 ) ;
II Wichtige Verzögerung, die die Drehgeschwindigkeit bestimmt }
II und den Servo an seine Position fahren lässt!
delay(SERVO_DELAY);
void loop()
I I Anhalten
digitalWrite(BRAKE_A, HIGH) ; { int handRichtung = 0; II Position der entdeckten Hand
digitalWrite(BRAKE_B, HIGH);

} while (servoPos != SERVO_MIDDLE) ; II Zur Sicherheit noch mal: Servo geradeaus


II Bis Servo Mittelposition erreicht hat SensorServo .write( SERVO_MIDDLE) ;
II (und Roboter sich dabei mitgedreht hat)
f ndene Servoposition speichern
II Hand vor Sensor suchen und ge u
II Halt! handRichtung = handSuchen() ;
digitalWrite(BRAKE_A, HIGH) ;
digitalWrite(BRAKE_B , HIGH); II Roboter i n Richtung Hand drehen
} if (handRichtung <= SERVO_MIDDLE)
{
11 Nach links drehen
void setup( ) drehen(LEFT, handRichtung );
{
}
II Pins für Motorrichtungen als Ausgang definieren else
pinMode(DIR_A, OUTPUT) ; {
pinMode(DIR_B , OUTPUT); 11 Nach rechts drehen
drehen(RIGHT , handRic ht ung) ;
II Pins für Bremsen als Ausgang definieren }
pinMode(BRAKE_A, OUTPUT) ;
pinMode(BRAKE_B , OUTPUT) ; 11 Kurz innehalten
delay( lOOO) ;
II Seide Bremsen an ziehen, HIGH= Bremsen! (in Richtung der zuvor erkannten Hand)
digitaH~rite(BRAKE _A,HIGH) ; II Fahre geradeaus
digitalWrite(BRAKE_B, HIGH) ; fa hreGeradeaus() ;

II Servo initialisieren } ,.. t den Roboter sich wie ein Haust ier verhalten .
P gramm ass
SensorServo .attach(SERVO); Listing 9.6 Dieses ro

355
354
9 Drive me crazy?- Die erste Fahrstunde

Ich kann ver tehen, dass Ihnen die ses Programm auf den ersten Blick sehr lang und Kapite110
komplex vorkommen mag. Ic h war selbst überra scht. dass es .im V rgle ich zur ersten
Idee doch aufwendiger wurde al erwartet. Abe r lassen Sie sich da durch nicht abschre·
Plv.\f l-\y Rooo+-! - l-\ö~llcl.-\e
cken. Gehen Sie jeden Abschnitt der Reihe nach durch - und zwar in der Reihenfolge des
Programmablaufs: Starten Sie mit d n lldefi ne-Ze ilen, und lesen Sie weiter beim setup. EvweH..evlA\\~e\\
Da nach kommt na türlich die loop-Funktion. Dort geht es mit handS uchen und mit drehen 't n Sie lernen, wie Sie ein Display und
weiter. Am Ende ist die Funktion fahreGeradeaus an der Reihe. Sie werden feststellen, Jetzt gehen wir daran, Ihren Roboter zu er~el eAr . egungen zur Nutzung verschiede-
r. 1 en we1tere nr .
dass es am Ende, wenn Sie alles verstanden haben, doch recht simpel ist. Beachten Sie dessen Tasten ansteuern. Dann J o g II dass Spannungsabfall kem Sonder-
ner Sensoren . Sie werden außerdem festste en,
im Sourcecode, da ss der Roboter bei einer Stromversorg ung durch ein Netz teil schnel-
ler fährt als mit Akkus, da ein Netzteil eine etwas höhere Spann ung liefert. Darum gibt mü/1 ist ...
es unterschiedliche #defi ne-Zeilen zu Beginn des Programms für beide Betriebsarten.

9.3 Fazit

Ihr Roboter fahrt. Sie haben es geschafft. Nach dem Erlernen der Grundrichtungen
•I
haben Sie in diesem Kapitel erfahren, wie Hinderniserkennung und -Vermeidung funk-
tionieren, u nd diese erfolgreich an Ihrem eigenen Roboter angewendet. Zum Schluss
ko nnten Sie lernen, wie Sie Um in ein »Haustier« verwandeln. Noch einmal herzlichen
Glückwu nsch zur Erreichung dieses Ziels! Sie dürfen sich jetzt durchau s als Arduino-
Roboter-Experten bezeichnen.

. h -LCD Shield - soga r mit Taste n


es
10 1 Ei n typi SC
Abbildung ·
357

356
10 Pimp My Robot!- Mögliche Erweiterungen

10.1 Grundsätz liche Ansteuerung eines Displays

In Abschnitt 4.2.1 hatt e ich Ihnen bei der Beschre ibung der Pin s SCL und SDA verspro-
chen, da ss d ie r2c-Sch nittstelle (Interface) keine Verwendung find e t. Das stimmt- bis
gena u hi erh in. Die I2C-Schnittstelle wird grund sät zlich nicht für Ihren Roboter benö-
tigt, i t aber für viele Erwe iterungenäuße rs t praktisch. Sie hat nämlich unter anderem
den Vorteil, dass verschiedenste Daten über nur zwe i Leitungen (P in s) des Arduino
gesendet werden kön nen . Da bedeutet in diesem Fall, dass alle Befeh le und Daten für
das LCD über diese zwei Leitungen gesend et werden. Da s hat gan z klar den Vorteil,
dass alle restlichen Pins vom Arduino we iter genutzt werd e n kö nn en . Früher wurden
nämlid1 allein zur Ansteuerung eines LCDs ze hn Pins benö t igt, und bei einigen LCD-
Shields waren sogar noch weitere Pin s zur Abfrage der Tasten erford erlich . Schlimmer
noch : Die Pins des LCD-Shield s waren zum Teil die gleichen. die a uch das MotorShield
auf dem Roboter nutzt. Damit wäre e in Einsatz dieses Displays auf Ihrem Roboter
nicht möglich gewesen.

Praktischenveise gibt es aber mittlerweile Alternat iven, wie zum Beispi I das Adafruit
RGB LCD Shield mit Keypad 1 aus Abbildung 10.1 . Dieses hat neben dem Display sogar
noch fünfTasten zur freien Verwendung. Außerdem kann die Hintergrundbeleuchtung
und damit die Farbe des Displays oder des Textes (je nach Modell) beli ebig geändert wer-
den. Damit Sie sich an djeser Stelle nicht m it der Ansteuerung der I2C-Schnittslelle ausei-
nandersetzen müssen oder aufwendig herausfinden müssen, wie wohl jede einzelne
Stelle des Displays angesteuert wird, können Sie, wie so oft, auch hi er auf ei ne fertige
Open-Source-Bibliothek (siehe Abschnitt 6.15, »Biblioth eken (Libraries)«) zurückgrei-
fen.2 Diese enthält alle Befehle zur Anzeige von Text, zur Abfrage der Tasten und zur
Änderung der Displayfarben (RGB = Rot, Grün, Blau). Ein fertiges selbsterklärend es Bei-
sp iel sehen Sie in Listing '10.1 . Die Datei zum Herunterladen und Ausprobieren heißt
LCD RGB Tasten.ino.

10.1.1 Installation der LCD-Sh ield -Library


Noch ein paar Erläuterungen zur Installation der LCD-Bibliothek auf Ihrem Computer:
Sie könnten die Dateien der Bibliothek, die die Ansteuerung ermöglichen, jedes Mal mit
in das Verzeichnis Ihres Programms kopieren (alle .cpp- und .h-Dateien). Das ist jedoch
nicht sinnvoll, weil die Dateien damit doppelt und dreifach vorhanden sind und bei
einer Aktualisierung der Bibliothek in jedem Ihrer Programme ausgetauscht werden
müssten.

1 https://lea rn.adafru it.com/ rgb-/cd-sh ield/overview


2 https://g ith ub.com/adafruit/Adafru it-RGB-LCD-Shield-Libra ry

358
I
Stattdessen install ieren Sie die Bibl io thek einmal in lhrer Arduino-Software und kö nnen
sie anschließend in jedem Ih rer Programme verwenden. Klicken Sie dazu in der
Arduino-Software in der Menü leiste au f SKETCH · LlBRARY iMPORTIEREN... • ADD
J-
LIBRARY . ln dem nu n erscheinenden Fenster wählen Sie das zuvor heruntergeladene
is
veneichnis Adafruit_ RGBLCDShield aus und bestätigen die AuswahL so einfach geht
ö-
das. Um zu überp rüfe n, ob ie Installation erfolgreich war, klicken Sie im Menü erneut
m
auf SKETCH • L!BRARY iMPORTIEREN ... Wenn in diesem Menü der Eintrag ADAFRUIT_
10
RGB LCDS HI ELD auftauch t, hat alles geklappt. Wenn Sie diesen Eintrag auswählen, wer-
Jr
den die fo lge nden Zeilen in Ihr gerade geöffnetes Programm eingefügt :
il,

D- äinclude <Adafrui t MCP23017 . h>


#include <Adafrui t RGBLCDShield. h>
er
ld Dadurch können Sie die neuen Befehle aus der Bibliothek verwenden. ln Listing 10.1
er sehen Sie die Nutzung aller derzeit verfügbaren Befehle für das LCD und die Tasten . Die
dazugehörige Dat ei heißt LCD_ RGB_ Tasten.ino .
lit
:ar II Bibliotheken für das LCD einbinden
ng #include <Wire . h> I I I2C
~ r- #include <Adafruit MCP23017 .h>
ei- #include <Adafruit RGBLCDShield .h>
ne
ge II Ein lcd-Objekt zur Ansteuerung erstellen
ei- Adafru i t _RGBLCDShield lcd = Ada frui t _RGBLCDShield () ;

:ur
ei- I I Diese #defines machen es einfach , die Farben
ißt //für die Hintergrundbeleuchtung im Code zu verwenden .
#define RED Oxl
#define YELLOW Ox3
ltdefi ne GREEN ox2
#define TEAL ox6
#defi ne BLUE ox4
er: #defi ne VIOLET Ox5
nit #define WHITE ox7
tCh
bei void setup ()
len { II Das LCD ist 16 Zeichen breit und hat 2 Zeilen
lcd .begi n(16, 2);

II Hintergrundfarbe auf Weiß setzen


359
10 Pimp My Robot! - Mögliche Erweiterungen

lcd.setßacklight(WHITE) ;

II Text ausgeben
II Die Zahlen im Kommentar dienen nur zur Orientierung .
II 1234567890123456
lcd.print( " Roboter bauen ");

II Cursor zu Spalte 0 und Zeile 1 bewegen .


I I Achtung: Zeile 1 ist dieZl<~eite . Zeile 0 ist die erste!
lcd .setCursor(OJ 1) ;

II 1234567890123456
lcd.print( " mit Arduino ") ;
}

void loop()
{
II Jetzt die Tasten des LCD auslesen
byte buttans = lcd.readßuttons();

if (buttons != 0)
{
II Text komplett löschen
lcd . clear();

II Cursor auf 0)0 setzen


l cd .setCursor(OJO) ;
lcd.print( "Gedrueckte Taste" );

if (butt ons == BUTTON_UP)


{
II Text ausgeben
lcd.setCursor(OJ1);
l cd.print( "Hoc h ");

II Hintergrundbeleuchtungl-farbe ändern
lcd .setßacklight(RED) ;
}

i f (buttons == BUTTON_DOWN)
{

360
I
II Text ausgeben
lcd .setCursor(O,l);
lcd .print("Runter ") ;

II Hintergr undbeleuchtungl-farbe ändern


lcd .setßacklight(YEL LOW);
}

if (buttons == BUTTON LEFT)


{
II Text ausgeben
lcd .setCursor(O,l );
lcd .print( "Links ");

II Hintergrundbeleuchtung/-fa rbe ändern


lcd .setßackli ght(GREEN) ;
}

if (buttons == BUTTON_RIGHT)
{
II Text ausgeben
lcd .setCursor(O, l) ;
lcd. print(" Rechts ");

II Hintergrundbeleuchtungl-farbe ändern
lcd .setßacklight(TEAL) ;
}

if (buttons == BUTTON_SELECT)
{
II Text ausgeben
lcd .setCursor(O, l) ;
lcd .print( "Auswahl ");

11 Hintergrundbeleuchtungl-farbe ändern
lcd.setBacklight(VIOLET) ;
}
}
}
Li stin g 10.1 Ein simples Beispiel für das >>Adafr uit RGB LCD Shield«

361
10 Pimp My Robot!- Mögliche Erweiterungen

10.1.2 Montage eine s LCDs auf dem Roboter und Nutzung


von Shield -Ada ptern
Wenn Sie so ei n LCD auf Ih rem Roboter verwenden woll en, werden Sie vie lleicht
schon bemerkt haben, dass Sie es nicht ohne We ite res auf das Motor Shield stecken
können, den n die Stec ker und Kabel des Servos und des Senso rs sind im Weg (s iehe
Abb ild ung 10.2).

Abbild un g 10.2 Die Stecker stehe n so hoch, dass ke in Shield draufpasst

Aber natürlich si nd Sie n icht der Erste, der dieses Problem hat. Für genau diesen Anwen-
dungsfall gibt es daher passende Adapter: stapelbare Buchsen leisten (siehe Abb il dung
10.3 ). Diese werden einfa ch in die Buchsenleisten des Motor Shields gesteckt. In di ese
gesteckten Buchsenleisten wiederum passt dan n das LCD-Shield (s iehe Abbildung 10.4).

+ Und die Stromversorgung des Servos?


Beim Zusamme nbau Ihres Roboters in Abschnitt 8.2, »Los geht's -Schritt für Schritt
zum Bot «, haben Sie die rote Plusleitung des Servos in die Buch senleiste des Roboters
gesteckt. Das ist so nicht mehr mög lich, wenn Sie die stapelba re n Buch senleisten
verwenden. Stecken Sie daher die rote Servo leitung wieder zurück in den Servostecker.
Der Servo, der im Roboter-Kit enthalten ist, ist mitt lerwei le ei n sehr hochwertiger
(Fa. HiTEC), der mit der Spannungsversorgung über das Motor Shield offenbar gut aus-
kommt.

362
Abbildung l0.3 Stapelbare Buchsenleisten

g
e
).

Wenn Sie das hie< beschriebene cCD nutzen wollen, übertragen Sie die Software aus us-

+
Ling JDJ aufihren Afduino und drücken nacheinander die Taster auf dem Shield.

fa lls das
Nichts zuLCD ,war le"'htet. aber der TeXt nicht zu erkennen ist, drehen Sie ,msichtig
sehen?
mit einem kleinen Schraubendeeher am Tdmmer. der sich rechts unten auf dem Shield
befindet Dieser eingetötete Poti regelt den Kontrast des Displays

363
10 Pimp My Robotl- Mögliche Erweiterungen

10.1.3 Hindernisanzeige
Ein LCD können Sie hervorragend zur Anzeige verschied ener Informationen für Ihren
Roboter nutzen. Sie können sich jetzt zum Beispiel anzeigen lass n. ob ein Hindernis
rechts oder links vom Roboter erkannt wurde. Dazu müssen Sie lediglich die vorhan-
dene Datei Roboter_ Sojtware.ino so wie in Li sting 10.2 anpassen.

I• Achtung: LCD-Ansteuerung braucht Zeit!


Die Ansteuer ung des LCD benötigt Ze it, die der Arduino dann nicht für and ere Aufgaben
hat. Wenn Sie zum Beispiel in der Funktion DriveForward eine oder zwei Textzeilen aus-
geben, werden Sie feststel len, dass sich der Servo nur noch sehr langsam dreht. Aus die-
sem Grund habe ich in der fertigen Lösung (Roboter_Sojtware_LCD1.ino) einen kleinen
Trick angewendet: Es gibt eine neue globale Variable namens LastDirection. in dieser
wird stets die letzte Fahrtrichtung gespeichert (LEFT, RIGHT oder FORWARD}. Und nur,
wenn sich die Richtung zu r zu letzt gespe ich erten Richtung ändert, wird auch das Dis-
play in DriveFoward angesteuert. Damit gibt es keine Verzögerungen bei jedem Aufruf
dieser Fu nktion, wenn sonst jedes Mal der gleiche Text ausgegeben würde.

Da die Änderungen gegenüber der ursprünglichen Software doch etwas umfangreicher


sind, ist in Listing 10.2 fast der vollständige Code da rgestellt. Die unveränderten Teile
sind nicht aufgeführt, da Sie diese bereits kennen. Übrigens : Als kleines Gimmick
ändert sich bei jedem erkannten Hindernis auch noch die Hintergrundfarbe des Dis-
plays in Rot. Dies erfolgt durch die Anwe isung lcd . setBacklight (RED) . Sobald der Weg
wieder frei ist, wird durch lcd . setßackl ight (GREEN) das Display wieder auf Grün gesetzt
und der Roboter fährt weiter.

[... p
II Bibliotheken für das LCD einbinden
#include <Wi re . h> II I2C
#include <Adafruit MCP23017.h>
#incl ude <Adafruit RGBLCDShield.h>

II Ein lcd-Objekt zur Ansteuerung erstellen


Adafruit _RGBLCDShi eld lcd = Adafruit_RGBLCDSh i eld() ;

II Diese #defines machen es einfach, die Farben


II für die Hintergrundbeleuchtung im Code zu verwenden.
#define RED Oxl

3 Die hier ausgelassenen Zeilen Iinden Si.e jewei ls im Quellcode in der Datei zum Download.

364
10.1 Grundsätzliche Ansteuerung eines Displays

#define YE LLOW Ox3


#define GREEN Ox2
#define TEAL Ox6
#define BLUE Ox4
#define VIOLET OxS
#define WHITE Ox7

[ ... )

II Nützliche Einstellungen :
II Vollgas ist 255. 141 für Motor A, da dieser bei meinem Bot langsamer l ief !

--
#define FULL - SPEED- A 141
II Vollgas ist 255 . 128 für Motor B.
#define FULL- SPEED- B 128
#define TURN SPE ED 255 II schnell Drehen
#define LEFT LOW II Links drehen bei LOW
1
#define RIGHT HIGH II ... und rechts bei HIGH
#define FORWARD 99 II Genutzt für LastDirection (siehe dort) .
#define CLOS EST DISTANCE 350
II Bei diesem Wert soll der Bot anhalten
#define SERVO LE FT 58 II Servoposition links
#define SERVO RIGHT 180 II Servoposition rechts

[ ... )

II Letzte Richtung fü r DriveForward und Turn merken (siehe Hinweise dort) !


int LastDirection = FORWARD;

[ ... )

11 Vorwärts fahren und dabei den Sensor hin- und herschwenken


void Ori veForward()
{

[ . .. )

II Hat der Servo das recht e Ende erreicht?


I I Dann nach li nks drehen
if ( ServoPosition > SERVO_RIGHT )
Turnservo = LEFT;

365
10 Pimp My Robot!- Mögliche Erweiterungen

II LCD nur ansteuern, wenn sich Richtung geändert hat.


II Ansonsten wird die Servodrehung zu langsam,
II weil das Ansteuern des vollen LCDs Zeit kostet!
if (LastDirection != FORWARD)
{
II Hintergrundfarbe auf Grün setzen
lcd.setßacklight(GR EEN);

II Cursor setzen und Text ausgeben


lcd .setCursor(O,O) ;
II 1234567890123456
lcd .print("Sieht gut aus . . . ") ;

II Cursor setzen und Text ausgeben


lcd .setCursor(0 ,1 );
II 1234567890123456
lcd .print( "Fahre geradeaus . ");

II "letzte Richtung" merken


LastDirection = FOR\~ARD ;
}
}

I I Drehen! Aber in 1r1elche Richtung?


II LEFT für Links (gegen den Uhrzeigersinn) RIGHT für Rechts (im
II Uhrzeigersinn)
void Turn( boolean Direction )
{
II "letzte Richtung" merken (für LCD-Ansteuerung)
LastDi rection = Direct ion ;

II Bremsen
digitalWrite( BRAKE_A, HIGH );
digitalWrite( BRAKE_B , HIGH ) ;
delay( 500 ) ;

[ .. . ]
}

void setup (

366
{
[ ... ]

II Beide Bremsen an ziehen , HIGH = Bremsen!


digitalWrite( BRAKE_A, HIGH );
digitalWrite( BRAKE_B, HIGH );

II Das LCD i st 16 Zeichen breit und hat 2 Zeilen


lcd .begin(16 , 2) ;

II Text komplett löschen


lcd .clear() ;

II Hintergrundfarbe auf Weiß setzen


lcd .setBacklight(WHITE);

II Text ausgeben
II Die Zahlen im Kommentar dienen nur zur Orientierun
II 1234567890123456
lcd .pr int(" Ich warte... ") ;

II Servo i nitialisieren und auf 90° stellen


SensorServo .attach( SERVO );
SensorServo .write( 90 );
delay( 500 ) ;

[ . .. ]

void loop(
{
i nt Da ngerPosition;
int Oistance;
II Was misst der Sensor?
Oi st ance = analogRead( IR_SE NSOR) ;
II Nah genug?
if (Oi stance > CLOSEST_DISTANCE)
{ .
I I Noch mal alles scannen , um zu 1üssen , wo die Gefahr am nächsten i st .

367
10 Pimp My Robot!- Mögliche Erweiterungen

DangerPosition = SeekingPositionWithClosestDanger();

II Gefahr links?
if(DangerPosition <= 90 )
{
II Cursor setzen und Text ausgeben
lcd .setCursor(O ,O) ;
II 1234567890123456
l cd . print( "Huch Hindernis!");

II Cursor setzen und Text ausgeben


lcd .setCursor(O 1) ;
II 1234567890123456
l cd.print( "Drehe rechts . . . ");

II Hintergrundbeleuchtungl -farbe ändern


l cd. setßacklight(RED);

Turn( RIGHT ); II Nach rechts drehen


}

II Oder doch rechts?


if( DangerPosition > 90 )
{
II Cursor setzen und Text ausgeben
lcd. setCursor(O , O) ;
II 1234567890123456
lcd .print( "Huch , Hindernis!") ;

II Cursor set zen und Text ausgeben


lcd.setCursor(0 , 1) ;
II 1234567890123456
lcd.print( "Drehe links .. . ");

II Hi ntergrundbeleucht ungl-fa rbe ändern


lcd .setßacklight(RED) ;

Tur n( LE FT ); II da nn nac h l inks drehen


}
}
10.1 Grundsätzliche Ansteuerung eines Displays

DriveForward() ; II Immer geradeaus!


delay ( 10 ) ;
}
Listing 10.2 Roboter·Software mit LCD-Anste ueru ng

Vo rsicht: Kopfverletzung! I•
Achte n Sie bei gestecktem LCD-Sh ie!d darau f, dass de r Servo nicht gegen die Plat ine
stößt ! Bei mei nem Ro boter bzw. LCD musste ich die Servowerte wie fo lgt anpassen :
II Wann stößt der Sensor nicht mehr links an?
#def i ne SERVO LEFT 58
II Wann stößt der Sensor nicht mehr rechts an ?
#def ine SERVO RIGHT 180

10.1.4 Entfe rn un gsa nzeige auf de m LCD


,
Wäre es nicht cool. wenn ie auf dem Di pla die Entfernung zum er annten Hinderni
be ·ärnen. ein Problem. Jb, tv r tändli h
e v n ari, bl

ting 10.3 ein separate Pr ramm zur


sor ausliest und de sen le ·er ebni 3U · a i zum
Distanz_LCD. ino . Dieses Pr gramn1 k"nn n ie Ieich nutz n, um e
wareselbst einzubauen - es i t durch die Kommentares lb terklärend.

II Bibliotheken f ür das LCD einbinden


#include <Wire. h> I I nc
#include <Adafruit_MCP23017 . h>
#i nclude <Adafruit_RGBLCDShield.h >

int ledPin = 13; II Der übliche LED- Pin


int IRpi n = A2; II Der Pin für den Infrarotsensorausgang

11 Ein l cd-Objekt zur An steuerung erstellen


Ad afruit_RGßLCDShield lcd = Ad afrui t _RGBLCDShield () ;

11 Diese #defines machen es einfach, die Farben

369
10 Pimp My Robot!- Mögliche Erweiterungen

II für die Hintergrundbel euchtung im Code zu verwenden .


#define RED Ox1
#define YE LLOW Ox3
#define GREEN Ox2
ltdefine TEAL Ox6
#define BLUE Ox4
#define VIOLET Ox5
#defi ne I~HITE Ox7

void setup()
{
pinMode(ledPin, OUTPUT) ; II LED-Pin ist ein Ausgang
pinMode(IRpin, INPUT) ; II IR-Pin als Eingang definieren

II Das LCD ist 16 Zeichen breit und hat 2 Zeilen


lcd.begin( 16, 2);

II Text komplett löschen


lcd. clear();

II Hintergrundfarbe auf Weiß setzen


lcd . setBacklight(WHITE);
}

void loop()
{
II Sensor (Pin) einlesen
float spannungswert = analogRead(IRpi n);

II umrech nen in cm
float entfer ung = (6787 I (spannungswert - 3)) - 4;

II Solange Distanz <= 80 cm


if (entfernung <= 80)
{
II Cursor setzen und Text auf LCD ausgeben
lcd .setCursor(O, 0) ;
II 1234567890123456
lcd. print( "Huch , Hindernis !") ;

370
I
lcd .setCursor(O, 1) ;
lcd .print("Dista nz : ") ;
lcd . print(entfernung) ;
lcd.print( "cm") ;

else

II Cursor setzen und Text auf LCD ausgeben


lcd .setCursor(O , O) ;
II 1234567890123456
lcd . print ("Bahn frei . . . :- )") ;

.,
lcd . setCursor(O , 1) ;
II 1234567890123456
lcd . print( " Juhuuuu! ") ;

II Ein bisschen Ver zögerung für bessere Lesbarkeit .


delay(100) ;

Li sting 10.3 Programm zur Anzeige von IR-Sensorwerten auf einem LCD

Das Ergebnis sieht beispielsweise so wie in Abbildung 10.5 aus. Vergleich en Sie Ihre
Lösung mit meiner: Die Datei zum Download hat den Namen Roboter_Sojtwa re_
LCD2.ino. Auch in diesem sourcecode wurde wieder der Trick genutzt , dass das LCD aus

Zeitgründen nur akt ualisiert wird. wenn es eine Änderung gab.

Abbi ldung 10.5 Anze ige der Distanz bis zum Hindernis (Test)

371
10 Pimp My Robot!- Mögliche Erweiterungen

10.1.5 Hinderniszählung und Anzeige auf dem LCD


Wenn Sie in der Lage sind, eine En tfernung auf dem Di splay anzuzeigen, sollte es nicht
weiter schwer sein, die Hindernisse während der Fah11 des Roboters zu zä hlen und aus·
zugeben. Sie müssen lediglich zwei Variablen in de r Software defin ieren und deren Wert
bei jedem Hindernis rech ts und links jewei ls um eins erhöh en. Dana ch können Sie die
Werte auf dem Display ausgeben. Das fertige Programm sehen Sie in Listing 10.4. Erneut
habe ich nur die wichtigsten Ausschnitte aufgeführt. Die da zugehörige Datei zum
Download heißt Roboter_ Software_ LCD3.in o.

[ ... ]
boolean TurnServo ~ RIGHT; II Drehrichtung des Servos
int hi ndernisselinks ~ 0; II Speichert links erkannte Hindernisse
int hindernisseRechts ~ 0; II Speichert rechts erkannte Hindernisse
[ ... ]
void setup(
{
[ ... ]
II Das LCD ist 16 Zeichen breit und hat 2 Zeilen
lcd .begin( l6 , 2) ;

II Text komplett löschen


l cd. clear() ;

I I Hintergrundfarbe auf vieiß setzen


l cd.setßacklight(WHITE) ;

II Text ausgeben
II Die Zahlen im Kommentar dienen nur zur Orientierung.
II 1234567890123456
lcd. print( " Ich 1varte . . . ");

II Servo initi alisieren und auf 90° stellen


SensorServo .attach( SERVO );
SensorServo .write( 90 ) ;
delay( 500 ) ;

I I viarten, bis etwas vor dem Sensor ist


v1hile ( CLOSEST_DISTANCE > analogRead ( IR SENSOR ) )
{
I I solange warten ...

372
I
delay( 100 ) ;
}
1t

II Los geht ' s!


rt lcd .setCursor(O, O);
ie II 1234567890123456
Jt lcd .print( " Freie Fahrt! ");
m
lcd .setCursor( O, 1);
II 1234567890123456
lcd.print( "Kein Hindernis .. ");

void loop( )
{
int DangerPosition;
,
int Distance;

II Was misst der Sensor?


Distance = analogRead( IR_SENSOR) ;
II Nah genug?
if (Distance > CLOSEST_DISTANCE)
{ DangerPosition = SeekingPositionWithClosestDanger() ; II Noch mal scannen

I I Gefahr links?
if (DangerPosition <= 90)
{
II Anzahl der Hindernisse+ 1
hindernisseLinks++ '

II Anzeige der Hindernisse im LCO


anzeigeHindernisse()·

Turn( RIGHT ); II Nach recht reh n


}

11 oder doch rechts?


if( DangerPosition > 90 )

373
{
II Anzahl der Hindernisse+ 1
hindernisseRechts++ ;

II Anzeige der Hindernisse im LCD


anzeigeHinder nisse() ;

Turn ( LEFT ) ; II dann nach links drehen


}
}

DriveForward(); II Immer geradeaus!


delay( 10 ) ;
}

void anzeigeHindernisse()
{
lcd .clear();
l cd . setCursor(O, 0);
II 1234567890123456
lcd. pr i nt( "Lin ke Seite: ");
lcd. pri nt(hinderni sseli nks) ;
l cd . setCursor(O , 1) ;
lcd . print( "Rechte Sei te :" ) ;
lcd . print(hindernisseRechts) ;
}

Listing 10.4 Durch diese Erweiterung zählt Ihr Roboter Hindernisse und zeigt sie an .

Wenn Sie sich den Code genauer ansehen, werden Sie feststellen, das s lediglich in der
loop-Funktion d ie Va riablen hi ndernisseli nks bzw. hi nderni sseRec hts um ein s erhöht
werden. Ansch ließend wird die neu hinzugefügte Fun ktion anzeigeHin dernisse aufge-
rufen, die in jeder der zwei Zeilen des Displays einen Wert mit Text a u sgibt. Das ist auch
schon alles .

10.2 Press Any Key! -Interaktion per Tastatur

Wie ich bereits in Abschnitt 10.1 erläutert h a be, enthält das LCD Keypad Shield a uch Tas-
ter, die Sie in Ihrer Software abfragen könne n. Das Shield besitzt vier Taste n, die w.i e Cur-
sortasten angeordn et sind und ebenfa lls über Befehle aus der Bibliothek abgefragt

374
10.2 Press Any Key!- Interaktion per Tastatur

werden können : LEFT {li nks), RIGHT (rechts), UP (hoch) und DOWN (runter). Zusätzlich
gibt es eine Taste SELECT (Auswahl) zur beliebigen Nutzung. Der mit RESET beschriftete
Taster auf der Platine ist ein echter Reset-Tas ter: Er führt auf dem darunterliegenden
Arduino einen Re set durch.

10.2.1 Abfragen der Tasten


In Listing 10.1 haben Sie bereits den notwendigen Code zur grundsätzlichen Nutzung
(dem Auslesen) der Taste n kennenge lernt Zur Eri nnerung sehen Sie in Listing 10.5
einen kurzen Auszug aus dem Programm:

void l oop( )
{
II Tasten auslesen
byte butta ns = lcd . readßuttons() ;

i f (buttons != 0)
{

II Cursor auf 0,0 setzen
lcd. setCursor( O,O ) ;

if (buttons == BUTTON_UP)
{
II Taste UP gedrückt
lcd . print( "Hoch ") ;

if (butto ns == BUTTON_DOWN )
{
II Text ausgebe n
lcd.pr i nt ( "Runter ");
}

[ .. . ]

Listing 10.5 Auslesen der Tasten auf dem LCD-Shield (Auszug)

Wozu könnten Sie diese Tasten nun nutzen ? Sie könnten zum Beispiel die Tasten ver-
wenden, um die Zähler für die rechts und links erkannten Hindernisse auf null zurück-

375
10 Pimp My Robotl - Mögliche Erweiterungen

zusetzen. Bevor Sie ich di e fertige Lösung in Auszügen in Listing 10.6 ansehen,
überlegen Sie, an welcher Stelle Sie die Veränderungen im Code vornehmen würden.
Versuchen Sie wie immer, selbst die Lösung zu erarbe ite n. Die fertige Datei zum Down-
load heißt Roboter_ Software_ LCD4.ino. Dieses Mal ist die Lösung nicht ganz so simpel,
wie sie im ersten Mom e nt erscheint.

void loop( )
{
int DangerPosition;
int Distance;
byte buttans = 0;
II Für die Zeitmessung
unsigned long let zteMil lis = 0;
II Wartezeit zum Drücken der Tasten (Millisekunden)
long intervall = 1000;

Distance = analogRead( IR_SENSOR); II Was misst der Sensor?

if (Distance > CLOSEST_DISTANCE) II Nah genug?


{
DangerPosition = SeekingPositionWithClosestDanger() ; II Noch mal scannen

II Gefahr links?
if (DangerPosition <= 90)
{
II Anzahl der Hindernisse + 1
hindernisselinks++ ;

II Anzeige der Hindernisse im LCD


anzeigeHindernisse();

Turn( RIGHT ); II Nach rechts drehen

II Oder doch rechts?


if ( DangerPosition > 90 )
{
II Anzahl der Hindernisse+ 1
hindernisseRechts++;

376
10.2 Press Any Key!- Interaktion per Tastatur

II Anzei ge der Hindernis se im LCD


anzei geHindernis se ();

Turn ( LEFT ); II dann nach links dre hen


}

II aktuelle "Arduino-Zeit " feststel l en


letzt eMillis = mil l i s() ;

II Vorgegebene Zeit warten und dabei Tasten auslese n


do

II
Jetzt die Tasten des LCDs auslesen
buttans = l cd .r eadß uttons () ;
} while ( (( mi ll is() - letzt eMill i s) < dauer ) && (buttons
II solange abgelaufene Zeit noch nicht erreicht
II UND (&&) keine Taste gedrückt
== O) ); •
II Taste zuvor gedrückt ?
if (buttons != 0)
{
II Funktion zum Zählerreset aufrufe n
hindern isReset(but t ons) ;

II Jetzt geradeaus fahre n und Servo schwenken


DriveForward() ;
del ay( 10 ) ;

Listing 10.6 Zurücksetze n der Hinderniszä hlerper Taster (Auszug)

Die Schwierigkeit bei dem Code aus Listing 10.6 liegt in der Gleichzeitigkeit von durch-
zuführenden Aktionen, denn wie Sie ja wissen, beherrscht Ihr Arduino ke in Mu ltitas-
king. Aus diesem Grund sehen Sie im Code die bisher nicht verwendete Funktion
milli s4 . Diese liefert die Anzahl der Millisekunden zurück, die der Arduino seit dem Pro-
grammstart läuft. Das entspricht ungefäh r dem Prinzip einer eingebauten Uhr. jedes
Mal, nachdem in der Hauptschleife ein Hindernis erkannt wurde, wird millis genutzt:

4 http.j/ arduino.cc/ en/ Reference/ Miffis

377
. 10 Pimp My Robot!- Mögliche Erweiterungen

do

II Jetzt die Tasten des LCDs auslesen


buttans = lcd .readßuttons();
} while ( ((millis() - letzteMillis) < dauer) && (buttons == 0) ) ;

Hier werden innerhalb der do ... while-Schleife die Tasten des LCD-Shields m it de r Fun k-
tion readßuttons abgefragt. Danach wird in der while-Zeile die »aktue ll e Zeit« (millis)
gemessen und mit der Zeit vor dem Aufruf der Schleife (letzteMillis) verglichen.
Sobald die Zeit größer als der Wert dauer ist oder eine Taste betätigt wurde, wird die
Schleife verlassen und wird noch einmal geprüft, ob eine Ta ste gedrückt wurde. Wenn
ja, dann wird der entsprechende Hinderniszähler über die neu hinzugefügte Fun ktion
hindernisReset zu rückgesetzt- in Abhängigkeit vom übergeben en Wert.

Dieser ganze Vorgang dient dazu, lhn en eine Sekunde zu geben, um die Taste zu drü-
cken, nachdem e in Hindernis erkan nt wurde. Die Zeitdauer wird dabei durch die Va ria-
ble dauer bestimmt. Mit delay wäre da s so nicht möglich.

Noch ein Hinweis zum Programmcode : Die Lösung ist noch weit entfernt davon, per-
fekt zu sein. Sie werden feststellen, dass das Zu rücksetzen des Hinderniszählers nur
dann möglich ist, wenn ein Hindernis erkannt wurde und der Roboter sich danach
drehte - u nd auch dann nur in einem durch dauereng begrenzten Ze itfenster. Es geh t an
dieser Stelle mehr um die Machbarkeit und die Verwendung der Funktion millis. Sie
sin d h erz lich ei ngelade n, das Programm nach Ihren Wünschen und Ideen anzupassen.

10-2.2 Steuerung des Roboters ü be r d ie Tasten


Um d ie Fu nktionen des Roboters zu testen, könnte es ebenfalls hilfreich sein, ein Test-
programm zu haben, das den Roboter aufTastendruck in eine bestimmte Richtung fah-
ren lässt. Wie wü rden Sie dies realisieren? Alle vorigen Programmbeispiele li efern Ihnen
bereits die Antwort. Um den Roboter mögli chst einfach zu steuern, wäre es das Ei n-
fachs te, wen n er so lange in die gewünschte Richtung fährt, wie die Taste auf dem LCD
gehalten wird. Da Sie vier Rich tungstasten haben, kö n nen Sie zwei für rech ts/links und
zwei fü r vorwärts/rückwärts nutzen. Auch wenn es im ersten Moment mög li cherweise
seltsa m erscheint, sollte n Sie d ie Taste RIGHT für e ine Vorwärtsfah rt und d ie Taste UP
für eine Lin ksdrehun g verwe nden . Damit sind die Tasten m it Blick in Fah rtrichtung des
Robo ters wesentlich intuitiver nutzbar! In Listing 10.7 sehen Sie auszugswe ise die
Lös u ng. Die Datei zum Downl oad ist Robo ter_Software_ LCDS. in o.

378
· 10.2 Press Any Keyl-lnteraktion per Tastatur '

( . .. ]

II Ein paar Richtungen f ür die Fahr- und Drehfunkt ion


#define LINKS LOW
#define RECHTS HIGH
#define VORWAERTS HIGH
#defi ne RUECKWAERTS LOW

II Vorwärts fahren
void fahreGeradeaus(boolea n richtu ng )
{
II BeideMotoren auf geradeaus stell en
digitalWrite(DIR_A, r i chtung) ;
digitalWrite(DIR_B, richtung) ;

II Geschwindigkeit setzen
analogWrite(PWM_A , FULL_SPEED_A) ;
analogWrite (PWM_B , FUL L_SPEED_B) ;
,
II Losfahren!
digitalWrite( BRAKE_A, LOW) ;
digitalWrite( BRAKE_B , LOW);
}

II Lässt den Roboter nach links (LEFT) oder rechts (RIGHT) drehen
void drehen( boolea n ric htu ng)
{
II Motor A entgegen der "RICHTUNG" drehen
di gi talWrite (DIR_A, !r ichtung);

II Motor B in die "RICHTUNG" drehen


digitalWri te (DIR_B , ri chtung);

II Geschwindigkeit für das Drehen einstellen


analogWri t e(PWM_A, TURN_SPEE D);
analogWr ite(PWM_B, TURN_SPE ED) ;

II Bremsen lösen
digitalWrite(BRAKE_A, LOW) ;

379
10 Pimp My Robot!- Mögliche Erweiterungen

digitalWrite(BRAKE_B , LOW) ;
}

void anhalten()
{
II Bremsen
digitalWrite(BRAKE_A, HIGH) ;
digitalWrite(BRAKE_B, HIGH);
}

void setup()
{
[ ... ]

II Bremsen anziehen!
anhalten() ;

[ .. . ]
}

void loop()
{
byte buttans = 0;

II Jetzt die Tasten des LCD auslesen


buttans = lcd .readButtons () ;

if (buttons != 0)
{
II Text komplett löschen
lcd . clear () ;

II Cur sor auf 0,0 setzen


l cd .setCursor(O, O);
II 1234567890123456
lcd .print( "Fahrtrichtung : ") ;

if (but t ons == BUTTON_UP)


{

380
10.2 Press Any Key! -Interaktion per Tastatur

II Text ausgeben
lcd .setCursor(0, 1);
II 1234567890123456
l cd. print( "Links . . .. . ... .. . ");

II Hintergrundbeleuchtungl -farbe ändern


lcd. setßackl ight(RED) ;

II Roboter linksherum (!) drehen


drehen (LINKS) ;
}

[ ...]

if (buttons
{
II
==

Text ausgeben
BUTTON_LEFT)

l cd .setCursor(0, 1) ;
II 1234567890123456
,
lcd . print( "Rueckwaerts . . . . . ");

II Hintergrundbeleuchtungl-farbe ändern
l cd .setßacklight(GREEN) ;

II Roboter rückwärts (!) fa hren lassen


fahreGeradeau s(RUECKWAERTS);
}

[ .. . ]

else
{
II KEI NE Taste gedr ückt

II Text komplett löschen


l cd.clear() ;

II Hi ntergrundfarbe auf Weiß setzen


l cd . setßackli ght(WH ITE);

381
10 Pimp My Robot!- Mögliche Erweiterungen

II Roboter anhalten
anhalten();
}
}

Listing 10.7 Dieses Program m steuert den Roboterper Tastatur.

10.2.3 Die Geschwindigkeit über die Tasten einstel len


Gegen Ende dieses Absdmitts gibt es noch ein kleines Extra: eine komfortable Menü-
steuerung im Display zur Änderung der Geschwindigkeiten von Motor A und B. Die
Funktionen des Programms in Listing 10.8 er lauben nach dem Einschalten des Roboters
die Steuerung gemäß Tabelle 10.1 . Das Menü wird angezeigt, nachdem Sie den Roboter
eingeschaltet haben, und es steht so lange zu r Verfügung, bis er nach ei nem Druck auf
SELECT losfahrt.

Taste Aktion

UP Erhöhen der Geschwindigkeit vo n Motor B

DOWN Verringern der Geschwindig keit von Motor B

RIGHT Erhöhen der Geschwindigkeit von Motor A

LEFT Verringern der Geschwindigkeit von Motor A

SE LECT Verlassen des Menüs. Der Roboterfährt los!

Tabelle 10.1 Belegung der Tasten

Damit aber noch nicht genug. Übertragen Sie doch einmal die dazugehörige Datei
Rohoter_Sojtware_LCD6.ino auf Ihren Arduino, und achten Sie auf die Anzeige der
Werte, wenn sie zum Beispiel einstellig werden oder 255 überschreiten.
Es ist an all es gedacht: In der Funktion printVal ues wird eine Formatierung der Anzeige
vorgenommen, sodass kleinere Zahlen mit Leerzeichen in der Anzeige aufgefüllt wer·
den. Dies sorgt für eine ruhigere Anzeige, als wenn die Zahlen bei unterschiedlichen
Längen hin- und herspringen. Außerdem bleiben damit am Ende der Zeile keine ver·
waisten Ziffern stehen.

Die Prüfu ng auf Überlauferfolgt bereits in der Funktion readKeys. Beachten Sie, dass zur
Änderung der Geschwindigkeiten diese hier in Variablen gespeichert werden müssen

382
10.2 Press Any Key! -Interaktion per Tastatur

anstatt per #define. Vielleicht erscheint Ihnen das Ergebnis wenig beeindruckend, sind
doch solche Funktionen in jedem noch so kleinen Gerät eingebaut. Aber sehen Sie sich
den Code und dessen Länge an. So viele Zeilen sind notwendig, um etwas »Komfort« in
di e Bedienung eines kleinen Displays zu bringen. Dam it wird aber auch deutli ch, wie
viele Feh lerquellen in so einem langen Code möglich wären. Im Gegenzug sind die Mög-
lichkeiten nahezu unbegrenz t, und das ist ja das Schöne an der Soft- und Hardwareent-
wicklung.

[...]

II Variable, da per Tastatur änderbar!


i nt speed_A = 141 ; II 141 für Motor A
int speed_B = 128 ; II 128 für Motor B.

[ . 0 . ]

void rea dKeys()


{
byte buttans = 0;

II Text ausgeben
II Die Zahlen im Kommentar dienen nur zur Ori entierung .
II 1234567890123456
lcd . print ("Tast en druecken !");

II Cursor setzen und Text ausgeben


lcd .setCursor (0, 1) ;
II 1234567890123456
lcd .print( "SELECT = Fahrt" );

do
{
II Jetzt die Tasten des LCDs auslesen
but tans = l cd .readßuttons ();

if (buttons != 0)
{
II Cursor auf 0,0 setzen
l cd.setCursor (O,O);
II 1234567890123456
l cd .print ("SE LECT = Fahrt ");

383
10 Pimp My Robot!- Mögliche Erweiterungen

i f (buttons == BUTTON_UP)
{
II Speed B erhöhen
speed_B++;

II Überlauf!
if (s peed_B > 255)
{
speed_B = 0;
}

II Ausgabe der Werte auf dem LCD


printValues() ;
}

if (buttons == BUTTON_DOWN)
{
II Speed B verringern
speed_B--;

II Überlauf!
if (speed_B < 0)
{
speed_B = 255 ;
}

II Ausgabe der Werte auf dem LCD


printValues () ;
}

if (buttons == BUTTON_LE FT)


{
II Speed A verringern
speed_A-- ;

II Überlauf!
if (speed_A < 0)
{
speed_A = 255 ;
}

384
10.2 Press Any Key! -Interaktion per Tastatur

II Ausgabe der Werte auf dem LCD


printValues();
}

if (buttons == BUTTON_RIGHT)

II Speed A erhöhen
speed_A++;

II Überlauf!
if (speed_A > 255)
{
speed_A = 0;
}

II Ausgabe der Werte auf dem LCD


printValues() ;
}
} II buttans gedrückt
} while (buttons != BUTTON_SELECT) ;

II Hintergrundfarbe auf Weiß setzen


lcd . setßacklight(GREEN) ;

II Cursor setzen und Text ausgeben


lcd .setCursor(O,O) ;
II 1234567890123456
lcd . print( "Gute Fahrt .. . . . . ");
}

void printValues()
{
II Text ausgeben
l cd. setCursor(0 ,1 );
II 1234567890123456
lcd .print ("A: ") ;

II wenn Wert < zweistellig, mit Leerzeichen auffüllen


if (speed_A < 10)
{
lcd .print (" ");
}

385
10 Pimp My Robot! - Mögliche Erweiterungen

el se
{
II wenn Wert < dreistellig, mit Leerzeichen auffUllen
if (speed_A < 100)
{
l cd .print( " ");

lcd .print (speed_A) ;


lcd.print( " II B: ");

II wenn Wert < zweistellig, mit Leerzeichen auffüllen


if (speed_B < 10)
{
l cd.print( " ");
}
else
{
II wenn Wert < dreistellig, mit Leerzeichen auffüllen
if (speed_B < 100)
{
lcd .print (" ");
}
}
lcd .print(speed_B) ;
}

void setup (
{
[ ... ]

II Hintergrundfarbe auf Weiß setzen


lcd .setßacklight(WHITE);

II Tasten auslesen und abarbeiten


readKeys () ;

II Servo initial isieren und auf 90° stellen


SensorServo.attac h( SERVO) ;
SensorServo.write( 90 ) ;

386
10.3 Ich sehe was ... -weitere Sensoren

II Bot fährt j etzt gleich los!


II Daher noch ma l kurz nac h Tastendruck warten
delay ( 500 ) ;
}

void l oop(
{
[ ...]
}

Listing 10.8 Komfortable Änderung der Geschwindigkeiten mit Menü

10.3 Ich sehe was ... -weitere Sensoren


Wie Sie in Abschnitt 10.1, »Grundsätzliche Ansteuerung eines Displays«, und Abschnitt
10.2, »Press Any Key! - Interaktion per Tastatur«, gesehen hab en, gibt es bereits mit
einem kleinen Display und ein paar Tasten zahlreiche Möglichkeiten, Ihrem Roboter
neue Fähigkeiten beizubringen. An dieser Stelle möchte ich Ihnen noch ein paar An-
regungen geben, was Sie mit weiteren und anderen Sensoren an Ihrem Roboters so
basteln könnten.

10.3.1 Infrarotsensor zur Fernsteuerung


Mit nur einem kleinen Bauteil könnten Sie Ihren Roboterper IV-Fernbedienung oder
mit einerApple Remale Fernbedienung fernste uerbar machen. Denn beide nutzen Infra-
rotsignale, d ie Sie mit einem Sensor namens TSOP38238 an Ihrem Arduino einl esen
können (siehe auch Abschnitt 7.2.4) . Der Sensor wird lediglich mit drei Pins an Ihren
Arduino angeschlossen. Das Auslesen des Sensors mit dem Arduino ist gnmdsätzlich
simpel. Da aber die codierten Infrarotsignale von Fernbedienungen sehr viel fältig sind
und stets etwas variieren, ist das Dekodieren des Signals - also festzustellen, welche
Taste auf der Fernbedienung gedrückt wurde -leider nicht so schne ll erklärt. Ich lasse
Sie aber nicht allein damit. Sie finden eine hervorragende (englische) Anleitung mit
allen Sourcecodes bei adafruit5

10.3.2 Treppen- und Tischkantenerkennung


Haben Sie Ihren Roboter schon auf ein em Schreibtisch fahren lassen oder in einem
Treppenhaus? Nun, dann wird Ihnen nicht entgangen sein, dass der Roboter mit seinem

5 ilttps:/ / learn.adafruit.com/ ir-sensor/ using-an -ir-sensor

387
10 Pimp My Robot! -Mögliche Erweiterungen

einzigen Sensor zwar Wände oder Gegenstände auf dem Tisch erkennen kann, aber zie l-
sicher von der Tischkante oder eine Treppe herunterfallen würde. Um das Prob lem zu
lösen, könnten Sie Ihren Roboter an der Vorderseite einfach um einen weite ren Infra-
rotsensor erweitern, der nach unten oder noch besser wie eine Fahrrad lampe sch räg
nach u nten »sie ht(( (siehe Abbildung 10.6 ). Diesen zweiten Sensor fragen Sie wäh rend
der Fahrt zusätzlich ab.

Anders als bei dem bereits vorhandenen IR-Sensor (blaue Linie) müssen Sie hier in Ihrer
Software reagieren, wenn etwas vom Sensor z u weit weg ist (rote Linie) anstatt zu nah
dran . Denn der Abstand des zweiten Sensors zum Boden sollte ja immer gleich sein und
sich nicht verändern. Wenn der Abstand auf einmal zu weit wird, schaut der Roboter
sehr wahrscheinlich in einen nahenden Abgrund .

Abbi ldung 10.6 Ein zweiter Sensor zu r Treppen- bzw. Kantenerkennung

10.3.3 Der Roboter zählt Personen

Sie könnten Ihren Roboter mit einem zweiten Infrarotsensor auch so erweitern, dass er
Pers on en zählt, die einen Rau m betreten oder verlassen. Bauen Sie dazu an den Kopf des
Roboters einen weiteren IR-Sensor, der parallel in die gleiche Richtung sch aut wie der
erste - wie die Augen beim Menschen. Positionieren Sie den Roboter dann an einem
Zimmereingang wie in Abbildung 10.7, und nutzen Sie die Sensoren wie ein e Art Licht-
schranke. Wenn eine Person den Raum betritt (blauer Pfeil), trifft sie zuerst auf den rech-
ten Sensor (rote Linie). Wenn jemand den Raum verlässt, löst der linke Sensor (blaue
Linie) zuerst aus. Diese Ereignisse gilt es dann in Ihrer Arduino-Soft:ware auszuwerten
und mithilfe von Variablen zu zählen.

388
2 ; ~
10.3 Ich sehe was ... -weitere Sensoren
I
'

Wand


Abbildung 10.7 De r Robot er mit zwe i Se nsore n überwac ht eine n Ra um.

Personenanzahl nach Tastendruck mit LED signal isieren


Wenn Sie in diesem Beispiel den Roboter noch um einen Taster erweitern, könnten Sie
auf Knopfdruck die LED auf dem Arduino entsprech end der Anzahl der Personen, die in
Ihrem Zimmer waren, b linken Jassen. So wüssten Sie, wie oft jemand während Ihrer
Abwesenheit in Ihrem Zimmer war, ohn e dass diese Person es m itbekommt.

Pe rs onen anzahl nach Tast endruc k per Ton ausgeben


In Absch nitt 7.3.1 haben Sie gelernt, wie ein Piezo a ngesteuert wird. Erweitern Sie Ihren
Roboter zusätzlich um einen Piezo, und lassen Sie sich die Anzahl der Personen mit
Tönen ausgeben.

Perso nenanzahl auf dem LCD ausgeben


Nutzen Sie das in diesem Kapitel au sführlich vorgestellte Display zur Anzeige der Perso-
nen zahL Bedenken Sie jedoch dabei, dass das Display oben aufihrem Ardu ino die Buch-
sen vollständig belegt, wenn Sie neben dem LCD noch weitere Bauteile anschließen

389
~. 11
10 Pimp My Robot!- Mögliche Erweiterungen , ' . ,· , . . :'
'I , I

wollen - auch wenn das LCD nur wenige Pins nutzt. Sie könnten das in Abschnitt 7.2.7
vorgestellte Arduino Proto Shield nutzen, um zwischenDisplayund Arduino den Taste r
oder den Piezo einzubauen.

10.3.4 Bring mich ins Licht- der Helligkeitssensor

Sie können Ihren Arduino-Roboter auch mit einem Lichtsensor ausstatten. Dazu kann
ein sogenannter Fotowiderstand (englisch LDR. Light Depending Resistor; dt.lichtabhän-
giger Widerstand) genutzt werden .

Abbildung 10.8 Ein Fotowiderstand

Dies ist ein spezieller Widerstand, der seinen Widerstandswert in Abhängigkeit von der
Helligkeit ändert. Wie Sie mit dem Arduino so einen Widerstand anschließen und ausle-
sen können, ist im Intemet 6 beschrieben. Damit könnten Sie Ihren Roboter so program-
m ieren, dass er immer zur hellsten Stelle in einem Raum fährt. Damit würde er dann
auch einer leuchtenden Taschenlampe folgen, wenn das Zimmer sehr dunkel ist.

10.3.5 Reflexionssensor-Linienverfolgung

Bei Einsteigern ebenfall s sehr beliebt sind Roboter, die Linien fo lgen. Dafür werden
Linien mit schwarzem Klebeband aufweißes Papier geklebt oder mit einem dicken Filz-
stift aufgema lt. Dann wird der Roboter mit mehreren Infrarotabstandssensoren ausge-
stattet, die auf den Boden le uchten. Diese Sensoren haben eine hohe Empfindlichkeit,
sodass sie die Helligkeit des we ißen Untergrunds vom schwarzen Klebeband unter-
scheiden können. Ein gängiger Sensor dafür ist der QTR-BRC. Eine Anleitung daz u fin-
den Sie ebenfalls im Internet_?

10.3.6 Farbsensor

Es gibt fast keinen Sensor, den es nicht gibt. Warum also nicht auch einen Sensor, der
Farben erkennen kann ? Sie könnten Ihren Roboter damit durch das Zimmer fahren las-
sen und immer, wenn er auf ein Hindernis trifft, könnte er mithilfe eines Farbsensors

6 htlp://www.gunnarherrmann.de/ blog/ licht·sensorjur-den -arduino/


7 http://www.ins l ructables.com/ id/Ardllino-based-1inejollo wer·tiS ing-Polo/ u-QTR -8RC -1/a 11/?la ng=de

390
I 10.4 Spannendes- Energiemanagement

7 die Farbe des Hindernisses ermitteln und a uf einem LCD ausgeben. Sie könnten ihn
auch die gefundenen Farben zählen Jassen oder mittels RGB-LED anzeigen lassen. Ein
Bespiel für einen der zahlreichen Farbsensoren finden Sie im Jnternet. 8 Gängige Bild-
sensoren sind zum Beispiel der TCS230, der TCS3200 oder der ADJD-5371.

10.3.7 Bewegungssensor

Ihr Roboter als Alarmanlage ? Kein Problem! Schließen Sie einen Bewegungsmelder
(auch PIR, Passive Infrared Sensor, genannt) an Ihren Arduino an, und lassen Sie ihn im
Alarmfall mit einem Piezo piepsen. Auch für dieses sehr einfach nachzubauende Projekt
gibt es eine Anleitung im Internet. 9

Ein Link funktioniert nicht mehr?


Fa lls die angegebenen Links nicht funktionie ren sollten, verwenden Sie einfach die
+a
Suchmasch ine Ihrer Wahl, und geben Sie »Arduino« und den gewünschten Sensortyp
als Suchbegriff ein, also zu m Beispie l »Ardu ino Farbsensor«. Sie werden auf zahlreiche
Anleitungen stoßen, d ie Ihnen weiterhelfen, da s gewünschte Projekt zu starten.

10.4 Spannendes- Energiemanagement

Zum Abschluss dieses Kapit els möchte ich Ihnen noch praktisch vermitteln, wie Sie mit
Ihrem Arduino verschiedene Spannungen messen können. Damit könnten Sie zum Bei-
spiel später die Energieversorgung Ihres Roboters überwachen.

10.4.1 Spannungsanzeige

Wie Sie eine Spannung grundsätzlich mit Ihrem Arduino messen, h aben Sie bereits in
Abschnitt 7.2.4 bei der ersten Verwendung des Infrarotsensors gelernt. Zur Erinnerung:
Dieser Sensor gibt an seinem Ausgang eine Spannung von 0 bis ca. 3,1 Volt aus, die Sie
direkt von einem der analogen Eingänge AO bis AS einlesen können . Wenn Sie eine
Spannung mit der Funktion analogRead aus lesen, gibt diese einen Wert von 0 bis 1023,
entsprechend einer Eingangsspannung von 0 bis maximal 5 Volt zurück Da Sie in
Abschnitt 10.1.2 gelernt haben, wie Sie ein Display ansteuern, wär e es doch interessant,
diese Spannung auf einem Display anzuzeigen. Dazu benötige n Sie folgende Teile:

8 http://bildr.org/2011/ 01/ adjd-s371-tutorial/


9 http://J unduino.de/ index.php/3-programmieren/ nr-8-bewegungsm elder

391
10 Pimp My Robotl- Mögliche Erweiterungen

II II II II II II II II II II II II II II II II II I
Checkliste
einen Arduino Uno oder Ihren Roboter
ein Potenziometer z . B . 10 kQ

eine Steckplatine oder ein Arduino Proto Shield


drei Drähte bzw . Jum er Wires

Bau en Sie j etzt die Sch altung aus Abbildung 10.9 au f, und übertragen Sie das Programm
Spannung_messenl. ino au fi hren Arduino.

Abbildung 10.9 Ein Pote nziometer am Ard uino - hi er ohn e LCD-Shi eld10

I• Achtung, schwieriger Aufbau!


An dem fertig montierten Roboter ist es nicht sehr einfach, die Drähte an die Pins des
Arduino zu bekommen, da ja das Display bereits auf den Arduino -Buchsen steckt. Wenn
Sie den Aufbau so nachbauen wo llen, ist die Verwendung eines zusätzl ichen Arduino

10 Abbildun g e rs tellt mi t Fritzi ng

392
10.4 Spannendes- Energiemanagement

Proto Shields hi lfreic h, das zwischen LCD und Ardu ino gesteckt wird. Alternat iv testen
Sie das Programm ohne Disp lay: Die gemessene n Werte werden ebenfalls per Se ria l
Monitor (siehe Abschnitt 6.14.2) a usgegeben.

Da Sie bereits alle Befehle kennen und der Sourcecode vollständ ig mit Kommentaren
versehen ist, verzichte ich an dieser Stelle auf eine ausführliche Erklärung. Wenn Sie das
Programm übertragen haben, drehen Sie am Poti. Im Serial Monitor de r Arduino-Soft-
ware sehen Sie die gemessenen Sensor- und Spannungswerte zum Beispiel so, wie in
Abbildung 10.10 dargestellt.

190 0 /de"/tty.usbmodemfa141


I ( Senden )
.lcr ,::,ur-nt:r' L. 0::>;) .>pur u 1ur 'Y . :J • .)O VULL -- r-
Sensorwert: 693 Spannung: 3.38 Volt
Sensorwert : 693 Spannung: 3.38 Volt
Sensorwert: 693 Spannung: 3.38 Vol t
Sensorwert : 693 Spannung: 3.38 Volt
Sensorwert: 693 Spannung : 3.38 Volt
Sensorwert: 693 Spannung: 3.38 Volt
Sensornert : 693 Spannung: 3.38 Volt
Sensorwert: 693 Spannung: 3.38 Volt
Sensorwert: 692 Spannung: 3. 38 Volt
Sensorwert: 693 Spannung: 3. 38 Volt
Sensorwert: 693 Spannung: 3.38 Volt
Sensorwert: 693 Spannung: 3.38 Volt P:
1r -- t -) ~ I•
61'! Automatisch seroihm : Kein Zeilenende •: }!9600 baud :)

Abbildung 10.10 Sensorwert und gemessene Spannung im Serial Mon itor

10.4.2 Akkuwarner mitte ls Spannungsteiler


Wenn Sie später ma l einen Roboter mit einer 9-Volt-Batterie einsetzen und diese Span-
nung messen wollen, so können Sie sie nicht direkt auf einen der Arduino-Pins geben,
da diese nur maximal 5 Volt vertragen. Aber dafür gibt es eine wirksame Lösung : den
Spannungsteiler.

Die Funktionsweise eines Spannungsteilers soll darum hier kurz erläu tert werden.
Wenn Sie zwe i Widerstände in Reihe (also hintereinander) sch alten , so teilt sich die an
beiden Widerständen anliegende Gesamtspannung in Abhängigkeit vom Widers tands-
wert auf beide Widerstände auf. Um das etwas besser an einem Beispiel zu erklä ren,
schauen Sie sich bitte Abbildung 10.11 an.

393
10 Pimp My Robot!- Mögliche Erweiterungen , . · : , ' ··:· . _'.'- -· . .·

U=9V
I =20 mA

Abbi ldu ng 10.11 Ein Span n ungsteiler im Einsatz 11

Die Widerstände R1 und R2 teilen in Abbildung 10.11 die Spannung U auf. Das Ziel dieses
Spannungsteilers ist es, dass mit U2 maximal 5 Volt am Arduino-Pin anliegen. Da sich
die Gesamtspannung U aus der Summe von U1 und U2 ergibt, ist :
U 1 = U- U 2 = 9 V- 5 V =4 V
An R1 müssen also 4 Volt »abfallen «, damit 5 Volt für den Arduino-Pin übrig bleiben. Da
hier nur ein niedriger Strom fließen soll, wird l hier mit 20 mA fe stgelegt. Mithilfe des
ohmseben Gesetzes, das Sie in Abschn itt 7.1.4 kennengelernt haben, können Sie jetzt
den benötigten Widerstand R1 ausrechnen :

R1 = UI =~=200Q
I 20mA

R2 errechnet sich entsprechend:


U2 5V
R2 = - =- - = 250 n
I 20mA

Um die Spannung U2 für den analogen Eingang auf 5 Volt zu begrenzen, benötigen Sie
für R2 also maximal einen Widerstand von 250 n. Zur Erinnerung an das ohmsehe
Gesetz: Je kleiner der Widerstand ist, desto kleiner ist die an ihm abfallende Spannung
(bei gleichem Strom). Da nicht alle Werte produziert werden 12, nehmen Sie für R2 den

11 Abbildung ers te llt mil Fritzing


12 http:// de.wikipedia.org/ wiki/ E-Reihe
10.4 Spannendes- Energiemanagement

nächstkleineren Wert von 240 0, damit im Zweifelsfall eine geringere Spannung am Pin
anli egt. Für R1nehmen Sie den verfügbaren Wert von genau 200 0. Da sich der Wert von
R2 nun auf 240 0 geändert hat, können Sie U2 erneut ausrechnen, damit Sie die exakte
Spannung für den Arduino·Pin kennen und in Ihrer Software ven.venden können:
Uz = Rz X I = 200 n X 20 mA = 4,8 V

Perfekt! Somit liege n am Ard uino-Pin maximal4,8 Volt an. In Abbildung 10.12 sehen Sie
die fertig aufgebaute Schaltung. Achtung: Die Spannungsversorgung des Arduino selbst
ist hier nicht darges tellt!

Abbildung 10.12 Ein aufgebauter Spannungstei ler im Einsatz 13

Die Akkuüberwachung
Und in der Arduino-Software? Wie wird die 9-Volt-Spannung der Batterie gemessen und
ausgewertet? Da sich die 5 Volt am Arduino-Pin des Spannungsteilers im gleichen Ver-
hältnis verändern wie die 9 Volt, müssen Sie ledigli ch di e Zeile mit der map- Funktion aus
dem vorangegangenen Programm wie folgt anpassen.

II ))Umrechnen« von 0-1023 in 0-9 Volt


II
II Es wird gegen 900 gemappt , damit wir später 2 Nachkommmastellen haben!
spannung = map( sensorWert, 0, 1023 , 0, 900) ;

J3 Abbildung erstellt mit Fritzing

395
10 Pimp My Robot! -Mögliche Erweiterungen . · .

Damit sind Sie nun in der Lage, auch höhere Spannungen m it Ihrem Arduino-Board zu
m e sen! Praktisch, so ei n Spannu ngstei ler, oder? Damit kö n nen Sie le icht ein Pro-
gramm sch reiben, das die Akkuspa nnung m isst und eine entsprech ende Warn ung auf
dem Display ausgibt oder einen Piezo zum Piepsen bringt, wenn die Spann ung zu
gering wird - also ein en Akkuwarner.

10.5 Fazit

jetzt, am Ende d ieses Kapitels, haben Sie einen guten Eindruck davon gewonnen, wie Sie
Ihren Ardui no-Roboter durch wenige Bauteile oder fert ige Module erweitern können.
Zu Beginn erh ielten Sie eine ausführliche Anleitung, wie Sie ein RGB-LCD-Shield ansteu-
ern u nd dessen Tasten auslesen können. Danach gab es einige Tipps zur Erweiterung
Ih res Arduino- Boards oder Roboters mit verschiedensten Senso ren. Am Ende haben Sie
den Spann ungsteiler kennengelernt und erfahren, wie Sie diesen aufbauen und die
n ötigen Widerstan dswerte berechnen, um h öhere Spannungen als 5 Volt zu messen.

396
Kapitel11

Dev R<:>boi-ev L\\\~ ~ev Res+- ~ev We1+-


Vielleicht werden Sie mit Ihrem Roboter nicht gerade die Weltherrschaft überneh-
men. Aber zumindest sollen Sie in diesem Kapitel sehen, was noch alles mit Ihrem
Roboter und der Arduino-Piattjorm möglich ist.

Gegen Ende dieses Buches sollen Si e noch eine Vielzahl von Anregungen erhalten, was
Sie noch alles mit Ihrem Roboter realisieren könnten. Ich werde Ihnen hier zahlreiche
Beispiele geben, die Ihre Fantasie anregen sollen, mit diesem spannenden Hobby wei-
terzumachen. Es soll ihnen sozusagen »Lust auf mehr« machen.

11.1 Kommun ikation per Infrarot

In Abschnitt 10.3.1 erhielten Sie bereits einen Hinweis auf die Fernsteuerung Ihres Robo-
ters mit einer TV-Fernbedienung. Aber mit Infrarot lassen sich noch viel mehr Projekte
realisieren.

11.1.1 Com ing ho m e- Suchen einer Basisstation

Wenn Sie Ihren Roboter mit einem Infrarotempfänger ausstatten, ist er in der Lage, ver-
schiedenste Infrarotsignale zu empfangen und auszuwerten. Das muss nicht nur eine
TV-Fernbedienung sein. Wie wäre es, wenn Sie sich eine Basisstation für Ihren Roboter
bauen? Eine Art »Hundehütte «, nur eben für Ihren Roboter. Auf das Dach dieser Hü tte
könnten Sie einen Infrarotsender (eine sogenannte Jnfrarotdiode, kurz IR-Diode) mon-
tieren. Diese würde ständig ein Signal aussenden, das der Roboter erkennt. Sobald Ihr
Roboter in einem Raum ist, in dem sich die Basisstation befindet, könnte er immer zu
dieser hinfahren. So ein Sender wird übrigens auch IR-Bake genannt, weil er wie eine
Leitbake 1 im Verkehr den Weg weist.

., lmp://de. wikipedia.org/ wiki/ Leitbake

397
11.1 .2 Und was mach st du so ? - Ro boter ko mmuniz ieren
Viell eicht haben Sie diesen Roboter nicht allein, sondern mit Freunden zusam men
gebaut und haben zusammen sogar zwei oder mehr Roboter ? Dann könnten Sie meh-
rere Roboter mit Infrarot-Diode und -Empfänger aus rüsten . Dadurch wären die Bots mit
entsprech ender Software in der Lage, sich gegenseitig zu erkennen. Dazu müssen sie
nur jeder ein anderes Infrarotsignal aussenden, das der andere Roboter jeweils erkennt,
um darauf reagieren zu können. Oder Sie bauen auch noch einen Farbsensor und ein
Display auf die Roboter. Dann könnte der eine Roboter Farben im Raum suchen und
zählen. Wenn sich dann beide Roboter treffen, könnte der eine die Farbinformationper
Infrarot senden und der andere sie in seinem Display anzeigen - als Text oder durch die
Hintergrundfarbe seines RGB-Displays.

11.1.3 Alles im grünen Bereich?- Der Robot er als Gärt ne r


Sie haben noch ein weiteres Arduino-Board? Dann schließen Sie dort einen Feuchtig-
keitsm esser2 an u nd überwachen die Erde Ihrer Lieblingszi mmerpflanze. Auch von dort
könnten Sie ein Infrarotsignal aussenden, das Sie mit Ihrem Roboter zu erkennen versu-
chen. So könnte Ih r Roboter, wenn er ohnehin die ganze Zeit du rch die Gegend fä hrt, ein
»Gärtner« sein u nd zu Ihrer Pflanze fahren, wenn sie »durstig « ist und dieses per Piep-
ton signalisieren.

11.2 Kommunikation mittels Sprache

Wen n Sie schon einen Roboter bauen, dann so llte er doch auch e ines Tages sprechen
oder gar Sp rache verstehen können. An dieser Stelle gebe ich Ihnen ein paar Tipps rund
um natürliche Sp rache.

11.2.1 Hello world!- Sprachausgabe für den Roboter


Sprachausgabe ist bereits mit einem kleinen Arduino möglich - wenngle ich auch der-
zeit nur in Engli sch. Mit hilfe des Emic 2 Text-to-Speech-ModuJs3 ist es möglich, Text in
Sprache umzu wande ln u nd damit Ihrem Roboter eine ech te Spracha usgabe zu ermög-
lichen. Der Hersteller Para/lax stellt dafür fertigen Source-Code für den Arduino zur
Verfügu ng. 4

2 http:// www.dietma r-weisser.de/elektron ik-projekte/ analog tech ni k/s ensoren/ bodenfeuch tesensor
3 http://www.ada.fruit.com/products/924
4 http:// www.pa ra llax.com/ down Ioads/ em ic-2-ard ui no-exam ple-code

398
11.2.2 Sirnon befiehlt- Spracherkennung für den Roboter

Nicht nur die Ausgabe von Sprache ist durch Erweiterung Ihres Roboters möglich. Sogar
eine sprecherunabhängige Spracherkennung ist mit dem zusätzlichen EasyVR Arduino
Shield 5 machbar. Damit können Sie Ihrem Roboter verschiedene Sprachkommandos
beibringen. Dann könnte er auf Sprachkommandos wie »Losfahren! «, »Stopp! « oder
»Umdrehen!« hören. Das Modul versteht übrigens nicht nur deutsche oder englische
Wörter, auch französische, italienische, spanische oder japanische Befehle sind m öglich.
*'
(:.'? b 60 '? tJ' (: ? ~ :A -1- P -.y 1- - Dömo ariga tö, Mr. Roboto! 6

11.3 Steuerungper Bluetooth

Nutzen Sie doch ein iPhone oder iPad, und ste uern Sie Ihren Roboter per Bluetooth.
Dazu benötige n Sie für Ihren Roboter zum Beispiel das Adafruit Bluefruit LE-Modul, das
die Bluetooth-Signale empfängt und dem Arduino bereitstellt. Eine vollständige (engli-
sche) Anleitung dazu finden Sie im Internet?

11.4 Internet of Things- Da s Internet der Dinge

Wenn denn heute sch on fast jeder Kü hlschrank oder jede Waschmaschine mit dem
Intern et verbunden ist, warum nicht auch Ihr Roboter? Erweitern Sie ihn dazu um das
in Abschnitt 7.2.6 gezeigte Arduino WIFI Shield, und lassen Sie Ihren Roboter damit
Bestandteil des »Internets der Dinge« (englisch Internet ofThings, kurz JoT) sein. Eine
ausführliche (englische) Anleitung für das WIFI Shield finden Sie unter anderem auf der
Ard uino- Projektse ite.8
Damit könnten Sie Ihren Roboter in ein WLAN einbinden und ihn vielleicht Malls se n-
den oder twittern Jassen. Sie könnten eine Software entwickeln, die aufi hrem Computer
läuft und de n Roboter aufeine m Disp lay sign alisieren lässt, dass neueMails empfangen
wurden. Oder Sie könnten ihn Teile der Mai! per Spracha usgabe (siehe Abschnitt 11.2.1 )
vorlesen lassen.

5 http://www. veear.eu/ products/ easyvr-arduino-shield/


6 http:// de.wikipedia.orgj wiki/ Mr._ Roboto
7 http://makezine.com/ projectsjcontrolling-a-lock-with-an-anldino-and-bluetooth-le/
8 http:// arduino.ccj en/ Guide/ Arduino WiFiShield

399
+ Tipp
Wen n Sie sich mehr für das Thema >>Internet of Things und Arduino « interess iere n,
sc hauen Sie sich doch mal den Spark Core an! Das ist ein sehr klein es Open -Source-
Arduino-Modul mit ei ngebautem WLAN -Chip- ein sehr kompaktes Mod ul mit zah lrei-
chen fertigen Projekten, die auf der Website des Herstellers beschrieben sind 9

11.5 Fazit

Wie Sie in diesem Kap itel gesehen haben, gibt es diverse Möglichkei ten, einen Roboter
mit weiteren Fähigkeiten auszustatten. Ich habe an dieser Stelle bewusst »nur noch<<
Verweise auf bereits bestehende Anleitungen oder Beispiele im Intern et gegeben . Da Sie
jetzt ausreichend Erfahrung mit der Entwicklung und Programmierung von Arduino-
Projekten haben, werden Sie sicher verst ehen, dass die hier aufgeführte n Anregungen
alle nicht »mal eben so « programmiert oder erklärt si.nd - sie würden schli cht und ein-
fach den Rahmen dieses Buches sprengen. Aber bestimmt geht es Ihnen auch so wie
mir, dass Sie allein durch solche Gedankenanregungen bereits einige Ideen entwickeln,
mit welchem Modul Sie Ihren Roboter als Nächstes erweitern könnten. Und genau das
ist das Ziel dieses kurzen Kapitels.

9 https://www.spark.io

400
Kapitel12

CSc~ll.\SSwovi-
'
Schluss mit lustig : Das war es nun wirklich. in diesem Kapitel erhalten Sie eine
allerletzte Zusammenfassung und ein paar Ideen, was Sie mit Ihrem Roboter noch
so anstellen könnten.

Ich ho ffe, Sie hatten genauso viel Spaß beim Basteln mit Ihrem Arduino-Roboter wie
ich. Und ganz nebenbei haben Sie auch noch eine Menge über die Ard uino-Piattform
gelernt. Viele wichtige Grundlagen habe ich für Sie in d iesem Buch zusammengefasst.
Nach der Einleitung in Kapitell, »Don't panic!- Einleitung«, erhielten Sie in Kapitel2,
»Wir sind die Roboter «, einen Überblick über verschiedenen Arten von Robotern und
lernten, was Sensoren und Aktaren sind. Erinnern Sie sich noch an den Schlangenro-
boter?

In Kapitel3, »A rten der Programmierung <<, habe ich Ihnen kurz die Unterschiede zwi-

schen grafischer und textbasierter Programmierung gezeigt.
In Kapitel 4, >> Die Arduino-Plattform «, konnten Sie lesen, wie das Arduino-Projekt sei-
nerzeit entstand, und erh ielten einen erstenÜberblick über die Bestandteile Ihres Robo-
ters. Außerdem haben Sie die Arduino-Software installiert. Zusätzlich wurden dort alle
Pins des Arduino -Boards ausführlich beschrieben.
In Kapitel 5, >>Die kleine Werkstatt «, wurde es dann etwas praktischer: Ich habe Ihnen
die Werkzeuge gezeigt, die Sie für den Bau des Robot ers benöt igen, und Ihnen ein paar
Empfehlungen gegeben. Des Weiteren konnten Sie in diesem Kap itel auch das Löten
erlernen.
Kapitel 6, >> Programmiergrundlagen «, brachte Ihnen ausführlich das Programmieren
des Arduinos bei- selbst wenn Sie noch nie zuvor etwas programmiert hatten.
ln Kapitel 7, >> Los geht's! - Erste Praxis «, ging es endlich >> ran an die Hardware«. Sie
haben Ihr erstes Programm »Blinky« geschrieben . Erinnern Sie sich? Weiter ging es mit
der Ansteuerung bzw. dem Auslesen von IR-Sensor, Taster, Servo, Piezo und einem
Motor. Dazwischen gab es noch einen Überbli ck über diverse Ard ui no-Shields.

401
Jn Kapitel 8, »Keine Schraube locker - Die Montage des eigenen Roboters «, bekamen Sie
eine ausführli ch bebi lderte Anleitung über den Zusammenbau des Roboters, der am
Ende getestet wurde.

Die erste Fahrstunde hatte der Bot dann in Kapitel 9. »Driv e m e crazy? - Die erste
Fahrstunde «. Er lernte nicht nur die Grundrichtungen, sondern auch die Hindernis-
erkennung und -vermeidung.

In Kapitel lO, »Pimp My Robot! - Mögliche Erweiterungen «, konnten Sie lernen, wie der
Roboterm it einem Display erweitert werden kann und wi e dieses samt Tas ten program-
miert wird. Am Ende gab es einen Überblick über zahlrei che weitere Sensoren, und Sie
haben gelernt, wie Sie mit einem Spannungsteiler hohe Spannungen mit dem Arduino
messen können.

Im vorletzten Kapitel 11, »Der Roboter und der Rest der Welt«, habe ich Ihnen noch
einen Überblick über die zah lreichen Erweiterungsmöglichkeiten Ihres Roboters oder
Arduinos gegeben- von Sprachsteuerung bis >> lnternetanschluss«.

Und wa s jetzt ? - Ideen für e igene Proje kte


Bestimmt haben Sie jetzt schon ganz vie le Ideen, was Sie alles mit Ihrem Roboter noch
so anstellen könnten. Leider muss jedes Buch einma l enden, so auch dieses. Aber eine
kleine Liste m it unterschiedlichsten Ideen soll hier am Schluss doch noch folgen. Die
Pu nkte an ihrem Ende werden vermutli ch immer für weitere Projekte st eh en.
~ Roboter für den Außeneinsatz
- im Sommer: Rase nmähen
- im Winter: Schneeschieben
~ Roboter mit Greifarm
~ Roboter, der Pflanzen gießt
.". Ro boter mit Kamera, der Fotostwittert
.". Roboter, der eine Tasse Kaffee bringt
.". Roboter als Maus umbauen- als Katzenspielzeug
.". kleine Roboter mit kleinere r Ardu ino-Hardware
.". Roboter m it Arduino Nano in eine Comp utermaus bauen, die wegfahrt
.". Roboter als Haustier, das Streicheleinheiten auf seinem Sensor w.ill

Woraufwa rten Sie noch? Legen Sie los !

402
Index

Index

#define ......................................................................... 143 Arduino Due ................................................................. 66


3,3 V ..................................................... .... ......................... 64 Arduino Es plora .......................................................... 67
SV ..................................................................................... 63 Ardu ino Ga lileo ........................................................... 41
Ard uino Micro ............................................................. 69
Ard uino Motor Shield ........................................... 216
A Arduino Nano .............................................................. 69
Ardui no Proto Shield .................................... 219, 390
Abisolierza nge .......................... ................................ 104
Ardu ino Roboter ....... .................................................. 67
Ablau fp la n ............ ........................................................ 46
Ard uino Uno ................................................................ 54
Acryl .............................................................................. 269
Arduino WIF! Shield ............................................... 399
Acrylglas ................................... .. ................................. . 77
Arduino Wireless SD Shield ................................. 217
Adafrui t ..................................................... ......... 358, 387
Ardu ino Yun ................................................................. 41
Adapte r ........................................................................ 362
Arduino-S hi eld ......................................................... 216
Akk u ................................................................................ 73
Argument ................................................................... 158
Akk uh alter .................................................................... 74
Array ............................................................................. 151
Akkuüberwachung ................... ............................... 395
ATmega .......................................................................... 37
Akk uwarner ................ ............................................... 393
ATmega16 ..................................................................... 78
Aklor ........................ ................................................ 34, 35
Atme! ............................................................................... 37
Aktuator ........................................................................ 35
Auflad ung
Aldebaran Robot ics ................................................... 22 statische .................................................................... 54
Allradantrieb ........................... .................................... 27 Ausgang ....................................................................... 165
Alte rnativ en zum Arduino .................................... 38
auto nom ........................................................................ 21
analogRead ................................................................. 391
Android .......................................................................... 33
Anregungen ............................................................... 397
B
Anzeige ........................................................................ 166
App ............................ ...................................................... 33 Bas isstat i.on ............................................................... 397
App le Remote Fernbed ienung ........................... 387 Batterie ........................................................................... 73
Arbeitsge rä t ....................................................... .......... 97 Batterieh alter ............................................................... 74
Ardui no Baud .............................................................................. 169
Benutzer-LED ........................................................... 57 Bausatz ........................................................................... 18
Ein - und Ausgänge ......................................... 57, 60 BeagleBoard .................................................................. 40
Hardwarereferenz .................................................. 55 BeagleSone ßlack ........................................................ 40
12C-Schn ittstelle ..................................................... 60 Ben utze rverzeichnis ................................................. 79
!CSP-Stecker 1 .......................................................... 58 Betriebssystem ..................................................... 38, 78
!CSP-Stecke r 2 .......................................................... 57 Bewegungsmelder .................................................. 391
Mikrocontroller ...................................................... 58 Bezeichn r ......................... ......................................... 138
Mo ntagepunkt ........................................................ 58 Bibliotheken .............................................................. 176
Power-LED ................................................................. 58 Biegelehre ................................................................... 111
Reset-Taster .............................................................. 56 Bild schirm .................................................................. 166
Stromversorgung ................................................... 59 Binärsystem ............................................................... 139
Stromversorgungsbuchse ................................... 59 Bit ................................................................................... 139
Übertragungs-LED (TX/RX) .............................. 58 Blinklicht ....................................................................... 35
USB-Buchse ...................................................... ......... 60 Bl inky .... ................................................................. ...... 179
Versionsnummer .................................................... 55 Block .......................................................... 145. 150. 162

403
1 Index

Bluetoot h .................................................................... 399 Dra h t ................................................. .............................. 72


boolea n ........................................................................ 142 Dre h za h l ...... ................. ...... ......... ..... .............................. 75
Boolesche Operatoren ........................................... 146 Dritte Ha nd ......................... ....................................... 112
Bootloader ......................................... ........................... 58 Dualsys te m ........................... .. ................... ................ 139
Bot Makers .................................................................... 70 Du rchflu ssspa n n un g ................. .. .......................... 190
Bou nce ............................. ............................................ 203 Durchgangsp rü fe r ............ ....................................... 331
Bread boa rd ............. ................................ ...................... 99 Du rch ko ntakti e run g ........................ ............. 119, 127
break .......... .. ................................................................. 149
Buchse ............................ ..................... ......................... 326
Buch se nle iste ............................................................ 362 E
Bug ................................................................................. 166
Buzze r ........................................................................... 221 Eclipse ....................................... ..................................... 91
Ein-/ Au sgä n ge
Byte .................................................................... 138, 139
digirale ....................................................................... 62
Ein ga ng .......... ............... .. .. ........................................... 165

c analoger ......... ...... .... ....................................... 63, 391


Eins ti egspla ttform ............................. ........................ 32
c ............................................................................... 16, 131 Ele kt ro m o to r .. .............. .. .............................................. 35
16
( ++ ............ ............. .. .......... ..... ........ .... ............. .. .. .. .... .. .... else ................................................................................ 147
case ...... .......................................................................... 149 End lossc h leife ...... .... ..... ....... .. ... ................................ 152
Chass is ............................................................................ 77 En e rgie manage m e n t ............................................. 391
Code .............................................................................. 131 Energ ieversorgung ................................................. 391
Comm u n ity ................................................................. 17 Entfe rnung ..................... ....... .. ........ ............. .............. 210
Com piler ............................................................... 91. 137 Entfernungsan zeige ............................................... 369
const ....................... ..................................... .......... ....... 142 Ent prellen .. ............ ........ ............................................. 204
CP U ....... ................................ ........ ..... .............................. 4 1 En tw icklungs um gebung ......................................... 91
Curiosity ........................................................................ 28

F
D
Fa hrt ri ch tun g .... ...... ................. .... ...................... ...... 337
Dashboa rd .................................................................... 90 fa lse .................................................................. ............. 143
Dat e nty p ..................................................................... 137 FAQArduino ................................................................. 54
boolean ................................................................... 142 Farbse n sor ...... ..................... .. .. .. .......................... ...... 390
byte ........................................................................... 138 Fehlermeldu ng ......................................................... 187
jloat .......................................................................... 141 Feh lers uch e ......... .............................................. 187, 253
int .......... ............... ..................................................... 140 Fernb di e n ung ................. .................. ...................... 387
lang ........................................................................... 141 Feuerzeug ................................................................... 109
Debugging .................................................................. 166 Fin der .................................................. ............................ 84
Dekla ra tion ...................................................... 137, 151 Firm wa re .......... ................ ............. .............................. 183
delay ................. ............................................................. 164 Flach za nge ............. .. .... .. ............................................. 110
Dezimal system ......................................................... 139 tlash e n .......... .. .. .. .. .................. ... .................................. 183
DF KI ................................................................................. 23 fl oat ...................... ............ .... ......................................... 141
Display .................................. .. .............................. ....... 357 Fluss m itte l ................................ ........................ 106, 120
do ...whi le .............................. ....................................... 15 3 fo r .................. ................. ............................................... 151
Dokum entatio n ........................................................ 135 Form atierung ............. ................. .............................. 382
Download ............................................................... 18, 78 FORMU LOR .................................. .............................. 269
Doxygen ...................................................................... 135 forwa rdva ltage ........................................................ 190

404
Index

Fotowidersta nd ........................................................ 390 Infrarotdistan zmesser .................................... 75, 208


l'reiheitsgrad ...... ......................................... ................. 22 In fTarotd ista nzse nsor ................... ..................... 35, 75
Frequen z ...................................................................... 225 Infrarotemp fa nger .................................................. 397
Fritzing ....... ......................... ......................................... 117 lnfrarot-LED ............................................................... 207
Funktion .. ................... .... ............... .................... 154, 183 Infrarotsen der ..... ..................................................... 397
Infrarotsensor ............................................... ............ 206
Infraro tsig nal ............................................................ 387
G lni tia lisierung ........................................ 138, 151, 169
INPUT .................................................................. 143, 165
Ganzza h l .................. .. ................................................. 140
INPUT PULLUP ........................................................ 165
Getriebe ................................................................ 75, 230
Installation .................................................................... 78
Getriebemotor ...................... ...................................... 75 lnstall er .......................................................................... 79
Gle ichstrommotor ................................. 75, 239. 24 1 int .................................................................................. 140
Gl eich ze itigkeit ......................................................... 377 In teger .......................................................................... 140
GND ............. .......................................................... 61, 321 In tegrated Circuit (In teg ri erter
GPIO .... ............................................................................ 41 Schaltk reis) ..................................................... 37, 243
GPU ............... ............................................................... .... 42 In te rface ......................................................................... 60
Grafische Oberflä che .......... .... ................. ................. 91
Intern et ........................................................ ............... 399
GSM Shield ................................................................. 219 Internet ofThin gs (IoT) ......................................... 399
GUI ................................................................................... 91 iOS .................................................................................... 33
Gü ltigkeitsbe reich ................................................... 159 iPad ........................................................................ 33, 399
iPhone .......................................................................... 399
IR-Bake ......................................................................... 397
H IR-Diode ...................................................................... 397
Ha ndyn etz .................................................................. 219 lR· LE D .................................................................. ......... 207
HO-Kamera .................................................................. 23 IR-Sensor ..................................................................... 207
HDM I ..................................................... .................. 40,41 Iso lierba nd .................... ............. .......................... ...... 114
He iß kleber .................................................................. 268 Isolie rung ................................................................... 104
Helfende Hand .......................................................... 112
Helligke itssen sor ..................................................... 390
HIGH ............................................................................. 143 J
Hinderni sanzeige .................................................... 364 Jumper Wire ................................................ 72, 97, 100
Hi nde rn iszä hl ung ................................................... 372
HiTEC ............................................................................ 362
I-I -Sch alt u ng ............................. .................................. 241
K
Hu m ano id .................................................................... 22
Kabelbinder ............................................................... 115
Kabelm esse r ........................................................ ...... 104
Ka lte Lötste lle .................................................. 122, 129
Ka m era ........................................................................... 34
12C ........................................................................... 60,358 Keypa d .......... ............................................................... 358
IC ..................................................................................... 243 Kinect-Kamera ............................................................. 34
!C --> In tegrated Circui t Klasse ............................................................................ 168
lcon ............................................... ................................... 92 Klebeba nd .................................................................. 267
JCSP ........................................................................... 57,58 Konstante ................................................................... 142
IDE .................................................................................... 91 Krokoklemmen ........... ............................................. 102
if ...................................................................................... 145 Kuge llager ..................................................................... 24

405
Index

l Menüsteuerung ....................... .......................... ...... 382


Messgerät ......... ...................... ........................... 108, 331
L298 .......................... ...................................... ............... 243 Microsoft Kinect ....................... .................................. 34
LabView ......................................................................... 49 Mikrocon trol ler ................................................... 37,45
Ladegerät ....................................................................... 73 Mikrofon ........................................................................ 34
Laser ....................................... ..................... ......... ......... 269 Mode llbau ........... .... ..... ............................ .... ...... ........ 230
Layer ............................................................................. 119 mod ula ris ieren ......................................................... 154
LC D .............................................. .................................. 357 Mo n tnge ...................................................................... 263
LDR ................................................................................ 390 Mo tor ........ ................................................................... 239
Legierung .................................................................... 120 Moto r 5hi eld ....................... ....... ......................... 71, 242
LEGO Minds torms ..................................................... 39 Motora nsteuerung ........................................ 239, 244
Leiterbahn ............. ..................................................... 119 Motorwelle .............. .. ...... .... ....................................... 239
Libraries ....................................................................... 176 Mu ltilayer ................................................ ................... 119
Lichtschranke ............................................................ 388 Mu ltilaski ng .................. ............................................ 377
Lichtsensor ................................................................. 390 Musikinstrument .................................................... 225
LilyPad Arduino USB ................................................ 68
Lin ienverfolgung ..................................................... 390
Linker ..................................................................... 91. 137 N
Linux ........................................................................ 41, 78
Litze ........................................................................ 72, 114 Nao ................... ..................................................... .......... 22
Lizenzbedingungen .................................................. 80 NASA ........................... ............................. ...... .............. 28
Lochrasterpla tine .................................................... 116 Netzteil ........................................................................... 59
long .................... ............................................................ 141 Note ..................................................... ......................... 225
loop ............................................................................... 163
Lötauge ..................................................... ................... 119
Lötbrücke ................................................ ................... 11 7 0
Lötdauer ...................................................................... 128
Ohmsches Gesetz .................................................... 394
Lötkolben .................................................................... 105
Open Source ................................................................. 40
Lötpunkt ................................ .... ............. ..................... 119
Ope rator ............................................................. 144, 146
Lötstation ............... ..................................................... 105
Opport unity ............... .................................................. 28
Lötstelle
OUTPUT .............................................................. 143, 165
ka lte ............................................................................. 97
Lötstopplack ............................... ............................... 120
Lötvo rgang ................................................................. 128
p
Löt zi nn .......... ............................................................... 106
LOW ............................................................................... 143 Pa ramete r ................................................................... 157
Lupe ............................................ ................................... 112 Pa ram eterliste .......................................................... 158
Lüsterklemme ........................................................... J 13 Periodendauer .......................................................... 232
Piezo ........................................ ............................ 141, 221.
Piezoschallwand ler ................................................. 221
M Piezosig nalgeber ...................................................... 221
pinMode ...................................................................... 165
Mac OS X ................................................................ 78, 83
Pi nzette ....................................................................... 111
male ................................................................................. 72
P!R .................................................................................. 391
map ............................................................................... 214
Platine
Mars roboter ................................................................. 28
Masse .............................................................................. 61
doppelseilige ........................................................ 119
Meca num-Rad ......................... .................................... 27
einseilige ................................................................ 119
playTone .......... ............ ........ ............. .......................... 224
Me lodie ........................................................................ 225

406
Index

Plexiglas ........ ................................. .... .. ......................... 77 RESET ............................................................................ 375


PodcasL ............ ..... ........................... .................. ............. 18 Reset ......................................................................... 56, 64
Polymcthylm ethacrylat .......................................... 77 Reset-Taster .................................................................. 55
Potenziome ter .................................. .... .... ................ 230 RGB-LED ...................................................................... 39 1
Poti ...................................................................... 230, 363 RoboCup ........................................................................ 22
Präprozessor .............................................................. 143 Roboter
Prellen .......................................................................... 203 Arduino-Roboter .................................................... 26
print ...... ................................... .......... ........................... 170 Arexx RP6 V2 ........................................................... 29
println ........................................... ............................... 170 Arten ........................................................................... 21
Programmablaufplan ........................ ...................... 45 Bestandteile ............................................................. 34
Programmbeispiele Crex ............................................................................. 23
Download .......... ........................................................ 18 Curios ity ........................... .. ....................................... 28
Programm ieren ...................... .................................... 45 direcsl ........................................................................ 28
Programm iersp ra che .......................... .. ................. 131 dreirädriger ....... ....................................................... 24
Programmiersti l ....................................................... 131 Entwicklungskosten ............................................. 21
Prog rammierumgeb ung ........................................ 49 mit Raupenantrieb ................................................ 29
Programmierung ................... .................................... 45 MURCS ....................................................................... 25
grafische .................................................................... 45 Nao .............................................................................. 22
Grundlagen ........................................................... 131 OpenROV .................................................................. 32
textbasierte .............................................................. 49 Preis ............................................................................. 21
Programmoberfläc he ... ............................................ 92 Schlangenroboter .................................................. 30
Programmsch leife ................................................... 163 Sechsbeiniger ........................................................... 2.3
Projektwebseite .......................................................... 53 sechsrädriger ........................................................... 28
Protoboa rd ................................................................... 99 Tauchroboter ........................................................... 31
Prototyp ........................ ............................ ........... 99, 219 Uncle Sam ................................................................. 31
Pull·down-Widerstand .......................................... 198 vierrädriger .............................................................. 27
Pu ll-up-Widers tand ...................................... 165, 198 zweibeiniger ............................................................. 2.2
Pulsdauer .................... ................................................ 232 zweirädrig er ............................................................. 24
Pulswe itenmodulation ......................................... 191 Roboterkit ..................................................................... 17
Pu lsweitenmodulation (PWM) ....... 190, 191,232, ROBOTS·iPad·App ...................................................... 33
253,334 Routine ............ ............................................................ 158
RP6 ................................................................................... 29
Rückgabewert ....................................... ............. ....... 154
Q Rundung ..................................................................... 172
RX ...................................................................................... 59
QTR-8RC ....................................................................... 390

R
s
Schalter ........................................................................ 196
Rad Schaltung
aktives ........................................................................ 24 Prototyp .................................................................... 99
Mecanu m .................................................................. 27 Schlangenroboter ....... ................................................ 30
passives ...................................................................... 24 Sch leife ...................................... .................................. 150
RAM ....... ........................................................................ 139 do ... while ................................................................ 153
Ras pbcrry Pi .......................................... ....................... 41 Jo r .............................................................................. 151
Raupenantrieb ............................................................ 29 fußgesteuert .......................................................... 154
Referenz ........................................................ ............... 163 kopfgesteuert ....................................................... 152
Rei henscha ltung ...................................................... 393 whi/e ......................................................................... 152

407
Index

Schlitzsch raube nd reher ........................................ 110 Steckverbinder


chnittstelle ................................................................. 60 Je ma le ......................................................................... 72
Schrittmotor .............................................................. 240 männlich ................................................................... 72
Sch rum pfs chlauch .................................................... 76 Stepper .......................................... ........... .................... 240
Schwamm ................................................................... 107 Stromsensor ................................................................. 35
Serateil ........... ....................... ....................... ................... 46 Stromversorgung ......... .................................. 236, 323
SO-Karte ........................... .............................................. 40 Stromversorgungsbuchse ........................ .............. 59
SD-Kartenleser ............ .............................................. 218 Stromversorgungstest ... ................................ ....... 330
Seele .............................................................................. 120 Stuhlbeinproblematik .................................. 238, 344
Seiten schneider ........................................................ 103 Stütz rad ...................... .. ........................................ ... 24, 76
Semikolon ................................................................... 137 Summer ....................................................................... 221
Sensor ................................................................... . 34. 206 Supportforum .................... ................ .......................... 54
Infrarotdistanzsensor .......................................... 35 switch ... case ............................................................... 149
Strom sensor ............................................................. 35 Symbol ............................................................................ 92
Ultraschallsensor ................................................... 35 Syntax .......................................................................... 155
Sensortest ................................................................... 331 System-on-a-Chip ....................................................... 37
Serial ............................................................................. 168
Serial Monitor .......................................... 63. 169, 393
Serial.beginO .............................................................. 169 T
Servo ......... ...................................................... 35, 74, 230
Servoansteuerung ............................................ 94 , 233 Taster ................................................ 200, 358, 374,389
Servoarm ........ ............................................................. 230 Tauchroboter .......... .......... ........................................... 31
Servotest ................................. .. ............. ..................... 330 Teilelis te .............. ...... ............... ............... ................... 264
Servowelle .................................................................. 230 Temperatur .................... .... ........................................ 128
setup ................................................................. ............ 162 Testkabel ....... ...... .............. .. ........................................... 72
Shadowing .................................................................. 162 Text-ta-Speech ......................................................... 398
Sh ield ..................................................................... 64, 176 TFT Touc h Shield ...................... ............................... 218
Sicherheits brille ....................................................... 102 Thi ngiverse ................................................................ 270
Sicherheitshinweis .................................................... 54 TinyDuino ..................................................................... 69
Signal ............................................................................ 220 To le ran z ..................................................................... 336
Sketch ........................................................................... 131 Töne ............. ............................................ ..................... 221
Sketchboc k ................................................................. 131 tone .............. ................ ....................... .......................... 224
SMD ...................................... ........................................... 65 Touchscreen .............................................................. 218
Sn60Pb40 .................................................................... 120 Treiber ......... ..................................... ............................... 78
SoC ................................................................................... 37 Treiberinsta llat ion ................................ ..................... 78
Spann un g messen ................................................... 391 Trimm er ..... ...................................... ..................... ...... 363
Spann ungsanzeige .................................................. 391 Troubleshooling ...................................................... 187
Spannu ngsteiler ....................................................... 393 tru e ....................................................... ................... ...... 143
Spirit ............................................................................... 28 TSOP38238 ................................................................. 387
Spitzzange ................................................................... 110 TWI ................................................................................... 61
Sprachausgabe .................. ................................. 23, 398 Twi tle r .................... .. ........................................... 218. 399
Spracherkennung .................................................... 399 TX ........................................................................... ... 59, 62
Sprachreferenz ................................. ........................... 54
Stabilisierung .............................................................. 24
Steckbrücke ................ .................................................. 72 u
Steckplatine ................................................................. 99 Übe rl auf ................................................... 140, 176, 382
Aufbau ........................................................................ 99
Überwachung ............................................................ 388

4 08
Index

Ubuntu ............ ............................................................... 86 W


Ultrasc hallse nso r .............................................. 35, 215 -----------------
Unterprogramm .................................................. .. .. 158 wasse rdich t ................................................................... 32
Unte rsetzu ng ..................................... ...................... .... 75 weibl ich .......................................................................... 72
Upload .............................................. ...... ........................ 58 Werks ta tt ....................................................................... 97
USB-ß uchse ................. ........................................ 59, 168 Werkzeug ....................................................................... 97
USB-Schn ittste lle Werkze ugliste ........................................................... 265
serielle ... ................................................................... 168 whi le ............................................................................. 152
Widerstandswert ..................................................... 188
WI FI Shield ................................................................. 218
V Windows ................................................................. 78, 79
Windows lnstali er ...................................................... 79
Varia ble ...................................................................... 137 Wire .................................................................................. 61
anzeigen ................................................................. 171 WLAN ................................................. 39, 218. 399, 400
globale ..................................................................... 159
lokale ....................................................................... 159
Ve rd rahtung X
feste ............................................................................. 97
fliegende .................................................................... 97 Xcode ............................................................................... 91
Ve rgleichsope rato r ................................................. 146
Ve rkabelung ................................................................. 97
Verlöten ....................................................................... 114 z
Ve rzögerung ............................ .......... ........ ............ .... 164
Zähle n .......................................................................... 388
Video ............................................................................. 270
Zusamme nbau ......................................................... 263
Vin ................................................................ 63. 320, 326
Zuweisu ng .................................................................. 137
Visual Stud io ............................................................... 91
void ...................................................................... 155. 338

409
EI~ \RAVt--\ WIRD WAHR: IHR ER$\ER EIGE~ER Roßo\ERJ
R2- D2 , Marvin, T-800 : jetzt ho len Sie sich coole Roboter nicht mehr nur auf dem Bil dschi rm
nach Hause. De nn mit diesem Buch steu ern und erweitern Sie ei n echtes Rob ote rmodell Schritt
für Schritt. Bevor Sie es bauen, erh alte n Sie eine Robotik- und Elektronik- Einfü hrung und
lernen den Ardu ino kenne n und programmi eren. Also, ran an die Teile!

>>WiY si\\J.. J..ie Ro"ot-eY« - GY V.\\J..l 01.~e \\ ve Yst-el-.e \\


Welche Arten von Robotern gibt es? W ie funktioni ert der Arduino im
Detail? Welches Werkze ug benöligen Sie und wie geht das mit dem Einführung in di e Roboti k
Löte n? Al le Antworten und viele Praxistipps gibt's hier! und Elektronik
Roboter-Typen, Roboter-
»~ei\\e Lo~i~ ist- .Pel-.leY.PYei«: De\\ Ro"ot-e Ys+-ev.e Y\\ Hardware

Variable n, Schleifen, Steuerung der Ein- und Ausgänge des Ardu in o : Werkzeug, Verdrahtung, Löten
Nach dem Einstieg in die Programmie rgrund lagen montieren und LEDs , Taster, Sensoren, Akte-
programmieren Sie den Roboter, lern en se ine l<omponenten kennen ren, Servos u.v. m.
und abso lvieren die erste Robo - Fahrstunde .
Die Ardu ino-Piattform
Hardware, Software ,
Sie bringen Ihrem Roboter be i, mit Sensoren z. B. Hindernisse zu Inbetriebnahme
erke nnen und zu vermeide n. We itere Anregungen, z. B. zum Bestim - Ardui no-Shie lds
men von Entfernu nge n oder der Akkuladung inklusive. Programmiergrundlagen

@ Alle Programmbeispiele zum Download


Den Ro bot er bauen und tes te r
Roboter- Fahrstund e
t--\~Y\:.1.\S K\\~PP beschäftigt sich se it vielen Jahren
LCD - Ansteuerung
leide nschaftlich mit Software- Entwi cklung und Robotik.
Er betreibt seit 2011 den be liebten Robotik-Podcast Interaktionper Tastatu r
www.robotiklabor.de und ist gefragter Sp recher auf
Veranstaltungen für Bastler.

.. ~.
I iBN 978 -3-8362 - 2941-8
Galileo Computing • Für Windows, Mac OS, Linu x Maker/Basteln/Programmierung

Das könnte Ihnen auch gefallen