Vorwort

Vielen fällt der Einstieg in die Mikrocontroller-Programmierung und die dazugehörige Elektronik schwer. Bei den meisten Mikrocontroller-Systemen muss man sich erst durch unzählige und für den Anfänger nur schwer verständliche Datenblätter wühlen, bevor man überhaupt mit der eigentlichen Programmierung beginnen kann. Und auch bei der Programmierung ist man stets auf das Datenblatt angewiesen. Die Programmieroberflächen sind zudem meist sehr kompliziert und für den Profi-Programmierer ausgelegt, der bereits Erfahrung mit Mikrocontrollern besitzt. Somit bleibt manchem, der an Mikrocontrollern und dem Programmieren interessiert ist, der Zugang in diese Welt verwehrt.

Arduino ist eine leicht verständliche und schnell zu erlernende Open-Source-Plattform, basierend auf einem Mikrocontrollerboard mit einem Atmel-AVR-Controller und einer einfach gehaltenen Programmierumgebung. Für die Interaktion zwischen Mensch und Mikrocontroller können diverse analoge und digitale Sensoren angeschlossen werden, die die Umwelt erfassen und die Daten an den Mikrocontroller weitergeben. Der Mikrocontroller verarbeitet die eingehenden Daten, und durch das Programm entstehen neue Ausgabedaten in analoger oder digitaler Form. Hierbei sind der Kreativität des Entwicklers keine Grenzen gesetzt. Egal, ob Sie eine Haussteuerung bauen möchten oder eine LED-Leuchte mit Farbwechsel basteln – mit Arduino ist es auch für den Quereinsteiger leicht, die ersten funktionsfähigen Programme zu schreiben und so seine Ideen zu verwirklichen.

Das einfache Zusammenspiel aus Hard- und Software bildet die Basis für »Physical Computing«, der Verbindung der realen Welt mit der des Mikrocontrollers, die aus Bits und Bytes besteht.

Dieses Buch ist eine erweiterte Auskoppelung aus dem Franzis Arduino-Lernpaket. Es vermittelt die Grundlagen der Arduino-Programmierung und einige Kniffe, die Sie bei Ihren eigenen Projekten verwenden können. Ein paar Grundkenntnisse in der Elektronik sollten Sie jedoch bereits mitbringen, da in diesem Buch nicht auf jedes Detail eingegangen werden kann. Es ist zudem ein Vorteil, wenn Sie sich bereits mit einer Programmiersprache beschäftigt haben, weil Sie dann die Zusammenhänge leichter verstehen. Aber auch der blutige Anfänger wird mit etwas Eigeninitiative schnell Erfolge erzielen.

CD zum Buch

Diesem Buch liegt eine CD bei, die verschiedene Programme, Tools, Datenblätter und Beispiele enthält. Die CD erleichtert das Arbeiten mit diesem Buch. Die hier abgedruckten Beispiele sind auf der CD enthalten.

Inhalt der CD

Arduino-Entwicklungsumgebung (IDE)

Beispiel-Programmcode

diverse Tools

Datenblätter

Schaltpläne

GPL (General Public License)

Sie können Ihre eigenen Programme mit anderen Anwendern über das Internet austauschen. Die Beispielprogramme stehen unter der Open-Source-Lizenz GPL (General Public License). Daher sind Sie berechtigt, die Programme unter den Bedingungen der GPL zu modifizieren, zu veröffentlichen und anderen Anwendern zur Verfügung zu stellen, sofern Sie Ihre Programme dann ebenfalls unter die GPL-Lizenz stellen.

Systemvoraussetzungen:

Windows XP/Vista/7/8 32 Bit und 64 Bit, Linux 32 Bit und 64 Bit, Mac OS X, CD-Laufwerk, Java

Näheres finden Sie auf den Internetseiten zu den verwendeten Programmen:

www.arduino.cc

www.fritzing.org

www.processing.org

Updates und Support:

Arduino wird ständig weiterentwickelt. Updates können kostenlos von der Website http://arduino.cc heruntergeladen werden.

Sicherheitshinweise

