~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
.. •
~
0 •
Galileo Press
An den 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!
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
6 Programmiergrundlagen ...... .................. .......... ...... .............................. ...... ...... ....... 131
8 Keine Schraube locker- Die Montage des eigenen Roboters ...................... 263
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.
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.
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
5
Inhalt
4 Die Arduino-Piattform 53
6
Inhalt
6 Programmiergrundlagen 131
7
Inhalt
8
Inhalt
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. 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
9
r Inhalt
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
10
9 Drive me crazy?- Die erste Fahrstunde 33 3
11
Inhalt
11.4 Internet of Things- Das Internet der Dinge ....... .......................... ............................... 399
12 Schlusswort 401
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 «.
14
Kapitell
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!
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.
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!
16
benötigen, werden genau erklärt, und Sie lernen ihre Funktion in praktischen Beispie-
len kennen .
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.
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
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
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.
21
. ~ '
2 Wir sind die Roboter · , ,
~ Roboter
- Nao
~ Vorteile
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
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
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
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 ...
10 http:// marsrover.nasa.gov/
28
Abbildung 2.6 Der sechsrädrige Marsroboter »Curiosity« der NASA 11
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
29
2 Wir sind die Roboter
.,. Nachteile
- spezielle Ersatzteile
.,. Preis
- ca.140 EUR
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 ...
30
I
.,. 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
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.
,.. 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.
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 .
.,.. in Sensoren u nd
.,.. in Aktoren.
Ich ha be Ihnen zur Verdeutlichung diese in Abbildung 2.11 stark vereinfacht dargestellt.
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-
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).
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.
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ß).
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?
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
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.
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.
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
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
) ("') ("') ("')
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.
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
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.
45
Erhöhen um 1
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 .
I Zum Beispiel mit Microsoft Visio unter Windows oder mit OmniGraffle unter Mac OS.
2 http://scratch.mit. edu
46
I
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.
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;
do
[
II Z:Ohler +- 1
n • n • 1;
I,
Anfu1na UNJ on ldt:v/ltv.u\bmadtrll1f•1411
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
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
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 ... )
(
# -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 .
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.
I http:// arduino. cc
53
-
4 Die Arduino-Piattform
Nach dieser Einleitung werde ich nun näher auf die Arduino-Hardware ei ngehen. Zue rst
aber ein wichtiger Sicherheitsh inweis.
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
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.
55
4 Die Arduino-Piattform
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 «.
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.
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
Ü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) .
59
4 Die Arduino-Piattform
USB-Buchse
Die USB-Buchse auf dem Arduino-Board hat drei verschied en e Fu nktionen:
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.
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.
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
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.
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.
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.
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}.
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 :
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.
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
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.
67
4 Die Arduino-Piattform
Abbildung 4.8 Der »Arduino Esplora « sieht wie ein Gamepad aus.11
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
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
69
4 Die Arduino-Piattform
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 .
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.
71
4 Die Arduino-Piattform
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
eneloop
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 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.
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.
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.
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.
77
4 Die Arduino-Piattform
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.
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.
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· •
Aiduino IDE
Arduino 1 . 0 . 5
Oownlosd Not st.qn
(1 POl<)
Abbi ldung 4.26 Klicke n Sie auf den Link »Windows lnsta ller«.
79
4 Die Arduino-Piattform
~ C Oowntoeds durchrucht.n p
Biblic«he:lce-1
Bilder
Dokurne'lte:
Jl Musik
Videos
Comput:a
Wenn das Fe nster aus Abbild ung 4.29 ersc heint, best ätigen Sie die Frage durch Kli ck
auf)A.
-
~ X
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.
!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.
Bestätigen Sie das Zielverzeichnis, in dem die Software installiert werden soll (siehe
Abbildung 4.32), durch Klicken aufiNSTALL
--
00 . X
Brome... 11
Spoce~q..trO<J : 25"1.5MB
Spoce avlllahle, ~~. 1GB
81
4 Die Arduino-Piattform
m X I'
I
<Bot\.
<Back Oase
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 .
Wenn die Installation wie in Abbi ldung 4.36 beendet ist, klicken Sie abschließend auf
(LOSE.
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
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
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
Schreibtisch
: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.
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.
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
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.
U5$3.95
US$l.95
US$ l 95
US$3.95
US$3.95
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
I
~ Utu Mf91l11W90(Editibnrn&pll'101)
t.-.. UEarcadtl.llul
uss:us
Rf"•'bUIBplntol,lvreiZ1
flf'ldihrw«~dnSoltwnlM•
Wenn alles geklappt hat, finden Sie die Arduino-Software als Symbol auf dem Desktop
(siehe Abbi ldung 4.46 ).
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.
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(;:;;\~~--
>
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
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.
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)
<..-..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)
Damit diese Än derungen übernommen werden, muss die Ardu ino -Software einmal
beendet und neu gestartet werden.
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
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.
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.
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
•
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.
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
' . ( ~ ' . ' \
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 ).
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.
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.
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
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-
101
5 Die kleine Werkstatt
takt nich t mehr einwandfrei herstellen. Greifen Sie bei solchen Baute ilen auf Kroko-
klen~men4 zurück.
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.
102
5.3 Werkzeuge
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.
103
5 Die kleine Werkstatt
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.
Abbildung 5.10 Ei ne profes sion ell e Lötsta tion mit digita ler Regelu ng 5
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.
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.
Löten
107
5 Die kleine Werkstatt ·
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.
109
5 Die kleine Werkstatt
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.
In diesem Abschnittlis te ich noch ein paar Werkze uge auf, die ebenfalls n icht zwingend
notwendig, aber d urchaus hilfreich sind.
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.
111
5 Die kleine Werkstatt
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
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.
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.
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.
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.
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 ).
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.
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!
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
~ einen Se i tenschneider
Das ist auch schon alles, was Sie bra uchen. Alles bereitgelegt? Los geht's l
s
0 Bauteil
E) Durchkontaktierung
0 Platine
0 Lötstelle
0 Lötpunkt
0 Anschlussbe in
0 Leiterbahn
Lötzinn
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 .
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
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.
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.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.
122
•
· befes·
twiein
5.6 Löten
1 einer
glichst
•
gleich·
.lesen
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
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
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
vorher nacher
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.
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
vorher nache r
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.
\ ) ; :
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!
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····
{.. ----·· ---~-
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
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:
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
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
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.42 Die richt ige Menge Lötz inn bei einer Durchkontakt ierung
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.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!
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!
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;
Listi ng 6.1 So sieht hal bwegs "orde ntlicher« Cod e mit Stil a us.
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
•
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.
133
6 Programmiergrundfage~- . · :~ ·.: ~:-~-~~?S~-
void loop()
{
II Variable zur Speicherung der Position
int pos = 0;
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 ;
•
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.
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.
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
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.
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 .
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.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:
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
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.
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):
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! "
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() ;
Bei der if .. . else-Anweisung wird also zwi ngend eine der beiden Aktionen durch·
geführt. immer.
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.
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 .
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.
Listi ng 6.14 Der »switch ... case«-Befeh l mit zwei gleichen Fällen
6.8 Schleifen
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:
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 :
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 :
whi le (bedingung == 1)
{
II Führe hier etwas aus , solange die Bedingung erfüllt ist .
}
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 Alarmton AUS!
schal teLEDaus () ;
schalteHupeAus () ;
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:
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 :
void funktionsname ()
II Anweisungen
Beispielfunktion :
void fahreGeradeaus ()
{
II Anweisungen
loeseMotorBremseA() ;
loeseMotorBremseB () ;
}
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:
return Rückgabewert ·
} )
155
Beispielfunktion: 6.9.1
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 .
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:
return Rückgabewert ;
if (mot or == 2)
{
II Hier Motor 2 einschalten .. .
II Wenn alles funktioniert hat , true zurückgeben :
return true;
}
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 «
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:
Listing 6.26 Funktion mit zwei Parametern (Syntax) Listing6.27 Verwendung ei ner globa len Variablen (»x«).
158
159
~.-?~:.
ti,;,IJ
•
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
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.
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.
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.
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.
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
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
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) ;
}
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:
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 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;
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 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 )
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.
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.
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) .
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/.
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) ;
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.
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
II etne
II
II Definieren der Vortable ' led '
II und Setzen auf den Wert 13 ( Ptn 13)
tnt led = 13 ;
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 ).
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.
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
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
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.
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
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.
198
. . . . . . . .~r-:-....~~~J•'•'Wolll-.... -. . . . .· ,)
~·· ·.' ,' _~,. ;'·.· :: . · 7.2 Ist da jemand?- KÖntakt mit der Außenwelt
~ ' ' < • ' I
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.
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.
void set up ()
{
II Digital- Pin 13 al s Ausga ng def inieren
pinMode(13 , OUTPUT);
199
. .
7 Los geht's!- Erste Praxis . . . ,
void loop()
{
II Schalter einlesen und LED sofort ein-/ausschalten
digit alWr i t e(1 3, digita1Read(7)) ;
}
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.
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
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
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
\\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.
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 ).
void setup ()
{
II Taster-Pin als Eingang definieren
17 http://playground.arduino.cc/code/ bounce
pinMode(TASTER_PIN , INPUT);
void loop()
{
II Entpreller (entprel ler) akt ualisieren
entpreller .update() ;
II LED aus
digitalWrite(LED PIN , LOW) ;
} -
}
Die meiste n Ze ilen dürften für Sie nicht mehr neu sein. Spannend ist lediglich die Zeile
zu Beginn:
II Entprellfunktion aktivieren
entpreller .attach(TASTER_PIN) ;
entpreller .interval(S) ;
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.
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!
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
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.
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).
-~
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 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
Weiß Signal
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
Abbildung 7.21 De r Stecker des Se nsors hat einen Steg in der Mitte.
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)
analogRead (pin) ;
void setup ()
{
pinMode(ledPin , OUTPUT) ; II LED-Pin ist ein Ausgang
pinMode(IRpi n, INPUT); II IR-Pin als Eingang definieren
void loop()
{
II Sensor (Pin) einlesen
float spa nnungswert = analogRead(IRpin) ;
II umrechnen in cm
float entfernung = (6787 I (s pannungswert - 3)) - 4;
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 umrechnen in cm
float entfernung = ( 6787 I (spannungswert - 3)) - 4;
void loop()
{
II Sensor (Pi n) ei nlesen
floa t spa nnungswer t = analogRead(IRpin) ;
213
II Umrechnen in cm
float entfernung = ( 6787 I (spannungswert - 3)) - 4;
II delay-Wert begrenzen
if (entfernung > 80)
entfernung = 80 ;
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.
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 :
Einfach, aber gen ial, oder? Sie find en die komp lette (englische) Referenz zum map-Befehl
wie im mer im lnternet. 21
214
• ~~ .. ~«JJ:::!!IT.~":.'Q..&~~-"''\'f. ~· ~'
Ü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
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.
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
h·
ür
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
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.
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.
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.
219
00
ARDUI NO
PROTO
SHIEL D
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.
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
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.
es
e-
h
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.
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.
222
Wie funktioniert das?
Schauen Sie sich kurz den dazugehör igen Quell code (Sourcecode) in Listing 7.8 an.
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 LED ausschalten .
digitalWrite(led , LOW) ;
223
while (laufzeit dauer)
{
digitalWrite(piezoJHIGH);
delayMicroseconds(periode * 0 . 5);
digitalWrite(piezoJ LOW);
de l ayMicroseconds(periode * 0 . 5);
l aufzeit += periode;
}
}
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) ;
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 :
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.
hr 28 c 130,813
y·
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
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.
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
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.
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;
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 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;
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) ;
Ü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).
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.
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·
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.
•
•
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:
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
232
Pulsdaue r Se rvoa rmposition
Tabelle 7.4 Die ungefähre Pul sdaue r im Verhält ni s zu r Servoarm pos it ion (Forts.)
n
;-
l,
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.
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
...
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>
234
.. ·~~-»'-"4b~rt.~'b~.~~.f'"'~t ••
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 .
}
}
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 :
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):
235
Im weiteren Verlaufwird der Servo mit folgendem Aufruf bewegt:
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).
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
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
237
0
daran, auch die Stromversorgung für den Servo zu verbinden bzw. einzuschalten, sonst
passiert wahrscheinlich gar nichts !
i /
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!
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.
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.·(::.<: ..,
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
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. ).
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 -
L c
B D B D
1 I
r =
Masse Masse
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 !
242
lie
ter
eh
:er
·A
ßt
~S ·
en
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
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
244
' . 7.5 Ich muss hier weg!- Ansteuerung von Motoren
gänge
s, um
e LED
rgung
v\otor
Jf der
~r vier
nung
~ cken
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)
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
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
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
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
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
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
Tabelle 7.6 Die Pins zum Ansteuern der Motoren und ihre Bedeutung
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.
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
~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.
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.
void setup()
{
II Taster-Pin als Eingang definieren
pinMode(tasterPin, INPUT) ;
II Motor A initialisieren
II
II Pin für Richtung MotorAals Ausgang
pinMode(richtungA, OUTPUT) ;
II Halbe Geschwindigkeit
ana logWri te (gesch1-1i nd igkei tA , 128) ;
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) ;
}
}
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);
251
250
7.5 Ich muss h1er weg! s g
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 .
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
256
.. . . . -· . .. :, . . _,
· ··~ ·. :.>·::·;~';;-!. {:·:,:.>··· · . .
r: ~ .~~~··~~-~r.~~:~~.fif.-....: ~~ ~
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
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 .
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) ;
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
II Motor drehen!
motorDrehen(HIGH, drehzahl) ;
}
}
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 :
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:
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 :
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!
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
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~--------------
~~~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 -
264
.. ,
v zwei Unterlegscheiben , M2 , 5
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
: 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
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)
'. '
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.
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.
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
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.
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?
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.
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.
)
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.
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 ).
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).
Schrauben Sie die Mutter m it der Hand leicht fest wie in Abbildung 8.12.
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.
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!
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 .
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
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
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 .
II II II
II II II II II II II II 1111 H H 1111
Checkliste
~ die Grundplatte
~•--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.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
Stecken Sie den Motorhalter in die Gru ndplatte, und halten Sie dabei die Mutter fest
Abb ildung 8.22 Der große M ot orhalter mit der Grun d pIatte
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
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.
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 .
Das war es auch schon mit dem Löten. Nun geht es weiter mit der Montage der rest·
liehen Teile Ihres Arduino-Roboters.
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
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.
Wiederholen Sie diese Schritte für den zweiten Motor, sodass das Ergebnis be i beiden
Motoren wie in Abbildung 8.31 aussieht.
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 ).
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.
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.
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).
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 «
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
;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).
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 ).
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}.
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-
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.
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
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!
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.
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
306 307
8.2.1 5 Das Arduino-Board
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).
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·
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
..-&
"".",
- -
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
-- ~
-
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).
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--===
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
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.
II II II II II II II II II II
II II H
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
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 .
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
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
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-
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.
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 ).
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.
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
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.
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),
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
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) ;
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
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
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
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·,
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 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.
356
10 Pimp My Robot!- Mögliche Erweiterungen
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.
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,
: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);
lcd.setßacklight(WHITE) ;
II Text ausgeben
II Die Zahlen im Kommentar dienen nur zur Orientierung .
II 1234567890123456
lcd.print( " Roboter bauen ");
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 Hintergrundbeleuchtungl-farbe ändern
lcd .setßacklight(RED) ;
}
i f (buttons == BUTTON_DOWN)
{
360
I
II Text ausgeben
lcd .setCursor(O,l);
lcd .print("Runter ") ;
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
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).
362
Abbildung l0.3 Stapelbare Buchsenleisten
t·
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.
[... p
II Bibliotheken für das LCD einbinden
#include <Wi re . h> II I2C
#include <Adafruit MCP23017.h>
#incl ude <Adafruit RGBLCDShield.h>
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
[ ... )
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
[ ... )
[ ... )
[ . .. )
365
10 Pimp My Robot!- Mögliche Erweiterungen
II Bremsen
digitalWrite( BRAKE_A, HIGH );
digitalWrite( BRAKE_B , HIGH ) ;
delay( 500 ) ;
[ .. . ]
}
void setup (
366
{
[ ... ]
II Text ausgeben
II Die Zahlen im Kommentar dienen nur zur Orientierun
II 1234567890123456
lcd .pr int(" Ich warte... ") ;
[ . .. ]
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!");
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
369
10 Pimp My Robot!- Mögliche Erweiterungen
void setup()
{
pinMode(ledPin, OUTPUT) ; II LED-Pin ist ein Ausgang
pinMode(IRpin, INPUT) ; II IR-Pin als Eingang definieren
void loop()
{
II Sensor (Pin) einlesen
float spannungswert = analogRead(IRpi n);
II umrech nen in cm
float entfer ung = (6787 I (spannungswert - 3)) - 4;
370
I
lcd .setCursor(O, 1) ;
lcd .print("Dista nz : ") ;
lcd . print(entfernung) ;
lcd.print( "cm") ;
else
.,
lcd . setCursor(O , 1) ;
II 1234567890123456
lcd . print( " Juhuuuu! ") ;
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
Abbi ldung 10.5 Anze ige der Distanz bis zum Hindernis (Test)
371
10 Pimp My Robot!- Mögliche Erweiterungen
[ ... ]
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 ausgeben
II Die Zahlen im Kommentar dienen nur zur Orientierung.
II 1234567890123456
lcd. print( " Ich 1varte . . . ");
372
I
delay( 100 ) ;
}
1t
void loop( )
{
int DangerPosition;
,
int Distance;
I I Gefahr links?
if (DangerPosition <= 90)
{
II Anzahl der Hindernisse+ 1
hindernisseLinks++ '
373
{
II Anzahl der Hindernisse+ 1
hindernisseRechts++ ;
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 .
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.
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 ");
}
[ .. . ]
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;
II Gefahr links?
if (DangerPosition <= 90)
{
II Anzahl der Hindernisse + 1
hindernisselinks++ ;
376
10.2 Press Any Key!- Interaktion per Tastatur
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) ;
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:
377
. 10 Pimp My Robot!- Mögliche Erweiterungen
do
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.
378
· 10.2 Press Any Keyl-lnteraktion per Tastatur '
( . .. ]
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 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;
if (buttons != 0)
{
II Text komplett löschen
lcd . clear () ;
380
10.2 Press Any Key! -Interaktion per Tastatur
II Text ausgeben
lcd .setCursor(0, 1);
II 1234567890123456
l cd. print( "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) ;
[ .. . ]
else
{
II KEI NE Taste gedr ückt
381
10 Pimp My Robot!- Mögliche Erweiterungen
II Roboter anhalten
anhalten();
}
}
Taste Aktion
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.
[...]
[ . 0 . ]
II Text ausgeben
II Die Zahlen im Kommentar dienen nur zur Ori entierung .
II 1234567890123456
lcd . print ("Tast en druecken !");
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;
}
if (buttons == BUTTON_DOWN)
{
II Speed B verringern
speed_B--;
II Überlauf!
if (speed_B < 0)
{
speed_B = 255 ;
}
II Überlauf!
if (speed_A < 0)
{
speed_A = 255 ;
}
384
10.2 Press Any Key! -Interaktion per Tastatur
if (buttons == BUTTON_RIGHT)
II Speed A erhöhen
speed_A++;
II Überlauf!
if (speed_A > 255)
{
speed_A = 0;
}
void printValues()
{
II Text ausgeben
l cd. setCursor(0 ,1 );
II 1234567890123456
lcd .print ("A: ") ;
385
10 Pimp My Robot! - Mögliche Erweiterungen
el se
{
II wenn Wert < dreistellig, mit Leerzeichen auffUllen
if (speed_A < 100)
{
l cd .print( " ");
void setup (
{
[ ... ]
386
10.3 Ich sehe was ... -weitere Sensoren
void l oop(
{
[ ...]
}
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 .
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.
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.
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 .
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
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
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:
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
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
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 :)
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
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
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
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!
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.
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
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.
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.
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.
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.
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.
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
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?
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.
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«.
402
Index
Index
403
1 Index
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
405
Index
406
Index
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 ........................................................ ......