Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Power-Maker Simon Monk begleitet Sie Schritt für Schritt durch Experimente und Projekte, die zeigen, wie Sie Ihren Arduino oder Raspberry Pi dazu bringen, Motoren, LEDs, Sound und andere Aktoren zu steuern. Er beginnt mit den Grundlagen und führt Sie nach und nach zu immer größeren Herausforderungen. Mit anderen Worten: Action! Arduino ist ein einfacher Mikrocontroller mit einer leicht zu erlernenden Programmierumgebung, während Raspberry Pi ein kleiner Linux-basierter Computer ist. Der Autor macht die Unterschiede zwischen beiden deutlich und erklärt, zu welchem Zweck sie jeweils am besten geeignet sind. Mit diesen weit verbreiteten und günstigen Plattformen werden Sie lernen, LEDs, Motoren verschiedener Typen, Magnetventile, Wechselstromgeräte, Heizungen, Kühler, Displays und Sounds zu steuern. Schließlich werden Sie sogar in der Lage sein, diese Geräte per Internet zu überwachen und zu regeln. Das Arbeiten mit lötfreien Steckbrettern ermöglicht Ihnen einen raschen Einstieg und schon in kürzester Zeit bauen Sie Projekte, die lehrreich sind und dabei einfach nur Spaß machen. - Bauen Sie einen "Dosenquetscher" mit einem Linearmotor und Arduino - Bewässern Sie mit einem Arduino Ihre Pflanzen automatisch - Erstellen Sie ein individuelles Stoppsignal mit LEDs - Kühlen Sie Ihre Getränke mit einem selbstgebauten Thermostaten - Verstehen und verwenden Sie den PID-Regelalgorithmus - Setzen Sie einen Raspberry Pi ein, um eine Puppentanzparty zu schaffen, die sich zu Ihren Tweets bewegt!
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 364
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+:
www.dpunkt.de/plus
Bewegung, Licht und Sound mit Arduino und Raspberry Pi – Experimente und Projekte
Simon Monk
Simon Monk
Lektorat: Dr. Michael Barabas
Fachgutachter: Duncan Amos
Aktualisierungen: Maik Schmidt
Copy-Editing: Ursula Zimpfer
Übersetzung & Satz: G&U Language & Publishing Services GmbH, www.gundu.com
Herstellung: Nadine Thiele
Umschlaggestaltung: Helmut Kraus, www.exclam.denach der Originalvorlage von No Starch Press
Druck und Bindung: M.P. Media-Print Informationstechnologie GmbH, Paderborn
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-86490-385-4
PDF 978-3-96088-027-1
ePub 978-3-96088-028-8
mobi 978-3-96088-029-5
1. Auflage 2016
Copyright © 2016 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Authorized German translation of the English edition of Make: Action ISBN 9781457187797
© 2016 Simon Monk, published by Maker Media Inc.
This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to sell the same.
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.
5 4 3 2 1 0
1 Einleitung
Arduino und Pi
Der Raspberry Pi
Der Arduino
Welches Gerät – Arduino oder Pi?
Alternativen
Zusammenfassung
2 Der Arduino
Was ist ein Arduino?
Die Arduino-IDE installieren
Sketche hochladen
Der Code zu diesem Buch
Programmierleitfaden
Setup und loop
Variablen
Digitale Ausgänge
Digitale Eingänge
Analoge Eingänge
Analoge Ausgänge
If/else
Steuerschleifen
Funktionen
Zusammenfassung
3 Der Raspberry Pi
Was ist ein Raspberry Pi?
Den Raspberry Pi einrichten
Eine Micro-SD-Karte mit NOOBS vorbereiten
SSH einrichten
SSH auf einem Windows-Computer
SSH auf Mac und Linux
Die Linux-Befehlszeile
Der Code zu diesem Buch
Programmierleitfaden
Hello, World
Tabulatoren und Einrückungen
Variablen
If, while usw.
Die Bibliothek RPi.GPIO
Der GPIO-Header
Digitale Ausgänge
Digitale Eingänge
Analoge Ausgänge
Zusammenfassung
4 Schnelleinstieg
Steckbretter
Wie funktioniert ein Steckbrett?
Ein Steckbrett an den Arduino anschließen
Ein Steckbrett an den Raspberry Pi anschließen
Die Software herunterladen
Experiment: Eine LED steuern
Stückliste
Schaltungsaufbau
Verbindungen mit dem Arduino
Die Software für den Arduino
Experimentieren mit dem Arduino
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
Experimentieren mit dem Raspberry Pi
Der Code im Vergleich
Experiment: Einen Motor steuern
Stückliste
Schaltungsaufbau
Experimentieren ohne Arduino und Raspberry Pi
Verbindungen mit dem Arduino
Experimentieren mit dem Arduino
Verbindungen mit dem Raspberry Pi
Experimentieren mit dem Raspberry Pi
Zusammenfassung
5 Grundlagen der Elektronik
Stromstärke, Spannung und Widerstand
Stromstärke
Spannung
Masse
Widerstand
Leistung
Häufig verwendete Bauteile
Widerstände
Transistoren
Dioden
LEDs
Kondensatoren
Integrierte Schaltkreise (ICs)
Das kleine Einmaleins der Anschlüsse
Digitale Ausgänge
Digitale Eingänge
Analoge Eingänge
Analoge Ausgänge
Serielle Kommunikation
Zusammenfassung
6 LEDs
Herkömmliche LEDs
Die Stromstärke begrenzen
Projekt: Ampel
Stückliste
Grundkonstruktion
Verbindungen mit dem Arduino
Die Software für den Arduino
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
PWM für LEDs
RGB-LEDs
Experiment: Farben mischen
Die Hardware
Stückliste
Verbindungen mit dem Arduino
Die Software für den Arduino
Experimentieren mit dem Arduino
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
Experimentieren mit dem Raspberry Pi
Zusammenfassung
7 Motoren, Pumpen und Aktoren
Drehzahlregelung (PWM)
Experiment: Die Drehzahl eines Gleichstrommotors regeln
Die Hardware
Verbindungen mit dem Arduino
Die Software für den Arduino
Experimentieren mit dem Arduino
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
Experimentieren mit dem Raspberry Pi
Gleichstrommotoren über ein Relais steuern
Ein Relais mit dem Arduino oder dem Raspberry Pi schalten
Relaismodule
Experiment: Einen Gleichstrommotor über ein Relaismodul steuern
Stückliste
Verkabelung
Die Software für den Arduino
Die Software für den Raspberry Pi
Einen Motor auswählen
Drehmoment
Drehzahl
Getriebe
Getriebemotoren
Pumpen
Peristaltische Pumpen
Kreiselpumpen
Projekt: Arduino-Bewässerungsanlage für Zimmerpflanzen
Grundkonstruktion
Stückliste
Zusammenbau
Die Software
Das Projekt verwenden
Linearaktoren
Magnetventile
Zusammenfassung
8 Motorsteuerung für Fortgeschrittene
H-Brücken
H-Brücken auf einem Chip
Experiment: Drehrichtung und Drehzahl eines Motors steuern
Stückliste
Grundkonstruktion
Schaltungsaufbau
Experimentieren
Verbindungen mit dem Arduino
Die Software für den Arduino
Experimentieren mit dem Arduino
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
Experimentieren mit dem Raspberry Pi
Andere H-Brücken-ICs
L298N
TB6612FNG
H-Brücken-Module
Projekt: Arduino-Getränkedosenpresse
Stückliste
Verkabelung
Mechanische Konstruktion
Die Software für den Arduino
Zusammenfassung
9 Servomotoren
Verschiedene Arten von Servomotoren
Servomotoren steuern
Experiment: Die Stellung eines Servomotors steuern
Die Hardware
Stückliste
Verbindungen mit dem Arduino
Die Software für den Arduino
Experimentieren mit dem Arduino
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
Experimentieren mit dem Raspberry Pi
Projekt: Pepe, die tanzende Raspberry Pi-Marionette
Stückliste
Grundkonstruktion
Zusammenbau
Die Software
Die Marionette verwenden
Zusammenfassung
10 Schrittmotoren
Verschiedene Arten von Schrittmotoren
Bipolare Schrittmotoren
Experiment: Einen bipolaren Schrittmotor steuern
Stückliste
Grundkonstruktion
Die Arduino-Version
Verbindungen mit dem Arduino
Die Software für den Arduino (die ausführliche Variante)
Die Software für den Arduino (die einfache Variante)
Experimentieren mit dem Arduino
Die Raspberry Pi-Version
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
Experimentieren mit dem Raspberry Pi
Unipolare Schrittmotoren
Darlington-Arrays
Experiment: Einen unipolaren Schrittmotor steuern
Die Hardware
Stückliste
Verbindungen mit dem Arduino
Verbindungen mit dem Raspberry Pi
Die Software
Mikroschrittbetrieb
Experiment: Mikroschrittbetrieb mit dem Raspberry Pi
Stückliste
Verbindungen mit dem Raspberry Pi
Software
Experimentieren
Bürstenlose Gleichstrommotoren
Zusammenfassung
11 Heizen und Kühlen
Widerstandsheizung
Experiment: Heizen mit Widerständen
Stückliste
Zusammenbau
Experimentieren
Projekt: Zufallsgesteuerter Arduino-Ballonzerplatzer
Stückliste
Die Hardware
Die Software
Den Ballonzerplatzer verwenden
Heizelemente
Leistung und Energie
Von der Leistung zum Temperaturanstieg
Kochendes Wasser
Peltier-Elemente
Wie funktioniert ein Peltier-Element?
Praktische Überlegungen
Projekt: Getränkekühler
Stückliste
Zusammenbau
Das Projekt verwenden
Zusammenfassung
12 Regelkreise
Ein einfacher Thermostat
Experiment: Wie gut funktioniert ein Ein/Aus-Thermostat?
Stückliste
Grundkonstruktion
Schaltungsaufbau
Die Software
Experimentieren
Hysterese
PID-Steuerung
Proportionalität (P)
Integral (I)
Ableitung (Derivativ, D)
PID-Regler einstellen
Experiment: PID-geregelter Thermostat
Die Hardware
Die Software für den Arduino
Experimentieren mit dem Arduino
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
Experimentieren mit dem Raspberry Pi
Projekt: Getränkekühler mit Thermostat
Die Hardware
Stückliste
Grundkonstruktion
Zusammenbau
Die Software für den Arduino
Zusammenfassung
13 Wechselstrom schalten
Wechselstrom schalten – in der Theorie
Was ist Wechselstrom?
Relais
Optokoppler
Nulldurchgangs-Optokoppler und Triacs
Wechselstrom schalten – in der Praxis
Relaismodule
Halbleiterrelais
Der PowerSwitch Tail
Projekt: Zeitschaltuhr mit dem Raspberry Pi
Stückliste
Zusammenbau
Die Software
Das Projekt verwenden
Zusammenfassung
14 Displays
LED-Streifen
Experiment: Einen RGB-LED-Streifen steuern
Stückliste
Verbindungen mit dem Arduino
Die Software für den Arduino
Verbindungen mit dem Raspberry Pi
Die Software für den Raspberry Pi
I2C-OLED-Displays
Experiment: Ein I2C-Displaymodul an einem Raspberry Pi
Stückliste
Verbindungen
Die Software
Experimentieren
Projekt: Getränkekühler mit Temperaturanzeige
Stückliste
Verbindungen
Die Software
Zusammenfassung
15 Ton
Experiment: Lautsprecher ohne Verstärkung am Arduino
Stückliste
Schaltungsaufbau
Die Software für den Arduino
Experimentieren mit dem Arduino
Verstärker
Experiment: Klangdateien auf einem Arduino abspielen
Stückliste
Die Klangdatei erstellen
Die Software für den Arduino
Experimentieren mit dem Arduino
Einen Verstärker an den Arduino anschließen
Klangdateien auf dem Raspberry Pi abspielen
Projekt: Pepe spricht
Stückliste
Schaltungsaufbau
Die Software
Die sprechende Marionette verwenden
Zusammenfassung
16 Das Internet der Dinge
Bottle für den Raspberry Pi
Projekt: Ein Webschalter mit dem Raspberry Pi
Die Hardware
Die Software
Den Webschalter verwenden
Der Arduino im Netzwerk
Projekt: Die tanzende Marionette über Twitter steuern
Pepe mit dem Internet verbinden
IFTTT (IF This Then That)
Das Projekt verwenden
Zusammenfassung
A Teile
Lieferanten
Widerstände und Kondensatoren
Halbleiterelemente
Anschlusselemente
Verschiedenes
Pinbelegungen
B GPIO-Pinbelegung des Raspberry Pi
Stichwortverzeichnis
Simon Monk ist Vollzeit-Autor, der vor allem Bücher über Elektronik für Bastler schreibt. Zu seinen bekannteren Werken gehören Programming Arduino: Getting Started with Sketches, Raspberry Pi Kochbuch und Elektronik-Hacks: Ein Do-It-Yourself-Guide für Einsteiger. Außerdem hilft er seiner Frau Linda, der Geschäftsführerin von MonkMakes.com, Bausätze und andere Produkte rund um seine Bücher herzustellen und zu verkaufen. Sie können Simon auf Twitter folgen und auf simonmonk.org mehr über seine Bücher erfahren.
Duncan Amos hat den Großteil seiner mehr als 50 Arbeitsjahre als Rundfunkingenieur zugebracht, aber auch Satellitenteilsysteme entwickelt und gebaut, technische Handbücher und Bedienungsanleitungen verfasst, Nutzvieh künstlich besamt, Gartengeräte repariert sowie Möbel entworfen und gebaut. Als eingefleischter Bastler, der erst spät im Leben Bekanntschaft mit Mikrocontrollern geschlossen hat, kennt er den Wert klarer Erläuterungen von komplizierten Techniken.
Mit dem Arduino und dem Raspberry Pi ist es für Bastler leichter denn je, in die Welt der Elektronik einzusteigen, etwa um ein Heimautomatisierungssystem im Eigenbau zu realisieren, mit dem Sie die Beleuchtung und die Heizung über ein WLAN steuern können, oder einfach um Motoren zu regeln.
In diesem Buch zeige ich Ihnen, wie Sie diese beiden beliebten Plattformen einsetzen können, um mit Ihrem Raspberry Pi oder Arduino Bewegungen, Licht und Ton hervorzurufen und zu steuern.
Sowohl der Arduino als auch der Raspberry Pi sind kleine Platinen ungefähr von der Größe einer Kreditkarte, aber im Grunde genommen handelt es sich bei ihnen um sehr unterschiedliche Geräte. Der Arduino ist eine sehr einfache Mikrocontroller-Platine ohne irgendeine Form von Betriebssystem, während es sich bei dem Raspberry Pi um einen Minicomputer mit Linux handelt, an den außerdem externe elektronische Geräte angeschlossen werden können.
Wenn Sie noch keine Erfahrungen mit Elektronik haben, aber mit Computern vertraut sind, ist der Raspberry Pi (siehe Abb. 1–1) für Sie das geläufigere Gerät. Er stellt eine äußerst kleine Version eines normalen Linux-Computers dar und verfügt über USB-Anschlüsse für eine Tastatur und eine Maus, einen HDMIVideoausgang für einen Monitor oder einen Fernseher und einen Audioausgang.
Abb. 1–1 Ein Raspberry Pi 2
Über seinen Ethernetanschluss können Sie den Raspberry Pi auch mit einem Netzwerk verbinden. Sie können aber auch USB-WLAN-Adapter anschließen. Die Stromversorgung erfolgt über eine Micro-USB-Buchse.
Für die Speicherung wird statt eines herkömmlichen Festplattenlaufwerks eine Micro-SD-Karte verwendet. Sie enthält sowohl das Betriebssystem als auch Ihre Dokumente und Programme.
Entwickelt wurde der Raspberry Pi in Großbritannien, hauptsächlich als kostengünstiger Computer, um Schulkindern die Grundlagen der Informatik beizubringen, insbesondere die Programmierung in Python. Der Name Pi soll sogar von Python abgeleitet sein.
Zwischen einem normalen Desktop- oder Laptop-Computer mit Linux und dem Raspberry Pi bestehen vor allem folgende Unterschiede:
Der Pi kostet lediglich um die 40 €. (Ein abgespecktes Modell namens A+ ist für einen noch niedrigeren Preis erhältlich, und das Modell 0 kostet sogar noch weniger.)
Der Pi hat eine Leistungsaufnahme von weniger als 5 W.
Der Pi verfügt über eine Doppelreihe von GPIO-Pins (General Purpose Input/Output, also »Allzweck-E/A-Pins«), an die Sie direkt elektronische Geräte anschließen können. (In Abb. 1–1 sehen Sie diese Pins auf der linken Seite der oberen Kante.) Über diese Pins können Sie LEDs, Displays, Motoren und viele weitere Arten von Ausgabegeräten steuern, mit denen wir in diesem Buch noch arbeiten werden.
Außerdem kann der Raspberry Pi über ein WLAN oder ein LAN-Kabel mit dem Internet verbunden werden, was ihn für Projekte im Rahmen des »Internets der Dinge« (siehe Kapitel 16) geeignet macht.
Der in diesem Buch hauptsächlich verwendete Raspberry Pi 2 weist folgende technische Daten auf:
900-MHz-Quad-Core-Prozessor ARM v7
1 GB DDR2-Speicher
100-BaseT-Ethernet
4 USB-2.0-Anschlüsse
HDMI-Videoausgang
Buchse mit Kameraschnittstelle
40-polige GPIO-Stiftleiste (alle Pins werden mit 3,3 V betrieben)
Nach Abfassung der Originalausgabe dieses Buches ist das neue Modell Raspberry Pi 3 auf den Markt gekommen.
Abb. 1–2 Optisch kaum vom Raspberry Pi 2 zu unterscheiden: das neue Modell 3
Äußerlich sieht der Pi 3 praktisch genauso aus wie das Modell 2, und auch alle vertrauten Anschlüsse sind unverändert vorhanden. Es hat jedoch erhebliche »unsichtbare« Neuerungen gegeben, nämlich bei der Rechenleistung und bei den Anschlüssen. So ist der Raspberry Pi 3 jetzt mit einem 64-Bit-Vierkernprozessor vom Typ ARMv8 mit 1,2 GHz ausgestattet und verfügt über eine 802.11n-WLANVerbindung sowie über einen Bluetooth-Anschluss (Bluetooth 4.1 und Bluetooth Low Energy). Der in Kapitel 3 erwähnte WLAN-Adapter ist daher bei diesem Modell nicht mehr nötig.
Wenn der Raspberry Pi für Sie neu ist, können Sie sich mit dem Einführungskurs in Kapitel 3 sehr schnell mit der Hardware und der Programmiersprache Python vertraut machen.
Es gibt eine breite Palette von unterschiedlichen Arduino-Modellen. In diesem Buch konzentrieren wir uns auf das am weitesten verbreitete, nämlich den Arduino Uno (siehe Abb. 1–3). Er ist noch ein bisschen billiger als der Raspberry Pi – Sie können ihn schon für 25 € bekommen.
Abb. 1–3 Ein Arduino Uno Revision 3
Wenn Sie die Arbeit mit einem regulären Computer gewohnt sind, werden Ihnen die technischen Daten des Arduino höchst unzureichend vorkommen. Er hat lediglich einen Arbeitsspeicher (unterschiedlicher Art) von 34 KB. Das bedeutet, dass der Raspberry Pi einen etwa 30.000 Mal größeren Arbeitsspeicher aufweist, worin der Flash-Speicher der SD-Karte noch nicht einmal enthalten ist. Des Weiteren beträgt der Prozessortakt des Arduino Uno nur 16 MHz. Es ist auch nicht möglich, eine Tastatur, eine Maus oder einen Monitor an den Arduino anzuschließen oder auf ihm ein Betriebssystem auszuführen.
Vielleicht fragen Sie sich nun, wie dieses kleine Gerät überhaupt irgendetwas Sinnvolles tun kann. Das Geheimnis des Arduino liegt jedoch gerade in seiner Einfachheit. Es gibt kein Betriebssystem, das Sie erst starten müssten, und keine anderen Schnittstellen, die für ein Projekt vielleicht unnötig wären und nur Kosten verursachen und Strom verbrauchen würden.
Der Raspberry Pi ist ein Allzweckcomputer, der Arduino dagegen soll einzig und allein eine Sache gut machen, nämlich das Steuern elektronischer Geräte.
Um einen Arduino zu programmieren, brauchen Sie einen regulären Computer (Sie können dazu auch einen Raspberry Pi verwenden). Auf diesem Computer benötigen Sie eine integrierte Entwicklungsumgebung (Integrated Development Environment, IDE). Darin schreiben Sie die Programme, die anschließend in den Flash-Speicher des Arduino heruntergeladen werden.
Der Arduino kann immer nur ein Programm auf einmal ausführen. Nachdem er programmiert wurde, merkt er sich das Programm und führt es automatisch aus, sobald er eingeschaltet wird.
Arduinos sind so gestaltet, dass Sie sogenannte Shields auf die E/A-Anschlüsse aufstecken können. Diese Shields tragen zusätzliche Hardware, z. B. verschiedene Arten von Anzeigen, Ethernet- oder WLAN-Adapter.
Zur Programmierung eines Arduino verwenden Sie die Programmiersprache C (mehr darüber erfahren Sie in Kapitel 2).
In diesem Buch wird erklärt, wie Sie elektronische Geräte sowohl an den Arduino als auch an den Raspberry Pi anschließen können. Einer der Gründe dafür besteht darin, dass für einige Projekte der Pi besser geeignet ist, für andere der Arduino. Es gibt noch andere Platinen, die zwischen diesen beiden Extremen liegen. Im Allgemeinen ähneln sie entweder dem Arduino oder dem Raspberry Pi, sodass Ihnen dieses Buch auch dabei helfen kann, mit diesen Alternativen zu arbeiten.
Wenn ich mit einem neuen Projekt beginne, nehme ich im Allgemeinen einen Arduino. Stellt das Projekt aber eine der folgenden Anforderungen, dann ist ein Raspberry Pi wahrscheinlich die bessere Wahl:
Internet- oder Netzwerkanschluss
Großer Bildschirm
Tastatur und Maus
USB-Peripheriegeräte, z. B. eine Webcam
Mit einigen Kosten und Mühen ist es möglich, einen Arduino mithilfe von Shields so zu erweitern, dass er diese Anforderungen ebenfalls erfüllt. Allerdings ist es schwieriger, die Sachen auf diese Weise zum Laufen zu bekommen, da nichts davon zu den eigentlichen Funktionen des Arduino gehört.
Gute Gründe dafür, den Arduino gegenüber dem Raspberry Pi vorzuziehen, sind die folgenden:
Kosten Ein Arduino Uno ist billiger als ein Raspberry Pi 2.
Startzeit Ein Arduino muss nicht darauf warten, dass das Betriebssystem hochfährt. Es gibt eine kleine Verzögerung von etwa einer Sekunde, in der das Gerät prüft, ob ein neues Programm hochgeladen wird, aber danach ist der Arduino in Betrieb.
Zuverlässigkeit Der Arduino ist ein viel einfacheres und robusteres Gerät als der Raspberry Pi und kommt ohne den Zusatzaufwand eines Betriebssystems aus.
Stromverbrauch Ein Arduino verbraucht nur ein Zehntel so viel Strom wie ein Raspberry Pi. Wenn Sie Ihr Projekt mit Batterie- oder Solarstrom betreiben müssen, ist der Arduino die bessere Wahl.
GPIO-Ausgabestrom Die GPIO-Pins eines Raspberry Pi können nur einen Strom von maximal 16 mA bereitstellen. Die Arduino-Pins dagegen sind für 40 mA ausgelegt. Daher lassen sich manche Dinge (z. B. helle LEDs), die sie auf diese Weise nicht mit einem Raspberry Pi verbinden können, direkt an einen Arduino anschließen.
Sowohl der Arduino als auch der Raspberry Pi sind bestens als Basis für Elektronikprojekte geeignet. Für welches Gerät Sie sich entscheiden, ist in gewissem Maße auch eine Frage des persönlichen Geschmacks.
Beim Anschluss von elektronischen Geräten an den Raspberry Pi müssen Sie unbedingt daran denken, dass er mit 3,3 V betrieben wird – nicht mit 5 V wie der Arduino. Wenn Sie an einen GPIO-Pin des Raspberry Pi 5 V anlegen, können Sie den Pin oder gar den ganzen Pi beschädigen oder zerstören.
Der Arduino und der Raspberry Pi befinden sich an den beiden Enden des Spektrums von Geräten, mit denen sich Geräte steuern lassen. Wie zu erwarten ist, hat der Markt eine große Zahl von anderen Geräten hervorgebracht, die zwischen diesen beiden Polen einzuordnen sind. Manche davon kombinieren die Vorteile der beiden Plattformen.
Neue Geräte kommen ständig auf den Markt. Die Open-Source-Natur des Arduino hat unzählige Varianten möglich gemacht, die auf bestimmte Nischen zugeschnitten sind, z. B. auf die Steuerung von Drohnen oder die Arbeit mit drahtlosen Sensoren.
Abbildung 1–4 zeigt ein Diagramm der am weitesten verbreiteten Geräte auf diesem Gebiet.
Abb. 1–4 Plattformen für eingebettete Geräte
Unterhalb des Arduino – sowohl was den Preis als auch die Leistung angeht – ist der Adafruit Trinket einzuordnen. Diese interessante Platine verfügt nur über wenige GPIO-Pins, ist ansonsten aber ziemlich gut mit dem Arduino kompatibel. Wenn Sie in einem Projekt nur ein oder zwei Eingänge oder Ausgänge benötigen, ist diese Platine eine Überlegung wert.
Im Mittelfeld liegen Produkte wie der Arduino Yun, der Intel Edison und der Photon. Alle verfügen über WLAN-Fähigkeiten und sind für Projekte im Internet der Dinge (Internet of Things, IoT) gedacht (siehe Kapitel 16). Von diesen Geräten bietet der Photon wahrscheinlich den größten Wert für das Geld. Alle drei Geräte werden in Arduino C programmiert. Was Sie also über die Programmierung des Arduino lernen, können Sie auch für diese Platinen anwenden.
Der BeagleBone Black ist ähnlich konzipiert wie der Raspberry Pi. Auch bei ihm handelt es sich um einen Einplatinencomputer. Was die Rohleistung angeht, fällt die aktuelle Version des BeagleBone Black zwar hinter dem Raspberry Pi zurück, doch dafür bietet er andere Vorteile: Er weist mehr GPIO-Pins auf und verfügt sogar über einige Pins, die als analoge Eingänge dienen können; ein Merkmal, das dem Raspberry Pi 2 fehlt. Den BeagleBone Black können Sie ebenso wie den Raspberry Pi in Python programmieren, aber auch in JavaScript.
In diesem Kapitel haben Sie eine kurze Einführung in den Arduino und den Raspberry Pi erhalten. Wir haben die Vor- und Nachteile der beiden Platinen betrachtet und uns auch einige Alternativen angeschaut. In den nächsten beiden Kapiteln erhalten Sie eine Einführung, wie Sie den Arduino und den Raspberry Pi verwenden und programmieren können.
Wenn Sie bereits Erfahrungen mit dem Arduino und dem Raspberry Pi haben, können Sie auch gleich zu Kapitel 4 vorblättern und einige praktische Projekte damit bauen. Zum Nachschlagen können Sie jederzeit zu Kapitel 2 bzw. 3 zurückblättern.
Dieses Kapitel basiert auf dem »Grundkurs Arduino«, der sich als Anhang in meinem Buch Der Maker-Guide für die Zombie-Apokalypse befindet.
Wenn der Arduino für Sie noch neu ist, können Sie sich in diesem Kapitel mit dieser großartigen kleinen Platine vertraut machen.
Es gibt verschiedene Arduino-Modelle. Das gebräuchlichste ist der Arduino Uno, der auch für alle Arduino-Projekte in diesem Buch verwendet wird (siehe Abb. 2–1).
Der Arduino Uno ist einer Reihe von Überarbeitungen unterzogen worden. In Abbildung 2–1 sehen Sie das Modell R3 (Revision 3), das zum Zeitpunkt der Entstehung dieses Buches das neueste Modell war.
Wir beginnen unsere Beschreibung mit der USB-Buchse. Sie dient gleich mehreren Zwecken, nämlich um den Arduino mit Strom zu versorgen, um ihn zum Programmieren an einen Computer anzuschließen oder als Kommunikationsverbindung mit anderen Rechnern.
Die kleine rote Taste neben der USB-Buchse ist der Reset-Knopf. Wenn Sie darauf drücken, wird das auf dem Arduino installierte Programm neu gestartet.
Abb. 2–1 Ein Arduino Uno R3
Über die Anschlussleisten am oberen und unteren Rand des Arduino können Sie elektronische Geräte an die Platine anschließen. Oben in Abbildung 2–1 befinden sich die digitalen I/O-Pins, die von 0 bis 13 durchnummeriert sind und einzeln als Eingänge oder Ausgänge eingerichtet werden können. Wenn Sie beispielsweise eine Taste mit einem digitalen Eingang verbinden, kann der Eingang erkennen, ob die Taste gedrückt wurde. Ausgänge dagegen senden Informationen oder Strom. Wenn Sie eine LED an einen digitalen Ausgang anschließen, können Sie sie einschalten, indem Sie den Ausgang von low auf high schalten. Eine LED mit der Bezeichnung L ist fest auf der Platine montiert und mit Digitalpin 13 verbunden.
Die Strom-LED unter den digitalen I/O-Pins zeigt an, ob die Platine mit Strom versorgt wird. Die ICSP-Stiftleiste (In-Circuit Serial Programming) ist nur für professionelle Programmierverfahren erforderlich, die die meisten Hobbybenutzer des Arduino nie anwenden werden.
Der ATMega328 ist ein Mikrocontroller, ein integrierter Schaltkreis (Integrated Circuit, IC), der das Gehirn des Arduino bildet. Er enthält 32 KB Flash-Speicher, in denen die Programme gespeichert werden, die Sie auf dem Arduino ausführen.
Unter dem ATMega328 sehen Sie eine Reihe von analogen Eingangspins, die von A0 bis A5 durchnummeriert sind. Digitale Eingänge können Ihnen nur mitteilen, ob irgendetwas ein- oder ausgeschaltet ist, wohingegen analoge Eingänge die am Pin anliegende Spannung messen (sofern sie zwischen 0 V und 5 V liegt). Eine solche Spannung kann beispielsweise von einem Sensor stammen. Wenn Ihnen für ein Projekt die digitalen Ein- und Ausgänge nicht ausreichen, können Sie diese anlogen Eingangspins auch als digitale Ein- und Ausgänge verwenden.
Daneben befindet sich eine Reihe von Anschlüssen für verschiedene Arten der Stromversorgung für den Arduino. Damit können Sie auch von Ihnen gebaute elektronische Geräte mit Strom versorgen
Darüber hinaus verfügt der Arduino auch über eine Gleichstrombuchse. Hier können Sie Gleichspannungen zwischen 7 V und 12 V anschließen. Ein eingebauter Spannungsregler stellt die vom Arduino benötigten 5 V bereit. Der Arduino nimmt automatisch Strom an, der ihm über die USB-Buchse oder die Gleichstrombuchse zugeführt wird, je nachdem, welche an eine Stromquelle angeschlossen ist.
Der Arduino ist nicht gerade das, was man sich unter einem Computer vorstellt. Er hat kein Betriebssystem, keine Tastatur, keinen Bildschirm und keine Maus. Er führt immer nur ein Programm auf einmal aus, und Sie benötigen einen »richtigen« Computer, um ein Programm in den Flash-Speicher des Arduino zu laden. Allerdings können Sie den Arduino so oft umprogrammieren, wie Sie wollen (viele tausend Male).
Zur Programmierung des Arduino müssen Sie die Arduino-IDE auf Ihrem Computer installieren. Die plattformübergreifende Natur dieser Software – sie läuft auf Windows, Mac und Linux – ist einer der Hauptgründe für die große Beliebtheit des Arduino. Außerdem können Sie den Arduino über eine USB-Verbindung programmieren. Besondere Programmierhardware ist nicht erforderlich.
Um die Arduino-IDE für Ihre Plattform einzurichten, laden Sie die Software von der Arduino-Website herunter und folgen dann den Anweisungen auf der Website (http://arduino.cc/en/Guide/HomePage).
Windows- und Mac-Benutzer müssen außerdem die USB-Treiber für die Arduino-IDE installieren, damit diese mit dem Arduino kommunizieren kann.
Starten Sie die IDE, nachdem alles installiert ist. Abbildung 2–2 zeigt das Fenster der IDE.
Mit der Schaltfläche Hochladen (Upload) laden Sie den aktuellen Sketch auf den Arduino hoch. Dabei wird der in Textform vorliegende Programmcode in ausführbaren Code für den Arduino umgewandelt. Jegliche Fehler werden im Protokollbereich aufgeführt. Über die Schaltfläche Prüfen (Verify) untersuchen Sie den Code nur auf Fehler, ohne das Programm auf die Platine hochzuladen.
Abb. 2–2 Die Arduino-IDE
Mit der Schaltfläche oben rechts öffnen Sie das Fenster des seriellen Monitors, der eine Kommunikation mit dem Arduino ermöglicht. Den seriellen Monitor werden Sie in vielen Experimenten in diesem Buch verwenden, da er eine hervorragende Möglichkeit bietet, um Befehle vom Computer an den Arduino zu senden. Die Kommunikation ist beidseitig, was bedeutet, dass Sie nicht nur Textnachrichten an den Arduino senden, sondern auch Antworten von ihm empfangen können.
Der Statusbereich am unteren Bildschirmrand zeigt, welchen Arduino-Typ Sie verwenden und welcher serielle Port zur Übertragung eingesetzt wird, wenn Sie auf Hochladen klicken. In dem Statusbereich in Abbildung 2–2 ist die Art von Port zu sehen, die auf einem Mac oder Linux-Computer verwendet wird (/dev/cu.usbmodem411). Bei einem Windows-Computer wird hier COM gefolgt von einer Nummer angezeigt, die Windows beim Anschluss des Arduino zugewiesen hat.
Der Hauptteil der IDE ist der Programmierbereich, in dem Sie den Programmcode eingeben, den Sie auf den Arduino hochladen wollen.
Arduino-Programme werden Sketche genannt. Im Menü Datei können Sie Sketche öffnen und speichern wie die Dokumente in einer Textverarbeitung. Au-ßerdem verfügt es über das Untermenü Beispiele, aus dem Sie die mitgelieferten Beispielsketche laden können.
Um den Arduino zu testen und sicherzustellen, dass die Arduino-IDE korrekt installiert ist, klicken Sie auf Datei > Beispiele > 01. Basics (in Abb. 2–2 ist der Beispielsketch Blink geladen).
Schließen Sie den Arduino über ein USB-Kabel an Ihren Computer an. Die Strom-LED des Arduino sollte aufleuchten, sobald die Verbindung hergestellt ist, und auch einige andere LEDs beginnen jetzt zu flackern.
Als Nächstes müssen Sie der IDE mitteilen, welches Platinenmodell programmiert werden soll (Arduino Uno) und über welchen seriellen Port die Verbindung läuft. Zur Angabe der Platine klicken Sie im Menü auf Werkzeuge > Platine und wählen dann den Arduino Uno aus der Liste aus.
Zur Angabe des seriellen Ports wählen Sie Werkzeuge > Port. Wenn Sie einen Windows-Computer verwenden, haben Sie wahrscheinlich nicht viele Auswahlmöglichkeiten, sondern sehen nur die Option COM4. Auf einem Mac oder Linux-Rechner wird im Allgemeinen eine Vielzahl von USB-Geräten aufgeführt. Es kann schwierig werden, den Anschluss für den Arduino herauszufinden.
Gewöhnlich beginnt der Name des richtigen Ports mit dev/ttyusbmodemNNNN, wobei NNNN eine Zahl ist. In Abbildung 2–3 sehen Sie die Portauswahl für den an meinen Mac angeschlossenen Arduino.
Abb. 2–3 Den seriellen Anschluss des Arduino auswählen
Wenn Ihr Arduino in der Liste nicht auftaucht, liegt das meistens an einem Problem mit den USB-Treibern, weshalb Sie versuchen sollten, sie neu zu installieren.
Jetzt sollte alles bereit sein, um den Sketch auf den Arduino hochzuladen. Klicken Sie auf die Schaltfläche Hochladen. Im Protokollbereich erscheint eine Meldung, und die LEDs TX und RX auf der Platine flackern, während das Programm hochgeladen wird.
Wenn der Vorgang abgeschlossen ist, sehen Sie eine Meldung wie die in Abbildung 2–4.
Abb. 2–4 Ein Sketch wurde erfolgreich hochgeladen.
Diese Meldung besagt, dass der Sketch hochgeladen wurde und 1084 Bytes der auf dem Arduino verfügbaren 32.256 Bytes belegt.
Nachdem der Sketch hochgeladen wurde, beginnt die eingebaute LED L auf dem Arduino langsam zu blinken. Das ist genau das, was das Programm Blink tun soll.
Die gesamte Software für die Projekte – sowohl die Arduino-Sketche als auch die Python-Programme für den Raspberry Pi – steht auf der GitHub-Seite zu diesem Buch auf https://github.com/simonmonk/make_action zur Verfügung.
Um die Dateien auf Ihren Mac, Linux- oder Windows-Computer herunterzuladen, klicken Sie auf den Link Download ZIP unten rechts auf der GitHub-Seite.
Dadurch laden Sie eine ZIP-Datei herunter, die Sie auf dem Desktop oder an einem anderen gut zugänglichen Speicherort ablegen können. Wenn Sie das Archiv entkomprimieren, wird es in das Verzeichnis make_action-master/ entpackt. Den Arduino-Code finden Sie im Verzeichnis arduino/. Darin gibt es wiederum die beiden Unterverzeichnisse experiments/ und projects/.
Jedes Experiment oder Projekt hat wiederum ein eigenes Verzeichnis. Darin befindet sich gewöhnlich jeweils eine einzige Datei, bei der es sich um das eigentliche Programm handelt. Beispielsweise gibt es in dem Verzeichnis experiments/ das Verzeichnis ex_01_basic_motor_control/ mit der Datei basic_motor_control. ino. Wenn Sie die Arduino-IDE bereits installiert haben und diese Datei aufrufen, wird sie in der IDE geöffnet.
Alternativ können Sie auch die Ordner experiments und projects in Ihren Arduino-Sketchbook-Ordner kopieren, der den Namen Arduino/ trägt und sich in Ihrem üblichen Dokumentenordner befindet (also Eigene Dokumente auf Windows oder Dokumente auf dem Mac).
Wenn Sie die Dateien in das Verzeichnis sketchbook/ kopiert haben, können Sie sie öffnen, indem Sie in der Arduino-IDE auf Datei > Sketchbook klicken.
Dieser Abschnitt gibt Ihnen einen Überblick über die wichtigsten Befehle, damit Sie die in diesem Buch verwendeten Sketche verstehen können. Wenn Sie die Programmiersprache Arduino C erlernen wollen, sollten Sie sich mein Buch Programming Arduino: Getting Started with Sketches (Tab Books, 2012) zulegen.
Sämtliche Arduino-Sketche müssen zwei grundlegende Funktionen enthalten (Programmcodeeinheiten, die eine bestimmte Aufgabe ausführen): setup() und loop(). Um zu sehen, wozu sie benötigt werden, schauen wir uns das Beispiel Blink, das wir auf den Arduino hochgeladen haben, genauer an.
Sie sehen hier eine ganze Menge Text, dem ein doppelter Schrägstrich vorausgeht (//). Dies sind Kommentare. Dabei handelt es sich nicht um ausführbaren Programmcode, sondern nur um eine Beschreibung dessen, was an der betreffenden Stelle im Sketch passiert.
Wie Sie schon in den Kommentaren lesen können, werden die Codezeilen in der Funktion setup() nur einmal ausgeführt (genauer gesagt, jedes Mal, wenn der Arduino an eine Stromquelle angeschlossen oder die Reset-Taste gedrückt wird). In dieser Funktion geben Sie alle Aufgaben an, die zum Programmstart einmal erledigt werden müssen. Beim Programm Blink hat der Code in setup() nur eine Aufgabe, nämlich den LED-Pin als Ausgang festzulegen.
Die Befehle in der Funktion loop() dagegen werden immer und immer wieder ausgeführt. Wenn die letzte Zeile in loop() abgearbeitet ist, wird die Ausführung wieder mit der ersten Zeile fortgesetzt.
Wir haben bisher übersprungen, was die Befehle in den Funktionen setup() und loop() im Einzelnen tun, aber keine Sorge, das sehen wir uns gleich an.
Variablen sind eine Möglichkeit, um Werten Namen zu geben. In der ersten Zeile von Blink wird der Pin 13 mit der Bezeichnung led versehen:
Dadurch wird eine int-Variable namens led erstellt und ihr ein Anfangswert von 13 zugewiesen, da der Arduino-Pin, mit dem die LED L verbunden ist, die Nummer 13 trägt. Das Wort int ist eine Abkürzung für Integer und bedeutet eine ganze Zahl (ohne Dezimalstellen.
Es ist zwar nicht unbedingt erforderlich, für jeden verwendeten Pin einen Variablennamen zu vergeben, doch es ist eine gute Vorgehensweise, denn dadurch kann man leichter erkennen, wozu die einzelnen Pins dienen. Wenn Sie später einen anderen Pin nutzen möchten, müssen Sie dann außerdem nur den Wert der Variablen an einer einzigen Stelle ändern, nämlich bei ihrer Definition.
In einigen anderen Sketchen in diesem Buch werden Variablen, die einen bestimmten Pin festlegen, mit dem Schlüsselwort const eingeleitet:
Dadurch wird der Arduino-IDE mitgeteilt, dass die Variable in Wirklichkeit gar keine Variable ist, sondern eine Konstante: Der Wert von led beträgt 13 und kann sich nicht ändern. Durch die Zuweisung von Werten auf diese Weise können Sketche ein wenig kleiner gestaltet und schneller ausgeführt werden. Diese Vorgehensweise wird allgemein als eine gute Angewohnheit angesehen.
Der Sketch Blink ist auch ein gutes Beispiel dafür, wie Sie einen Pin als digitalen Ausgang festlegen. Nach der Definition als led wird Pin 13 in der folgenden Zeile der Funktion setup() als Ausgang eingerichtet:
pinMode(led, OUTPUT);
Da dies nur einmal geschehen muss, steht dieser Befehl in der Funktion setup(). Wenn ein Pin erst einmal als Ausgang eingerichtet ist, bleibt er ein Ausgang, bis wir etwas anderes befehlen.
Damit die LED blinkt, muss sie wiederholt ein- und ausgeschaltet werden. Daher muss der Code für diesen Vorgang in der Schleife loop() platziert werden:
digitalWrite(led, HIGH); // Schaltet die LED ein (Spannung HIGH)delay(1000); // Wartet eine Sekunde langdigitalWrite(led, LOW); // Schaltet die LED aus (Spannung LOW)delay(1000); // Wartet eine Sekunde lang
Die Funktion digitalWrite() nimmt zwei Parameter entgegen (in Klammern und durch ein Komma getrennt). Der erste legt fest, auf welchen Arduino-Pin geschrieben wird, und der zweite nennt den zu schreibenden Wert. Der Wert HIGH setzt den Ausgang auf 5 V, wodurch die LED eingeschaltet wird, und der Wert LOW setzt ihn auf 0 V und schaltet die LED damit aus.
Die Funktion delay() legt eine Pause von so vielen Millisekunden ein, wie ihr Parameter angibt. Hier wird durch den Wert 1000 festgelegt, dass die beiden delay()-Funktionen das Programm jeweils für eine Sekunde anhalten sollen.
Im Abschnitt »Experiment: Eine LED steuern« in Kapitel 4 lassen Sie nicht die eingebaute LED blinken, sondern eine externe LED, die an einen der digitalen Ausgänge angeschlossen ist.
Da es in diesem Buch hauptsächlich um Ausgänge geht, verwenden wir meistens die Funktion digitalWrite(). Allerdings sollten Sie sich auch mit den digitalen Eingängen auskennen, über die Sie Schalter und Sensoren an den Arduino anschlie-ßen können.
Mit der Funktion pinMode() können Arduino-Pins auch als Eingänge eingerichtet werden. Im folgenden Beispiel zeige ich Ihnen das anhand von Pin 7. Natürlich können Sie statt 7 auch einen Variablennamen verwenden.
Wie bei den Ausgängen müssen Sie auch den Modus eines Eingangspins nur in seltenen Fällen ändern, während der Sketch läuft, weshalb auch die Definition von Eingangspins gewöhnlich in der Funktion setup() erfolgt:
pinMode(7, INPUT)
Wenn ein Pin als Eingang festgelegt ist, können Sie messen, ob die an ihm anliegende Spannung näher bei 5 V (HIGH) oder näher bei 0 V (LOW) liegt. In dem folgenden Beispiel wird die LED eingeschaltet, wenn der Eingang zum Zeitpunkt der Messung HIGH ist. (Da es in dem Code keinen Befehl gibt, der die LED wieder ausschaltet, leuchtet sie nach dem Einschalten fortgesetzt weiter.)
Jetzt wird der Code etwas komplizierter. Gehen wir ihn daher Zeile für Zeile durch.
In der zweiten Zeile steht eine öffnende geschweifte Klammer {. Manchmal wird sie in dieselbe Zeile geschrieben wie loop(), manchmal in die darauf folgende Zeile. Das ist Geschmackssache und hat keinerlei Auswirkungen auf die Code-ausführung. Diese Klammer kennzeichnet den Beginn eines Codeblocks, der wiederum mit einer schließenden geschweiften Klammer endet, also mit }. Dadurch werden alle Codezeilen gruppiert, die zur Funktion loop() gehören.
Den Code, der ausgeführt werden soll, wenn die Bedingung wahr ist, kennen Sie bereits: Es ist der digitalWrite-Befehl, mit dem die LED eingeschaltet wird.
Der Beispielcode aus dem vorhergehenden Abschnitt setzt voraus, dass der digitale Eingang definitiv HIGH oder LOW ist. Wenn Sie einen Schalter mit einem digitalen Eingang verbinden, kann er nichts anderes, als eine Verbindung schließen. Gewöhnlich werden Schalter so angebracht, dass der digitale Eingang beim Schlie-ßen des Kontakts mit Masse (0 V, GND) verbunden wird. Ist der Schalter geöffnet, so befindet sich der digitale Eingang in einem schwebenden Zustand, was bedeutet, dass er mit keiner Komponente elektrisch verbunden ist. Allerdings kann ein schwebender Eingang immer noch elektrisches Rauschen aus der umgebenden Schaltung aufnehmen, weshalb die Spannung am Pin zwischen HIGH und LOW schwankt. Um dieses unerwünschte Verhalten zu verhindern, wird normalerweise ein sogenannter Pullup-Widerstand verwendet (siehe Abb. 2–5).
Abb. 2–5 Verwendung eines Pullup-Widerstands an einem digitalen Eingang
Wenn der Schalter geöffnet ist (wie in Abb. 2–5), verbindet der Widerstand den Eingangspin mit der Spannungsquelle und zieht die Spannung an dem Pin auf 5 V hoch. Wird die Taste gedrückt und damit der Schalter geschlossen, so wird das schwache Hochziehen des Eingangs außer Kraft gesetzt und der Eingang stattdessen mit Masse verbunden.
Sie könnten zwar auch selbst einen Widerstand anbringen, aber ArduinoEingänge verfügen bereits über eingebaute Pullup-Widerstände von etwa 40 kΩ, die aktiviert werden, wenn Sie den Pin statt auf INPUT auf INPUT_PULLUP setzen. Der folgende Code zeigt, wie Sie den Pinmodus einrichten müssen, wenn Sie einen Schalter an einem digitalen Eingang anbringen und keinen externen Pullup- Widerstand wie in Abbildung 2–5 verwenden möchten:
pinMode(switchPin, INPUT_PULLUP);
An den analogen Eingangspins A0 bis A5 des Arduino können Sie Spannungen zwischen 0 V und 5 V messen. Anders als bei den digitalen Ein- und Ausgängen brauchen Sie für die analogen Eingänge keinen pinMode-Befehl in der Funktion setup().
Um den Wert an einem analogen Eingang zu lesen, verwenden Sie analogRead(), wobei Sie den Namen des gewünschten Pins als Parameter übergeben. Im Gegensatz zu digitalRead gibt analogRead nicht true oder false zurück, sondern einen Zahlenwert zwischen 0 (0 V) und 1023 (5 V). Um die Zahlen in die anliegende Spannung umzurechnen, müssen Sie sie mit 5 multiplizieren und das Ergebnis durch 1023 teilen oder die Zahl gleich durch 204,6 dividieren. Das folgende Beispiel zeigt, wie Sie in Arduino-Code einen Analogwert lesen und umrechnen:
Die Variable raw ist vom Typ int (Ganzzahl), da der Wert an einem analogen Eingang immer eine ganze Zahl ist. Zur Umrechnung des Rohwerts in eine Dezimalzahl brauchen wir jedoch eine Variable vom Typ float (Fließkommazahl).
An analoge Eingänge können Sie verschiedene Sensoren und Regler anschließen. In den Experimenten dieses Buches verwenden wir beispielsweise einen Fotowiderstand als Lichtsensor (siehe Abschnitt »Projekt: Arduino-Bewässerungsanlage für Zimmerpflanzen« in Kapitel 7) und einen variablen Widerstand (für den Getränkekühler mit Thermostat in Kapitel 12).
Mit digitalen Ausgängen können Sie Bauteile (z. B. eine LED) nur ein- und ausschalten, aber analoge Ausgänge bieten Ihnen die Möglichkeit, inkrementell zu steuern, wie viel Leistung einer Komponente zugeführt werden soll. Dadurch können Sie beispielsweise die Helligkeit einer LED oder die Drehzahl eines Motors regeln. Diese Möglichkeit werden wir in den Experimenten in diesem Buch noch häufig nutzen.
Auf dem Arduino Uno können nur die Pins D3, D5, D6, D9, D10 und D11 als analoge Ausgänge verwendet werden. Sie sind auf dem Arduino mit einer kleinen Tilde (~) neben der Nummer gekennzeichnet.
Um einen analogen Ausgang zu steuern, verwenden Sie die Funktion analogWrite() mit einer Zahl zwischen 0 und 255 als Parameter. Der Wert 0 steht für 0 V, also eine völlige Abschaltung. Bei 255 dagegen ist der Pin voll eingeschaltet.
Es drängt sich die Vorstellung auf, dass ein analoger Ausgang in der Lage wäre, unterschiedliche Spannungen zwischen 0 V und 5 V zu erzeugen. Wenn Sie ein Voltmeter zwischen einem analogen Ausgang und Masse anlegen und den Parameter von analogWrite() ändern, scheint sich die Spannung tatsächlich zu ändern. In Wirklichkeit aber läuft hier ein komplizierterer Vorgang ab. Diese Ausgänge greifen auf die Pulsweitenmodulation (PWM) zurück. Abbildung 2–6 zeigt, was wirklich vor sich geht.
Ein analoger Ausgang generiert 490 Pulse pro Sekunde mit variabler Pulsweite (mit Ausnahme von D5 und D6, die 980 Pulse pro Sekunde liefern). Je länger der Puls auf HIGH bleibt, umso mehr Leistung wird an den Ausgang geliefert und umso heller leuchtet die LED bzw. umso schneller dreht sich der Motor.
Ein Voltmeter meldet dies als Spannungsänderung, da es nicht schnell genug messen kann und daher eine Art Durchschnittsberechnung durchführt, um eine Spannung zu erzeugen, die sich scheinbar stufenlos verändert.
Abb. 2–6 Pulsweitenmodulation am analogen Ausgang
Im Abschnitt »Digitale Ausgänge« weiter vorn in diesem Kapitel haben wir die Arduino-IDE mit if angewiesen, etwas Bestimmtes zu tun, wenn eine angegebene Bedingung erfüllt ist. Um mehr Steuerungsmöglichkeiten über den Code zu erhalten, können Sie if aber auch zusammen mit else einsetzen, damit eine bestimmte Codefolge ausgeführt wird, wenn die Bedingung wahr ist, und eine andere, wenn sie falsch ist.
Der folgende Code schaltet den Pin led ein, wenn die Analogmessung einen Wert größer als 500 ergibt, und aus, wenn der Messwert kleiner oder gleich 500 ist:
if (analogRead(A0) > 500){ digitalWrite(led, HIGH);}else{ digitalWrite(led, LOW);}
< Kleiner als
<= Kleiner oder gleich
>= Größer oder gleich
!= Ungleich
Mithilfe von logischen Operatoren wie && (AND) und || (OR) können Sie auch kompliziertere Vergleiche vornehmen. Um beispielsweise die LED einzuschalten, wenn der Messwert zwischen 300 und 400 liegt, können Sie Folgendes schreiben:
Steuerschleifen ermöglichen es Ihnen, eine Aktion zu wiederholen. Dafür gibt es die beiden Anweisungen for und while. Mit for führen Sie eine feste Anzahl von Durchläufen durch, mit while wiederholen Sie einen Vorgang, bis sich eine Bedingung ändert.
Der folgende Code sorgt dafür, dass die LED zehnmal blinkt, und hält dann an. Dieser Blinkcode muss in setup() stehen und nicht in loop(), da loop() den Blinkzyklus endlos wiederholen würde, sodass die LED nicht nach zehnmaligem Aufblinken ausginge.
Soll die LED so lange blinken, wie eine mit einem digitalen Eingang verbundene Taste gedrückt wird, verwenden Sie eine while-Schleife:
Damit dieser Code funktioniert, muss eine Taste an Pin D9 angeschlossen sein (siehe Abb. 2–5).
Wenn Sie noch keine Erfahrungen mit dem Programmieren haben, können Funktionen zunächst verwirrend wirken. Stellen Sie sich diese am besten als eine Möglichkeit vor, zusammenhängende Codezeilen zu gruppieren und ihnen einen gemeinsamen Namen zu geben, um den Codeblock auf einfache Weise mehrfach verwenden zu können.
Die mitgelieferten Funktionen wie digitalWrite() sind viel komplizierter, als sie auf den ersten Blick aussehen. Beispielsweise sieht der Code für digitalWrite() wie folgt aus:
Machen Sie sich keine Gedanken darüber, was das alles zu bedeuten hat. Freuen Sie sich einfach, dass Sie diesen ganzen Code nicht jedes Mal komplett eingeben müssen, wenn wir einen Pin von HIGH auf LOW ändern wollen. Dadurch, dass dieser ellenlange Codeblock einen Namen bekommen hat, können wir einfach diesen Namen angeben, um den kompletten Code auszuführen.
Sie können jedoch nicht nur die mitgelieferten Funktionen wie digitalWrite() nutzen, sondern auch selbst Funktionen schreiben, um die von Ihnen gewünschten Vorgänge zusammenzufassen. In dem folgenden Sketch sehen Sie, wie Sie die Funktion blink() schreiben und in setup() aufrufen, sodass die LED »L« des Arduino nach dem Start und nach jedem Reset fünfmal blinkt:
Die Funktion setup() legt ledPin als Ausgang fest und ruft die Funktion blink() auf, wobei sie ihr die Bezeichnung des Pins und die Anzahl der Blinkvorgänge übergibt. Die Funktion loop() ist leer und macht überhaupt nichts, aber die Arduino-IDE besteht darauf, dass wir sie einfügen.
Die Funktion blink() beginnt mit dem Schlüsselwort void, das besagt, dass die Funktion keinen Wert zurückgibt. Bei einer Funktion, die irgendeine Berechnung durchführt, können Sie das Ergebnis des Aufrufs einer Variablen zuweisen, aber das ist hier nicht möglich. Es folgen der Name der Funktion (