Die Arduino-Platine ist weitgehend gegen Fehler abgesichert, sodass es kaum möglich ist, den PC zu beschädigen. Die Anschlüsse der USB-Buchse sind auf der Platinenunterseite nicht isoliert. Wenn Sie die Platine auf einen metallischen Leiter stellen, kann es daher zu einem höheren Strom kommen, was den PC und die Platine beschädigen könnte.

Beachten Sie bitte die folgenden Sicherheitsregeln:

Vermeiden Sie metallische Gegenstände unter der Platine oder isolieren Sie die gesamte Unterseite mit einer nicht leitenden Schutzplatte oder Isolierband.

Halten Sie Netzteile, andere Spannungsquellen oder führende Leiter mit mehr als 5 V von der Experimentierplatine fern.

Schließen Sie die Platine nach Möglichkeit nicht direkt an den PC an, sondern über einen Hub. Dieser enthält meist eine zusätzliche wirksame Schutzschaltung. Wenn dennoch etwas passiert, wird im Normalfall nur der Hub und nicht der PC beschädigt.

Inhaltsverzeichnis

1 Mikrocontroller-Grundlagen

1.1 Messen

1.2 Steuern

1.3 Regeln

1.4 Aufbau und Funktionsweise

1.4.1 CPU

1.4.2 Arbeits- und Programmspeicher

1.4.3 Peripherie

1.5 Programmierung der Mikrocontroller

1.5.1 Arduino versteht C

2 Übersicht über die Arduino-Boards

2.1 Arduino Mega

2.2 Arduino UNO

2.3 Arduino Leonardo

2.4 Arduino Ethernet

2.5 ArduPilot

2.6 LilyPad

2.7 USB-Adapter

3 Arduino-Shields

3.1 Arduino ProtoShield

3.2 Ardumoto

3.3 TellyMate

3.4 XBee-Funkmodule

3.5 Ethernet Shield

4 Grundausstattung

4.1 Arduino UNO

4.1.1 Anschlüsse und LEDs

4.1.2 Stromversorgung

4.1.3 Reset-Taster

4.1.4 ICSP-Anschluss

5 Bauteile und ihre Funktion

5.1 Schaltdraht

5.2 Steckbrett

5.3 Taster

5.4 Widerstände

5.5 LDR

5.6 Kondensatoren

5.7 Piezo-Schallwandler (Buzzer)

5.8 Leuchtdioden

5.9 Diode

5.10 Transistoren

6 Erste Inbetriebnahme

6.1 Installation unter Windows

6.2 Installation unter MacOSX

6.3 Installation unter Linux

7 Die Arduino-Programmierumgebung

8 Arduino-Testprogramm

9 Programmiergrundlagen

9.1 Bits und Bytes

9.2 Aufbau eines Programms

9.2.1 Sequenzieller Programmablauf

9.2.2 Interruptgesteuerter Programmablauf.

9.2.3 Der Aufbau eines Arduino-Programms

9.3 Programmieren

9.3.1 Kommentare im Quelltext

9.3.2 Geschweifte Klammern ({})

9.3.3 Semikolon (;)

9.3.4 Datentypen und Variablen

9.3.5 Variablen-Namen

9.3.6 Lokale und globale Variablen

9.3.7 Datentypen und ihre Verwendung

9.3.8 Operatoren

9.3.9 #Define-Anweisungen

9.3.10 Kontrollstrukturen

9.3.11 Schleifen

9.3.12 Funktionen und Routinen

9.3.13 Continue

9.3.14 Typumwandlung

9.3.15 Mathematische Funktionen

9.3.16 Serielle Kommunikation

9.3.17 Digitale Ein-/Ausgänge

9.3.18 Analoge Eingabe »ADC«

9.3.19 Analoge Ausgabe PWM

9.3.20 Pause mit delay

9.3.21 Zufallszahlen

9.3.22 Stoppuhr

10 Programme mit Arduino

10.1 LED-Dimmer

10.2 Softer Blinker

10.3 Taster entprellen

10.4 Einfache Einschaltverzögerung

10.5 Einfache Ausschaltverzögerung

10.6 LEDs und Arduino

10.7 Große Verbraucher schalten

10.8 DAC mit PWM-Ports

10.9 Musik mit Arduino

