Beruflich Dokumente
Kultur Dokumente
Leseprobe
In dieser Leseprobe erfahren Sie alles zur Arduino-Plattform und
knnen sofort Ihr erstes Arduino-Projekt verwirklichen. Auerdem
knnen Sie einen Blick in das vollstndige Inhalts- und Stichwort-
verzeichnis des Buches werfen.
Die Arduino-Plattform
Los gehts Erste Praxis
Inhalt
Index
Der Autor
Leseprobe weiterempfehlen
Markus Knapp
Roboter bauen mit Arduino
Die Anleitung fr Einsteiger
409 Seiten, broschiert, in Farbe, Oktober 2014
24,90 Euro, ISBN 978-3-8362-2941-8
www.galileo-press.de/3642
Kapitel 4
Die Arduino-Plattform
In diesem Kapitel erfahren Sie unter anderem, was es mit der berhmten Arduino-Platt-
form auf sich hat. Auerdem werden Sie die Software installieren und kennenlernen.
Zunchst werden Sie sehen, was Arduino berhaupt ist. In Abschnitt 4.2 erlutere ich
Ihnen dann die Bestandteile der Arduino-Hardware und gebe Ihnen eine Einfhrung in
die Arduino-Software. Ich werde Ihnen das Roboterkit zu diesem Buch erlutern und
aufzeigen, in welchem Kapitel Sie spter die Einzelteile verwenden. Im Anschluss wer-
den Sie in Abschnitt 4.3 die Arduino-Software und Treiber auf Ihrem Computer installie-
ren. Dadurch werden Sie am Ende dieses Kapitels die Grundlagen kennen, die Sie
bentigen, um in Kapitel 7, Los gehts! Erste Praxis, Ihr erstes Arduino-Programm zu
schreiben und auf dem Arduino-Board zum Leben zu erwecken.
Das erste Arduino-Board wurde bereits 2005 entwickelt und ist einer Legende zufolge
nach einer Kneipe benannt. Das Arduino-Board war ursprnglich fr Schulen gedacht,
und es entwickelte sich schnell eine groe Anhngerschaft, da sowohl die eigens dafr
entwickelte Software als auch die Hardware hervorragend fr Einsteiger geeignet sind.
Allein in den ersten drei Jahren wurden circa 50.000 Arduino-Boards verkauft ein
uerst erfolgreiches Open-Source-Projekt. Beim Arduino-Projekt sind sowohl die
Hardware als auch die Software Open Source.
1 http://arduino.cc
53
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
in Kapitel 6, Programmiergrundlagen, mehr ber die Arduino-Programmierspra- wurde. Es gibt neben diesem Board viele weitere Arduino-Boards, die ich Ihnen in
che gelernt haben werden, knnen immer mal wieder Fragen auftauchen. Neben der Abschnitt 4.2.3 vorstellen werde. Zunchst will ich aber die einzelnen Bestandteile des
vollstndigen Sprachreferenz2 finden Sie auf der Webseite unzhlige fertige Beispiele Arduino Uno erlutern. Schauen Sie sich dazu Abbildung 4.1 genauer an.
mit ausfhrlichen Beschreibungen. Zustzlich gibt es eine FAQ (eine Liste hufig gestell-
ter Fragen) und ein Supportforum. Auerdem finden Sie dort eine bersicht ber die
vielen verschiedenen Arduino-Boards, die immer auf dem aktuellsten Stand gehalten
wird. Speichern Sie sich also gleich den Link der Projektseite, um ihn immer griffbereit
zu haben.
2 http://arduino.cc/en/Reference/HomePage 3 http://arduino.cc/en/Main/ArduinoBoardUno
54 55
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
bene Software auf Fehler analysieren und wrden zweifellos auf die fehlerhafte Anwei-
sung delay(4000000000) stoen und sie korrigieren.
Denglisch
Das Wort Reset ist in der deutschen Sprache heutzutage sehr gebruchlich, obwohl es
ein englisches Wort ist. Wenn Sie den Reset-Taster bettigen, hiee es korrekt einen
Reset durchfhren oder ausfhren. Viele sagen aber auch einfach den Arduino
resetten. Das klingt vielleicht ungewohnt. Aber Download und downloaden klangen
auch einmal seltsam oder Kidnapping und gekidnappt. Benutzt werden diese Begriffe
aber mittlerweile alle und im Duden stehen sie auch.
Der ICSP-Stecker 2
Lassen Sie sich nicht dadurch verwirren, dass die Beschreibung hier mit dem ICSP-Ste-
Abbildung 4.2 Die Versionsnummer auf der Rckseite des Boards
cker Nummer 2 beginnt. ICSP steht fr In-Circuit Serial Programming und bedeutet so
viel wie Programmieren in der Platine.
Der Reset-Taster In der Vergangenheit mussten Mikrocontroller zum bertragen neuer Software stets
Das englische Wort Reset bedeutet zurcksetzen oder in Grundstellung bringen. aus der Platine entfernt werden. Sie wurden dazu in eine spezielle zustzliche Hardware
Wenn Sie den Reset-Taster auf dem Arduino-Board bettigen, startet sich das Board wie gesteckt und dann neu programmiert. Das bedeutete durch das stndige Entfernen und
ein Computer neu und beginnt mit der Abarbeitung der im Mikrocontroller gespeicher- Stecken der Bauteile eine hohe mechanische Belastung, und es wurde zustzliche Hard-
ten Software. Vermutlich werden Sie den Reset-Taster selten bentigen. Denn in dem ware zum Programmieren bentigt.
Moment, in dem Sie das Board mit Strom versorgen, ist es immer in Grundstellung. Um Mit der Einfhrung des ICSP-Steckers konnte zumindest direkt auf das zu programmie-
aber an einen definierten Startpunkt zu gelangen, wenn das Arduino-Board scheinbar rende Bauteil zugegriffen werden, ohne es zu entfernen externe Hardware zum Pro-
nicht mehr reagiert, ist der Reset sehr hilfreich. grammieren ist weiterhin notwendig. Der ICSP-Stecker 2 wird zum Programmieren des
Ein Beispiel dazu: Sie wollen Ihren Roboter knftig durch die Gegend fahren lassen, und zweiten Mikrocontrollers auf dem Arduino-Board verwendet. Er ist nur zur internen
wenn er ein Hindernis erkennt, soll eine LED alle vier Sekunden blinken (siehe Kapitel 7, Verwendung, denn er regelt die bertragung zwischen USB-Anschluss und dem
Los gehts! Erste Praxis). Dazu werden Sie spter die Anweisung delay verwenden, Arduino-Board. Fr alle in diesem Buch beschriebenen Projekte bentigen Sie keinen
die den Arduino schlicht und einfach warten lsst (siehe Abschnitt 6.12, Verzgerun- der ICSP-Stecker.
gen und Zeitsteuerung). Wenn der Arduino vier Sekunden lang nichts tun soll, wre
die Anweisung dazu delay(4000). Wenn Sie jedoch in Ihrem Programm versehentlich Ein-/Ausgnge (oben und unten)
die Anweisung delay(4000000000) einfgen, weil Sie auf der Taste (0) (Null) eingeschla- Dies sind nach der Stromversorgung die wichtigsten Stecker auf einem Arduino-Board.
fen sind, so wrde der Arduino 4.000.000 Sekunden warten und scheinbar nicht mehr Ich gehe auf die einzelnen Pins der Ein-/Ausgangsbuchsen in Abschnitt 4.2.2 ein.
reagieren. 4.000.000 Sekunden entsprechen nmlich ungefhr 46 Tagen.
Hier kme nun der Reset-Taster ins Spiel: Anstatt mhsam die Stromversorgung vom Benutzer-LED
Roboter zu trennen und wiederherzustellen, knnen Sie einfach den Reset-Taster ein- Die mit L beschriftete LED auf dem Arduino ist sehr hilfreich, da sie hervorragend zu
mal kurz bettigen, und das Programm startet von vorne. Um bei dem Roboter-Hinder- Kontrollzwecken oder zur Fehlersuche eingesetzt werden kann. Die LED leuchtet auf,
nis-Beispiel zu bleiben: Ihr Roboter wrde wieder losfahren und erst beim nchsten wenn sie mit dem passenden Befehl auf HIGH gesetzt wird, und erlischt bei LOW. Wie
Hindernis stehen bleiben und dort lange Zeit warten. Sie knnten dann Ihre geschrie- das genau funktioniert, erfahren Sie in Kapitel 7, Los gehts! Erste Praxis. Wie Sie die
56 57
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
LED zur Fehlersuche nutzen knnen, erklre ich Ihnen in Abschnitt 6.14, Fehlersuche/ Ihrem Computer und der USB-Buchse des Arduino-Boards. Dabei kommunizieren Ihr
Debugging und die Anzeige von Werten. Computer und der Arduino miteinander, tauschen also Daten aus. Wenn der Computer
dabei Daten an den Arduino sendet, leuchtet zur Besttigung des Empfangs auf dem
Power-LED Arduino kurz die RX-LED (Rx, englisch abgekrzt fr Receiver = Empfnger). Sendet der
Die Power-LED (engl. Power. dt. Energie) zeigt durch Leuchten an, dass das Arduino- Arduino etwas zum Computer, leuchtet kurz die TX-LED auf dem Board (Tx, englisch
Board mit einer Stromversorgung verbunden ist. abgekrzt fr Transmitter = Sender). Solange beide bertragungs-LEDs whrend der
Datenbertragung blinken, knnen Sie davon ausgehen, dass alles funktioniert und die
ICSP-Stecker 1 Kommunikation zwischen Computer und Arduino einwandfrei luft.
Wie der ICSP-Stecker 2 wird auch der Stecker Nummer 1 fr eine besondere Art der Soft-
warebertragung auf Ihr Arduino-Board verwendet. In Ihrem Arduino ist nmlich Stromversorgungsbuchse
neben der normalen Software auch noch ein sogenannter Bootloader enthalten. Die- Um Ihr Arduino-Board mit Strom zu versorgen, haben Sie zwei Mglichkeiten: die
ser Bootloader ermglicht die Aktualisierung der Software im Mikrocontroller direkt Stromversorgungsbuchse oder die USB-Buchse. Wenn Sie spter in Kapitel 7 Ihr Board
per USB (Upload) und ohne spezielle zustzliche Hardware. Fr spezielle Anwendun- mit einem USB-Kabel mit Ihrem Computer verbinden, werden Sie feststellen, dass
gen kann es notwendig sein, diesen Bootloader zu umgehen. Und in diesem Fall wrden sofort die Power-LED leuchtet und alles auf dem Board mit Energie versorgt wird. Egal,
Sie den ICSP-Stecker 1 bentigen. Sie knnen ihn aber vorerst ignorieren, da Sie Ihr ob Sie das Arduino-Board per USB- oder ber die Stromversorgungsbuchse anschlieen,
Board hier ausschlielich ber die USB-Buchse programmieren werden. das Board erkennt die Quelle automatisch.
Zur Nutzung der Stromversorgungsbuchse bentigen Sie einen Hohlstecker mit 2,1 mm
Mikrocontroller
Innendurchmesser (siehe Abbildung 4.3). Der Pluspol liegt dabei in der Mitte des Ste-
Der Mikrocontroller ist das Herz und das Gehirn des Arduino-Boards. Er wurde bereits ckers und die Masse (Minus) entsprechend auen. Der Stromverbrauch des Arduino
in Abschnitt 2.3, Wie und womit denkt ein Roboter?, beschrieben. Uno liegt bei einer Eingangsspannung von 7 Volt bei ca. 0,29 Watt (290 mW).
Montagepunkt
Stromversorgung Mindest- und Maximalwerte
Die vier Montagepunkte dienen zur Befestigung des Arduino-Boards auf Ihrem Robo-
Wenn Sie die Stromversorgungsbuchse mit einem externen Netzteil oder Akku verwen-
ter. Sie sollten unbedingt nur diese Lcher nutzen, da auf der Ober- und der Unterseite
den, achten Sie unbedingt darauf, dass dabei die Grenzwerte nicht lange berschritten
Leiterbahnen verlaufen, die die einzelnen Bauteile miteinander verbinden. Wrden Sie werden! Das Netzteil muss auerdem eine Gleichspannung (DC = Direct Current Vol-
diese durchbohren, wre das Board danach unbrauchbar! tage) liefern.
Empfohlene Eingangsspannung: 712 Volt
Tipp
Kurzzeitig erlaubte Grenzwerte: 620 Volt
Wenn Sie Ihr Arduino-Board spter irgendwo mit Schrauben befestigen wollen, verwen-
den Sie Schrauben aus Kunststoff (Polyamid). Sie vermeiden damit Kurzschlsse durch
leitende Metallschrauben, da einige Bauteile sehr dicht an den Montagelchern verl-
tet sind.
bertragungs-LEDs (TX/RX)
Wenn Sie spter in Kapitel 7, Los gehts! Erste Praxis Ihr erstes selbst geschriebenes
Programm auf den Arduino bertragen, geschieht dies ber eine Verbindung zwischen
Abbildung 4.3 Ein typischer Hohlstecker von einem Netzteil
58 59
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
USB-Buchse Roboter standardmig keine Verwendung findet, gehe ich hier nicht weiter auf seine
Die USB-Buchse auf dem Arduino-Board hat drei verschiedene Funktionen: 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-Steckers 2 kein Platz mehr.
Stromversorgung des Arduino
brigens: Aus rechtlichen Grnden wurde die I2C-Schnittstelle frher TWI-Interface
Schnittstelle zum bertragen der Software auf das Arduino-Board genannt (Two-Wire-Interface, englisch fr Zweidraht-Schnittstelle), denn der Hersteller
allgemeiner Datenaustausch zwischen Arduino und Computer Philips hatte lange Zeit die Rechte an dem Namen I2C. Sie finden die Bezeichnung TWI
daher oft noch in lteren Datenblttern. Auch die Software-Bibliothek des Arduino-Pro-
Wenn Sie ein Arduino-Board per USB-Kabel mit Ihrem Computer verbinden, erhlt es
jektes zur Nutzung der I2C-Pins heit bis heute noch Wire4.
darber Strom. Sie brauchen also, wie ich in der Beschreibung der Stromversorgungs-
buchse erlutert habe, keine separate Energiezufuhr. Die zweite Funktion ist das ber-
tragen Ihrer geschriebenen Software auf das Arduino-Board (siehe Kapitel 7, Los
gehts! Erste Praxis). Die Software wird spter das Verhalten Ihres Roboters ausma-
chen. Drittens kann Ihr Arduino-Board Daten an Ihren Computer senden. So werden Sie
zum Beispiel in Abschnitt 7.2.3 einen Infrarotdistanzsensor ansteuern und auf dem
Bildschirm Text sehen, den Ihnen Ihr Arduino ber den USB-Anschluss sendet: Sie
bekommen die gemessene Entfernung auf dem Bildschirm live angezeigt. Dies ist,
neben der LED, fr die Fehlersuche ebenfalls sehr hilfreich.
60 61
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
Digitale Ein-/Ausgnge bertragung mit anderen Bauteilen durchfhren. Da der Arduino Uno aber nur ber
Die Pins 2 bis 13 dienen als Eingang oder Ausgang. Das heit, eine Spannung kann an eine serielle Schnittstelle verfgt, die auf der Platine intern bereits mit dem USB-
einen Pin angelegt werden (Eingang) oder der Arduino kann eine Spannung ausgeben Anschluss verbunden ist, sollten Sie diese Pins nicht verwenden. Denn immer, wenn Sie
(Ausgang). ein Programm auf den Arduino bertragen oder spter den Serial Monitor (siehe
Abschnitt 7.2.3) verwenden, werden dabei die Daten auch ber diese beiden Pins laufen.
Strungen wren also vorprogrammiert. Fr den in diesem Buch beschriebenen Robo-
Vorsicht!
ter werden diese Pins nicht verwendet.
Spannungen unter 0 oder ber 5 Volt an einem der Pins zerstren Ihr Arduino-Board!
Analoge Eingnge
Da es sich um digitale Ein-/Ausgnge handelt, verstehen diese Pins wie ein Computer Im Gegensatz zu den digitalen Eingngen knnen Sie an die Eingnge A0 bis A5 eine
nur zwei Zustnde: 0 oder 1. In der Elektronik Ihres Arduino Uno entspricht das 0 Volt beliebige Spannung zwischen 0 und 5 Volt anlegen. Analog bedeutet, dass die Span-
oder 5 Volt bzw. allgemein LOW oder HIGH. nung wirklich jeden Wert dazwischen haben darf. Das Einlesen eines dieser Eingnge
geschieht mit dem Befehl analogRead. Sie werden diesen Befehl in Abschnitt 7.2.3 ken-
Expertenwissen zum Angeben: Logikpegel im Detail nenlernen, wenn Sie einen Sensor auslesen, der eine analoge Spannung ausgibt. Beim
Wie so oft im Leben ist nicht alles schwarz-wei, so auch bei den Logikpegeln. Tatsch- Einlesen einer analogen Spannung vergleicht der Arduino die an einem der Pins A0 bis
lich mssen es nicht exakt 0 Volt oder 5 Volt sein. Je nach verwendetem Bauteil gibt es A5 anliegende Spannung standardmig mit 5 Volt. So erhalten Sie zum Beispiel beim
unterschiedliche Ober- oder Untergrenzen. Bei dem auf dem Arduino-Board verwende- Anlegen von 0 Volt eine 0 als Zahlenwert in der Software; bei 2,5 Volt ist der Zahlenwert
ten Mikrocontroller sind es die folgenden: 128, und bei 5 Volt betrgt er 2556. Mchten Sie eine Spannung mit einem geringeren
Maximalwert als 5 Volt einlesen (zum Beispiel 3,14 Volt) und dennoch Werte in der Soft-
Eingang Ausgang ware von 0 bis 255 erhalten, so kommt der Pin AREF ins Spiel. Sie werden diese Funktion
vermutlich nicht so hufig bentigen, und sie wird auch in diesem Buch nicht verwen-
LOW 0,001,50 V 0,000,50 V
det. Fr weitere Informationen sei daher an dieser Stelle wieder einmal auf die Arduino-
HIGH 3,505,00 V 4,445,00 V Referenz7 und den dort beschriebenen Befehl analogReference verwiesen.
Das bedeutet zum Beispiel, dass alle Spannungen zwischen 0,00 und 1,50 Volt an einem Vin
Eingang als LOW erkannt werden oder dass alle Spannungen zwischen 4,44 und 5,00 Dieser Pin gehrt zu den Stromversorgungspins und kann sowohl als Eingang als auch
Volt an einem Ausgang als HIGH gelten. Die Bereiche zwischen den hier aufgelisteten als Ausgang genutzt werden. An diesen Pin knnen 712 Volt angelegt werden, die dann
sogenannten Logikpegeln gelten schlichtweg als undefiniert. Das heit, es ist nicht vor- das Arduino-Board mit Energie versorgen (falls Sie nicht die USB-Verbindung oder die
hersagbar, wie sich der Arduino hier verhlt. Stromversorgungsbuchse dafr benutzen wollen). Wenn Sie aber das Board per USB-
oder Hohlstecker mit Strom versorgen, dann liegen an diesem Pin 5 Volt an.
Warum einige der Pins mit einer Tilde (~) gekennzeichnet sind und was die Beschriftung
PWM~ auf der Platine bedeutet, erfahren Sie in Abschnitt 7.4.2). Ich will es ja auch etwas Masse (GND)
spannend fr Sie machen. (siehe vorige Beschreibung)
TX/RX 5V
Wie Sie bereits im Abschnitt 4.2.1 unter bertragungs-LEDs (TX/RX) erfahren haben, Dieser Pin dient nur als Ausgang. Sobald das Arduino-Board per USB- oder Stromversor-
geht es hier um Datenbertragung. Sie knnten ber diese Pins eine serielle5 Daten- gungsbuchse mit Strom versorgt wird, kommen an diesem Pin geregelte 5 Volt Span-
5 Seriell bedeutet, dass die Daten Bit fr Bit hintereinander bertragen werden (siehe auch http:// 6 Warum der Wert von 0 bis 255 geht, erfahren Sie in Abschnitt 6.3.4.
de.wikipedia.org/wiki/Serielle_Datenbertragung) 7 http://arduino.cc/en/Reference/AnalogReference
62 63
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
nung heraus. Diese knnen Sie zur Stromversorgung weiterer kleinerer Bauteile, z. B. Arduino-Board mit mehr Leistung zu versehen. Ein anderes Mal ging es nicht um mehr
von Sensoren, verwenden. Geben Sie niemals eine Spannung an diesen Ausgang, da sie Geschwindigkeit oder Speicher, sondern um mehr Ein- und Ausgnge (Pins). Oftmals
das Arduino-Board zerstren kann! wurde aber auch nur die Form verndert oder die Gre der Arduino-Platine reduziert.
3,3V SMD-Bauteile
An diesem Pin liefert das Arduino-Board eine Spannung von 3,3 Volt. Bitte beachten Sie, Um die Gre einiger Arduino-Boards zu verringern und auch um die Kosten zu sen-
dass hier nur ein maximaler Strom von 50 mA geliefert wird. Geben Sie niemals eine ken, wurde auf Bauteile zurckgegriffen, die sich SMD-Bauteile nennen. SMD ist die eng-
Spannung an diesen Ausgang, da sie das Arduino-Board zerstren kann! lische Abkrzung fr Surface-Mounted Device, was so viel wie auf der Oberflche
montiertes Bauteil bedeutet. Denn im Unterschied zu dem Arduino-Mikrocontroller,
Reset dessen Pins in eine Fassung gesteckt sind und deren Beinchen wiederum durch die
Dieser Pin dient zum Anschluss eines eigenen Reset-Tasters. Sobald dieser Pin mit Platine hindurch gehen, gibt es auf dem Board auch einen Mikrocontroller, der auf der
Masse (GND) verbunden wird, wird ein Reset des Arduino-Boards ausgelst. Wenn Sie Oberflche montiert (aufgeltet) ist. Und glauben Sie mir, die kleinen SMD-Bauteile
Ihr Arduino-Board mit Shields (siehe Abschnitt 7.2.7) erweitern, kann es sein, dass diese stehen den groen in nichts nach. Denn den meisten Platz bei den groen Bauteilen
den Reset-Taster auf dem Board blockieren. Dafr ist dann dieser Pin ntzlich. nehmen mittlerweile nur die groen Anschlusspins ein.
In Abbildung 4.5 sehen Sie deutlich den Unterschied der beiden Bauteiltypen auf Ihrem
IOREF Arduino-Board:
Dieser Pin liefert eine Referenzspannung, mit der der Mikrocontroller auf dem Arduino- Oben 1 finden Sie den Mikrocontroller als SMD-Bauteil,
Board arbeitet. Der Pin kann intern von Shields genutzt werden, mit denen das Board unten 2 einen Mikrocontroller in alter Bauweise.
erweitert werden kann (siehe Abschnitt 7.2.7).
64 65
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
Die herkmmliche Bauweise hat aber auch Vorteile. Wie Sie sehen, ist der groe Mikro- Ein Nachteil bei diesem Board ist der verwendete 3,3-Volt-Logikpegel, da viele Shields
controller in eine Fassung gesteckt und kann bei einem Defekt leicht ausgetauscht wer- mit einem 5-Volt-Logikpegel arbeiten und damit an diesem Board nicht ohne Weite-
den. Das ist bei SMD-Teilen sehr schwierig, denn diese mssen mit speziellen res eingesetzt werden knnen (siehe auch in Abschnitt 4.2.2 unter Digitale Ein-/Aus-
Werkzeugen aus- und wieder eingeltet werden. Dies ist bei einigen Bauteilen mit der gnge).
Hand bereits nicht mehr mglich, da diese die Pins sogar an der Unterseite des Bauteils
haben, wo kein Ltkolben hinkommt. So bleibt dann leider oft nur Entsorgen und Neu- Arduino-Roboter
kaufen, eine Entwicklung, die fr unsere Umwelt alles andere als frderlich ist. Dafr hat Ein Arduino-Roboter? Wieso erfahre ich erst jetzt davon? Richtig, es gibt auch einen
die SMD-Technik immer preiswertere Gerte ermglicht, da die Bauteile immer kleiner Roboter der Arduino-Community. Und er hat sogar ein Display auf seiner Oberseite. Der
und damit gnstiger werden nur eben leider nicht, was Reparaturen angeht. Nachteil dieses Roboters ist sein Preis: Er kostet ber 200 EUR.
Nun aber zu der versprochenen Auflistung verschiedener Arduino-Boards. Obwohl es
sich nur um eine kleine Auswahl handelt, sollte sie Ihnen einen guten berblick geben.
Und vielleicht entwickeln Sie ja eines Tages Ihr eigenes offizielles Arduino-Board?
Arduino Due
Der Arduino Due ist im Vergleich zum Arduino Uno ein leistungsfhigeres Board. Sein
wesentlicher Vorteil sind zweifelsohne die unzhligen Ein- und Ausgnge, sein groer
Speicher fr Software und sein USB-Port, an den sogar eine Maus, Tastatur oder ein
Smartphone angeschlossen werden knnen.
Abbildung 4.7 Die Ober- (links) und Unterseite (rechts) des offiziellen Arduino-Roboters10
Arduino Esplora
Im Gegensatz zu den normalen Arduino-Boards stellt der Arduino Esplora auf seiner
Platine eine Vielzahl von Sensoren und Aktoren (siehe Abschnitt 2.2.2 und 2.2.3) zur Ver-
fgung. Unter anderem finden Sie auf dem Board: LEDs, einen Mini-Joystick, einen
Temperatursensor, ein Mikrofon, einen Piezo (siehe Abschnitt 7.3.1), einen Beschleuni-
gungssensor, einen Lichtsensor und vieles mehr. Lassen Sie sich nicht durch die
Bauform tuschen: Das Board sieht vielleicht wie ein Gamepad aus, ist aber ein vollwer-
tiges Arduino-Board mit Mikrocontroller.
Abbildung 4.6 Der Arduino Due mit mehr als 54 Ein- und Ausgngen9
66 67
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
Arduino Micro
Der Arduino Uno ist Ihnen zu gro? Dann greifen Sie doch zu einem Arduino Micro.
Dank SMD-Technik ist die Platine auf beiden Seiten eng mit Bauteilen bestckt. So wird
jeder Millimeter ausgenutzt. Und ein USB-Anschluss zum bertragen der Software hat
auch noch auf das Board gepasst.
Abbildung 4.8 Der Arduino Esplora sieht wie ein Gamepad aus.11
68 69
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
70 71
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
72 73
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
18 Genau genommen ist der Begriff Untersetzung nur umgangssprachlich korrekt. Wenn Sie es genau
wissen wollen, empfiehlt sich wie so oft ein Blick in die Wikipedia: http://de.wikipedia.org/wiki/
Abbildung 4.19 Ein Standardservo, wie er im Modellbau verwendet wird
bersetzung_(Technik)
74 75
4 Die Arduino-Plattform 4.2 Die Arduino-Hardware
Zwei Rder Schlumpfschlauch genannt (siehe Abbildung 4.24). Ein Schrumpfschlauch hat die
Wie zuvor erwhnt, bekommt jeder der zwei Motoren Ihres Roboters ein Rad. Sie ben- Eigenschaft, dass bei hoher Hitze sein Durchmesser abnimmt. Wenn Sie zum Beispiel
tigen daher ebenfalls zwei Rder. von zwei Drhten die Isolierung (Ummantelung) entfernt und die Drhte miteinander
verbunden haben, knnen Sie diese mit dem Schrumpfschlauch neu ummanteln.
Wie das genau geht, erfahren Sie in Kapitel 8, Keine Schraube locker Die Montage des
eigenen Roboters, beim Zusammenbau Ihres Roboters.
76 77
4 Die Arduino-Plattform 4.3 Die Arduino-Software
Und der Zusammenbau? IDE finden Sie den Link Windows Installer, wie in Abbildung 4.26 dargestellt. Der
Sie haben jetzt einen guten berblick ber alle Bestandteile Ihres spteren Arduino- Installer ist der einfachste Weg, um die Software direkt zu installieren. Dabei ist es egal,
Roboters bekommen. In Kapitel 8, Keine Schraube locker Die Montage des eigenen ob Sie die Software unter Windows 7 oder Windows 8 installieren wollen es ist derselbe
Roboters, zeige ich Ihnen, wie Sie alle Teile zu einem Roboter zusammenfgen. Zuvor Download. Folgen Sie nun den Anweisungen anhand der nachfolgenden Abbildungen.
erhalten Sie noch das ntige Wissen ber die Arduino-Plattform und deren Program-
mierung.
4.2.5 Treiberinstallation
Damit ein Computer das Arduino-Board und damit Ihren spteren Roboter einwandfrei
erkennt, bentigen einige Betriebssysteme einen Treiber. Ein Treiber ist eine Software,
die sicherstellt, dass der Computer das Arduino-Board betreiben kann und mit ihm
ber den USB-Port kommuniziert. Die Kommunikation erfolgt dabei ber einen Mikro-
controller des Herstellers Atmel (ATmega16). Der Treiber fr diesen Chip ist in der
Arduino-Software oder dem Betriebssystem Ihres Computers enthalten. Wie Sie die
Arduino-Software einschlielich Treiber fr die verschiedenen Betriebssysteme Win-
dows, Mac OS und Linux installieren, zeige ich Ihnen jetzt.
78 79
4 Die Arduino-Plattform 4.3 Die Arduino-Software
Lassen Sie im Dialog aus Abbildung 4.31 alle Optionen so, wie sie sind, und klicken Sie
auf Next, um zum nchsten Schritt zu gelangen.
Wenn das Fenster aus Abbildung 4.29 erscheint, besttigen Sie die Frage durch Klick
auf Ja.
Besttigen Sie das Zielverzeichnis, in dem die Software installiert werden soll (siehe
Abbildung 4.32), durch Klicken auf Install.
Damit die Software installiert werden kann, mssen Sie die Lizenzbedingungen durch
Klicken auf I Agree akzeptieren.
80 81
4 Die Arduino-Plattform 4.3 Die Arduino-Software
Der Fortschritt des Installationsvorgangs ist in Abbildung 4.33 dargestellt. Besttigen Sie die Sicherheitswarnung aus Abbildung 4.35 durch einen Klick auf In-
stallieren.
Glckwunsch! Sie haben erfolgreich die Arduino-Software und den Treiber installiert. In
Abschnitt 4.3.2 geht es fr Sie nun weiter mit dem Start der Arduino-Software und der
Erluterung ihrer einzelnen Elemente.
Mac OS X
Unter Apples Betriebssystem Mac OS ist die Installation der Arduino-Software simpel.
Um sie herunterzuladen, besuchen Sie die Arduino-Projektseite.20 Navigieren Sie dort
82 83
4 Die Arduino-Plattform 4.3 Die Arduino-Software
zur Seite Download. Unterhalb des Punktes Arduino IDE finden Sie den Link Mac OS X,
den Sie anklicken (siehe Abbildung 4.37).
Der Download besteht in der Regel aus einer ZIP-Datei. Diese wird in Ihrem Benutzer-
verzeichnis im Ordner Download gespeichert und in der Regel automatisch entpackt
(siehe Abbildung 4.38).
Abbildung 4.39 Installation der Software per Drag & Drop
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).
Glckwunsch! Sie haben erfolgreich die Arduino-Software installiert. In Abschnitt 4.3.2
Ein extra Treiber wird unter Mac OS nicht bentigt.
geht es fr Sie nun weiter mit dem Start der Arduino-Software und der Erluterung ihrer
einzelnen Elemente.
84 85
4 Die Arduino-Plattform 4.3 Die Arduino-Software
Linux
Die nachfolgende Beschreibung ist fr das Linux-Betriebssystem Ubuntu Version 14
gedacht. Ubuntu ist derzeit eines der einsteigerfreundlichsten Linux-Betriebssysteme.
Falls Sie ein anderes Linux verwenden, schauen Sie auf der Webseite des Arduino-Pro-
jektes21 nach, welche Anleitung fr Ihr Betriebssystem die passende ist.
Unter Ubuntu erfolgt die Installation der Arduino-Software wie nachfolgend beschrie-
ben ein Download von der Arduino-Projektseite ist nicht erforderlich! Starten Sie als
Erstes, wie in Abbildung 4.40 gezeigt, das Ubuntu Software-Center.
Nachdem das Software-Center gestartet ist, klicken Sie in das Suchfeld und geben dort
Arduino (ohne Anfhrungszeichen) ein, um nach der Software zu suchen (siehe
Abbildung 4.41).
Sobald die Arduino-Software im Software-Center gefunden wurde, wird sie, wie in Abbil-
dung 4.42 dargestellt, angezeigt. Klicken Sie auf Installieren, um die Installation der
Software zu starten.
21 http://arduino.cc Abbildung 4.42 Ein Klick auf Installieren startet die Installation.
86 87
4 Die Arduino-Plattform 4.3 Die Arduino-Software
Wenn Sie unter Linux Software installieren wollen, mssen Sie Ihr Anmeldepasswort
eingeben, um sich zu legitimieren (siehe Abbildung 4.43).
In Abbildung 4.44 ist der Installationsvorgang dargestellt. Sie bekommen nichts weiter
davon mit alles passiert unsichtbar im Hintergrund.
Wenn alles geklappt hat, finden Sie die Arduino-Software als Symbol auf dem Desktop
(siehe Abbildung 4.46).
Sie erkennen die erfolgreiche Installation an dem kleinen grnen Pfeil am Arduino-
Symbol (siehe Abbildung 4.45). Schlieen Sie jetzt das Software-Center wieder. Abbildung 4.46 Die installierte Arduino-Software (IDE)
88 89
4 Die Arduino-Plattform 4.4 Die Entwicklungsumgebung
Falls das Symbol dort nicht erscheinen sollte, klicken Sie, wie in Abbildung 4.47 gezeigt, 4.6.1, wie die Arduino-Software Sie beim Erstellen Ihrer eigenen Programme fr den
auf das Ubuntu-Dashboard-Symbol und suchen nach der Software. Sie wird nach Ein- Roboter untersttzt. Denn sie enthlt bereits viele fertige Beispiele, die per Mausklick
gabe der ersten Buchstaben von Arduino sofort angezeigt und kann spter von dort hinzugefgt werden knnen. Aber dazu spter mehr.
gestartet werden.
90 91
4 Die Arduino-Plattform 4.6 Die grafische Oberflche im Detail
4.5 Die Software im Detail berprfen 1: berprft den Programmcode auf Fehler
Upload 2: bertrgt das fertige Programm auf die Hardware
Hier erhalten Sie noch ein paar Hinweise, wie die Arduino-Software aufgebaut ist und
Neu 3: Erzeugt ein neues, leeres Programm
was die einzelnen Menpunkte bedeuten. Sie erfahren auerdem, wie Sie die Software
mit fertigen Beispielen untersttzt. ffnen 4: ffnet bestehende Programme
Speichern 5: Speichert das aktuelle Programm
4.5.1 ndern der Sprache 6: Anzeige des Namens des aktuellen Programms
Sollte die Arduino-Software auf Ihrem Computer nicht auf Deutsch starten, knnen Sie 7: Die installierte Version der Arduino-Software
die Sprache in den Einstellungen (englisch: Preferences) leicht ndern. Die Software wurde 8: Aktiviert den seriellen Monitor
in ber 30 Sprachen bersetzt. Unter Windows und Linux ist der Menpunkt fr die Ein- 9: Funktionen zur Nutzung der Tabs/Karteireiter
stellungen unter File zu finden, unter Mac OS X unterhalb des Punktes Arduino.
j: Bereich zum Editieren
k: Bereich zur Anzeige von Statusmeldungen
l: Zeigt die Zeile an, in der sich der Cursor befindet
m: Zeigt das Arduino-Board und den aktuellen Anschluss an
92 93
4 Die Arduino-Plattform 4.7 Fazit
94 95
Kapitel 7
Los gehts! Erste Praxis
Sie haben bis zu diesem Kapitel durchgehalten. Das ist ein gutes Zeichen. Denn Sie
haben es trotz viel Theorie bis hierher geschafft, und nun soll es endlich mit prakti-
schen Experimenten losgehen.
Sie werden gleich Ihr erstes Programm fr den Arduino erstellen und das Ergebnis auf
dem Board sehen knnen.
Checkliste
ein Arduino-Board
ein passendes USB-Kabel
Schlieen Sie das Arduino-Board mit einem USB-Kabel an Ihren Computer an. Das pas-
sende USB-Kabel hat auf der Computerseite einen USB-A-Stecker und auf der
Arduino-Seite einen USB-B-Stecker und ist in Abbildung 7.1 dargestellt.
179
7 Los gehts! Erste Praxis 7.1 Der erste Kontakt mit der Hardware
LED zum Blinken bringen wird. Sollte die LED bei Ihnen bereits blinken, so ist wahr-
scheinlich bereits ein Programm ab Werk auf dem Arduino. Das macht nichts, denn Sie
lernen dann jetzt, wie Sie den Blinkrhythmus verndern knnen. In Listing 7.1 sehen Sie
das vollstndige Programm dazu. Sie finden die Datei Blinky.ino wie immer zum Down-
load unter http://robotiklabor.de/literatur/.
180 181
7 Los gehts! Erste Praxis 7.1 Der erste Kontakt mit der Hardware
void setup()
{ 7.1.2 bertragen der Software auf das Arduino-Board
// Den digitalen PIN als Ausgabe (Output) festlegen. Das bertragen der Software auf das Arduino-Board wird brigens auch flashen
pinMode(led, OUTPUT);
genannt, weil hier ein sogenannter Flash-Speicher mit Daten beschrieben wird.
}
Immer, wenn Sie den Arduino einschalten, werden die Zeilen der setup-Funktion ein- Experten-Wissen zum Angeben
malig ausgefhrt. Dies kann durch Anschluss an einen Computer per USB-Kabel oder Die Software, die Sie auf das Arduino-Board bertragen, wird auch Firmware genannt.
ber die Stromversorgungsbuchse oder nach Drcken des Tasters Reset geschehen. Wie Sie haben davon vielleicht schon einmal gehrt. Eine Firmware besteht aus dem Pro-
bereits in Abschnitt 4.2.1 erlutert, knnen die Pins des Arduino-Boards als Eingang grammcode und allen darin gespeicherten Daten und bleibt beim Ausschalten des
(INPUT) oder Ausgang (OUTPUT) betrieben werden. Das heit, es wird entweder eine Gertes dauerhaft bestehen. Dauerhaft deshalb, weil sie nicht so einfach gelscht
Spannung erwartet (Eingang) oder eine Spannung am Pin ausgegeben (Ausgang). Da Sie werden kann auer eben mit einem Computer und der passenden Software (hier der
in diesem Fall eine LED einschalten wollen, bentigt diese eine Spannung. Dementspre- Arduino-Software). Alle Gerte, die einen Mikrocontroller enthalten, haben auch eine
chend wird der Pin des Arduino als Ausgang geschaltet (OUTPUT), um eine Spannung Firmware im Speicher, die beim Einschalten ausgefhrt wird zum Beispiel Ihre Wasch-
per HIGH auszugeben. Nun zum Hauptprogramm: maschine, die verschiedene Waschprogramme ausfhren kann, eine Verkehrsampel,
die ein Tages- oder Nachtprogramm ausfhren kann, oder vielleicht Ihr Anzeigeinstru-
void loop() ment im Auto, das live den Benzinverbrauch ausrechnen und anzeigen kann.
{
// schalte die LED an (HIGH)
digitalWrite(led, HIGH);
ffnen der Datei
// warte eine halbe Sekunde Um die Software nun endlich zu bertragen, laden Sie die Datei Blinky.ino herunter und
delay(500); starten die Arduino-Software. ffnen Sie die heruntergeladene Datei Blinky.ino im
Men ber Datei ffnen (siehe Abbildung 7.3).
// schalte die LED aus (LOW)
digitalWrite(led, LOW);
1 Genau genommen ist es kein Befehl, sondern eine Funktion. Umgangssprachlich sprechen aber die
meisten von einem Befehl oder einer Anweisung auch wenn es nicht ganz korrekt ist!
182 183
7 Los gehts! Erste Praxis 7.1 Der erste Kontakt mit der Hardware
184 185
7 Los gehts! Erste Praxis 7.1 Der erste Kontakt mit der Hardware
bertragen der Software erfolgreich programmiert und damit die Grundlage fr alle weiteren Schritte auf dem
Der einfachste Teil ist nun das bertragen der Software auf das Board. Klicken Sie hierzu Weg zu Ihrem eigenen Roboter gelegt! Weiter gehts.
einfach auf die Upload-Schaltflche in der Arduino-Software. Der Rest geht automa-
tisch: Die Software prft den geschriebenen Programmcode vor dem bertragen noch
7.1.3 Fehlersuche
einmal auf Fehler, wandelt ihn in ein fr den Mikrocontroller verstndliches Format um
(kompiliert und linkt) und bertrgt das Ergebnis auf das Arduino-Board (flasht). Abbil- Falls Sie eine Fehlermeldung erhalten haben, schauen Sie auf die Arduino-Projektseite.
dung 7.6 zeigt die GUI, wenn der Vorgang erfolgreich abgeschlossen wurde: In der Dort gibt es einen ausfhrlichen Troubleshooting-Bereich.2 Die dort beschriebenen
Statuszeile unten steht dann Upload abgeschlossen.. Lsungen werden Ihnen helfen, die meisten Probleme zu beseitigen. Alternativ kopie-
ren Sie einfach die erste Fehlermeldung aus der Arduino-Software in die Suchmaschine
Ihrer Wahl. Sie knnen davon ausgehen, dass bereits vor Ihnen jemand dieses Problem
hatte und eine Lsung im Internet zu finden ist.
186 187
7 Los gehts! Erste Praxis 7.1 Der erste Kontakt mit der Hardware
die LED nur 20 mA an Strom I flieen drfen, haben Sie alle Werte zusammen, die Sie
einfachen Formel beschrieben werden. Wird die Stromstrke mit I, die Spannung mit U
zur Berechnung des bentigten Widerstandes bentigen:
und der Widerstand mit R bezeichnet, lautet sie:
U = 2,8 V
bzw.: bzw.: I = 0,02 A
R=?
Eine orange Standard-LED wird typischerweise mit einer 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 anschlieen, der ja 5 Mchten Sie auf dem Arduino-Board eine weitere LED an einen anderen der Pins
Volt Spannung liefert (siehe Abschnitt 4.2.1), bentigen Sie einen Widerstand, um den anschlieen, she das auf einer Steckplatine so wie in Abbildung 7.7 aus.
Strom und die Spannung an der LED zu begrenzen. Welchen Widerstandswert muss der
Widerstand haben? Nun, wenn am Ausgang des Arduino 5 Volt herauskommen, die Widerstnde und ihre Farbcodierung
LED aber nur 2,2 Volt als Spannung bentigt, bleibt ein Unterschied von 5 V 2,2 V = 2,8 Der Wert von Widerstnden ist nicht als Zahlenwert auf sie aufgedruckt, sondern
V brig, der am Widerstand R verbraucht4 werden muss. Da Sie jetzt wissen, dass durch anhand von farbigen Ringen kodiert. Eine Erluterung dazu finden Sie im Internet.7 Fr
den Aufbau des Roboters ist das in diesem Buch nicht relevant.
4 Tatschlich wird Strom nicht verbraucht, denn jede Art von Energie geht nie verloren. Sie wird
nur in eine andere Form umgewandelt. In unserem Beispiel findet eine Umwandlung in Wrme
statt, die jedoch so gering ist, dass sie nicht sprbar ist. Umgangssprachlich spricht dennoch jeder 5 http://de.wikipedia.org/wiki/Widerstandsreihe
vom Energieverbrauch. 6 Zum Beispiel http://www.leds.de/Widerstandsrechner/
7 http://de.wikipedia.org/wiki/Widerstand_(Bauelement)#Farbkodierung_auf_Widerst.C3.A4nden
188 189
7 Los gehts! Erste Praxis 7.1 Der erste Kontakt mit der Hardware
Pulsweitenmodulation
Stellen Sie sich vor, Sie sind in einem ziemlich dunklen Raum und Sie haben eine
Taschenlampe. Wenn Sie die Taschenlampe nun einschalten, ist es vollstndig hell
10
15
20
25
30
(HIGH), und wenn sie ausgeschaltet ist, ist es dunkel (LOW). Und nun der Trick: Wenn
1
5
J
J
I
I
Sie die Taschenlampe nun so schnell Sie knnen hintereinander ein- und wieder aus-
F G H
F G H
schalten, so werden Sie feststellen, dass es aussieht, was wre sie gedimmt. Offenbar
erhellt sie den Raum nur noch halb so stark, als wenn sie die ganze Zeit leuchtet. Das
A B C D E
A B C D E
liegt daran, dass das menschliche Auge nur sehr trge auf die schnellen Helligkeitsnde-
rungen reagieren kann. Es nimmt daher insgesamt nur eine halbe Helligkeit wahr.
10
15
20
25
30
1
Das knnen Sie brigens leicht selbst mit einer Taschenlampe ausprobieren. Zur besse-
ren Veranschaulichung, was Pulsweitenmodulation ist, schauen Sie sich einmal Abbil-
dung 7.8 genauer an.
GND
9
8
7
6
5
4
3
2
1
0
AREF
13
12
10
11
RX0
TX0
RESET
DIGITAL (PWM= )
ICSP2
L
TX ON
TM
RX Arduino
1
ICSP
100%
0% t/s
0 1 2 3 4 5 6 7 8
RESET
POWER ANALOG IN
IOREF
GND
GND
3V3
VIN
5V
A0
A1
A2
A3
A4
A5
t1
Abbildung 7.7 Eine weitere LED mit Widerstand am Arduino-Board8 Abbildung 7.8 Pulsweitenmodulation
In dem Diagramm ist die Taschenlampe innerhalb einer Zeitdauer t von insgesamt
7.1.5 Wie dimme ich eine LED?
acht Sekunden viermal fr eine Sekunde ausgeschaltet und viermal fr eine Sekunde
In diesem Abschnitt lernen Sie, wie Sie eine LED dimmen knnen und warum das wich- eingeschaltet. In der Dauer von acht Sekunden war sie also 50 % der Zeit an- und 50 %
tig fr die Ansteuerung Ihres Roboters sein wird. Generell kennt ein digitaler Arduino- ausgeschaltet. Natrlich wrde das Auge einen so langsamem Wechsel deutlich wahr-
Ausgang nur zwei Zustnde: HIGH (5 Volt) und LOW (0 Volt). Damit knnte eine LED nur nehmen. Das Beispiel in Abbildung 7.8 dient nur zur einfacheren Berechnung der 50 %
ein- oder ausgeschaltet sein. Was also tun Sie, wenn Sie die LED in der Helligkeit regeln sprich der halben Helligkeit.
wollen? Knnten Sie nicht einfach eine geringere Spannung anlegen, damit die LED
Der Name Pulsweitenmodulation (PWM) kommt daher, dass die Lnge der Impulse,
dunkler leuchtet? Nein. Denn anders als bei Glhlampen ist der Spannungsbereich, in
also die Weite im Diagramm, verndert (moduliert) wird.9 Es muss ja kompliziert klin-
dem eine LED arbeitet (leuchtet), sehr eng begrenzt. Die LED bentigt je nach Typ eine
gen, denn Sie sind nun schon fast ein Arduino-Fachmann, und da brauchen Sie auch ein
sogenannte Durchflussspannung (englisch forward voltage), ab der sie berhaupt erst
paar Fachausdrcke zum Angeben.
anfngt zu leuchten. Ein typischer Spannungsbereich fr eine LED liegt bei 2 bis 2,4 Volt,
und in diesem Bereich leuchtet sie dann in voller Strke. Aber es gibt einen Trick: Puls-
weitenmodulation (PWU). Und die kann Ihr Arduino auch!
8 Abbildung erstellt mit Fritzing 9 Die Pulsweitenmodulation (PWM) wird brigens auch Pulsdauermodulation (PDM) genannt.
190 191
7 Los gehts! Erste Praxis 7.1 Der erste Kontakt mit der Hardware
Hintergrund abarbeiten kann! Auerdem ist es nicht sehr einfach, mittels delay die Ein-
Ganz formell schaltdauer exakt zu definieren. Weitere Details dazu finden Sie im Internet im Artikel
In einer Formel wrde die Berechnung der Helligkeit aus dem Diagramm oben so ausse- The secrets of Arduino PWM.10
hen:
PWM fr Profis: analogWrite
Praktischerweise haben die Entwickler auch hier vorgesorgt und PWM gleich mitgelie-
Man spricht hierbei auch von einem duty cycle von 50 %. Duty cycle bedeutet so viel wie fert. Anstatt mittels delay einen Pin in einem bestimmten Rhythmus zwischen HIGH
Einschaltdauer oder Tastverhltnis. und LOW wechseln zu lassen, gibt es folgenden Befehl:
Wenn die Lampe innerhalb einer Sekunde nur 0,1 Sekunden lang an wre, ergbe das
analogWrite(Pin, Wert)
einen Helligkeitswert (duty cycle) von 10 %:
Der Befehl bentigt zwei Parameter: Der erste ist der anzusteuernde Pin, der zweite eine
Zahl von 0 (= immer aus) bis 255 (= immer an).
Beispiel:
Pulsweitenmodulation nachgebildet Der Befehl analogWrite(5, 128) schaltet den Pin 5 auf 50 % des maximalen Wertes von 5
Um die Pulsweitenmodulation auf dem Arduino nachzubilden, bentigen Sie wieder Volt, also 2,5 Volt (255 = 100 % = 5 Volt, 128 = 50 % = 2,5 Volt). Natrlich liegen fr einen
den Code Blinky.ino aus Listing 7.1. Tragen Sie fr die delay-Anweisungen folgende neue Teil der Zeit immer noch 5 Volt am Ausgang des Ports an, denn dieser wechselt ja wie
Werte in die Klammern ein: beim Taschenlampenlicht immer noch sehr schnell zwischen 0 und 5 Volt. Wenn Sie
aber mit einem trgen Messgert die Spannung am Pin berprfen, so werden Sie effek-
digitalWrite(led, HIGH); // schalte die LED an (HIGH) tiv nur 2,5 Volt messen (Mittelwert).
delay(100); // warte 0,1 Sekunden
digitalWrite(led, LOW); // schalte die LED aus (LOW)
Und wenn Sie nun mittels analogWrite(5, 64) effektiv nur ca. 1,25 Volt messen wrden,
delay(900); // warte 0,9 Sekunden warum leuchtet die LED dann immer noch, obwohl sie ja, wie in Abschnitt 7.1.4 beschrie-
ben, eine Spannung grer als 2 Volt bentigt, um zu leuchten? Ganz einfach: Die einfa-
Wenn Sie nun den genderten Code auf Ihren Arduino hochladen, werden Sie sehen, chen Messgerte sind zu trge, um die schnellen Wechsel in der Gleichspannung
dass die LED nur halb so hell erscheint wie in dem Beispiel mit der Taschenlampe. messen zu knnen. An einem sehr przisen und vor allem schnellen Oszilloskop sind
Sie haben nmlich die LED nur noch fr 100 Millisekunden an- und dann fr 900 Mil- die Wechsel zwischen 0 und 5 Volt gut zu sehen. In Abbildung 7.9 sehen Sie so eine Mes-
lisekunden wieder ausgeschaltet. Dieses schnelle Flackern wird von Ihrem Auge so sung mit dem Oszilloskop. Hier ist deutlich der gemessene Mittelwert Mean mit 1,28
wahrgenommen, als wre die LED viel dunkler geworden. Spielen Sie ruhig mit den Volt zu erkennen, aber eben auch der Maximalwert Maximum mit 5,28 Volt.11
zwei Werten fr die delay-Anweisung, und versuchen Sie, weitere Helligkeitsstufen zu Da unsere LED die bei 5,28 Volt entstehenden hheren Strme nicht dauerhaft vertrgt,
bilden.
muss eben auch bei den effektiv gemessenen 1,28 Volt ein Vorwiderstand verwendet
werden.
Einmal delay, immer delay?
Der Befehl delay ist die simpelste Methode, um mit dem Arduino-Board PWM nachzu-
bilden. Jedoch hat diese Methode auch Nachteile. So kann der Befehl delay als kleinsten
Wert nur 1 bernehmen, also eine Millisekunde. Sollten Sie also eine spter eine feinere 10 http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM
Auflsung bentigen, ginge das mit delay nicht. Der wesentliche Nachteil von delay ist 11 Eigentlich sollten das hier genau 5,0 Volt sein. Aber so spielt das Leben: Offenbar lagen zum
jedoch, dass whrend der Ausfhrung dieses Befehls der Arduino nichts anderes im Zeitpunkt des Experiments an meinem Board 5,28 Volt an.
192 193
7 Los gehts! Erste Praxis 7.1 Der erste Kontakt mit der Hardware
brigens: HIGH ist nicht gleich HIGH oder: 3,3 Volt vs. 5 Volt
Viele neue Bauteile nutzen als HIGH-Zustand statt 5 Volt oft nur noch 3,3 Volt, weil
damit insgesamt in einer Schaltung Energie gespart wird. Um eine andere Schaltung
mit 3,3-Volt-Logik am Arduino Uno anzuschlieen, werden spezielle Wandler bentigt,
die die Spannungen automatisch von 3,3 nach 5 Volt und umgekehrt wandeln. Im Inter-
net finden Sie diese zum Beispiel unter der englischen Bezeichnung Voltage Level Trans-
lator. Sie kosten nur wenige Euro.
bung
Erstellen Sie jetzt bitte ein Programm, das eine LED auf 25 % Helligkeit herunterregelt
(dimmt). Schlieen Sie dazu eine LED mit Vorwiderstand an Pin 5 an. Wenn Sie sich
nicht mehr sicher sind, wie die LED angeschlossen wird, blttern Sie dazu kurz zu Abbil-
dung 7.7 zurck. Das Programm besteht aus sehr wenigen Zeilen und sollte am Ende so
wie PWM_LED.ino in Listing 7.2 aussehen:
Abbildung 7.9 Schneller Wechsel der Pegel zwischen 0 und 5 Volt // An Pin 5 ist eine LED mit Widerstand angeschlossen.
int led = 5;
In Abbildung 7.10 sehen Sie die markierten PWM-fhigen Pins 3, 5, 6, 9, 10 und 11.
void setup()
{
// Den Pin zur Ausgabe festlegen.
pinMode(led, OUTPUT);
}
void loop()
{
// 64 entspricht ca. 25 % von 255.
// Die LED leuchtet nun mit 25 % Helligkeit.
analogWrite(led, 64);
}
Abbildung 7.10 Die PWM-Pins sind mit einer Tilde (~) gekennzeichnet.
Listing 7.2 Das Programm PWM_LED.ino dimmt eine LED auf 25 %.
194 195
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
7.1.6 Zwischenfazit
Der erste Praxisteil ist geschafft, und ich hoffe, es hat Ihnen bis hierher Spa gemacht.
GND
9
8
7
6
5
4
3
2
1
0
AREF
13
12
10
11
RX0
TX0
RESET
Sie haben erfolgreich die Grundlagen fr die nachfolgenden Kapitel auf dem Weg zu ICSP2
DIGITAL (PWM= )
Ihrem eigenen Arduino-Roboter gelernt. Als Erstes haben Sie die orange LED zum Blin- TX ON
TM
RX Arduino
ken gebracht, indem Sie zum ersten Mal Software auf Ihr Arduino-Board bertragen 1
haben. Nach etwas Theorie ber das ohmsche Gesetz lernten Sie im Anschluss, warum
ICSP
LEDs immer Vorwiderstnde bentigen. Als Letztes haben Sie anhand einer Taschen-
lampe gelernt, was Pulsweitenmodulation (PWM) ist und dass Sie diese spter zur
Motorsteuerung auf Ihrem Roboter bentigen werden.
RESET
POWER ANALOG IN
IOREF
GND
GND
3V3
VIN
5V
A0
A1
A2
A3
A4
A5
7.2 Ist da jemand? Kontakt mit der Auenwelt
In Abschnitt 7.1.1 haben Sie gelernt, wie Sie mit dem Arduino-Board mittels LED etwas
10
15
20
25
30
1
5
signalisieren knnen. Was tun Sie aber, wenn Ihr Arduino-Board etwas von der Auen-
J
I
I
welt mitbekommen soll? Das zeige ich Ihnen in den folgenden Abschnitten. Und es wird
F G H
F G H
viel einfacher als das PWM-Thema aus Abschnitt 7.1.5.
A B C D E
A B C D E
7.2.1 Schalter abfragen
Das einfachste Element, das Sie an einem Arduino-Pin einlesen knnen, ist ein simp-
10
15
20
25
30
1
5
ler Schalter. Diese Teile bentigen Sie fr den nachfolgenden Aufbau:
Checkliste Wie Sie sehen, ist Pin 5 des Arduino ber die gelbe Leitung mit einem Widerstand von 10
ein Arduino-Board k und mit einem Kontakt des Schalters verbunden. Das andere Ende des Widerstandes
ein passendes USB-Kabel R1 ist ber die schwarze Leitung mit der Masse (GND) verbunden. Der mittlere Kontakt
des Schalters S1 ist ber die rote Leitung mit 5V verbunden. Zur Verdeutlichung zeigt
Abbildung 7.12 den dazu passenden Schaltplan.
Um einen Arduino-Pin einzulesen, muss natrlich ein Signal auf den Pin gegeben wer-
den, das der Arduino versteht. Wie Sie sich bestimmt schon gedacht haben, ist das Warum ist eine so umstndliche Verkabelung mit einem extra Widerstand notwendig,
einfachste Signal ein HIGH oder LOW. Dazu wird gleich ein Pin des Arduino-Boards mit wenn Sie doch nur einen simplen Schalter einlesen wollen? Noch einmal: Wrde der
der Masse (GND = LOW-Signal) und mit 5 Volt (HIGH-Signal) verbunden. Wenn Sie nm- Widerstand weggelassen werden und wre der Schalter geffnet bzw. in die eine Rich-
lich den Wert eines Arduino-Eingangs einfach einlesen wrden, ohne dass etwas mit tung geschoben, so wrden Sie beim Einlesen des Arduino-Pins einen willkrlichen
dem Pin verbunden ist dieser also quasi in der Luft hngt , dann bekommen Sie Wert als Ergebnis zurckbekommen, weil der Pin in der Luft hngen wrde und
jedes Mal ein nicht vorhersagbares Ergebnis. Bauen Sie nun das Experiment mit dem
Schalter so wie in Abbildung 7.11 dargestellt auf. 12 Abbildung erstellt mit Fritzing
196 197
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
dadurch keinen definierten Zustand wie HIGH oder LOW hat. Wenn aber ein Wider- Der Befehl zum Einlesen eines digitalen Arduino-Pins lautet:
stand gegen die Masse (GND) geschaltet wird, so wird der Pin auf Masse gezogen. Ein
digitalRead(Pin);
Auslesen des Pins ergibt somit den definierten Wert LOW. Schieben Sie den Schalter in
die andere Richtung, liegen am Pin des Arduino 5 Volt an. Sie haben also ein definiertes
Der Befehl bentigt beim Aufruf nur den Parameter Pin, also die Nummer des digitalen
HIGH-Signal.
Pins, der eingelesen werden soll. Als Ergebnis liefert der Befehl den Wert HIGH oder
LOW zurck. Aber am einfachsten verdeutlicht dies das kleine Programm Schalter_ein-
lesen.ino in Listing 7.3, das Sie bitte auf Ihr Arduino-Board bertragen und mit der Schal-
VIN tung aus Abbildung 7.11 ausprobieren.
3V3
D13/SCK
R1 digitalWrite(ledPin, zustand); // LED gem Schalterzustand schalten
10k }
N/C
2
Arduino Uno Wie erwartet sollte nun der Schalter die LED des Arduino-Boards ein- und ausschalten.
198 199
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
Auf den ersten Blick erscheint Ihnen das Programm sicher einfacher und bersichtli- Im Unterschied zu einem Schalter, der seine Position dauerhaft beibehlt, verbindet ein
cher. Schauen Sie sich die Unterschiede in Ruhe an. Sie werden feststellen, dass in Lis- Taster seine Kontakte nur, solange er gedrckt wird zumindest bei einem Taster, der
ting 7.4 vollstndig auf die Verwendung von Variablen verzichtet und der Code dadurch die Kontakte beim Bettigen schliet. Es gibt nmlich auch Taster, die beim Bettigen
sehr schlank wird. Das kann natrlich so gemacht werden insbesondere dann, wenn es die Kontakte ffnen. Der Aufbau der Schaltung ist genau der gleiche wie beim Schalter,
sich um ein so einfaches Programm handelt. Stellen Sie sich aber nun vor, Sie bauen die wie Sie anhand Abbildung 7.13 leicht feststellen werden.
Schaltung einmal um und schlieen den Schalter statt an Pin 7 an Pin 11 an. Vielleicht
schlieen Sie auch noch eine grne LED statt der eingebauten an und wollen diese an
GND
9
8
7
6
5
4
3
2
1
0
AREF
13
12
10
11
Pin 10 stecken.
RX0
TX0
RESET
DIGITAL (PWM= )
ICSP2
L
Was mssten Sie dazu nun im Programmcode verndern? Richtig: An jeder Stelle mss- TX
RX Arduino
TM
ON
1
ten Sie fr den Schalter die 7 auf 11 ndern und fr die LED die 13 auf 10. Verwenden Sie
ICSP
stattdessen den Code mit den Variablen, mssten Sie lediglich die zwei Zeilen mit led-
Pin und inPin aktualisieren. Die lange Codevariante ist auf den ersten Blick vielleicht
umstndlicher, aber wesentlich leichter zu warten. Denken Sie nur daran, an wie vielen
RESET
POWER ANALOG IN
IOREF
GND
GND
3V3
VIN
5V
A0
A1
A2
A3
A4
A5
Stellen Sie Pin-Nummern aktualisieren mssten, sollten Sie spter einmal ein Pro-
gramm mit hundert Zeilen haben. Nicht zuletzt wre dieses Vorgehen auch noch deut-
lich fehleranflliger.
10
15
20
25
30
In diesem Abschnitt haben Sie gelernt, wie Sie einen Schalter anschlieen, diesen ausle-
5
J
J
I
I
sen und warum hierzu ein Widerstand notwendig ist. Des Weiteren haben Sie erfahren,
F G H
F G H
warum es sich meistens lohnt, Variablen in Programmen zu verwenden, statt sie so kurz
wie mglich zu schreiben.
A B C D E
A B C D E
10
15
20
25
30
1
5
7.2.2 Taster abfragen
Was mit einem Schalter geht, geht mit einem Taster genauso einfach. Und das testen Sie
jetzt. Sie bentigen fr den nachfolgenden Aufbau: Abbildung 7.13 Schaltung zum Auslesen eines Tasters14
200 201
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
Den dazugehrigen Schaltplan sehen Sie in Abbildung 7.14: Nur das Symbol fr den Tas- Denn der Pin wird standardmig immer Richtung +5 Volt gezogen. Das bedeutet:
ter S2 hat sich verndert. Wenn der Taster in Abbildung 7.15 nicht gedrckt ist, ist der Pin HIGH. Wird der Taster
gedrckt, wird der Pin mit GND verbunden und ist damit LOW. Aber dafr sparen Sie sich
ein extra Bauteil.
3V3
VIN
5V
RESET
RESET D0/RX
RESET2 D1/TX S2
1
AREF D2
ICSP2
ioref D3 PWM
10
15
20
25
30
1
5
J
J
AREF
TX
RX
D4
L
GND
I
F G H
F G H
13
A0 D5 PWM IOREF
12
RESET
A1 D6 PWM 11
Arduino
3V3
Arduino 5V
10
A2 Uno D7 GND
9
A B C D E
A B C D E
8
TM
(Rev3)
POWER
GND
A3 D8
DIGITAL
VIN 7
A4/SDA D9 PWM 6
A0 5
(PWM=
A5/SCL D10 PWM/SS A1 4
10
15
20
25
30
1
5
A2 3
ANALOG IN
D11 PWM/MOSI A3 2
)
A4 TX0 1
ICSP
ON
1
D12/MISO A5 RX0 0
1
D13/SCK
R1
10k
N/C Abbildung 7.15 Versuch mit Taster und internem Pull-up-Widerstand16
2
GND
202 203
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
pinMode(TASTER_PIN, INPUT);
void loop()
{
Abbildung 7.16 Ein prellender Schalter beim Einschalten
// Entpreller (entpreller) aktualisieren
entpreller.update();
Wie kann dieses Prellproblem gelst werden? Zum einen gibt es spezielle sogenannte
entprellte Taster. Diese sind mechanisch so konstruiert, dass sie nicht prellen knnen.
// "Korrigierten" Wert des Tasters lesen
Zum anderen ist das aber auch per Software lsbar. Es gibt eine fertige Lsung, da sich
int wert = entpreller.read();
bereits andere ausgiebig zu diesem Problem Gedanken gemacht haben: die sogenannte
Bounce-Bibliothek17. Diese sorgt dafr, dass ein prellender Schalter oder Taster wie // LED ein- oder ausschalten
gewnscht abgefragt werden kann, und filtert die Strungen automatisch fr Sie her- // (LOW = EIN, weil Pull-up-Widerstand!)
aus. Ein Beispiel dazu sehen Sie in Listing 7.5. Den Code zum Download finden Sie in der if (wert == LOW)
Datei Taster_entprellt.ino. Der Aufbau der Testschaltung dazu ist in Abbildung 7.15 dar- {
gestellt. Denken Sie daran, dass Sie fr die Verwendung der Bibliothek diese erst in Ihre // LED an
Arduino-Software importieren mssen (siehe Abschnitt 6.15). digitalWrite(LED_PIN, HIGH);
}
#include <Bounce2.h> else
{
#define TASTER_PIN 2 // Pin fr den Taster (gegen GND) // LED aus
#define LED_PIN 13 // Die bliche Arduino-LED digitalWrite(LED_PIN, LOW);
}
// Erstelle ein Bounce-Objekt, das das Entprellen regelt. }
Bounce entpreller = Bounce();
Listing 7.5 Taster einlesen und automatisch entprellen
void setup()
{ Die meisten Zeilen drften fr Sie nicht mehr neu sein. Spannend ist lediglich die Zeile
// Taster-Pin als Eingang definieren zu Beginn:
204 205
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
Hier wird ein Objekt namens entpreller erstellt, das die ganze Magie fr Sie regelt. Fernseher oder eine Stereoanlage mit Fernbedienung besitzen, denn die gngigen Fern-
Beachten Sie weiterhin die in der setup-Funktion enthaltene Anweisung pinMode(TAS- bedienungen haben alle eine Infrarot-LED (IR-LED), die Signale an das zu steuernde
TER_PIN, INPUT_PULLUP), die den internen Pull-up-Widerstand im Arduino fr den Tas- Gert bertrgt. Mit vielen Digitalkameras oder Webcams knnen Sie die Infrarotstrah-
ter-Pin aktiviert (siehe Abschnitt 7.1.4). Wie die Entprellfunktion intern genau arbeitet, lung sogar sichtbar machen: Halten Sie doch einmal in sehr dunkler Umgebung Ihre
knnen Sie auf der Website des Entwicklers nachlesen.18 Wichtig sind an dieser Stelle Fernseherfernbedienung vor eine Kamera, bettigen eine der Tasten und schauen Sie
zum einen die folgenden Zeilen in der setup-Funktion: auf das Bild. Es drfte ungefhr wie in Abbildung 7.17 aussehen. Der nun sichtbar leucht-
ende Punkt ist die Infrarot-LED.
// Entprellfunktion aktivieren
entpreller.attach(TASTER_PIN);
entpreller.interval(5);
Das ist auch schon alles, was Sie dazu wissen mssen. Wahrscheinlich werden Sie die Abbildung 7.17 Infrarotlicht, mit einer Webcam sichtbar gemacht
Bounce-Bibliothek in der Praxis nicht sehr oft bentigen. Aber falls einmal die exakte
Auswertung von Tastern oder Schaltern notwendig ist, kennen Sie nun diese hilfreiche Natrlich hat Ihr Fernseher oder das entsprechende empfangende Gert auch einen Inf-
Bibliothek. rarotsensor, um dieses Licht zu erkennen und mittels weiterer Elektronik zu dekodie-
ren. Dekodieren bedeutet in diesem Fall, die bertragenen Signale zu entschlsseln.
Schlielich wre es ziemlich hilfreich, wenn beim Drcken der Taste 4 auf der Fernbe-
7.2.3 Sensoren dienung eine andere Information als bei Taste 2 an das zu steuernde Gert bertragen
Aber nun zu etwas Spannenderem als simplen Tastern und Schaltern: Sensoren. Ein Sen- wird. In Abbildung 7.18 sehen Sie einen Infrarotsensor (IR-Sensor).
sor ist so etwas wie ein Fhler, der bestimmte Eigenschaften seiner Umgebung erken-
nen kann. Er nimmt Messungen vor und stellt die Ergebnisse an seinen Anschlssen zum
Auslesen an elektrischen Schaltungen, wie dem Arduino, zur Verfgung. In den folgenden
Abschitten will ich Ihnen drei Sensoren vorstellen, die in der Robotik hufig Anwendung
finden. Einen davon werden Sie selbst spter an Ihrem Arduino-Roboter nutzen!
7.2.4 Infrarotsensor
Es gibt verschiedenste Sensoren, die sich mit der Messung von Infrarotlicht beschfti-
gen. Infrarotlicht ist Licht im fr den Menschen unsichtbaren Bereich. Dabei sind wir
stndig davon umgeben, sogar in unserem Wohnzimmer zumindest, wenn Sie einen
Abbildung 7.18 Der Infrarotsensor (IR-Sensor) TSOP38238
18 https://github.com/thomasfredericks/Bounce-Arduino-Wiring/wiki
206 207
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
Der Vorteil der Infrarotsensoren ist, dass sie relativ gnstig sind. Sie haben aber auch Fr das nachfolgende Experiment bentigen Sie folgende Teile:
einen Nachteil: Da die Sonne ebenfalls einen sehr hohen Anteil an Infrarotlicht aussen-
det, funktionieren viele IR-Sensoren im Auenbereich nicht sehr zuverlssig. Denn
neben dem Infrarotlicht der Fernbedienung empfangen sie zustzlich das IR-Licht der
Sonne und knnen das Signal somit nicht immer eindeutig erkennen. Fr Innenberei- Checkliste
che knnen sie also gut eingesetzt werden, whrend drauen andere Sensoren besser einen Infrarotdistanzsensor
geeignet sind. den Arduino Uno
GND
9
8
7
6
5
4
3
2
1
0
AREF
13
12
10
11
RX0
RESET
TX0
vom IR-Empfnger wieder eingelesen wird. In Abhngigkeit von der Entfernung des ICSP2
DIGITAL (PWM= )
Objekts gibt dieser Sensor an einem seiner Pins eine Spannung aus. Diese Spannung TX ON
TM
RX Arduino
knnen Sie mit dem Arduino einlesen. 1
ICSP
RESET
POWER ANALOG IN
IOREF
GND
GND
3V3
VIN
5V
A0
A1
A2
A3
A4
A5
Abbildung 7.19 Der Sharp-Infrarotdistanzmesser GP2Y0A21YK0F
Abbildung 7.20 Der Infrarotdistanzsensor, angeschlossen am Arduino19
Der Sensor ist denkbar einfach an einem Arduino-Board anzuschlieen, denn er hat
lediglich drei Leitungen an seinem Anschlusskabel:
Vorsicht, empfindliche Buchse am Sensor!
Farbe Belegung Beachten Sie, dass der weie Stecker nur in eine Richtung auf den Sensor gesteckt wer-
den kann. Bitte schauen Sie sich den Stecker in Abbildung 7.21 genau an: Er hat einen
Rot +5 Volt kleinen Steg in der Mitte, der in die passende Fhrung des Sensors gesteckt werden
Schwarz Masse (GND) muss. Sollten Sie den Stecker falsch herum stecken und den Sensor anschlieen, wird
mindestens der Sensor dauerhaft Schaden nehmen!
Wei Signal
208 209
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
Wie Sie sehen, handelt es sich um eine analoge Spannung, die alle Werte zwischen 0 bis
ungefhr 3,1 Volt annehmen kann. Daraus folgt das nchste Experiment mit dem
Arduino und einer neuen Funktion: das Einlesen einer analogen Spannung mit diesem
Befehl:
analogRead(pin);
void loop()
{
3,5 // Sensor (Pin) einlesen
float spannungswert = analogRead(IRpin);
3,0
2,5
// umrechnen in cm
Spannung (in V)
210 211
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
{ Nach dem bertragen der Software aktivieren Sie den in Abschnitt 6.14.2 beschriebenen
Serial.print("> 80 cm"); Serial Monitor in der Arduino-Software ber die Menpunkte Tools Serial Monitor.
} Halten Sie nun die Hand vor den Sensor, und verndern Sie dabei die Entfernung. Die
Ausgabe auf dem Bildschirm zeigt die ungefhre Entfernung der Hand vom Sensor an.
Serial.println();
In Abbildung 7.23 sehen Sie ein Beispiel.
delay(500);
} Wenn Sie den Code einmal nher betrachten, werden Sie feststellen, dass die ganze
Listing 7.6 IR_Distanz_SerialOut.ino zum Anzeigen der Entfernung Magie auf zwei Zeilen beschrnkt ist. Erst wird die analoge Spannung vom Sensor am
Arduino-Pin mittels analogRead eingelesen und gleichzeitig in der Variable entfernung
gespeichert:
// umrechnen in cm
float entfernung = (6787 / (spannungswert - 3)) - 4;
void setup()
{
pinMode(ledPin, OUTPUT); // LED-Pin als Ausgang definieren
pinMode(IRpin, INPUT); // IR-Pin als Eingang definieren
}
void loop()
{
// Sensor (Pin) einlesen
float spannungswert = analogRead(IRpin);
Abbildung 7.23 Ausgabe der Entfernung auf dem Bildschirm
20 Siehe auch http://www.acroname.com/articles/linearizing-sharp-ranger.html
212 213
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
// LED blinkt
digitalWrite(ledPin, HIGH); 7.2.5 Ultraschallsensoren
delay(zeit); Gegenber den in Abschnitt 7.2.4 vorgestellten Infrarotsensoren haben Ultraschallsen-
digitalWrite(ledPin, LOW); soren den Vorteil, dass sie gegen Sonnenlicht unempfindlich sind. Das heit, wenn Sie
delay(zeit);
Ihren Roboter einmal im Garten fahren lassen wollen, eignen sich Ultraschallsensoren
}
besser auch wenn diese drauen ebenfalls vor Nsse geschtzt werden mssen. Ein
Listing 7.7 Blinkende LED in Abhngigkeit zur Entfernung der Hand weiterer wesentlicher Vorteil ist die maximal messbare Entfernung: Die in Abbildung
7.24 gezeigten Sensoren SRF04/05 von Devantech knnen eine Entfernung bis sechs
Je nher Sie nun die Hand in Richtung Sensor bewegen, desto schneller blinkt die LED. Meter messen. Der Nachteil der Sensoren liegt in Ihrem Preis: Verglichen mit IR-Senso-
ren sind sie fast doppelt so teuer in der Anschaffung.
Hilfreich die Funktion map
Ein paar Worte zu der hier verwendeten map-Funktion: Diese ist uerst hilfreich, um
Werte eines bestimmten Bereichs auf einen anderen abzubilden (zu mappen). Um es
etwas anschaulicher zu sagen: Wenn Sie zum Beispiel einen Temperatursensor haben,
der von 100 bis +100 Celsius misst, und Sie die Helligkeit einer LED von 0 bis 255 in
Abhngigkeit zur Temperatur einstellen wollen, dann geht das mit der map-Funktion
wie folgt:
Einfach, aber genial, oder? Sie finden die komplette (englische) Referenz zum map-Befehl
wie immer im Internet.21
Abbildung 7.24 Der Ultraschallsensor SRF04/05 von Devantech
21 http://arduino.cc/en/Reference/Map 22 Ich will Ihnen die Lsung nicht vorenthalten: Sie finden sie als Download mit dem Dateinamen
IR_Distanz_LED_Helligkeit.ino.
214 215
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
Auch die Ansteuerung der Ultraschallsensoren ist komplexer: Dem Sensor muss erst ter nutzen, und ich zeige Ihnen in Abschnitt 7.4, Der Diener Ansteuerung von Ser-
ein Start-Impuls gegeben werden, damit er eine Messung startet. Danach antwortet er vos. bzw. Abschnitt 7.5, Ich muss hier weg! Ansteuerung von Motoren, wie das
mit einem Impuls, dessen Lnge der gemessenen Distanz entspricht. funktioniert.
Sie wollen eine SD-Karte fr Ihren Arduino nutzen, um dort zum Beispiel Daten zu pro-
tokollieren oder ihn mit einem XBee Funkmodul (siehe Abbildung 7.27) erweitern? Kein
Problem: Das Arduino Wireless SD Shield aus Abbildung 7.26 ist das Shield Ihrer Wahl.
Das Arduino Motor Shield aus Abbildung 7.25 dient zum leichten Anschluss und Betrieb
23 Bild: http://arduino.cc, CC BY-SA 3.0
von Motoren und Servos am Arduino-Board. Dieses Shield werden Sie auf Ihrem Robo- 24 Bild: Mark Fickett, CC BY-SA 3.0
216 217
7 Los gehts! Erste Praxis 7.2 Ist da jemand? Kontakt mit der Auenwelt
Wenn Sie Ihren Arduino Daten anzeigen lassen und ihn per Touchscreen steuern wol- Wenn Sie mal einen Roboter bauen wollen, der fast berall erreichbar ist, dann sollten
len, dann sollten Sie sich nher mit dem TFT Touch Shield aus Abbildung 7.28 beschf- Sie sich mit dem GSM Shield aus Abbildung 7.30 vertraut machen. Es enthlt alles, was
tigen. Sie zur Kommunikation ber das Handynetz bentigen. Wenn Sie sich spter noch
nher mit dem Thema GSM beschftigen wollen, sollten Sie sich auch das Adafruit FONA
einmal nher anschauen.27
Verbinden Sie Ihr Arduino-Projekt doch spter einmal mit Ihrem heimischen Netzwerk
per WLAN mit dem WIFI Shield aus Abbildung 7.29. Sie knnten zum Beispiel Ihr Pro-
jekt aus dem heimischen Netz twittern lassen oder vom Internet aus auf Ihr Arduino-
Board zugreifen. Und einen SD-Kartenleser hat dieses Shield auch noch mit dabei.
Immer noch nicht genug? Dann entwickeln Sie doch Ihr eigenes Arduino-Shield. Mit
dem Arduino Proto Shield aus Abbildung 7.31 haben Sie Platz fr eigene Ltarbeiten oder
zur Entwicklung eines Prototyps fr Ihr eigenes Shield.
218 219
7 Los gehts! Erste Praxis 7.3 Hrt mich jemand? Ausgabe von Signalen
Tnen ist fr Roboter in der Praxis sehr hilfreich. Denken Sie einmal an die Stromver-
sorgung Ihres spteren Roboters, der durch Akkus seine Energie erhlt. Es wre doch
sinnvoll, wenn der Roboter dann durch Tne signalisieren knnte, dass die Akkus bald
leer werden.
Auch wre es denkbar, dass Ihr Roboter spter laut piept, wenn er sich in eine ausweg-
lose Situation verfahren hat und vor lauter Hindernissen keinen Weg mehr aus einer
Ecke in Ihrer Wohnung findet. Schauen Sie sich also jetzt an, wie die Ausgabe von Tnen
funktioniert.
7.3 Hrt mich jemand? Ausgabe von Signalen Abbildung 7.32 Ein Piezosignalgeber
In diesem Abschnitt zeige ich Ihnen, wie Sie mit dem Arduino-Board und nur einem Neben dem gnstigen Preis ist auch ein Vorteil, dass Piezosignalgeber ohne weitere
einzigen weiteren Bauteil Tne erzeugen knnen. Denn schlielich soll sich Ihr Robo- Bauteile direkt am Arduino-Board angeschlossen werden knnen. Tun Sie nun genau
ter spter bestimmt einmal bemerkbar machen knnen. Eine Signalisierung mittels das, und verbinden Sie bitte einen Piezo gem Abbildung 7.33 mit Ihrem Board. Sie
bentigen dazu:
29 Bild: http://arduino.cc, CC BY-SA 3.0
220 221
7 Los gehts! Erste Praxis 7.3 Hrt mich jemand? Ausgabe von Signalen
void setup()
Laden Sie sich anschlieend das Programm Piezo_Pieps.ino herunter, und bertragen
{
Sie es auf das Arduino-Board.
// Die Pins zur Ausgabe festlegen.
pinMode(piezo, OUTPUT);
pinMode(led, OUTPUT);
}
void loop()
{
// LED zur Kontrolle einschalten.
digitalWrite(led, HIGH);
9
8
7
6
5
4
3
2
1
0
AREF
13
12
10
11
RX0
TX0
RESET
DIGITAL (PWM= )
ICSP2
L
// LED ausschalten.
TX ON
RX Arduino
TM
digitalWrite(led, LOW);
1
ICSP
POWER ANALOG IN
IOREF
VIN
5V
A0
A1
A2
A3
A4
A5
222 223
7 Los gehts! Erste Praxis 7.3 Hrt mich jemand? Ausgabe von Signalen
while (laufzeit < dauer) hilft ein Blick in das Datenblatt des Piezos, das Sie meist auf den Internetseiten des Bau-
{ teilherstellers oder in Online-Shops gngiger Elektronikfachhndler finden.
digitalWrite(piezo,HIGH);
delayMicroseconds(periode * 0.5);
7.3.2 Melodien programmieren
digitalWrite(piezo, LOW);
Sie knnen mit Ihrem Arduino-Board und der Funktion playTone auch richtige Noten
delayMicroseconds(periode * 0.5);
spielen. Sie mssen nur die passenden Frequenzen und damit die Tonhhen kennen.
laufzeit += periode; Auch hier hilft das Internet weiter und ermglicht Ihnen zum Beispiel unter der Seite
} http://rechneronline.de/note/, auf einer Klaviatur fr jede Taste die entsprechende Fre-
} quenz anzuzeigen. Die Tne einer Oktave habe ich Ihnen in Tabelle 7.2 aufgefhrt.
Listing 7.8 Das Programm Piezo_Pieps erzeugt jede Sekunde einen Ton.
Ton-Nr. Note Frequenz in Hertz
Wie Sie sehen, enthalten sowohl die setup-Funktion als auch die loop-Funktion nur sehr 28 c 130,813
wenige Anweisungen. Entscheidend fr die Tonausgabe ist die Anweisung play-
30 d 146,832
Tone(1000, 200). Sie lsst den Piezo einen Ton von 1000 Hz fr eine Dauer von 200 ms
erzeugen. Es gibt zwar eine hnliche Arduino-Funktion namens tone32, aber um zu zei- 32 e 164,814
gen, wie das Prinzip der Piezo-Ansteuerung funktioniert, habe ich in Listing 7.8 eine
33 f 174,614
eigene Umsetzung verwendet. Bestimmt haben Sie schon erkannt, dass der Piezo in der
Funktion playTone durch einen simplen regelmigen Wechsel zwischen HIGH und 35 g 195,998
LOW zum Piepen gebracht wird:
37 a 220,000
digitalWrite(piezo,HIGH);
39 h 246,942
delayMicroseconds(periode * 0.5);
40 c 261,626
digitalWrite(piezo, LOW);
delayMicroseconds(periode * 0.5); Tabelle 7.2 Beispielnoten und ihre Frequenz (Tonhhe)
Die restlichen Zeilen der Funktion playTone dienen lediglich dazu, den Ton in der Stellen Sie sich vor, Ihr Roboter fhrt eines Tages durch die Wohnung und spielt beim
gewnschten Frequenz (Tonhhe) und Lnge abzuspielen. Um den Ton zu stoppen, Auftreffen auf ein Hindernis Zum Geburtstag viel Glck. Lassen Sie Ihrer Fantasie
setzen Sie einfach den Piezo-Pin auf LOW: freien Lauf, und bringen Sie Ihren Arduino dazu, eine Melodie zu spielen. Zu langweilig?
Im folgenden Abschnitt 7.3.3 zeige ich Ihnen, wie Sie mit dem Infrarotsensor und dem
digitalWrite(piezo, LOW); Piezo eine Art Musikinstrument nachbauen.
Ausprobieren!
7.3.3 Ein Musikinstrument
Experimentieren Sie auch hier wieder mit verschiedenen Werten im Aufruf der Funk-
tion playTone. ndern Sie die Tondauer, ndern Sie die Tonhhe. Sie werden merken, Jetzt zeige ich Ihnen, wie Sie ein sehr spezielles Musikinstrument nachahmen knnen:
dass Ihr Piezo nicht bei allen Werten (Frequenzen) einen Ton von sich gibt. Es hngt das Theremin33. Vielleicht kennen Sie den Film Mars Attacks!34 von Tim Burton. In die-
immer vom jeweiligen Bauteil ab, mit welchen Frequenzen es funktioniert. Auch hier
33 http://de.wikipedia.org/wiki/Theremin
34 http://de.wikipedia.org/wiki/Mars_Attacks!
32 http://arduino.cc/de/Reference/Tone
224 225
7 Los gehts! Erste Praxis 7.3 Hrt mich jemand? Ausgabe von Signalen
sem Film wird der Klang des Theremins als schaurige, fast nervige Musikuntermalung Laden Sie anschlieend das Programm Musikinstrument.ino (siehe Listing 7.9) herunter,
genutzt. Es ist auerdem das einzige weit verbreitete Musikinstrument, das berh- und bertragen Sie es auf Ihren Arduino. Wenn alles geklappt hat, sollten Sie aus dem
rungslos gespielt wird. Berhrungslos? Das knnen Sie auch! Nehmen Sie dazu den Piezo in kurzen Abstnden einen tiefen Ton hren.
Versuchsaufbau aus der Abbildung 7.33 zur Hand, und erweitern Sie ihn um den
Bewegen Sie nun Ihre Hand vor den Infrarotsensor, und verndern Sie den Abstand zu
Infrarotdistanzsensor aus Abschnitt 7.2.4. Sie bentigen die folgenden Teile:
ihm mal nher, mal weiter weg. Je nher die Hand dem Sensor kommt, umso hher
wird der Piepton aus dem Piezoschallwandler.
void loop()
{
// Sensor (Pin) einlesen
float spannungswert = analogRead(IRpin);
// Umrechnen in cm
float entfernung = (6787 / (spannungswert - 3)) - 4;
GND
9
8
7
6
5
4
3
2
1
0
AREF
13
12
10
11
RX0
TX0
RESET
DIGITAL (PWM= )
ICSP2
L
TX
RX Arduino
TM
ON
// Den delay-Wert begrenzen
1
entfernung = 80;
if (entfernung < 10)
entfernung = 10;
RESET
POWER
IOREF
ANALOG IN
GND
GND
3V3
VIN
5V
A0
A1
A2
A3
A4
A5
// LED an
Abbildung 7.34 Der Arduino als Theremin35
digitalWrite(ledPin, HIGH);
226 227
7 Los gehts! Erste Praxis 7.3 Hrt mich jemand? Ausgabe von Signalen
// Spiele Ton mit "tonhoehe" Hz fr 100 ms ab. // Entfernung auf Tonhhe mappen
playTone(tonhoehe, 100); int tonhoehe = 0;
tonhoehe = map(entfernung, 10, 80, 1000, 100);
// LED aus
digitalWrite(ledPin, LOW); Genauer gesagt: Die gemessene Entfernung wird von 10 cm bis 80 cm auf Tonhhen
von 1000 Hz bis 100 Hz gemappt (abgebildet).
// 0,05 Sekunden Pause zwischen den Tnen
delay(50); bung 1
}
Verndern Sie den Code so, dass der Ton tiefer wird, je nher Sie die Hand zum Sensor
bewegen, bzw. hher, je weiter Sie sie entfernen.
// Frequenz in Hertz (Hz)
// Dauer in Millisekunden (ms)
void playTone(int frequenz, long dauer) bung 2
{ Verndern Sie den Code so, dass bei nderung des Sensorabstands nicht die Tonhhe,
dauer *= 1000; sondern die Geschwindigkeit des Piepsens verndert wird je nher Sie die Hand zum
float periode = (1.0 / frequenz) * 1000000; Sensor bewegen, desto schneller soll es piepsen.
long laufzeit = 0;
bung 3
while (laufzeit < dauer)
Verndern Sie den Code so, dass bei nderung des Sensorabstands nicht die Tonhhe,
{
sondern die Dauer des Tons verndert wird (Tonlnge).
digitalWrite(piezo,HIGH);
delayMicroseconds(periode * 0.5);
Verloren? Nichts funktioniert mehr?
digitalWrite(piezo, LOW); Das passiert jedem einmal. Wenn Ihr Programm nach vielen nderungen gar nicht
delayMicroseconds(periode * 0.5); mehr funktioniert, laden Sie sich einfach den Originalcode Musikinstrument.ino erneut
herunter, bertragen ihn auf Ihr Board und starten das Experiment von vorn.
laufzeit += periode;
Und wenn Sie sich die fertigen Lsungen anschauen wollen, finden Sie die Dateien
}
Musikinstrument_Uebung1.ino, Musikinstrument_Uebung2.ino und Musikinstrument_
}
Uebung3.ino wie immer auch als Download.
Listing 7.9 Das Programm Musikinstrument.ino
7.3.4 Zwischenfazit
Wie funktioniert das?
Ein weiterer Abschnitt ist erfolgreich durchgearbeitet. Sie haben den Piezo kennenge-
Die Funktionsweise des Programms ist sehr simpel. Bestimmt erinnern Sie sich an die
lernt und erfahren, wie Sie ihm Tne entlocken knnen. Ich hoffe, Sie hatten danach
unterschiedlich schnell blinkende LED in Verbindung mit dem IR-Sensor aus Abschnitt
auch Spa als Musiker mit dem Musikinstrument im Experiment mit dem Infrarot-
7.2.4. Das gleiche Prinzip wird auch hier genutzt, indem in der Hauptschleife loop als
sensor und dem Piezo. Zum Schluss haben Sie in bungen den vorhandenen Code so
Erstes der Sensor per analogRead(IRpin) ausgelesen und dann der gelesene Spannungs-
verndert, dass sich die Tonhhe oder die Tondauer vernderten.
wert in eine Entfernung (cm) umgerechnet wird. ber den bekannten Befehl map erfolgt
danach eine Umrechnung der Entfernung in Hertz (Hz), also in die Tonhhe:
228 229
7 Los gehts! Erste Praxis 7.4 Der Diener Ansteuerung von Servos
7.4 Der Diener Ansteuerung von Servos dert. Er ist innerhalb des Servos kaum erkennbar mit dem Motor verbunden und sorgt
dafr, dass die Elektronik durch stndiges Messen des Potiwiderstandes erkennt, in wel-
In diesem Abschnitt kommt nun erste Bewegung in die ganze Sache, denn es geht um cher Position sich der Servoarm gerade befindet. Und nicht nur das: Durch die stndige
den ersten Aktor (siehe Abschnitt 2.2.3) an Ihrem spteren Arduino-Roboter: den Servo. Kontrolle des Widerstandes regelt die Elektronik auch fortwhrend die Position nach,
wenn sich die Position des Zahnrades am Ausgang verndert hat.
7.4.1 Was sind Servos und wie funktionieren sie?
Der Begriff Servo leitet sich von dem lateinischen Wort servus ab, das Diener oder
Sklave bedeutet.36 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 besteht ein
Servo aus einem Motor, verbunden mit einer speziellen Elektronik zum Ansteuern, und
einem Getriebe. In Abbildung 7.35 sehen Sie einen Servo.
Vorsicht, sensibel!
Servos sind empfindliche Bauteile. Die gnstigen Servos haben Getriebe aus Kunststoff,
die keine allzu groe Belastung aushalten. Leider sind einfache Modellbauservos auch
Abbildung 7.35 Ein transparenter Miniservo mit sichtbarem Innenleben
nicht in der Lage, festzustellen, ob sie berlastet sind. Eine berlastung tritt zum Bei-
spiel auf, wenn ein Servo seinen Arm in eine Position drehen soll, die durch ein Hinder-
Auf der Oberseite des Servos ist eine geriffelte Welle, auf der in der Regel ein sogenannter nis blockiert ist. Das kann schnell zur berlastung der Servoelektronik oder zur
Servo-Arm montiert wird. Dieser Arm dient dazu, den durch den Servo zu bewegenden Zerstrung des Getriebes fhren. Gehen Sie also vorsichtig mit den kleinen Helfern um!
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
In Abbildung 7.35 lsst sich ganz gut das Innenleben des Servos erkennen. Auf der einen
bettigt ein Servo zum Beispiel bei einem ferngesteuerten Auto den Gashebel oder des-
Seite ist der Motor zu sehen, darber befinden sich einige Zahnrder als Getriebe. Dieses
sen Lenkung. In Abbildung 7.36 sind verschiedene Servoarme mit Zubehr dargestellt.
Getriebe sorgt dafr, dass der in der Regel recht schwache Motor am Ende verhltnism-
Neben der Mechanik enthlt ein Servo einen speziellen Widerstand namens Potenzio- ig viel Kraft anwenden kann. Servos gibt es bereits fr wenige Euro zu kaufen. Aber
meter (kurz Poti, von der alten Schreibweise Potentiometer). Es ist das gleiche Bauteil, auch hier sind nach oben keine Grenzen gesetzt: Extrem starke Servos kosten schnell
das in den meisten etwas lteren Radios als Lautstrkedrehknopf verbaut ist. Das Poti mehrere Hundert Euro! Aber keine Angst: Fr Ihren Roboter reicht ein kleiner, gnsti-
ist ein Widerstand, dessen ohmscher Wert sich beim Drehen von klein nach gro vern- ger Servo. Aber dazu spter mehr. Erst einmal mchte ich Ihnen in Abschnitt 7.4.2 zei-
gen, wie Sie einen Servo ansteuern.
36 siehe auch http://de.wikipedia.org/wiki/Servo
230 231
7 Los gehts! Erste Praxis 7.4 Der Diener Ansteuerung von Servos
Leitungsfarbe Belegung Tabelle 7.4 Die ungefhre Pulsdauer im Verhltnis zur Servoarmposition (Forts.)
Rot +5 Volt
5 Gut zu wissen!
t/ms
Leider baut jeder Hersteller seine Servos mit unterschiedlicher Genauigkeit. Das bedeu-
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 tet, dass einige Servos bei einem Puls von 2,0 ms Lnge den Arm nach ganz rechts fah-
ren und andere stattdessen nach ganz links. Auch die Dauer von 1,0 ms bis 2,0 ms sind
Periodendauer 20 ms
nur ungefhre Werte und variieren ein klein wenig: Es knnen also zum Beispiel statt
1,0 ms auch mal 0,9 ms sein.
Abbildung 7.37 Solche PWM-Signale bentigt ein Servo zur Ansteuerung.
Wie dort dargestellt, muss innerhalb einer Gesamtdauer von 20 Millisekunden (Perio- Servoansteuerung fix und fertig
dendauer) jeweils ein kurzer Puls mit einer Dauer zwischen einer und zwei Millisekun-
Alles zu komplizierte Theorie? Nun, Sie sollen ja hier auch ein bisschen was lernen. Aber
den gesendet werden. Aber wie wei der Servo nun, wie weit er seinen Arm in welche
erneut haben es Ihnen die Arduino-Entwickler leicht gemacht und ganze Arbeit geleis-
Richtung drehen soll? Ganz einfach: Die Pulsdauer bestimmt die Position.
tet: Es gibt nicht nur eine fertige Bibliothek mit einfachen Befehlen, sondern auch gleich
ein fix und fertiges Beispiel innerhalb der Arduino-Software. Um dieses Beispiel zu ff-
Pulsdauer Servoarmposition
nen, whlen Sie in der Arduino-Software aus dem Men die Punkte Datei Beispiele
ca. 1,0 ms Arm ganz links 1 Servo Sweep, wie in Abbildung 7.39 dargestellt.
232 233
7 Los gehts! Erste Praxis 7.4 Der Diener Ansteuerung von Servos
void setup()
{
pinMode(9, OUTPUT); // Pin 9 als Ausgang definieren
servo1.attach(9); // Vebindet Pin 9 mit dem Servoobjekt
}
void loop()
{
int pos = 0; // Variable zur Speicherung der Position
for (pos = 0; pos <= 180; pos++) // Geht von 0 bis 180 Grad
{ // in Schritten von einem Grad.
servo1.write(pos); // Bewege Servo zu Position "pos".
delay(15); // Warte 15 ms, bis Position erreicht.
}
for (pos = 180; pos >= 0; pos--) // Geht von 180 bis 0 Grad
{
servo1.write(pos); // Bewege Servo zu Position "pos".
delay(15); // Warte 15 ms, bis Position erreicht.
}
}
Entscheidend sind in diesem Programm lediglich drei Zeilen. Als Erstes wird die Biblio-
thek Servo eingebunden, damit die Servobefehle im Programm zur Verfgung stehen.
Dies geschieht durch die Anweisung #include:
Automatisch ffnet die Software ein vollstndiges Beispielprogramm. In Listing 7.10 Danach wird ein Servoobjekt mit dem Namen servo1 erstellt:
finden Sie den kompletten Code von Sweep noch einmal auf Deutsch (Programm zum
Download: Servo_Radar.ino). Servo servo1;
#include <Servo.h> Zustzlich wird dem Servoobjekt die Information gegeben, an welchem Pin des
Arduino-Boards die Servosteuerleitung angeschlossen ist (PWM-Signal):
Servo servo1; // Erstellt ein Servoobjekt zur Steuerung
// Maximal 8 Servos knnen angesteuert werden. servo1.attach(9);
234 235
7 Los gehts! Erste Praxis 7.4 Der Diener Ansteuerung von Servos
servo1.write(pos);
Die Variable pos erhlt hier brigens einen Wert von 0 bis 180. Sie brauchen also nicht
umstndlich PWM-Signale im Millisekundenbereich zu erzeugen, das wird alles fr Sie
versteckt und im Hintergrund durchgefhrt. Und die 0 bis 180 entsprechen natrlich
der Gradzahl des Winkels des Servoarms (0 = ganz links, 90 = Mitte, 180 = ganz rechts).
GND
9
8
7
6
5
4
3
2
1
0
AREF
13
12
10
11
RX0
TX0
RESET
DIGITAL (PWM= )
Pins des Arduino-Boards knnen nur begrenzt Strom liefern (wenngleich der Strom fr ICSP2
L
einen kleinen Servo durchaus ausreichen wrde). Zustzlich erzeugen Servos aber hu- TX
RX Arduino
TM
ON
fig kleine Strungen auf den Spannungsleitungen, die den Arduino sogar zum Abstr-
ICSP
zen bringen knnten. Ein Servo sollte daher immer eine eigene Stromversorgung
bekommen!
RESET
POWER ANALOG IN
IOREF
GND
GND
3V3
VIN
5V
A0
A1
A2
A3
A4
A5
Zwei Spannungsversorgungen eine Masse!
Wenn Sie zwei Spannungsversorgungen nutzen, mssen diese einen gemeinsamen
Bezugspunkt fr ihre Spannungen haben. Und das ist immer die Masseleitung (GND).
Abbildung 7.40 Anschluss eines Servos mit eigener Spannungsversorgung38
Wenn Sie also mit einem Netzteil oder dem USB-Port Ihr Arduino-Board mit Strom ver-
sorgen und mit einer anderen Stromquelle den Servo betreiben, dann mssen Sie beide
Los gehts. Folgende Teile werden bentigt:
GND-Leitungen miteinander verbinden. Ansonsten wird Ihr Servo nicht reagieren oder
Unvorhersehbares machen!
Checkliste
Aufbau der Servoschaltung
ein Batteriehalter mit Batterien/Akkus oder ein Netzteil
Einfache Servos sind, was ihre Stromversorgung angeht, recht gengsame Bauteile. Sie
ein Servo
arbeiten in der Regel auch noch mit Spannungen von 4 Volt oder 6 Volt. Darunter oder
darber sollten Sie aber nicht gehen. Wenn Sie also ein Netzteil zur Hand haben, nutzen das Arduino-Board
Sie dieses fr die GND- und 5-Volt-Leitung des Servos. Alternativ verwenden Sie vier 1,5-
Volt-Batterien oder -Akkus37 in einem passenden Halter (siehe Abbildung 7.40). Bauen Sie jetzt die Schaltung wie in Abbildung 7.40 auf. Laden Sie anschlieend das Pro-
gramm Servo_Radar.ino herunter, und bertragen Sie es auf Ihren Arduino. Der Ser-
voarm sollte sich daraufhin unentwegt von links nach rechts bewegen. Denken Sie
37 Der Umwelt zuliebe sollten Sie generell nur aufladbare Akkus anstatt Batterien verwenden. 38 Abbildung erstellt mit Fritzing
236 237
7 Los gehts! Erste Praxis 7.5 Ich muss hier weg! Ansteuerung von Motoren
daran, auch die Stromversorgung fr den Servo zu verbinden bzw. einzuschalten, sonst Zwischenfazit
passiert wahrscheinlich gar nichts! Geschafft. In diesem Abschnitt haben Sie Servos kennengelernt und erfahren, wie diese
funktionieren. Danach haben Sie erfolgreich einen Servo angesteuert und sind dadurch
Ein Radar oder: Die Stuhlbeinproblematik erneut der PWM begegnet. Warum eine extra Stromversorgung fr Servos sinnvoll ist,
Vielleicht haben Sie sich bereits gefragt, warum der Name des Programms Servo_ habe ich Ihnen ebenfalls vermittelt. Zum Schluss haben Sie gelesen, was es mit der selt-
Radar.ino lautet. Der Grund ist, dass Ihr Roboter spter den Servo wie ein Radargert sam benannten, aber wichtigen Stuhlbeinproblematik auf sich hat und wie Sie Ihren
bewegen wird, weil Sie auf dem Servoarm den Infrarotsensor montieren werden, den Roboter durch eine Art Radar bald sicher durchs Leben bringen knnen.
ich in Abschnitt 7.2.4 beschrieben habe. Der Sensor bewegt sich also hnlich einem
Radar auf einem Flughafentower hin und her und sieht dabei nach links und rechts.
Wrden wir den Sensor fest montieren und ihn nur genau geradeaus sehen lassen, 7.5 Ich muss hier weg! Ansteuerung von Motoren
knnte es in der Praxis passieren, dass Ihr Roboter mit seinem Tunnelblick an einem
In diesem Abschnitt gehen wir noch einen Schritt weiter: Nachdem Sie in Abschnitt 7.4,
dnnen Stuhlbein knapp vorbeisieht und mit einem berstehenden Rad genau dage-
Der Diener Ansteuerung von Servos, gelernt haben, wie ein Servo angesteuert wird,
genfhrt. In Abbildung 7.41 habe ich Ihnen diese Stuhlbeinproblematik dargestellt.
erfahren Sie jetzt, wie Motoren angesteuert werden. Schlielich wollen Sie Ihren Robo-
ter doch mal durch die Gegend fahren lassen knnen, oder? Also, weiter gehts im Text!
0 RX0 A5
ON
ANALOG IN
ON
ICSP
1
ICSP 1 TX0 A4
1
1 TX0 A4
2 2 A3
A3
)
)
3 A2
(PWM=
3 A2
(PWM=
4 4 A1
A1
5 5 A0
A0
DIGITAL
DIGITAL
6 6
POWER
POWER
7 VIN
7 VIN
GND GND
8
TM
8
TM
GND
Arduino
GND
Arduino
9 9
5V 5V
10 10
3V3 3V3
Gleichstrommotoren
11 11
RESET RESET
12 12
IOREF IOREF
13 13
GND GND
RX
L
TX
RX
L
TX
AREF AREF
ICSP2
ICSP2
Wenn Sie die Anschlsse eines normalen Gleichstrommotors mit Plus und Minus einer
RESET
RESET
Stromquelle verbinden, dreht sich die Motorwelle so lange, wie Strom fliet.
Probieren Sie es doch mal aus: Nehmen Sie einen Motor wie den aus Abbildung 7.42,
Abbildung 7.41 Die Vermeidung der Stuhlbeinproblematik und schlieen Sie ihn an ein Netzteil oder eine Batterie an. Wichtig ist hierbei, dass Sie
die maximal zulssige Spannung des Motors nicht berschreiten! Diese ist je nach
Links in Abbildung 7.41 sieht der Roboter das Stuhlbein nicht und fhrt geradeaus Motortyp unterschiedlich. Auch hier gilt wieder einmal: Schauen Sie nach, was das
gegen das Stuhlbein (roter Pfeil). Rechts hat sich der Sensor auf dem Servo gerade nach Datenblatt zu dem Motor angibt oder welche Spannung der Lieferant angegeben hat.
links gedreht, der Roboter erkennt das Stuhlbein und weicht daraufhin in Richtung des
grnen Pfeils aus. Erkennen Sie den Vorteil dieser Konstruktion fr unseren kleinen
Freund? 39 http://de.wikipedia.org/wiki/Kategorie:Elektromotor
238 239
Auf einen Blick
8 Keine Schraube locker Die Montage des eigenen Roboters ...................... 263
Inhalt
Geleitwort des Fachgutachters ........................................................................................................... 13
5
Inhalt Inhalt
2.3 Wie und womit denkt ein Roboter? ........................................................................... 37 5.1 Fliegende Verdrahtung ......................................................................................................... 97
5.1.1 Vor- und Nachteile der fliegenden Verdrahtung ........................................ 98
2.4 Mikrocontroller allgemein .................................................................................................. 37
2.4.1 Alternativen zum Arduino-Board ..................................................................... 38 5.2 Steckplatinen ............................................................................................................................ 99
5.2.1 Vor- und Nachteile der Steckplatinen ............................................................ 102
2.5 Fazit ............................................................................................................................................... 43
5.3 Werkzeuge ................................................................................................................................. 102
5.3.1 Sicherheitsbrille ..................................................................................................... 102
3
5.3.2 Seitenschneider ..................................................................................................... 103
3 Arten der Programmierung 45 5.3.3 Abisolierzange ........................................................................................................ 104
5.3.4 Ltkolben/Ltstation, Ltzinn und Schwamm ............................................ 105
3.1 Grafische Programmierung ................................................................................................. 45
5.3.5 Messgert (optional) ............................................................................................ 108
3.1.1 Grafische Programmierung mit Scratch ................................................... 46
5.3.6 Feuerzeug ................................................................................................................. 109
3.2 Textbasierte Programmierung .......................................................................................... 49 5.3.7 Schlitzschraubendreher, 2 bis 3 mm breit .................................................... 110
5.3.8 Sonstige Werkzeuge (optional) ........................................................................ 110
4
5.4 Kabel verbinden oder isolieren ......................................................................................... 113
4 Die Arduino-Plattform 53 5.4.1 Kabel verbinden ..................................................................................................... 113
6 7
Inhalt Inhalt
8 9
Inhalt Inhalt
8 9
8 Keine Schraube locker Die Montage des 9 Drive me crazy? Die erste Fahrstunde 333
eigenen Roboters 263
9.1 Roboterchoreografie .............................................................................................................. 333
8.1 berblick ..................................................................................................................................... 263 9.1.1 Grundrichtungen ................................................................................................... 333
8.1.1 Die Teile fr den Arduino-Roboter ................................................................... 264 9.1.2 Den Roboter im Zickzack fahren lassen ......................................................... 337
8.1.2 Die Werkzeuge fr den Zusammenbau des Arduino-Roboters ............. 265 9.1.3 Den Roboter in einer Spirale fahren lassen .................................................. 341
8.1.3 Arten der Montage ................................................................................................ 267 9.2 Hindernisvermeidung ........................................................................................................... 344
8.2 Los gehts Schritt fr Schritt zum Bot ......................................................................... 270 9.2.1 Wie funktioniert Hindernisvermeidung? ...................................................... 344
8.2.1 Vorbereitung ........................................................................................................... 270 9.2.2 Umsetzung in die Praxis ..................................................................................... 345
8.2.2 Die Grundplatte ..................................................................................................... 272 9.2.3 Der Roboter als Haustier ..................................................................................... 347
8.2.3 Der kleine Motorhalter ........................................................................................ 276 9.3 Fazit ............................................................................................................................................... 356
8.2.4 Der groe Motorhalter ........................................................................................ 280
8.2.5 Lten der Drhte bzw. Litze an die Motoren ................................................ 283
8.2.6 Motoren mit Schrauben und Muttern versehen ........................................ 284
10
10 11
Inhalt
11
12
12 Schlusswort 401
12
Index
Index
#define ......................................................................... 143 Arduino Due ................................................................. 66
3,3V .................................................................................. 64 Arduino Esplora .......................................................... 67
5V ..................................................................................... 63 Arduino Galileo ........................................................... 41
Arduino Micro ............................................................. 69
Arduino Motor Shield ........................................... 216
A Arduino Nano .............................................................. 69
Arduino Proto Shield .................................... 219, 390
Abisolierzange .......................................................... 104 Arduino Roboter ......................................................... 67
Ablaufplan .................................................................... 46 Arduino Uno ................................................................ 54
Acryl .............................................................................. 269 Arduino WIFI Shield ............................................... 399
Acrylglas ........................................................................ 77 Arduino Wireless SD Shield ................................. 217
Adafruit .............................................................. 358, 387 Arduino Yn ................................................................. 41
Adapter ........................................................................ 362 Arduino-Shield ......................................................... 216
Akku ................................................................................ 73 Argument ................................................................... 158
Akkuhalter .................................................................... 74 Array ............................................................................. 151
Akkuberwachung .................................................. 395 ATmega .......................................................................... 37
Akkuwarner ............................................................... 393 ATmega16 ..................................................................... 78
Aktor ........................................................................ 34, 35 Atmel ............................................................................... 37
Aktuator ........................................................................ 35 Aufladung
Aldebaran Robotics ................................................... 22 statische .................................................................... 54
Allradantrieb ............................................................... 27 Ausgang ....................................................................... 165
Alternativen zum Arduino .................................... 38 autonom ........................................................................ 21
analogRead ................................................................. 391
Android .......................................................................... 33
Anregungen ............................................................... 397
B
Anzeige ........................................................................ 166
App .................................................................................. 33 Basisstation ............................................................... 397
Apple Remote Fernbedienung ........................... 387 Batterie ........................................................................... 73
Arbeitsgert ................................................................. 97 Batteriehalter ............................................................... 74
Arduino Baud .............................................................................. 169
Benutzer-LED ........................................................... 57 Bausatz ........................................................................... 18
Ein- und Ausgnge ......................................... 57, 60 BeagleBoard .................................................................. 40
Hardwarereferenz .................................................. 55 BeagleBone Black ........................................................ 40
I2C-Schnittstelle ..................................................... 60 Benutzerverzeichnis ................................................. 79
ICSP-Stecker 1 .......................................................... 58 Betriebssystem ..................................................... 38, 78
ICSP-Stecker 2 .......................................................... 57 Bewegungsmelder .................................................. 391
Mikrocontroller ...................................................... 58 Bezeichner .................................................................. 138
Montagepunkt ........................................................ 58 Bibliotheken .............................................................. 176
Power-LED ................................................................. 58 Biegelehre ................................................................... 111
Reset-Taster .............................................................. 56 Bildschirm .................................................................. 166
Stromversorgung ................................................... 59 Binrsystem ............................................................... 139
Stromversorgungsbuchse ................................... 59 Bit ................................................................................... 139
bertragungs-LEDs (TX/RX) .............................. 58 Blinklicht ....................................................................... 35
USB-Buchse ............................................................... 60 Blinky ........................................................................... 179
Versionsnummer .................................................... 55 Block .......................................................... 145, 150, 162
403
Index Index
Bluetooth .................................................................... 399 Draht ............................................................................... 72 Fotowiderstand ........................................................ 390 Infrarotdistanzmesser .................................... 75, 208
boolean ........................................................................ 142 Drehzahl ......................................................................... 75 Freiheitsgrad ................................................................ 22 Infrarotdistanzsensor ........................................ 35, 75
Boolesche Operatoren ........................................... 146 Dritte Hand ................................................................ 112 Frequenz ...................................................................... 225 Infrarotempfnger .................................................. 397
Bootloader .................................................................... 58 Dualsystem ................................................................ 139 Fritzing ......................................................................... 117 Infrarot-LED ............................................................... 207
Bot Makers .................................................................... 70 Durchflussspannung ............................................. 190 Funktion ............................................................ 154, 183 Infrarotsender .......................................................... 397
Bounce ......................................................................... 203 Durchgangsprfer ................................................... 331 Infrarotsensor ........................................................... 206
Breadboard ................................................................... 99 Durchkontaktierung ..................................... 119, 127 Infrarotsignal ............................................................ 387
break ............................................................................. 149 G Initialisierung ........................................ 138, 151, 169
Buchse .......................................................................... 326 INPUT .................................................................. 143, 165
Ganzzahl ...................................................................... 140
Buchsenleiste ............................................................ 362 E INPUT_PULLUP ........................................................ 165
Bug ................................................................................. 166 Getriebe ................................................................ 75, 230 Installation .................................................................... 78
Buzzer ........................................................................... 221 Eclipse ............................................................................. 91 Getriebemotor ............................................................ 75 Installer .......................................................................... 79
Byte ..................................................................... 138, 139 Ein-/Ausgnge Gleichstrommotor ................................. 75, 239, 241 int .................................................................................. 140
digitale ....................................................................... 62 Gleichzeitigkeit ......................................................... 377 Integer .......................................................................... 140
Eingang ........................................................................ 165 GND ........................................................................ 61, 321 Integrated Circuit (Integrierter
analoger .......................................................... 63, 391 GPIO ................................................................................ 41
C Schaltkreis) ..................................................... 37, 243
Einstiegsplattform ..................................................... 32 GPU .................................................................................. 42 Interface ......................................................................... 60
C ............................................................................... 16, 131 Elektromotor ................................................................ 35 Grafische Oberflche ................................................ 91 Internet ....................................................................... 399
C++ ................................................................................... 16 else ................................................................................ 147 GSM Shield ................................................................. 219 Internet of Things (IoT) ......................................... 399
case ................................................................................ 149 Endlosschleife ........................................................... 152 GUI ................................................................................... 91 iOS .................................................................................... 33
Chassis ............................................................................ 77 Energiemanagement ............................................. 391 Gltigkeitsbereich ................................................... 159 iPad ........................................................................ 33, 399
Code .............................................................................. 131 Energieversorgung ................................................. 391 iPhone .......................................................................... 399
Community ................................................................. 17 Entfernung ................................................................. 210 IR-Bake ......................................................................... 397
Compiler ............................................................... 91, 137 Entfernungsanzeige ............................................... 369 H IR-Diode ...................................................................... 397
const ............................................................................. 142 Entprellen ................................................................... 204 IR-LED ........................................................................... 207
CPU .................................................................................. 41 Entwicklungsumgebung ......................................... 91 Handynetz .................................................................. 219
HD-Kamera .................................................................. 23 IR-Sensor ..................................................................... 207
Curiosity ........................................................................ 28 Isolierband ................................................................. 114
HDMI ....................................................................... 40, 41
Heikleber .................................................................. 268 Isolierung ................................................................... 104
F
Helfende Hand .......................................................... 112
D
Fahrtrichtung ............................................................ 337 Helligkeitssensor ..................................................... 390
Dashboard .................................................................... 90 false ............................................................................... 143 HIGH ............................................................................. 143 J
Datentyp ..................................................................... 137 FAQ Arduino ................................................................. 54 Hindernisanzeige .................................................... 364 Jumper Wire ................................................ 72, 97, 100
boolean ................................................................... 142 Farbsensor .................................................................. 390 Hinderniszhlung ................................................... 372
byte ........................................................................... 138 Fehlermeldung ......................................................... 187 HiTEC ............................................................................ 362
float .......................................................................... 141 Fehlersuche ....................................................... 187, 253 H-Schaltung ............................................................... 241
K
int .............................................................................. 140 Fernbedienung ......................................................... 387 Humanoid .................................................................... 22
long ........................................................................... 141 Feuerzeug ................................................................... 109 Kabelbinder ............................................................... 115
Debugging .................................................................. 166 Finder .............................................................................. 84 Kabelmesser .............................................................. 104
Deklaration ...................................................... 137, 151 Firmware ..................................................................... 183 I Kalte Ltstelle .................................................. 122, 129
delay .............................................................................. 164 Flachzange .................................................................. 110 Kamera ........................................................................... 34
Dezimalsystem ......................................................... 139 flashen ......................................................................... 183 I2C ........................................................................... 60, 358 Keypad ......................................................................... 358
DFKI ................................................................................. 23 float ............................................................................... 141 IC ..................................................................................... 243 Kinect-Kamera ............................................................. 34
Display ......................................................................... 357 Flussmittel ........................................................ 106, 120 IC Integrated Circuit Klasse ............................................................................ 168
do...while ..................................................................... 153 for .................................................................................. 151 Icon .................................................................................. 92 Klebeband .................................................................. 267
Dokumentation ........................................................ 135 Formatierung ............................................................ 382 ICSP ........................................................................... 57, 58 Konstante ................................................................... 142
Download ............................................................... 18, 78 FORMULOR ................................................................ 269 IDE .................................................................................... 91 Krokoklemmen ........................................................ 102
Doxygen ...................................................................... 135 forward voltage ........................................................ 190 if ...................................................................................... 145 Kugellager ..................................................................... 24
404 405
Index Index
406 407
Index Index
408 409
Wissen, wies geht.
Markus Knapp ist Leiter der On-Site Services eines groen Un-
ternehmens in Hannover und beschftigt sich seit vielen Jahren
privat leidenschaftlich mit Robotik und Software-Entwicklung.
Seit 2011 betreibt er den beliebten und erfolgreichen Podcast
www.robotiklabor.de rund um die Entwicklung von Robotern.
Darber hinaus ist er gefragter Sprecher auf Veranstaltungen
fr Maker.
Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Gerne drfen Sie diese
Markus Knapp Leseprobe empfehlen und weitergeben, allerdings nur vollstndig mit allen Seiten.
Roboter bauen mit Arduino Die vorliegende Leseprobe ist in all ihren Teilen urheberrechtlich geschtzt. Alle
Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
Die Anleitung fr Einsteiger
409 Seiten, broschiert, in Farbe, Oktober 2014
24,90 Euro, ISBN 978-3-8362-2941-8 Teilen Sie Ihre Leseerfahrung mit uns!
www.galileo-press.de/3642