10.10 Romantisches Mikrocontroller-Kerzenlicht

10.11 Überwachung des Personalausgangs

10.12 Uhr

10.13 Schuluhrprogramm

10.14 Lüftersteuerung

10.15 Dämmerungsschalter

10.16 Alarmanlage

10.17 Codeschloss

10.18 Kondensatormessgerät mit Autorange-Funktion

10.19 Potenziometer und Trimmer professionell auslesen

10.20 State Machine

10.21 6-Kanal-Voltmeter mit Arduino

10.22 Spannungs-Plotter selbst programmiert

10.23 Das Arduino-Speicheroszilloskop

10.24 StampPlot – der Profi-Datenlogger

10.25 Steuern über VB.NET

10.26 Temperaturschalter

10.27 I²C-Bus-Kommunikation

10.27.1 Grundlagen der I²C-Bus-Kommunikation

10.27.2 I²C-Bus-Temperatursensor LM75

10.27.3 I²C-Port-Erweiterung mit PCF8574

10.28 Ultraschallsensoren zur Abstandsmessung

10.28.1 Auslesen der Entfernungsdaten

10.29 Arduino und GPS

10.29.1 GPS-Empfänger an den Arduino anschließen

10.30 Stellantrieb mit Servo

10.30.1 Funktionsweise eines Servos

10.31 LC-Displays

10.31.1 Polarisation von Displays

10.31.2 Statische Ansteuerung, Multiplexbetrieb

10.31.3 Blickwinkel 6 Uhr/12 Uhr

10.31.4 Reflektiv, transflektiv, transmissiv

10.31.5 Kontrasteinstellung des Displays

10.31.6 Zeichensatz

10.31.7 Pin-Belegung der gängigen LCDs

10.31.8 Display ansteuern

10.31.9 Initialisierung der Displays

10.31.10 Anschluss des Displays an Arduino

10.31.11 Erste Ausgabe

11 Fritzing

12 Processing

13 Anhang

13.1 Elektrische Einheiten

13.2 ASCII-Tabelle

Bezugsquellen

1  Mikrocontroller-Grundlagen

Mikrocontroller werden vor allem im Bereich der Automatisierungs-, Mess-, Steuer- und Regeltechnik eingesetzt. Der Vorteil eines Mikrocontroller-Systems ist, dass es auf kleinstem Raum energie- und kosteneffizient physikalische Größen misst und interpretiert, darauf aufbauend Entscheidungen trifft und Aktionen durchführt. Im Grunde ist jede Aufgabe, die man mit Arduino lösen möchte, eine MSR(Messen, Steuern, Regeln)-Aufgabe.

1.1   Messen

Unter Messen versteht man im Allgemeinen, physikalische Eingangswerte von z. B. Schaltern, Lichtsensoren, Drucksensoren, Bewegungsmeldern, Lichtschranken, Spannungsteilern (Potenziometern) u. v. m. zu erfassen. Diese werden dem Controller über die digitalen oder analogen Eingänge zugeführt. Arduino versteht Signale mit einem Spannungspegel von 0 Volt (V) oder 5 V bei den digitalen Eingängen. Die analogen Eingänge hingegen können 0 V bis 5 V mit einer Auflösung von 10 Bit auswerten. Dabei entsprechen 0 V 0 und 5 V 1.023. Diese Werte können in der Software entsprechend interpretiert werden, um z. B. eine Mignonzelle auf ihre Spannung zu überprüfen. Für größere Spannungen an den Eingängen, egal ob digital oder analog, benötigen wir einen Spannungsteiler, der die Eingangsspannung auf die maximale Eingangsspannung der Arduino-Ports herunterteilt. Dazu später mehr.

1.2   Steuern

Unter Steuern versteht man, auf einen Eingangswert zu reagieren. Ein einfaches Beispiel ist ein Bügeleisen. Es steuert die Temperatur über einen Bimetallschalter. Ist die Bügelfläche kälter als am Bügeleisen eingestellt, wird so lange geheizt, bis die gewünschte Temperatur erreicht ist. Fällt die Temperatur unter einen bestimmten Wert, wird nachgeheizt, bis die Temperatur wieder stimmt. Zwischen den beiden Punkten »Heizung ein« und »Heizung aus« befindet sich ein kleines Fenster, eine sogenannte Hysterese. Sie sorgt dafür, dass nicht zu oft ein- bzw. ausgeschaltet wird, dadurch die mechanischen Kontakte nicht zu schnell verschleißen und die Steuerung nicht zu »nervös« reagiert. Bei einem Mikrocontroller könnte man das Bimetall durch einen Temperatursensor ersetzen. Der Mikrocontroller würde den Wert analog oder digital über einen passenden Temperatursensor erfassen, das Programm würde die Schwellenwerte für »ein« und »aus« vergleichen und einen digitalen Ausgang schalten, der wiederum ein Relais oder einen Transistor ansteuert, um die Heizung zu schalten.

1.3   Regeln

Der Unterschied zwischen Steuern und Regeln besteht darin, dass eine Steuerung nur bestimmte Ein/Aus-Zustände kennt. Eine Regelung hingegen ist stufenlos. Ein Tempomat im Auto ist z. B. eine Regelung, die versucht, immer die gespeicherte Geschwindigkeit zu halten. Wäre hier nur eine Steuerung verbaut, wäre die Fahrt mit Tempomat sehr unangenehm, da dieser nur Gasgeben, Nichtstun und Bremsen kennen würde.

Bild 1.1: Beispiel einer Ein- und Ausgabeverarbeitung anhand eines Gewächshauses

Das Spektrum möglicher Anwendungen von Mikrocontrollern reicht vom privaten (z. B. der Steuerung eines Gewächshauses, des Aquariums oder der Hausbeleuchtung) bis zum industriellen Bereich, in dem komplette Produktionsanlagen mit Mikrocontroller-Systemen gesteuert, gewartet und betrieben werden können. Die Abbildung zeigt eine typische Datenverarbeitung zur Steuerung der Bewässerungsanlage eines Gewächshauses. Der Mikrocontroller nimmt dabei über Sensoren die Messwerte der Umgebungstemperatur und der Bodenfeuchte auf. Die Messwerte werden durch eine digitale Logik in Form eines Programms im Mikrocontroller (kurz: μC oder MC) interpretiert und es wird bestimmt, ob die Pumpe nun gießen soll oder nicht.

1.4   Aufbau und Funktionsweise

Als vollwertiger Computer im Kleinstformat weist jeder Mikrocontroller – ähnlich einem PC – grundlegende elektronische Bausteine auf. Grundbausteine eines jeden Mikrocontrollers sind die CPU, der Arbeitsspeicher (RAM) sowie der Programmspeicher (Flash) und die Peripherie.

Bild 1.2: Prinzipieller Aufbau eines Mikrocontrollers

1.4.1   CPU

Die wichtigste Funktionseinheit ist die zentrale Recheneinheit, die CPU (engl.: Central Processing Unit). Sie kann als das »Gehirn« des Mikrocontrollers verstanden werden. Dort werden die Befehle und arithmetische Operationen abgearbeitet.

1.4.2   Arbeits- und Programmspeicher

Arbeits- und Programmspeicher sind logisch getrennt. Das Benutzerprogramm wird dabei in einem nichtflüchtigen Flash-Speicher abgelegt, dem Programmspeicher. Je nach Controllersystem kann man auf (implementierten) Programmspeicher von mehreren Kilo- bis Megabyte zurückgreifen. Bei einigen Systemen ist es darüber hinaus möglich, den Programmspeicher durch externe Flash-Komponenten aufzustocken. Der Arbeitsspeicher (RAM) dient zur temporären Ablage von Rechen-, Mess- und Steuergrößen. Ziel ist, möglichst schnell auf eine begrenzte Anzahl von Daten zugreifen zu können. Der RAM(Random Access Memory)-Speicher ist in der Regel deutlich kleiner als der Flash-Speicher, dafür aber um ein Vielfaches schneller. Die Werte des RAM werden zur Laufzeit erzeugt und sind, anders als beim Flash-Speicher, flüchtig. D. h., dass nach einem Neustart des Controllers im RAM keine Werte gespeichert sind.

1.4.3   Peripherie

Als Peripherie bezeichnet man jene Komponenten eines Mikrocontrollers, die nicht durch CPU und Speicherbausteine abgedeckt werden, insbesondere Komponenten, die eine Schnittstelle zur Außenwelt darstellen. Digitale Ein- und Ausgänge (kurz: I/O für Input/Output) werden z. B. zu den Peripheriebausteinen gezählt. Die meisten Mikrocontrollerboards, auch unser Arduino, bieten eine Vielzahl von digitalen und analogen Ein- und Ausgängen mit verschiedenen Funktionen.

1.5   Programmierung der Mikrocontroller

Ein Programm ist die Beschreibung eines Informationsverarbeitungsprozesses. Im Lauf eines solchen Prozesses wird aus einer Menge von variablen oder konstanten Eingangswerten eine Menge von Ausgangswerten berechnet. Die Ausgangswerte sind entweder selbst Ziel der Informationsgewinnung oder dienen mittelbar zur Reaktion auf die Eingangswerte. Neben den eigentlichen Berechnungen kann ein Programm Anweisungen zum Zugriff auf die Hardware des Computers oder zur Steuerung des Programmflusses enthalten. Ein Programm besteht aus mehreren Zeilen sogenannten Quelltextes. Dabei enthält jede Zeile eine oder mehrere Rechen- oder Steueranweisungen. Neben diesen Anweisungen selbst bestimmt ihre Reihenfolge wesentlich die eingangs beschriebene Informationsverarbeitung. Die Ausführung der den Anweisungen entsprechenden Operationen durch den Steuercomputer erfolgt sequenziell, also der Reihe nach. Eine Folge von Programmanweisungen mit einem bestimmten Ziel nennt man auch Algorithmus.

1.5.1   Arduino versteht C

C oder auch ANSI-C ist eine einfach zu erlernende Programmiersprache. C ist eine imperative Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 70er-Jahren an den Bell Laboratories für das Betriebssystem Unix entwickelt hat. Seitdem ist sie weltweit stark verbreitet. Die Anwendungsbereiche von C sind sehr verschieden. Es wird z. B. zur System- und Anwendungsprogrammierung eingesetzt. Die grundlegenden Programme aller Unix-Systeme und die Systemkerne vieler Betriebssysteme sind in C programmiert. Zahlreiche Sprachen wie C++, Objective-C, C#, Java, PHP oder Perl orientieren sich an der Syntax und anderen Eigenschaften von C. Es ist also mehr als lohnend, sich mit dieser Programmiersprache zu beschäftigen, da man später auch leicht auf andere Mikrocontrollersysteme umsteigen kann. Für fast alle Mikrocontroller existiert ein freier C-Compiler, den die Hersteller zum Download anbieten. Das C von Arduino ist jedoch um einiges einfacher gehalten als die professionellen C-Compiler und nimmt dem Anwender dadurch sehr viel Arbeit ab. Vor allem um die komplizierten Hardware-Routinen muss man sich bei Arduino nicht kümmern, da sie bereits als feste Befehle in der Entwicklungsumgebung integriert sind. Zudem gibt es mittlerweile für fast jede Hardware eine Arduino-Bibliothek, die einfach eingebunden wird – und schon kann man mit der neuen Hardware, z. B. einem digitalen Drucksensor, kommunizieren.

2  Übersicht über die Arduino-Boards

Die Arduino-Hardware verwendet ausschließlich gängige, allgemein verfügbare Bauteile. Daher ist es leicht, die Funktionsweise zu verstehen und die Schaltung an eigene Wünsche anzupassen oder Erweiterungen vorzunehmen. Den Kern bildet ein ATmega-Controller aus Atmels weitverbreiteter 8-Bit-AVR-Familie. Hinzu kommen Schaltungsteile zur Stromversorgung und eine serielle Schnittstelle. Letztere ist bei den neueren Arduino-Versionen als USB-Interface ausgelegt. Über diesen Anschluss erfolgt der Download unserer Programme und bei Bedarf auch die Kommunikation zwischen PC und Arduino während der Programmausführung, um z. B. der Hardware Kommandos zu erteilen oder Messwerte von Arduino zu lesen.

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!