Sie sind auf Seite 1von 122

32

32

| So funktioniert’s

| So funktioniert’s

Arduino

Teil 1

32 32 | So funktioniert’s | So funktioniert’s Arduino Teil 1 www.elvjournal.de www.elvjournal.de

www.elvjournal.de

www.elvjournal.de

So funktioniert’s | 33

So funktioniert’s | 33

verstehen und anwenden

Einstieg in die Hardware: Arduino und AVR-Mikrocontroller

Dies ist der erste Teil einer Artikelserie zum The- ma Arduino. In diesem Beitrag werden zunächst die Kapitel

· Arduino – das erfolgreichste Mikrocontroller-Board der Welt

· Das Arduino-Board als Basis für μC-Anwendungen

· Arduino-Varianten – vom Mikro zum Mega

· Schneller Einstieg mit der Arduino-Entwicklungs- umgebung behandelt.

In weiteren Beiträgen werden dann u. a. die Themen

· Programmierung und Programmierpraxis

· Programmbibliotheken und Shields

· Schnittstellen wie USB, RS232 und I 2 C, Ethernet und WLAN

· Sensortechnik und Messwerterfassung

· Interrupts und Polling

· Displaytechnik

· Physical Computing vorgestellt.

Arduino – das erfolgreichste Mikrocontroller-Board der Welt

Die Idee zum Arduino wurde im Jahr 2005 am Insti- tut für Interaktives Design in Ivrea (Italien) geboren. Die erste Version des Arduinos bestand aus einem Bau- satz mit wenigen Einzelkomponenten und dem damals sehr populären ATmega8 als zentralem Mikrocontroller. Nachdem diese ersten Bausätze innerhalb kürzester Zeit verkauft waren, folgten rasch weitere Auflagen. Künstler und Designer aus anderen Regionen nahmen die Idee auf, und das Arduino-Prinzip verbreitete sich über Italien und Europa schließlich in der ganzen Welt.

Das Konzept einer unkomplizierten und preisgüns- tigen Hardwareplattform zusammen mit einer frei ver- fügbaren, leicht zu beherrschenden Programmierober- fläche (die sogenannte IDE = Integrated Development Environment) fand auch bei anderen Anwendergruppen wie etwa Hobbyisten oder Technikakademien Anklang. Schließlich erkannten auch Schulen und Hochschulen im wissenschaftlichen und technischen Bereich das enorme Potenzial der Arduino-Idee. Neben immer neu- en Hardware-Versionen entstanden auch aufsteckbare Erweiterungsplatinen, sogenannte Shields, und die Er- folgsgeschichte des Arduinos nahm ihren Lauf. Inzwischen sind die Verkaufszahlen der einzelnen Arduino-Versionen recht beachtlich, und der Arduino kann mittlerweile sicherlich als das erfolgreichste Mi- krocontroller-Board aller Zeiten gelten. Für diesen überragenden Erfolg des Arduinos gibt es mehrere Gründe. Einerseits wird durch das kom- plett aufgebaute Prozessorboard der Einstieg in die Hardware enorm erleichtert. Die typischen Anfänger- probleme wie falsche Spannungsversorgungen, Prob- leme mit dem Quarzoszillator oder ungültige Konfi- gurationsparameter, sogenannte Fuse-Bits, sind beim Arduino unbekannt. Das Board wird einfach mit der USB-Schnittstelle des PCs oder Laptops verbunden und kann innerhalb weniger Minuten programmiert werden. Die einfache Handhabung führte insbesondere bei Jugendlichen, aber auch bei Angehörigen der älteren Generation, die noch niemals mit Elektronik in Berüh- rung gekommen sind, zu einer ungeahnten Begeiste- rung für die Mikrocontrollertechnik. Ein weiterer Erfolgsfaktor ist die zugehörige Pro- grammieroberfläche. Diese steht als kostenlose Open- Source-Version zur Verfügung. Eine langwierige Instal-

34 | So funktioniert’s

„L”-LED Rx-/Tx-LED Reset USB- Button Buchse On-LED Externe Span- nungs- versor- gung Controller
„L”-LED
Rx-/Tx-LED
Reset
USB- Button
Buchse
On-LED
Externe
Span-
nungs-
versor-
gung
Controller

Bild 1: Arduino Uno

lation ist nicht erforderlich, und einfache Einstiegsbeispiele sorgen für den schnellen Erfolg. Komplizierte Parametereinstellungen wie bei ande- ren Entwicklungstools sind nicht erforderlich. Die ersten Beispielprogram- me können so im Handumdrehen auf den Arduino geladen und getestet werden. Der letzte Grund für die große Popularität des Arduinos findet sich in der ganz eigenen Philosophie des Projekts. Alle Hard- und Softwarekom- ponenten unterliegen dem sogenannten Open-Source-Prinzip. So werden die Schaltpläne und Layouts aller Arduino-Varianten im Internet veröf- fentlicht. Gleiches gilt für die Software und die zugehörigen Quellcodes. Weiterhin wird der Arduino-Anwender durch eine Fülle von Software-Bi- bliotheken unterstützt. Diese nützlichen Libraries werden zum Teil direkt mit der Standard-IDE mitgeliefert. Beispiele hierfür sind Anwendungen zur Thema Ethernet, LC-Displays oder die Ansteuerung von Schrittmoto- ren und Modellbauservos. Darüber hinaus hat die Arduino-Community eine nahezu unüberschau- bare Fülle von Bibliotheken für alle möglichen Mikrocontroller-Applika- tionen hervorgebracht. Damit lassen sich auch komplexere Aufgaben wie etwa die Detektion von IR-Fernbedienungssignalen, das Ansteuern von Ultraschallsensoren oder das Auslesen von SD-Speicherkarten problemlos und schnell bewältigen.

Arduino-Boards als Basis für μC-Anwendungen

Das aktuell am weitesten verbreitete Board ist der Arduino Uno (Bild 1). Dieses Board arbeitet mit dem ATmega328 und ergänzt ihn zu einem uni- versellen Mikrocontroller-System. Neben dem Prozessor selbst weist das Board hierfür noch die folgen- den Hauptfunktionseinheiten auf:

Resetschaltung mit Taster Mit dem Taster kann der Controller manuell neu gestartet werden. Resets sind aber im Gegensatz zu einem Windows-PC nur sehr selten erforderlich.

Quarz für eine zuverlässige und präzise Taktversorgung Falsch angeschlossene Quarze oder Lastkapazitäten sind die häufigste Ursache bei selbst entwickelten Controllerboards. Durch den fest instal- lierten Quarz entfällt diese Fehlerursache beim Arduino vollständig.

Buchsenreihen für den Anschluss externer elektronischer Bauelemente Die Buchsen sind in vier Hauptgruppen unterteilt:

www.elvjournal.de

a) 6 Analog-Eingänge

b) 14 digitale Ein- und Ausgänge

c) Buchsen für die Stromversorgung (GND, 3,3 V und 5 V)

d) Eingänge für Referenzspannung und Reset

Über diese Buchsenreihen kann auf alle für die Anwendungen relevanten Controllerpins zugegriffen werden.

Anschluss für eine externe Spannungsversorgung Eine über eine Hohlbuchse zugeführte externe Ver- sorgungsspannung wird auf dem Board geregelt und geglättet.

Eine USB-Schnittstelle Die USB-Schnittstelle dient zur Programmierung des Controllers. Darüber hinaus kann diese Schnittstelle auch für die Kommunikation des Mikrocontrollers mit einem PC während der Programmausführung einge- setzt werden.

Der wichtigste Baustein auf dem Arduino ist der Mikrocontroller. Hierbei handelt es sich um einen

Halbleiterchip, der neben einer Prozessoreinheit auch verschiedene Peripheriefunktionen in einem einzigen IC vereinigt. Meist ist auch der Arbeits- und Programmspeicher auf dem gleichen Chip integriert. Ein Mikrocontroller ist somit mit einem kompletten Ein-Chip-Computer- system vergleichbar [1]. Die bekannten Kriterien für Prozessoren bestimmen auch die Einsatzmöglichkeiten eines Mikrocontrollers. Tabelle 1 fasst die wesentlichen Leistungsmerkmale des ATmega328 zusammen. Auf modernen Mikrocontrollern der ATmega-Reihe finden sich zusätzlich zu den einfachen Eingabe-/ Ausgabe-Ports auch komplexere Peripheriefunktionen wie z. B.

· serielle Schnittstellen

· I²C-(Inter-Integrated-Circuit-)Bus

· PWM-Ausgänge

· Analog-digital-Wandler

Damit lassen sich alleine mit dem Controller bereits umfangreiche Praxisprojekte realisieren. Als Beispiel für die Leistungsfähigkeit eines modernen Controllers zeigt Bild 2 eine selbst gefertigte Digitaluhr, die al- lein mit einem ATmega als integriertem Baustein aus- kommt. Es sind keinerlei weitere ICs erforderlich [2].

ATmega328 32 KBytes Flash-Speicher 1 KByte EEPROM 2 KBytes SRAM 2 8-Bit-Timer/-Counter 1 16-Bit-Timer 6
ATmega328
32
KBytes Flash-Speicher
1
KByte EEPROM
2
KBytes SRAM
2
8-Bit-Timer/-Counter
1
16-Bit-Timer
6
Kanäle für 10-Bit-ADC
23
programmierbare I/Os
Tabelle 1

So funktioniert’s | 35

Die Stromversorgung des Arduino-Boards kann über zwei verschiedene Wege erfolgen:

· Über die USB-Schnittstelle:

Dabei wird die Versorgungsspannung direkt dem angeschlossenen Computer entnommen.

· Über eine externe Spannungsquelle:

Ist der Arduino fertig programmiert, kann er auch ohne angeschlosse- nen PC arbeiten. Dazu muss er nur mit einer externen Spannungsquelle versorgt werden. Diese kann sowohl aus einem einfachen, unstabili- sierten Steckernetzteil (Spannungsbereich 7–12 V) oder auch aus ei- nem Batteriesatz (5x 1,5 V oder 9-V-Block) bestehen.

An dieser Stelle noch zwei wichtige Hinweise:

TIPP I: Das Arduino-Board muss stets auf einer elektrisch isolieren- den Unterlage liegen. Andernfalls kann es zu Kurzschlüssen kom- men, und sowohl der USB-Port des Rechners als auch der Arduino können Schaden nehmen (Bild 3). TIPP II: Will man den USB-Port des Rechners schützen, kann man einen USB-Hub mit eigener Spannungsversorgung einsetzen. Die- se Hubs sind meist gut gegen Überlastung abgesichert, und das „Durchschlagen“ eines Kurzschlusses über den Hub hinweg zum Rechner ist sehr unwahrscheinlich.

Arduino-Varianten – vom Mikro zum Mega

Außer dem Klassiker Arduino Uno existiert noch eine Vielzahl weiterer Boardvarianten. Neben dem Uno selbst sollen hier zwei weitere interes- sante Vertreter dieser Familie genauer besprochen werden. Eine Nummer kleiner als der Uno ist der Arduino Mikro (Bild 4). Dieser hat den Vorzug, dass er direkt in ein Breadboard gesteckt werden kann. Er eignet sich daher hervorragend für den Aufbau von Prototypen oder fertigen Kleingeräten. Im Rahmen dieser Artikelserie wird der Arduino

Mini-USB-Buchse „L”-LED Controller Reset
Mini-USB-Buchse
„L”-LED
Controller
Reset

Bild 4: Arduino Mikro

USB-Buchse „L”-LED Rx-/Tx-LED Controller Reset Externe Spannungsversorung
USB-Buchse
„L”-LED
Rx-/Tx-LED
Controller
Reset
Externe Spannungsversorung

Bild 5: Arduino Mega

Reset Externe Spannungsversorung Bild 5: Arduino Mega Bild 2: Selbst gefertigte Digitaluhr – aufgebaut nur

Bild 2: Selbst gefertigte Digitaluhr – aufgebaut nur mithilfe eines Mikrocontrollers

Bild 3: Das Board „steht unter Strom“.

Mikrocontrollers Bild 3: Das Board „steht unter Strom“. Mikro noch bei verschiedenen Projekten zum Einsatz kommen.

Mikro noch bei verschiedenen Projekten zum Einsatz kommen. Falls mehr Rechenleistung oder eine höhere An- zahl von Ports benötigt wird, kann der Arduino Mega (Bild 5) eingesetzt werden. Dieser ist wesentlich grö- ßer als der Uno und bietet zusätzliche Pins für um- fangreichere Projekte. Ansonsten existiert noch eine Fülle weiterer Bau- formen, wie etwa das runde Lillypad oder der Esplora, der bereits über mehrere fest verdrahtete Taster, Sen- soren etc. verfügt. Weitere Details zu den einzelnen Boards finden sich unter [3].

Schneller Einstieg mit der Arduino-Entwicklungsumgebung

Neben der standardisierten Hardware liegt der große Vorteil des Arduino-Systems in der benutzerfreundli- chen IDE. Im Gegensatz zu einer klassischen „Tool- Chain“ kann diese ohne umfangreiche Vorkenntnisse bedient werden. Außerdem erfordert sie keine lang- wierige Installation. Die ersten Programme können so direkt nach dem Start der Entwicklungsumgebung auf den Mikrocontroller geladen werden. Die aktuelle Version der IDE kann gratis herunter- geladen werden unter: arduino.cc/en/Main/Software Es stehen verschiedene Versionen für die gebräuch- lichsten Betriebssysteme (Windows, Mac OS und Linux) zur Verfügung. Für Linuxfreunde ist die Arbeit unter Ubuntu besonders einfach, da bereits bei der System- installation ein Download-Icon im APPs-Bereich zur Verfügung gestellt wird. Die Bedienoberfläche der Ubuntu-IDE ist weitgehend identisch mit der Win- dows-Variante, sodass die hier dargestellte Vorgehens- weise auch für Ubuntu anwendbar ist.

36 | So funktioniert’s

36 | So funktioniert’s Bild 6: Typisches Arduino-Verzeichnis Bild 7: Icon für den Start der Arduino-IDE

Bild 6: Typisches Arduino-Verzeichnis

| So funktioniert’s Bild 6: Typisches Arduino-Verzeichnis Bild 7: Icon für den Start der Arduino-IDE Bild

Bild 7: Icon für den Start der Arduino-IDE

Bild 7: Icon für den Start der Arduino-IDE Bild 8: Leeres IDE-Fenster Bild 9: Aufforderung zur

Bild 8: Leeres IDE-Fenster

für den Start der Arduino-IDE Bild 8: Leeres IDE-Fenster Bild 9: Aufforderung zur Treiberinstallation Bild 10:

Bild 9: Aufforderung zur Treiberinstallation

IDE-Fenster Bild 9: Aufforderung zur Treiberinstallation Bild 10: Auswahl des COM-Ports www.elvjournal.de Unter

Bild 10: Auswahl des COM-Ports

www.elvjournal.de

Unter Windows liegen die vollständigen Programm- pakete als komprimierte ZIP-Archive vor und können in ein beliebiges Verzeichnis extrahiert werden (Bild 6). Das Verzeichnis enthält dann alle zur Programmie- rung erforderlichen Komponenten. Weiterhin werden unter „examples“ noch verschiedene Beispielprogram- me mitgeliefert. Darüber hinaus können die Möglichkeiten des Ar- duinos mit sogenannten Bibliotheken ergänzt werden. Mehr zu diesem Thema findet sich in späteren Beiträ- gen dieser Artikelserie.

Nach dem Entpacken des ZIP-Archivs steht im Ver- zeichnis

\arduino-1.0.x.

das Startprogramm für die IDE, arduino.exe, zur Ver- fügung (Bild 7). Nach erfolgreichem Start erscheint kurz ein In- formationsfenster mit den üblichen Angaben zu den Eckdaten der verwendeten Programmversion (Bild 8). Anschließend wird die Oberfläche der IDE angezeigt. Jetzt kann der Arduino über ein USB-Kabel mit dem PC verbunden werden.

TIPP III: Das USB-Kabel sollte nicht zu lang sein. Kabellängen von mehr als 0,5 m können zu Übertragungsproblemen führen. Insbesonde- re der Arduino Micro reagiert auf längere Kabel sehr empfindlich und verweigert unter Umstän- den den Verbindungsaufbau.

Der Arduino meldet sich mit einer Aufforderung zum Installieren eines Treibers (Bild 9). Diese Installation ist nach wenigen Schritten abgeschlossen und nimmt nur einige Minuten Zeit in Anspruch. Falls es dabei wider Erwarten zu Problemen kommen sollte, finden sich unter [4] Hinweise zur Fehlerbehebung. Nach erfolgreicher Treiberinstallation kann mit der IDE weitergearbeitet werden. Zunächst muss die richtige Arduino-Boardvariante ausgewählt werden. Dies erfolgt unter den Menüein- trägen „Tools“ und dann „Board“. Dann ist die Selektion des verwendeten virtuel- len COM-Ports erforderlich. Meist ist dies die letzte Position in der Liste. Falls mehrere Ports angeboten werden, hilft das Durchtesten aller angezeigten COM- Nummern (Bild 10). Alle für die Programmentwicklung notwendigen Steuersymbole finden sich unterhalb der Menüleis- te am oberen Rand der IDE. Diese Icons werden im nächsten Beitrag der Artikelserie genauer erläutert. Zunächst sind nur die für das Laden eines ersten Pro- gramms erforderlichen Icons wichtig. Mit dem Symbol „OPEN“ wird ein bereits vorhan- denes Programm geöffnet. Bitte wählen Sie hierfür den Sketch „blink.ino“. Dieser ist unter examples\01.Basics\ Blink zu finden. Nach dem Laden des Programms sollte die IDE so aussehen wie in Bild 11. Mit dem Button „UPLOAD“ wird das Programm in den Speicher des Mikrocontrollers übertragen. Die mit

wie in Bild 11 . Mit dem Button „UPLOAD“ wird das Programm in den Speicher des
wie in Bild 11 . Mit dem Button „UPLOAD“ wird das Programm in den Speicher des

So funktioniert’s | 37

Rx/Tx bezeichneten LEDs leuchten dabei in unregel- mäßigen Abständen auf und zeigen den Datenverkehr auf der seriellen Schnittstelle an. Gleichzeitig wird am PC die Meldung Uploading to I/O Board eingeblendet.

Der Abschluss der Übertragung wird mit der Nach- richt Done Uploading angezeigt. Danach beginnt die LED „L“ regelmäßig zu blinken und die beiden Rx-/Tx-LEDs erlöschen (Bild 12).

Nach Abschluss der Datenübertragung wird also ein Reset durchgeführt und automatisch mit der Ausfüh- rung des Programms „Blink“ begonnen. Damit wurde bereits ein erstes Programm auf einen Mikrocontroller übertragen, und weiteren Projekten zum Thema Mikrocontroller und Arduino steht nichts mehr im Wege.

TIPP IV: Weitere Details zur Inbetriebnahme und zur Fehlerbeseitigung finden sich auch im Mikrocontroller-Onlinekurs [5].

Ausblick

Im nächsten Artikel zu dieser Serie werden die Details zur Arduino-Entwicklungsumgebung genauer bespro- chen. Daneben wird das Thema Fehlersuche und -be- seitigung im Vordergrund stehen. Im Praxisteil entstehen dann bereits erste eigene Programme wie ein Alarmanlagensimulator oder eine Morsesignalbake.

wie ein Alarmanlagensimulator oder eine Morsesignalbake. Bild 11: Blink.ino ist geladen. Weitere Infos: [1] G.
wie ein Alarmanlagensimulator oder eine Morsesignalbake. Bild 11: Blink.ino ist geladen. Weitere Infos: [1] G.

Bild 11: Blink.ino ist geladen.

oder eine Morsesignalbake. Bild 11: Blink.ino ist geladen. Weitere Infos: [1] G. Spanner: AVR-Mikrocontroller in C
Weitere Infos: [1] G. Spanner: AVR-Mikrocontroller in C programmieren, Franzis-Verlag, 2010 [2] G. Spanner: Arduino
Weitere Infos:
[1] G. Spanner: AVR-Mikrocontroller in C programmieren,
Franzis-Verlag, 2010
[2] G. Spanner: Arduino – Schaltungsprojekte für Profis,
Elektor-Verlag, 2012
[3] arduino.cc/en/Main/Products
[4] forum.arduino.cc/
[5] Mikrocontroller-Onlinekurs,
Franzis-Verlag, exklusiv für ELV, 2011
Bild 12: Die LED „L“ blinkt im Sekundentakt. Empfohlene Produkte/Bauteile: Best.-Nr. Preis Arduino-Uno-Platine R3
Bild 12: Die LED „L“ blinkt im Sekundentakt.
Empfohlene Produkte/Bauteile:
Best.-Nr.
Preis
Arduino-Uno-Platine R3
JY-10 29 70
€ 29,95
Arduino Micro
JY-10 97 74
€ 24,95
Arduino-Mega-2560-Platine
JY-10 69 18
€ 49,95
Hama-USB-Hub, 7fach mit Netzteil
JY-08 25 54
€ 24,95
USB-2.0-Verbindungskabel A auf B
JY-09 55 56
0,95

Alle Infos zu den Produkten/Bauteilen finden Sie im Web-Shop.

Preisstellung August 2013 aktuelle Preise im Web-Shop

62 So funktioniert‘s Arduino verstehen und anwenden Teil 2: Die Programmierumgebung www.elvjournal.de www.elvjournal.de

62 So funktioniert‘s

Arduino verstehen und anwenden

Teil 2: Die Programmierumgebung

62 So funktioniert‘s Arduino verstehen und anwenden Teil 2: Die Programmierumgebung www.elvjournal.de www.elvjournal.de

www.elvjournal.de

www.elvjournal.de

So funktioniert‘s 63

So funktioniert‘s 63 Im zweiten Teil der Beitragsreihe zum Thema Arduino // blink wird die IDE

Im zweiten Teil der Beitragsreihe zum Thema Arduino

// blink

wird die IDE (Integrated Development Environment), also die sogenannte Entwicklungsumgebung, genau-

int led = 13;

er betrachtet.

void setup()

In den Abschnitten

{

pinMode(led, OUTPUT);

· Die Entwicklungsumgebung auf dem PC,

}

· „Arduino-Processing“ und „C“: ein Vergleich,

· Die Funktionen der IDE,

void loop()

· Die Standard-Beispielprogramme der IDE,

{

digitalWrite(led, HIGH);

· Fehlerbeseitigung

delay(1000);

werden zunächst alle wichtigen Eigenschaften dieser

digitalWrite(led, LOW);

Entwicklungsumgebung dargestellt.

delay(1000);

 

}

Abschließend entstehen dann mit den Abschnitten

· Der Alarmanlagensimulator,

· Intuitive Programmierung: der Arduino sendet Morsesignale erste eigene Programme.

Die Entwicklungsumgebung auf dem PC

Hier kann man ohne große Vorkenntnisse schon vermuten, dass eine Leuchtdiode (LED) in einem bestimmten Rhythmus geschaltet wird. Ein entsprechendes Standard-C-Programm sieht da schon wesentlich kryp- tischer aus:

// blink

Die Programmierung des Arduino erfolgt über eine speziell für die Arduino-Boards entwickelte IDE. Diese Entwicklungsumgebung ist mit Sicherheit ei- ner der wesentlichen Erfolgsfaktoren des Arduino-

#include <avr/io.h> #include <util/delay.h>

Projektes. Die Oberfläche kann einerseits sehr intuitiv be-

int main(void)

dient werden und erleichtert daher den Einstieg in die Welt der Mikrocontrollerprogrammierung ganz erheblich. Andererseits basiert sie auf der im Con-

{

DDRB = 0b1; while (1) {

PORTB|=(1<<0);

trollerbereich am weitesten verbreiteten Program-

miersprache „C“.

PORTB&=~(1<<0);

Anders als beispielsweise beim Einsatz von BASCOM

kann der Anwender später somit problemlos auf

}

professionelle IDEs wie etwa das ATMEL-Studio um-

return 0;

steigen. Die mit der Arduino-Umgebung erlernten

}

Befehle und Strukturen können dort weitestgehend wiederverwendet werden. Das bereits erlernte Pro- grammierfachwissen ist also nicht verloren. Für die Programmierung der Arduino-Boards kommt „Processing“ zum Einsatz. Dabei handelt es sich aber eben nicht um eine spezielle Anfänger-Programmier- sprache, sondern prinzipiell um klassisches „C“. Um den Einstieg zu erleichtern, wurden aber einige spe- zielle Prozeduren und Routinen implementiert. Die bei vielen Einsteigern gefürchtete „Unlesbar- keit“ von C-Code wurde so wesentlich entschärft.

Insbesondere die für C typischen Bitmanipulationen und die logischen Operatoren (|, &, ~, << etc.) lassen den embedded C-Code schwer lesbar erscheinen. Andererseits wird aber auch bereits bei diesem einfachen Programmbeispiel die enge Verwandtschaft zwischen Arduino-Proces- sing und C deutlich. In der Tat ist es sogar so, dass sich im Hintergrund der einfachen Arduino-IDE ein kompletter AVR-GCC-Compiler verbirgt. Die simplen „Einstiegsanweisungen“ wie „digitalWrite()“ sind dabei nur vorgefertigte Funktionen und Unterprogramme von der gleichen Art, wie sie in späteren Abschnitten zu dieser Artikelreihe noch näher erläutert werden.

„Arduino-Processing“ und „C“:

ein Vergleich

Der direkte Vergleich zeigt die Ähnlichkeit von Pro- cessing mit C. Es wird aber auch deutlich, dass Pro- cessing-Programme für Einsteiger wesentlich leichter zu lesen sind. Die in C so beliebten Abkürzungen wer- den vermieden, sie werden durch wesentlich leichter verständliche Anweisungen ersetzt. So ist ein einfaches Arduino-Programm mit Grund- kenntnissen in Englisch bereits recht gut lesbar:

Die Funktionen der IDE

Wie bereits im ersten Teil dieser Artikelserie erwähnt, kann die jeweils aktuelle Version der Entwicklungsumgebung kostenlos unter http://arduino.cc/en/Main/Software heruntergeladen werden [1]. Nach dem Download liegt das komplette Programmpaket als kompri- miertes ZIP-Archiv vor und kann in ein beliebiges Verzeichnis extrahiert werden (Bild 1). Das Verzeichnis enthält dann alle zur Programmierung des Arduinos erforderlichen Komponenten.

64 So funktioniert‘s TIPP I: Beachten Sie, dass die IDE-Releases oft nicht ab- wärtskompatibel sind.

64 So funktioniert‘s

TIPP I:

Beachten Sie, dass die IDE-Releases oft nicht ab- wärtskompatibel sind. Das heißt, ein Sketch, der mit Version 1.0.3 tadellos funktionierte, kann bei- spielsweise mit der Version 1.0.5 Probleme berei- ten. Man sollte also immer im Auge behalten, wel- cher Sketch mit welcher IDE-Release erstellt wurde.

Bild 1: Das Arduino-Verzeichnis

Bild 1: Das Arduino-Verzeichnis

Darüber hinaus sind unter „examples“ noch verschiedene Beispiel- programme verfügbar.

Das Unterverzeichnis „libraries“ enthält nützliche Programmbiblio- theken, die unter anderem die Ansteuerung von

· Modellbauservos.

· Schrittmotoren.

· LCD-Anzeigen.

· externen EEPROM-Speichern

· und vielem mehr …

unterstützen. Dieses Verzeichnis ist für den Anwender auch deshalb von besonderer Bedeutung, da hier später weitere nützliche Software-Bib- liotheken eingestellt werden können. Weitere Details dazu finden sich z. B. im Mikrocontroller-Onlinekurs [2]. Der Start der IDE erfolgt über die Datei arduino.exe. Natürlich kann man sich dazu auch eine Verknüpfung auf dem Desktop erstellen. Nach dem Starten meldet sich das Programm mit einem Infobild (Bild 2). Danach wird die Programmierumgebung angezeigt (Bild 3). Da das erste, noch leere Programm noch keinen Namen hat, wird ein Default- Wert verwendet:

sketch_MonatTagx X steht dabei für einen Buchstaben aus der fortlaufenden Buchstaben- reihe x = a, b, c … für den 1., 2., 3. … neuen Sketch des aktuellen Tages.

Zur Info:

Anwendungsprogramme werden im Arduino-Umfeld auch als „Sketch“ bezeichnet.

Die für die Programmierung eines Arduino erforderlichen nächsten Schritte sind bereits aus dem ersten Beitrag bekannt:

1. Auswahl der richtigen Arduino-Board-Version 2. Auswahl des verwendeten virtuellen COM-Ports Sollte es beim Start der IDE unerwartete Probleme geben, so kann man im Arduino-Online-Forum kompetente Hilfe erhalten [3].

man im Arduino-Online-Forum kompetente Hilfe erhalten [3] . Bild 2: Start der Programmierumgebung mit den Credentials

Bild 2: Start der Programmierumgebung mit den Credentials

. Bild 2: Start der Programmierumgebung mit den Credentials Bild 3: Programmierumgebung mit Default-Einstellungen Die

Bild 3: Programmierumgebung mit Default-Einstellungen

Die Funktionen der IDE

In Ergänzung zum ersten Beitrag sollen hier nun auch die anderen Funktionen der IDE detaillierter darge- stellt werden. Die Bedeutungen der Symbole am oberen Rand der IDE können Bild 4 entnommen werden. Die zum Teil bereits im ersten Beitrag verwende- ten Icons haben die folgenden Funktionen:

· Prüfen/Compilieren Mit dieser Schaltfläche kann der aktuell geöffne- te Sketch compiliert, d. h. in Maschinensprache übersetzt werden. Dies ist insbesondere nützlich, wenn man ein Programm z. B. auf Syntaxfehler hin testen möchte, ohne dass ein Arduino-Board mit dem PC verbunden ist.

· Aktuellen Sketch zum Controller senden Dieses Icon compiliert und sendet den aktuellen Sketch direkt zum Arduino. Ein vorheriges, separa- tes Übersetzen ist also nicht erforderlich.

· Neuer Sketch Hier kann ein neuer Sketch begonnen werden.

· Sketch öffnen Mit diesem Icon wird ein bereits abgespeicherter Sketch in die IDE geladen.

· Aktuellen Sketch speichern Das Speichern eines Sketches erfolgt mit diesem Icon.

www.elvjournal.de

· Seriellen Datenmonitor starten Hier kann der serielle Datenmonitor gestartet wer- den. Er dient zur Kommunikation zwischen Cont- roller und PC und wird häufig auch zu Test- und Prüfzwecken eingesetzt.

Die Standard-Beispielprogramme der IDE

Die Standard-IDE enthält bereits eine umfangreiche Sammlung von Beispielprogrammen (Bild 5). Es ist sicher immer eine gute Idee, diese Beispiel- programme genauer unter die Lupe zu nehmen. Sehr häufig findet sich hier bereits eine geeignete Basis für neue Projekte. Die Erfahrung zeigt sogar, dass auch der fortgeschrittene Programmierer bei der Ent- wicklung komplexer Projekte häufig einen Einstieg über diese Beispielprogramme findet. Die nachfolgenden ersten eigenen Programme werden auch aus diesen Standardbeispielen abgelei- tet werden. Wie Bild 1 zeigt, kann man die Beispiel- programme auch problemlos in der Verzeichnisstruk- tur wiederfinden.

Fehlerbeseitigung

Bereits im ersten Beitrag wurde gezeigt, wie man ei- nen Sketch auf den Arduino lädt. Im Erfolgsfall wird dies mit einer Meldung (Bild 6) quittiert. Obwohl die Arduino-IDE sehr benutzerfreundlich ist, können natürlich Probleme nicht immer ausge- schlossen werden. Der häufigste Fehler ist die Aus- wahl des falschen seriellen Ports. In diesem Fall wird eine Fehlermeldung ausgegeben (Bild 7). An zweiter Stelle der Fehlerstatistik steht die Aus- wahl des falschen Boardtyps. In diesem Fall sieht die Fehlermeldung so wie in Bild 8 aus. Man erkennt, dass die Fehlermeldungen oft nicht sehr spezifisch sind. Allerdings geben sie in den meisten Fällen doch recht brauchbare Hinweise auf die Ursache des Problems. Neben diesen beiden häufigsten Fehlern treten in der Praxis öfter auch „seltsame“ Fehler ohne de- finierte Ursache auf. Oft hilft es dann, den zuletzt ausgeführten Vorgang noch mal zu starten.

TIPP II Falls der Arduino einmal nicht mehr ansprechbar sein sollte, hilft es oft, die USB-Verbindung zu lö- sen und das Board wieder neu mit dem Computer zu verbinden.

Weitere Tipps und Tricks zur Arbeit mit der IDE sind u. a. in der Literatur zum Arduino-Projekt zu finden [4]. Tiefergehende Informationen zur Programmie- rung und zum Controller selbst finden sich in [5].

Der Alarmanlagensimulator

Das Arbeiten mit der IDE sollte nun keine Schwierig- keiten mehr bereiten. Es ist jetzt also an der Zeit, erste eigene Sketche zu entwickeln. Hierfür bietet sich der Aufbau eines Alarmanla- gensimulators an. Solche Geräte werden durchaus auch in der Praxis eingesetzt. Sie bestehen letztend- lich nur aus einer LED (Bild 9), die in regelmäßigen

So funktioniert‘s 65

LED (Bild 9) , die in regelmäßigen So funktioniert‘s 65 Bild 4: Symbole der IDE Bild
LED (Bild 9) , die in regelmäßigen So funktioniert‘s 65 Bild 4: Symbole der IDE Bild

Bild 4: Symbole der IDE

Bild 5: Die Standard-Beispielprogramme

4: Symbole der IDE Bild 5: Die Standard-Beispielprogramme Bild 6: Upload o. k. Bild 7: Fehlermeldung
4: Symbole der IDE Bild 5: Die Standard-Beispielprogramme Bild 6: Upload o. k. Bild 7: Fehlermeldung

Bild 6: Upload o. k.

IDE Bild 5: Die Standard-Beispielprogramme Bild 6: Upload o. k. Bild 7: Fehlermeldung bei falschem Port

Bild 7: Fehlermeldung bei falschem Port

66 So funktioniert‘s Bild 8: Fehlermeldung bei falsch gewählter Boardversion Bild 9: Geeignete LEDs für

66 So funktioniert‘s

66 So funktioniert‘s Bild 8: Fehlermeldung bei falsch gewählter Boardversion Bild 9: Geeignete LEDs für

Bild 8: Fehlermeldung bei falsch gewählter Boardversion

Bild 8: Fehlermeldung bei falsch gewählter Boardversion Bild 9: Geeignete LEDs für Mikrocontroller-Schaltungen Bild

Bild 9: Geeignete LEDs für Mikrocontroller-Schaltungen

Bild 9: Geeignete LEDs für Mikrocontroller-Schaltungen Bild 10: Aufbau zum Alarmanlagensimulator Abständen kurz

Bild 10: Aufbau zum Alarmanlagensimulator

Abständen kurz aufblitzt. Wird ein solches Gerät an

geeigneter Stelle eingebaut, beispielsweise in einem Fahrzeug, so entsteht der Eindruck einer scharf ge- schalteten Alarmanlage. Zumindest Gelegenheitsdie- be lassen sich damit von einem Einbruch abschrecken. Neben einem Arduino Micro werden hierfür noch vier weitere Bauelemente benötigt:

1. Rote LED

2. 150- -Widerstand

3. Ca. 5 cm Klingeldraht

4. Ein lötfreies Steckbrett

Der Aufbau der kleinen Schaltung ist in Bild 10 zu sehen.

Das zugehörige Programm sieht so aus:

// Alarmanlagensimulator

2. Der Pin für die LED wurde von 13 auf 2 geändert. Damit ist nun die dort angeschlossene externe LED aktiv. 3. Die Werte in der Funktion „delay“ wurden von jeweils 1000 auf 100 bzw. 3000 geändert. Damit wird aus dem regelmäßigen Blinken ein kurzes Aufblitzen.

Wenn die Schaltung korrekt aufgebaut wurde und der neue Sketch ge- laden wird, blitzt die angeschlossene LED im Abstand von jeweils 3 Se- kunden kurz auf. Der Alarmanlagensimulator ist einsatzbereit (Bild 11). Will man die elektronischen Komponenten nicht einzeln besorgen, so kann man beispielsweise auf das Lernpaket „Mikrocontroller in C pro- grammieren“ [6] zurückgreifen. In diesem Lernpaket sind neben einem Arduino auch alle weiteren für den Einstieg in die Mikrocontroller-Welt erforderlichen Bauelemente (Widerstände, Kondensatoren, LEDs etc.) enthalten. Darüber hinaus finden sich in diesem Lernpaket weitere inte- ressante Komponenten wie etwa ein 4-stelliges 7-Segment-Display oder eine LED-Punktmatrix für die mikrocontrollergesteuerte Anzeige von Zahlen und Zeichen (Bild 12).

int led = 2;

 

Intuitive Programmierung:

void setup()

der Arduino sendet Morsesignale

{ pinMode(led, OUTPUT);

}

void loop() { digitalWrite(led, HIGH);

delay(100);

digitalWrite(led, LOW);

delay(3000);

}

Hier können die bereits erworbenen Kenntnisse praxisnah eingesetzt werden. Die Aufgabe besteht darin, den Alarmanlagensimulator in eine automatische SOS-Bake umzubauen. Das heißt, die LED soll zunächst 3x kurz, dann 3x lang und schließlich wieder 3x kurz aufblinken. Dann soll sich die Signalfolge wiederholen. Versuchen Sie zunächst, den Code für den Alarmanlagensimulator so abzuändern, dass die LED das gewünschte Signal sendet. Anschließend können Sie dann Ihre Lösung mit dem folgenden Musterprogramm ver- gleichen.

Man kann das Programm in ein leeres Sketchfenster

// SOS

eintippen oder man modifiziert den bereits bekann- ten Blink-Sketch. Die Unterschiede zum Blink-Sketch bestehen in den folgenden Änderungen:

int led = 2;

1. Die Kommentarzeilen, welche mit „//“ beginnen, wurden angepasst.

void setup() { pinMode(led, OUTPUT);

www.elvjournal.de

}

void loop() { digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(1000);

digitalWrite(led, HIGH); delay(400); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(400); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(400); digitalWrite(led, LOW); delay(1000);

digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(1000);

delay(2000);

}

Natürlich ist dies nicht die eleganteste Methode, aber man sieht, dass so bereits ohne genaue Kenntnis der verwendeten Programmiersprache eigene Projekte realisierbar sind. In späteren Beiträgen zu dieser Rei- he wird natürlich noch genauer darauf eingegangen, wie man ein derartiges Programm wesentlich effizi- enter implementieren kann.

So funktioniert‘s 67

effizi- enter implementieren kann. So funktioniert‘s 67 Bild 11: Der Alarmanlagensimulator ist scharf geschaltet.
effizi- enter implementieren kann. So funktioniert‘s 67 Bild 11: Der Alarmanlagensimulator ist scharf geschaltet.

Bild 11: Der Alarmanlagensimulator ist scharf geschaltet.

67 Bild 11: Der Alarmanlagensimulator ist scharf geschaltet. Bild 12: Zahlendarstellung mit dem Dot-Matrix-Display aus

Bild 12: Zahlendarstellung mit dem Dot-Matrix-Display aus dem Lernpaket „AVR-Mikrocont- roller in C programmieren“ [6]

Empfohlene Produkte/Bauteile:

Best.-Nr.

Preis

Arduino Micro

JQ-10 97 74

24,95

Mikrocontroller-Onlinekurs

JQ-10 20 44

99,–

 

LEDs, z. B. Kemo Leuchtdioden, ca. 30 Stück

JQ-10 66 60

1,65

Widerstände, Kemo-Sortiment, ca. 200 Stück

JQ-10 66 57

1,85

Steckbretter sind in verschiedenen Franzis Lernpaketen enthalten oder im Web- Shop unter www.elv.de/experimentierboards.html erhältlich.

 

Alle ARDUINO-Produkte wie Mikrocontroller-Platinen, Shields, Fachbücher und Zubehör finden Sie unter:

www.arduino.elv.de

Preisstellung November 2013 – aktuelle Preise im Web-Shop.

Dennoch erfüllt das Programm seinen Zweck. Ver- wendet man als LED einen besonders lichtstarken Typ, so kann die Schaltung beispielsweise in See- oder Bergnot durchaus nützlich sein. Weitere Anwendungen und Projekte mit dem Arduino wie verschiedene LED-Effekte etc. finden sich beispielsweise in [2] und [6].

Ausblick

Nachdem nun die Arbeit mit der Arduino-IDE prob- lemlos von der Hand geht, wird im nächsten Beitrag zu dieser Reihe die eigentliche Programmiersprache im Vordergrund stehen. Dabei sollen dann neben ei- nigen grundlegenden Betrachtungen zur Programm- struktur insbesondere die Arduino-spezifischen Be- fehle besprochen werden.

die Arduino-spezifischen Be- fehle besprochen werden. Weitere Infos: [1] http://arduino.cc ist die offizielle
die Arduino-spezifischen Be- fehle besprochen werden. Weitere Infos: [1] http://arduino.cc ist die offizielle
die Arduino-spezifischen Be- fehle besprochen werden. Weitere Infos: [1] http://arduino.cc ist die offizielle

Weitere Infos:

[1] http://arduino.cc ist die offizielle Homepage des Arduino-Projektes [2] Mikrocontroller-Onlinekurs, Franzis-Verlag, exklusiv für ELV, 2011, Best.-Nr.: JQ-10 20 44 [3] http://forum.arduino.cc [4] G. Spanner: Arduino – Schaltungsprojekte für Profis, Elektor-Verlag, 2012, Best.-Nr.: JQ-10 94 45 [5] G. Spanner: AVR-Mikrocontroller in C programmieren, Franzis-Verlag, 2010, Best.-Nr.: JQ-09 73 52 [6] Lernpaket „AVR-Mikrocontroller in C programmieren“, Franzis-Verlag, 2012, Best.-Nr.: JQ-10 68 46

72 So funktioniert‘s Arduino verstehen und anwenden Teil 3: Einführung in die Programmierung www.elvjournal.de

72 So funktioniert‘s

Arduino verstehen und anwenden

Teil 3: Einführung in die Programmierung

Arduino verstehen und anwenden Teil 3: Einführung in die Programmierung www.elvjournal.de www.elvjournal.de

www.elvjournal.de

www.elvjournal.de

Der dritte Teil der Artikelreihe zum Arduino führt in die Struktur der Programmiersprache „Processing“ ein. Die Themen in diesem Beitrag sind:

· Die Grundstruktur eines Processing-Programms

· Praxisbeispiel LED-Ansteuerung:

12-Kanal-Lauflicht

Im Praxisteil wird diesmal bereits ein etwas kom- plexerer Aufbau realisiert. Mit 12 LEDs entsteht ein flexibel einsetzbares Lauflicht. Als Anwendungs- übung können verschiedene Laufgeschwindigkeiten und unterschiedliche Lichtmuster programmiert werden.

Die Grundstruktur eines Processing- Programms

Im Folgenden soll das schon aus dem ersten Beitrag bekannte Programm „Blink“ genau analysiert werden.

So funktioniert‘s 73

„Blink“ genau analysiert werden. So funktioniert‘s 73 Es ist sicher leicht einzusehen, dass durch solche

Es ist sicher leicht einzusehen, dass durch solche Definitionen die Programmierarbeit erheblich erleichtert wird. Kommen im Laufe der Programmentwicklung mehrere LEDs ins Spiel, so kann man sich deren Pin-Nummern kaum mehr merken. Sinnvolle Bezeichnungen dagegen können wesentlich leichter im Kopf behalten werden.

Die Anweisung void setup() ist eine Spezialität von Processing. Hier wird unter anderem festgelegt, welche Aufgaben die einzelnen Arduino-Pins erfüllen sollen.

In unserem Fall wird der oben definierte ledPin als Ausgang genutzt:

pinMode(ledPin, OUTPUT);

In einem Processing-Sketch muss immer auch die Anweisung void setup() enthalten sein, selbst wenn sie überhaupt keine Definitionen enthält. Durch ihren Aufruf werden nämlich verschiedene interne Zuord- nungen ausgeführt, die die Arbeit mit dem Arduino erleichtern.

// Blink: Using LED „L“

Mit

void loop() startet das Hauptprogramm. Typisch für Mikrocontroller ist, dass das

Hauptprogramm praktisch immer innerhalb einer Endlosschleife („loop“)

abläuft. Da ein Mikrocontroller nicht über ein eigenes Betriebssystem verfügt, würde er am Ende eines Programms einfach stehenbleiben oder

undefinierte Aktionen ausführen. Erst nach einem Reset könnte die

sinnvolle Abarbeitung von Befehlen wieder aufgenommen werden.

}

Um dieses Verhalten zu verhindern, muss das Hauptprogramm also

in einer Endlosschleife ablaufen, die dafür sorgt, dass der Prozessor so lange arbeitet, bis die Betriebsspannung abgeschaltet wird.

Mit der Anweisung

digitalWrite(ledPin, HIGH);

wird nun der ledPin auf „HIGH“, d. h. hohes Potential, in unserem Fall

auf 5 V geschaltet. Damit beginnt die LED zu leuchten.

}

Mit der Anweisung

Die erste Zeile // Blink: Using LED „L“ stellt einen sogenannten Kommentar dar. Kommentare werden durch den doppelten Slash „//“ gekennzeichnet. Der nach diesem Zeichen ste- hende Text wird vom Compiler nicht beachtet. Er dient also nur dazu, Programme leichter lesbar zu gestalten.

TIPP I: Nicht zu sparsam mit Kommentaren um- gehen! Langfristig sind nur gut kommentierte Programme wirklich nützlich.

Die nächste Zeile int ledPin = 13;

definiert den Pin 13 als „ledPin“. Damit kann man nun überall im Sketch ledPin schreiben, wenn der Pin 13 gemeint ist.

// Definitions

delay(1000);

erhält der Prozessor den Auftrag, 1000 ms = 1 s zu warten.

Schließlich wird mit digitalWrite(ledPin, LOW); die LED wieder ausgeschaltet und das Spiel beginnt nach einer Pause von 1 s von vorne, da wir uns ja in einer Endlosschleife befinden.

Die LED blinkt also nun mit einer Periodendauer von 2 s oder einer Frequenz von 0,5 Hz. Im Projekt „Alarmanlagensimulator“ im letzten Beitrag wurde ja bereits gezeigt, wie man die Blinkfrequenz und -dauer den gegebenen Erfordernissen anpassen kann.

Praxisbeispiel:

Lauflicht für Modellflughäfen oder -eisenbahnen

Wie bereits beim Alarmanlagensimulator werden auch hier externe LEDs verwendet. Nachdem bislang aber immer mit nur einer externen LED gearbeitet wurde, soll der Arduino nun mehrere LEDs steuern. Mit 12 LEDs kann bereits ein eindrucksvolles Lauflicht aufgebaut wer- den. Derartige Lauflichter sind z. B. auf den Landebahnen von Groß- flughäfen oder an Autobahnbaustellen zu finden. Dort soll der laufende

74 So funktioniert‘s Bild 1: LED-Lauflicht Lichtpunkt Flug- oder Fahrzeugen den richtigen Weg weisen. Aber

74 So funktioniert‘s

74 So funktioniert‘s Bild 1: LED-Lauflicht Lichtpunkt Flug- oder Fahrzeugen den richtigen Weg weisen. Aber auch

Bild 1: LED-Lauflicht

Lichtpunkt Flug- oder Fahrzeugen den richtigen Weg weisen. Aber auch in Partykellern, Diskotheken oder auf Volksfesten erfreuen sich entsprechende Licht- effekte großer Beliebtheit. Jede der 12 LEDs bekommt ihren eigenen Vor- widerstand. Prinzipiell wäre es auch möglich, mit einem einzigen Widerstand auszukommen. Dieser müsste dann in die gemeinsame Masseleitung aller Dioden eingesetzt werden. Falls immer nur eine LED aktiv sein soll, ist die Lösung mit nur einem Vorwi- derstand durchaus akzeptabel. Allerdings ergibt sich ein Problem, wenn mehr als eine LED leuchten soll. In diesem Fall müssen sich alle aktiven LEDs sozusagen einen Widerstand teilen. Je mehr LEDs eingeschaltet werden, desto größer wäre der Gesamtstrom durch den Widerstand. Dies würde aber natürlich zu einem immer höheren Spannungs- abfall am Widerstand führen, so dass die verbleiben- de LED-Spannung immer weiter abnehmen würde. Je mehr LEDs also eingeschaltet würden, desto dunkler würde jede einzelne LED werden. Wird für jede LED ein eigener Vorwiderstand verwendet, tritt dieser meist unerwünschte Effekt nicht auf. Weitere Details und Informationen zum Ansteuern von LEDs finden sich auch in [1]. Bild 1 zeigt den Aufbau.

TIP II: Falls eine oder mehrere LEDs nicht leuchten, sind sie wahrscheinlich falsch herum eingebaut. Ein Umpolen der entsprechenden LEDs behebt das Problem.

Vorwiderstände und Low-Current-LEDs

Noch ein Wort zur Berechung der Vorwiderstände. Die meisten einfachen LEDs benötigen einen Strom von ca. 20 mA. Der Spannungsabfall über einer roten LED beträgt immer etwa 1,7 V. Damit ergibt sich:

Rv = (5 V – 1,7 V) / 20 mA =

www.elvjournal.de

165

Mit den gewählten 220- -Widerständen (Farbringfolge Rot-Rot- Braun) liegt man also auf der sicheren Seite. Will man Lichtmuster erzeugen, in welchen alle 12 LEDs gleichzeitig betrieben werden, so ergibt sich ein Gesamtstrom von 12 x 20 mA = 240 mA. Dies stellt bereits eine erhebliche Belastung für den USB-Port dar. In diesem Fall sollte man darüber nachdenken, den Arduino mit einem externen Netzteil zu betreiben. Eine andere Möglichkeit wäre die Verwendung von sogenannten Low- Current-LEDs. Diese benötigen bei sehr guten Helligkeitswerten nur ei- nen Strom von 4 mA. Die Vorwiderstände ergeben sich in diesem Falle zu:

Rv = (5 V – 1,7 V) / 4 mA = 825 Mit 1-k -Widerständen erreicht man immer noch eine gute Helligkeit und der Gesamtstromverbrauch bei 12 aktiven LEDs reduziert sich auf unter 50 mA.

Das Steuerprogramm zum Lauflichteffekt

Um den Code etwas kompakter zu gestalten, soll hier kurz auf eine neue Anweisung vorgegriffen werden. Die Anweisung for(int i=a; i<=b; i++) sorgt dafür, dass der nachfolgende Befehlsblock wiederholt ausgeführt wird. Zudem kann die sogenannte Laufvariable i in diesem Befehlsblock zu Steuerzwecken verwendet werden. So werden beispielsweise mit for(int i=1; i<=3; i++) die nachfolgenden Anweisungen 3-mal ausgeführt. Die genaue Be- schreibung, wie diese und andere sogenannte Kontrollstrukturen ar- beiten, folgt im nächsten Beitrag zu dieser Artikelserie. Hier genügt es zunächst zu wissen, dass die „for“-Anweisung zum definierten Wieder- holen von Befehlen angewendet werden kann. Damit sollte das Programm zum Lauflichteffekt keine Verständnis- probleme mehr bereiten:

}

}

}

Im Setup werden zunächst die Ports 2 bis 13 als Ausgänge geschaltet:

void setup()

{

for(int i=2; i<=13; i++) pinMode(i, OUTPUT);

//….

}

Tipp III: Die Digital-Pins 0 und 1 besitzen eine zusätzliche Son- derfunktion. Neben der einfachen Portfunktion dienen sie auch als Ein- und Ausgang für die serielle Schnittstelle. Dies kann bei einigen Anwendungen zu unerwarteten Ergebnissen führen. Es ist daher sinnvoll, diese Ports nicht zu verwenden, solange dies nicht unbedingt erforderlich ist.

Im Hauptprogramm wird dann zunächst mit

digitalWrite(i, HIGH);

// set the LED on

So funktioniert‘s 75

So funktioniert‘s 75 die erste LED in der Kette eingeschaltet. Nach einer Wartezeit von 100 ms

die erste LED in der Kette eingeschaltet. Nach einer

Wartezeit von 100 ms – delay(100); – wird sie wieder ausgeschaltet. Dann folgt die zweite LED, bis sich das

Spiel nach der zwölften LED wiederholt. Auf diese

Weise entsteht der gewünschte Lauflichteffekt.

}

Natürlich ist dies nur eine Möglichkeit, um ein Lauf- licht zu realisieren. Im nächsten Beitrag zu dieser

Artikelreihe lernen Sie die sogenannten Kontroll-

strukturen von C kennen. Damit kann das obenste-

hende LED-Lauflicht-Beispiel elegant und einfach um

weitere interessante Lichteffekte ergänzt werden.

}

Aber auch bei dieser einfachen Version sind wie-

der verschiedene Varianten realisierbar. So können

beispielsweise die folgenden Übungen durchgeführt

werden.

}

1. Verändern Sie die Geschwindigkeit des Lauflichts 2. Programmieren Sie ein sogenanntes Pendel-Lauf- licht. Das bedeutet, dass der Lichtpunkt nicht nur in eine Richtung laufen und dann wieder bei der ersten LED starten soll, sondern dass er hin und her pendelt.

LED-Band

Abschließend soll noch eine weitere Programm-Va- riante vorgestellt werden. Hier wird ein sich in der Länge veränderndes Lichtband erzeugt (Bild 2). In der Praxis werden solche Lichtbänder in ähnli- cher Form häufig für die Anzeige von analogen Mess- werten wie etwa Ladezuständen von Akkumulatoren oder Maschinendrehzahlen eingesetzt. Der Vorteil der einzelnen Vorwiderstände tritt da- bei deutlich zu Tage. Selbst wenn alle 12 LEDs leuch- ten, ist die Helligkeit jeder LED gegenüber der Hellig- keit bei nur einer aktiven LED unverändert.

der Hellig- keit bei nur einer aktiven LED unverändert. Bild 2: Das variable LED-Band in Aktion

Bild 2: Das variable LED-Band in Aktion

}

Ausblick

In diesem Beitrag kam erstmals eine etwas umfangreichere externe Be- schaltung des Arduinos zum Einsatz. Die grundlegende Programmstruk- tur und einige Arduino-spezifische Befehle wurden genauer erläutert. Der nächste Beitrag in der Reihe wird näher auf die Programmierung eingehen und es werden weitere Befehle im Detail vorgestellt. Damit können dann auch komplexere Programme für eigene Projekte erstellt werden.

Empfohlenes Material

Im Mikrocontroller-Onlinekurs [2] werden die hier vorgestellten Grund- lagen weiter vertieft. Das Hardwarepaket zu diesem Kurs enthält ein umfangreiches Bauteilesortiment für den erfolgreichen Einstieg in die Mikrocontrollertechnik. Auch viele Franzis Lernpakete wie etwa „Elektronik“ enthalten geeig- netes Material – wie ein lötfreies Steckbrett, Widerstände, LEDs etc. –, das für den Aufbau von Schaltungen mit dem Arduino Micro gut geeig- net ist.

von Schaltungen mit dem Arduino Micro gut geeig- net ist. Weitere Infos: [1] G. Spanner: Arduino
von Schaltungen mit dem Arduino Micro gut geeig- net ist. Weitere Infos: [1] G. Spanner: Arduino
von Schaltungen mit dem Arduino Micro gut geeig- net ist. Weitere Infos: [1] G. Spanner: Arduino

Weitere Infos:

[1] G. Spanner: Arduino – Schaltungsprojekte für Profis, Elektor-Verlag, 2012, Best.-Nr. J2-10 94 45 [2] Mikrocontroller-Onlinekurs, Franzis-Verlag, exklusiv für ELV, 2011, Best.-Nr. J2-10 20 44

Preisstellung Februar 2014 – aktuelle Preise im Web-Shop

Empfohlene Produkte/Bauteile:

Best.-Nr.

Preis

Arduino-Uno-Platine R3

J2-10 29 70

27,95

USB-2.0-Verbindungskabel A auf B

J2-09 55 56

0,95

Mikrocontroller-Onlinekurs

J2-10 20 44

99,–

 

LEDs, z. B. Kemo Leuchtdioden, ca. 30 Stück

J2-10 66 60

1,65

Widerstände, Kemo-Sortiment, ca. 200 Stück

J2-10 66 57

1,85

Steckbretter sind in verschiedenen Franzis Lernpaketen enthalten oder im Web-Shop unter www.elv.de/experimentierboards.html erhältlich.

Alle ARDUINO-Produkte wie Mikrocontroller-Platinen, Shields, Fachbücher und Zubehör finden Sie unter: www.arduino.elv.de

92 So funktioniert‘s Arduino verstehen und anwenden Teil 4: Programmierpraxis: Befehle, Variablen und Funktionen

92 So funktioniert‘s

Arduino verstehen und anwenden

Teil 4: Programmierpraxis: Befehle, Variablen und Funktionen

verstehen und anwenden Teil 4: Programmierpraxis: Befehle, Variablen und Funktionen www.elvjournal.de www.elvjournal.de

www.elvjournal.de

www.elvjournal.de

Im vierten Teil der Serie „Arduino verstehen und anwenden“ geht es

um den Einstieg in die Programmierpraxis. Hier werden die Strukturen vorgestellt, ohne die keine höhere Programmiersprache auskommt:

· Syntaxelemente

· Konstanten und Variablen

· Operatoren

· Kontrollstrukturen

Wie sonst auch soll in diesem Beitrag die Praxis nicht zu kurz kommen. So werden die einzelnen Abschnitte wieder durch Anwendungsbeispiele für den Arduino ergänzt und vertieft.

Die Sprachelemente von „Processing“ bzw. „C“

Nach dem Durcharbeiten der ersten drei Artikel dieser Serie ist man nun bereits in der Lage, einfachere Programme zu verstehen, zu modifizieren und in den Controllerchip des Arduinos zu laden. Es ist nun also an der Zeit, sich etwas näher mit den Details der Programmierung zu beschäf- tigen. Nachfolgend werden daher die wesentlichen allgemeinen Sprachele- mente von Processing erläutert. Weitere Erklärungen zu speziellen Be- fehlen und Anweisungen folgen in den jeweiligen Anwendungen.

Programm-Struktur

Wie wir in vorhergehenden Artikeln am Beispiel „Blink“ schon gesehen haben, besteht ein Sketch aus zwei Hauptteilen:

1) void setup() 2) void loop() Die Setup-Funktion wird beim Programmstart genau einmal aufgerufen. Hier werden Schnittstellen und Pin-Funktionen etc. initialisiert. Void setup() muss immer im Programm stehen, auch wenn nichts ex- plizit definiert werden muss. Die Routine hat nämlich auch die Aufgabe, Standardfunktionen zur Verfügung zu stellen. In der Endlosschleife loop() wird der eigentliche Programmcode fest- gelegt. Alle in der „loop“ enthaltenen Anweisungen und Befehle werden nacheinander immer wieder ausgeführt, bis der Controller von der Ver- sorgungsspannung getrennt wird.

Einfache Syntaxelemente

Ähnlich wie eine natürliche Sprache ihre Satzzeichen hat, so benötigt auch Processing einen gewissen Grundvorrat an Syntaxelementen:

· Semicolon ; Das Semicolon schließt jeden Befehl ab.

· Geschweifte Klammern {} Geschweifte Klammern fassen einen Befehlsblock zusammen. Bei-

spiele hierzu finden sich weiter unten bei den Kontrollstrukturen.

· Einzeiliger Kommentar

//

Mit dem Doppel-Slash wird ein einzeiliger Kommentar gekennzeichnet.

· Mehrzeiliger Kommentar /*

*/

Erstreckt sich ein Kommentar über mehrere Zeilen muss dieser mit /* begonnen und mit */ beendet werden.

Konstanten und Variablen

Zu den wichtigsten Elementen einer Programmiersprache gehören die Konstanten und Variablen. Konstanten dienen zur Kennzeichnung un- veränderlicher Werte. In Processing wurden einige vordefinierte Kon-

stanten festgelegt. Diese machen den Programmcode einfacher lesbar und erleichtern zudem den Einstieg in die Arduino-Programmierung. Die wichtigsten vordefinierten Konstanten sind:

· TRUE/FALSE FALSE ist als 0 (Null) definiert, TRUE ist ungleich 0.

· HIGH/LOW HIGH bedeutet Logiclevel 1, d. h. ON oder 5 V, LOW bedeutet Logiclevel 0, d. h. OFF oder 0 V.

So funktioniert‘s 93

Logiclevel 0, d. h. OFF oder 0 V. So funktioniert‘s 93 · INPUT/OUPUT Sind für die

· INPUT/OUPUT Sind für die pinMode()-Funktion vorgesehen und legen fest, ob ein PIN als Eingang (INPUT) oder Ausgang (OUTPUT) genutzt werden soll.

Variablendefinition

Die Festlegung von Variablen ist bereits aus früheren Artikeln bekannt, z. B. wird mit der Programmzeile:

int ledPin = 10; eine Variable „ledPin“ festgelegt und auch gleich auf den Wert 10 gesetzt. Variablen zeichnen sich dadurch aus, dass sie wäh- rend des Programmablaufes verändert werden. Da Variablen in der Programmierung von höchster Wichtigkeit sind, wurden verschiedene Variablen-Ty- pen festgelegt. Diese sind in Tabelle 1 zusammen- gefasst. Die verschiedenen Typen dienen dazu, die be- grenzten Speicherplatzressourcen eines Mikrocont- rollers optimal zu nutzen. Man sollte also immer den Typen auswählen, der nicht mehr Speicher belegt als notwendig. Außerdem ergeben sich bei der korrekten Auswahl von Variablen-Typen auch Geschwindigkeitsvorteile. So kann der Arduino Integer-Berechnungen deutlich schneller ausführen als Float-Operationen. Bei einfachen Programmen, die nur wenige Be- rechnungen enthalten, fällt das natürlich kaum ins Gewicht. Wenn allerdings komplexere Rechenvorgän- ge mit umfangreichen Daten erforderlich sind, so kann die Verwendung einer reinen Integer-Arithme- tik über den Erfolg oder Misserfolg eines Projektes entscheiden. Klassische Beispiele, die eine hohe Rechenge- schwindigkeit erfordern, sind schnelle digitale Re- gelungen. Wird hier mit optimierten Integer-Werten gearbeitet, kann der Arduino bereits recht komplexe Aufgaben wie etwa die Lageregelung eines Quadro- kopters übernehmen.

Variablenfelder

Variablenfelder, auch als „arrays“ bezeichnet, stellen eine Zusammenfassung von Variablen dar, auf die mit Hilfe einer Index-Zahl zugegriffen werden kann. Alle nachfolgenden Anweisungen legen jeweils ein Array fest:

int myIntegers[4]; int OutPins[] = {1, 3, 5, 7, 9}; int mySpecialValues[6] = {1, 3 ,3, -4, -1, 5}; char infotext[6] = „hallo“;

 

Die wichtigsten Variablen-Typen

Typ

Bytes

Bereich

Byte

1

0

bis

255

Char

1

-127

bis

127

Tabelle 1

Int

2

-32.768

bis

32.767

Long

4

-2.147.483.648

bis

2.147.483.647

Float

4

-3,4028235E+38

bis

3,4028235E+38

94 So funktioniert‘s Mit diesen Definitionen werden jeweils Felder mit 4, 5, 6 und wieder

94 So funktioniert‘s

Mit diesen Definitionen werden jeweils Felder mit 4, 5, 6 und wieder 6 Variablen erzeugt. Der Zugriff auf ein Feldelement erfolgt durch Zuwei- sungen unter Benutzung des jeweiligen Index, z. B:

OutPins[0] = 1; x = mySpecialValues[4];

Auch sie besitzen die aus der Mathematik bekannte Bedeutung.

Die in C üblichen Abkürzungen, auch als Compound-Operatoren be- kannt, sind in Processing ebenfalls verfügbar:

++ Increment: x++ steht für

steht für

+= Compound Addition: x += y steht für

--

Decrement:

x--

x = x+1 x = x-1 x = x+y

 

-= Compound Subtraktion:

x -= y x*= y

x = x-y steht für x = x*y steht für x = x/y

steht für

Wichtig:

*= Compound Multiplikation:

Die Indizes eines Array beginnen mit 0, das heißt, das erste Feldelement hat immer den In- dex „0“.

/= Compound Division: x/= y

Kontrollstrukturen

Daraus ergibt sich, dass für ein Feld mit beispiels-

Zur Steuerung von Programmabläufen sind in Processing bzw. C ver- schiedene Strukturen vorgesehen. IF/ELSE und FOR sind die beiden wichtigsten.

· if

weise 4 Variablen der letzte Index 3 lautet. Wird eine Feldvariable mit dem Index 4 abgerufen, ergibt sich ein zufälliger Wert! Beispiel:

überprüft ob eine bestimme Bedingung erfüllt ist:

if (Variable > 99)

int myNumbers[4]={1,4,5,2};

{ // Anweisungen…

// myArray[3]

enthält den Wert 2,

}

// myArray[4]

ist ungültig und liefert einen

· if else

zufälligen Wert!

gestattet eine weitergehende Kontrolle des Programmflusses. Es können mehrer Bedingungen unterschieden werden:

Mathematische Operatoren

if (Input < 500)

Um mit Variablen rechnen zu können, werden Opera-

{

// Aktion A

toren benötigt. Die wichtigsten Operatoren sind die

}

Rechenzeichen. Sie haben in Processing die üblichen

else

mathematischen Bedeutungen:

{

// Aktion B

+

Addition

}

-

Subtraktion

· for

*

erlaubt es, eine Anweisung zu wiederholen. Die Anzahl der Wieder-

/

Multiplikation Division

holungen ist dabei nicht von irgendwelchen Bedingungen abhängig:

%

Modulo, d. h. Rest der Division

for (init; cond; inc) { //Anweisungen…

Auch für die Vergleichsoperatoren gelten die norma- len mathematischen Bedeutungen:

== ist gleich != ungleich < kleiner > größer <= kleiner gleich >= größer gleich

}

Zunächst wird eine Startbedingung „init“ gesetzt. Jedesmal wenn die Schleife durchlaufen wurde, wird die Bedingung „cond“ geprüft und die Aktion „inc“ ausgeführt. Wenn die Bedingung nicht mehr erfüllt ist,

wird die Schleife beendet.

· while() while-Schleifen werden so lange durchlaufen, bis die Abbruch- bedingung erfüllt ist:

while(logischer Ausdruck)

=

Zuordnung

{

// Anweisungen…

 

}

Lediglich die Zeichen wie etwa „ “ für „kleiner gleich“ wurden durch ASCII-kompatible Doppelzei- chen wie „<=“ ersetzt.

· do

while

Die do…while-Schleife funktioniert ähnlich wie die while-Schleife mit dem Unterschied, dass die Bedingung erst am Ende der Schleife

 

geprüft wird. Die do…while-Schleife wird also immer mindestens einmal durchlaufen.

Hinweis:

Die Zuordnung „=“ darf nicht mit dem Gleich- heitsoperator „==“ verwechselt werden! Im ersten Fall wird einer Variablen ein Wert zu- gewiesen, z. B.:

ledPin = 10; Im zweiten Fall wird auf Gleichheit überprüft, z. B.:

· do

 

{// Anweisungen… } while (logischer Ausdruck);

· break Mit break kann jede do-, for-, oder while-Schleife verlassen werden.

Programmierpraxis

 

if (a == 1)

Nachdem nun verschiedene Programmelemente theoretisch beleuchtet wurden, sollen diese in einem Praxisbeispiel umgesetzt werden. Das folgende Programm „squares“ soll eine Tabelle der Quadratzahlen von 1 bis 9 in gut lesbarer Form ausgeben.

Die Boole’schen Logikoperatoren werden durch die folgenden Zeichen realisiert:

&&

||

!

(and)

(or)

(not)

www.elvjournal.de

// sqares

int x;

int y[10];

void setup() { Serial.begin(9600); Serial.println("Squares table"); Serial.println();

}

void loop()

{ for (int x = 1; x<=9; x++)

{

y[x] = x*x;

Serial.print(x, DEC);

Serial.print("

");

Serial.println(y[x], DEC);

}

while(1);

 

}

Zunächst wird eine Variable vom Typ Integer definiert. Dann folgt die Deklaration eines Arrays y, für das 10 Elemente reserviert werden. Die Anweisungen im Setup-Teil sorgen für die Kommunikation zum PC. Sie werden etwas weiter unten erläutert. Die Zeile for (int x = 1; x<=9; x++) definiert eine Schleife, welche die Zahlen 1 bis 9 durchläuft. Mit y[x] = x*x; werden den Elementen des Arrays y die Quadrate des Laufindex x zu- gewiesen. Der Laufindex der Schleife wird zudem in der nächsten Pro- grammzeile, Serial.print(x, DEC); an den PC ausgegeben. Die Zeile

Serial.print("

");

sorgt durch Einfügen von Leerzeichen für eine lesbare Formatierung der ausgegebenen Werte. Schließlich werden die im Array gespeicherten Quadratzahlen aus- gegeben:

Serial.println(y[x], DEC); Die Anweisung while(1) sorgt dafür, dass das Programm hier stehen- bleibt. Bild 1 zeigt den Code nach erfolgreicher Compilierung in der IDE. Nach dem Laden des Programms in den Arduino muss noch der so- genannte „Serielle Monitor“ gestartet werden. Dazu muss auf das Lu- pensymbol rechts oben in der IDE geklickt werden (siehe Bild 2). Hier erfolgt dann die Ausgabe der gewünschten Quadratzahlen-Tabelle, so wie in Bild 3 dargestellt. Um den Ausgabekanal zu aktivieren, wurde im setup die Zeile

Serial.begin(9600);

eingefügt. Danach können dann über die Serial.print-Anweisung Werte und Texte wie beispielsweise Serial.println("Squares table"); am PC-Bildschirm ausgegeben werden. Über Serial.print(x, DEC); wird der Wert der Variablen x zum seriellen Monitor gesendet. Der Zu- satz „DEC“ sorgt dabei dafür, dass die Variable im Dezimalsystem aus- gegeben wird. Wird dem Print-Befehl die Endung „ln“ (für engl. „line“) angefügt, so wird eine neue Ausgabezeile begonnen. Weitere Details zu Nutzung dieser seriellen Schnittstelle folgen in einem späteren Artikel.

So funktioniert‘s 95

folgen in einem späteren Artikel. So funktioniert‘s 95 Bild 1: Das Programm „squares“ in der IDE
folgen in einem späteren Artikel. So funktioniert‘s 95 Bild 1: Das Programm „squares“ in der IDE

Bild 1: Das Programm „squares“ in der IDE

95 Bild 1: Das Programm „squares“ in der IDE Bild 2: Start des seriellen Monitors Bild

Bild 2: Start des seriellen Monitors

Programm „squares“ in der IDE Bild 2: Start des seriellen Monitors Bild 3: Ausgabe von Quadratzahlen

Bild 3: Ausgabe von Quadratzahlen

96 So funktioniert‘s Übungen und Variationen Falls Sie mit den Programmelementen von C noch nicht

96 So funktioniert‘s

Übungen und Variationen

Falls Sie mit den Programmelementen von C noch

nicht besonders gut vertraut sind, sollten Sie die fol- genden Übungen durchführen:

· Lassen Sie sich die Quadratzahlen von 10 bis 100 berechnen und ausgeben.

· Ersetzen Sie die for-Schleife durch eine while- Schleife.

· Ersetzen Sie den Compound-Operator x++ durch die entsprechende Langschreibweise.

· Berechnen Sie nur die Quadrate der ungeraden Zahlen zwischen 11 und 25!

· Für Zahlen größer 4 soll nicht das Quadrat, son- dern die 3. Potenz ausgegeben werden (Hinweis: if-Verzweigung!).

Spezielle Funktionen

Processing verfügt über spezielle Funktionen, die vor allem den Einstieg in die Programmiersprache C sehr erleichtern. Diese Funktionen werden der Übersicht- lichkeit halber im Folgenden zusammengefasst:

· pinMode(pin, mode) konfiguriert den „pin“ entweder als Eingang oder als Ausgang (mode = INPUT oder mode = OUTPUT)

· digitalWrite(pin, value) setzt den „pin“ auf high oder low (value = HIGH oder value = LOW)

· int digitalRead(pin) liest den Pegel von „pin“ und gibt entsprechend HIGH oder LOW zurück

Zeitsteuerung

Bereits im Programm „Blink“ wurde von Zeitverzö- gerungen Gebrauch gemacht. Die folgenden Befehle stehen dafür zu Verfügung.

· unsigned long millis() gibt die Anzahl der Millisekunden an, die vergan- gen sind, seit das aktuelle Programm gestartet wurde

Hinweis Die Variable millis springt nach ca. 50 Tagen auf null zurück. Bei Langzeitanwendungen ist dies unbedingt zu beachten, da es sonst zu unerwar- teten Effekten kommen kann!

Die bereits in mehreren Beispielen verwendete Funk- tion

· delay(ms) bewirkt eine Verzögerung von ms, also Millise- kunden, im Programmablauf

· delayMicroseconds(us) sorgt für eine Verzögerung von us, also Mikrose- kunden, im Programmablauf

Mathematische und trigonometrische Funktionen

Abschließend sollen hier noch die wichtigsten ma- thematischen Funktionen angesprochen werden. Die-

se haben auch in Processing ihre übliche Bedeutung:

· min(x, y); max(x, y); abs(x) liefern das Minimum, das Maximum von x und y bzw. den Absolutwert von x

www.elvjournal.de

· pow(base, exponent); sqrt(x) berechnen die Potenzfunktion und die Quadratwurzel

· sin(rad); cos(rad); tan(rad) liefern entsprechend die Sinus-, Kosinus- und Tangenswerte im Bogenmaß

Zufallszahlen

Die Funktion

· randomSeed(seed) startet den Pseudo-Zufallsgene- rator; mit seed wird dabei der Startpunkt in einer pseudo-zu- fälligen Zahlenreihe festgelegt

· long random(min, max) erzeugt eine Pseudo-Zufallszahl zwischen min und max

Praxisübungen

· Ändern Sie das Programm „squares“ so ab, dass es die Quadratwurzeln der ganzen Zahlen zwischen 0 und 9 be- rechnet! Welcher Variablentyp ist dabei für y sinnvoll?

· Erstellen Sie eine Tabelle der

dabei für y sinnvoll? · Erstellen Sie eine Tabelle der Bild 4: Arduino zeichnet eine Sinus-Kurve!

Bild 4: Arduino zeichnet eine Sinus-Kurve!

Sinuswerte für die Winkel zwi- schen 0° und 360° in 10°-Schritten!

· Dass der Arduino auch einfache Grafiken ausgeben kann, zeigt Bild 4. Schaffen Sie es, das zugehörige Programm zu erstellen?

Ausblick

Im nächsten Artikel wird erklärt, wie Programm-Bibliotheken für den Arduino nutzbringend eingesetzt werden können. Auch die Erstellung eigener Bibliotheken wird erläutert werden.

Empfohlenes Material

Natürlich können die Programmelemente einer so umfangreichen Spra- che wie C bzw. Processing in Rahmen eines einzelnen Beitrags nicht in allen Details dargelegt werden. Weitergehende Informationen zum The- ma finden sich jedoch im Mikrocontroller-Onlinekurs [1]. Weiterführen- de praktische Beispielprogramme und interessante Anwendungen sind in [2] zu finden.

und interessante Anwendungen sind in [2] zu finden. Weitere Infos: [1] Mikrocontroller-Onlinekurs,
und interessante Anwendungen sind in [2] zu finden. Weitere Infos: [1] Mikrocontroller-Onlinekurs,
und interessante Anwendungen sind in [2] zu finden. Weitere Infos: [1] Mikrocontroller-Onlinekurs,

Weitere Infos:

[1] Mikrocontroller-Onlinekurs, Franzis-Verlag, exklusiv für ELV, 2011, Best.-Nr. J3-10 20 44 [2] G. Spanner: Arduino – Schaltungsprojekte für Profis, Elektor-Verlag, 2012, Best.-Nr. J3-10 94 45

Preisstellung April 2014 – aktuelle Preise im Web-Shop

Empfohlene Produkte/Bauteile:

Best.-Nr.

Preis

Arduino-Uno-Platine R3

J3-10 29 70

27,95

USB-2.0-Verbindungskabel A auf B

J3-09 55 56

0,95

Mikrocontroller-Onlinekurs

J3-10 20 44

99,–

 

Alle ARDUINO-Produkte wie Mikrocontroller-Platinen, Shields, Fachbücher und Zubehör finden Sie unter: www.arduino.elv.de

92 So funktioniert‘s Arduino verstehen und anwenden Teil 5: Nutzung und Erstellung von Programmbibliotheken

92 So funktioniert‘s

Arduino verstehen und anwenden

Teil 5: Nutzung und Erstellung von Programmbibliotheken

Arduino verstehen und anwenden Teil 5: Nutzung und Erstellung von Programmbibliotheken www.elvjournal.de www.elvjournal.de

www.elvjournal.de

www.elvjournal.de

Bild 1: „LiquidCrystal“ in der Arduino-IDE

So funktioniert‘s 93

in der Arduino-IDE So funktioniert‘s 93 Der fünfte Teil der Artikelserie „Arduino verstehen und
in der Arduino-IDE So funktioniert‘s 93 Der fünfte Teil der Artikelserie „Arduino verstehen und

Der fünfte Teil der Artikelserie „Arduino verstehen und anwenden“ dreht sich um das Thema Programm- bibliotheken. Sogenannte Bibliotheken oder Libraries gehören zu den besonderen Stärken der Arduino-Idee. Diese

Programmierhilfen erleichtern das Erstellen komple- xerer Projekte ganz erheblich. So muss man nicht immer das Rad neu erfinden, sondern man kann auf bereits vorhandenen Grundlagen aufbauen. Zu den sogenannten Standardbibliotheken zählen u. a:

· EEPROM – Schreiben und Lesen des EEPROM- Speichers im Controllerchip

· LiquidCrystal – Ansteuerung eines textbasierten LC-Displays

· SD – Schreiben und Lesen einer SD-Speicherkarte (erfordert ein entsprechendes Shield)

· Servo – Ansteuerung von Modellbauservos

· SoftwareSerial – ermöglicht die Nutzung einer softwarebasierten seriellen Schnittstelle an einem beliebigen Digitalpin des Arduinos

· Stepper – Steuerung von Schrittmotoren (erfordert passende Treiberbausteine)

· Wire – ermöglicht die Kommunikation mit Two-Wire- bzw. I 2 C-Inter- face-Bausteinen und -Sensoren wie z. B. DACs oder Echtzeituhren-ICs

Eine der besonders häufig genutzten Bibliotheken ist die LiquidCrys- tal-Library. Sie ermöglicht das einfache Ansteuern eines LC-Displays. Damit kann der Arduino auch unabhängig vom PC Zahlen und Texte ausgeben. Hochinteressanten praktischen Anwendungen wie etwa ei- ner Digitaluhr oder einem digitalen Innen-und-Außenthermometer mit LCD-Anzeige steht damit nichts mehr im Weg. Diese nützliche Biblio- thek soll daher im Folgenden als einführendes Beispiel dienen.

Einbinden einer Bibliothek in einen Arduino-Sketch

Die LCD-Bibliothek wird bereits mit der Standard-Arduino-IDE mitge- liefert. Sie arbeitet mit allen LC-Displays, die mit dem bekannten HD44780-Treiber von Hitachi kompatibel sind. Die Anschlusskonfigura- tion dieser Module hat sich als Quasi-Standard durchgesetzt. Praktisch alle gängigen Anzeigeeinheiten mit 14 oder 16 Pins und 1 oder 2 Zeilen à 16 Zeichen sind somit mit der hier vorgestellten Bibliothek verwend- bar. Bild 1 zeigt, wie die Beispielprogramme der Bibliothek „LiquidCrys- tal“ im Hauptmenü der IDE ausgewählt werden können. Im zugehörigen Untermenü finden sich dann verschiedene Beispiel- programme dieser Library.

Bild 2: Anschluss eines LC-Displays an den Arduino Micro

Beispiel- programme dieser Library. Bild 2: Anschluss eines LC-Displays an den Arduino Micro ELVjournal 4/2014
94 So funktioniert‘s Bild 3: Die LCD- Bibliothek in Aktion Zunächst muss aber natürlich das

94 So funktioniert‘s

94 So funktioniert‘s Bild 3: Die LCD- Bibliothek in Aktion Zunächst muss aber natürlich das LC-Display

Bild 3: Die LCD- Bibliothek in Aktion

Zunächst muss aber natürlich das LC-Display mit dem Arduino verbunden werden. Bild 2 zeigt das zu- gehörige Aufbaubild. Eine praktische Ausführung des Aufbaus ist in Bild 3 zu sehen. Nachfolgend sind die notwendigen Verbindungen

der Deutlichkeit halber nochmals in Tabellenform an- gegeben:

entsprechend 16 Zeichen in 2 Zeilen, kann im Setup bereits direkt auf das LC-Display ge- schrieben werden.

Mit lcd.setCursor(5, 0);

LCD RS

-

Digitalpin 12

wird die aktuelle Schreibposition auf das 5. Zeichen in der 1. Zeile gesetzt (die Zeilenzählung beginnt wie

LCD Enable

-

Digitalpin 11

in der IT üblich mit 0).

LCD D4

-

Digitalpin 5

LCD D5

-

Digitalpin 4

Dann erfolgt die Ausgabe des Textes einfach mit

LCD D6

-

Digitalpin 3

lcd.print("Hallo, ");

LCD D7

-

Digitalpin 2

und

LCD R/W

-

Ground

lcd.print(" Arduino MICRO! ");

Anwendung der Bibliothek LiquidCrystal.h

Unter Verwendung der Bibliothek LiquidCrystal.h kann das zugehörige Hauptprogramm sehr einfach ausfallen:

Hier zeigt sich deutlich, wie die Verwendung einer Bibliothek die Programmierung ganz wesentlich ver- einfacht. Nur wenige Programmzeilen genügen, um ein alphanumerisches Display anzusteuern. Wollte man diese Aufgabe ohne die Hilfe der Bibliotheks- funktionen lösen, so würde daraus ein Projekt, das auch einen erfahrenen Programmierer viele Stunden lang beschäftigen würde. Wenn man sich einen ersten Eindruck verschaffen möchte, wie die Ansteuerung eines LC-Displays im Detail aussieht, dann kann man die Datei „LiquidCrystal.cpp“ im Verzeichnis

// Hallo Arduino MICRO

 

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

…Arduino\arduino-1.0.5\libraries\LiquidCrystal

void setup() { lcd.begin(16, 2); lcd.setCursor(5, 0); lcd.print("Hallo, "); lcd.setCursor(0, 1); lcd.print(" Arduino MICRO! ");

mit einem Editor, wie etwa dem Windows-WordPad, öffnen. Hier zeigt sich, welcher Aufwand durch den Einsatz der fertigen Bibliothek eingespart werden konnte.

Erstellen eigener Bibliotheken

}

Fertige Bibliotheken sind aber natürlich nur die eine Seite der Medaille. Während der Einsteiger sicherlich

void loop() {}

überwiegend bereits vorgefertigte Libraries nutzt, wird der fortgeschrittene Anwender irgendwann den Punkt erreichen, an welchem eine eigene Bibliothek erstellt werden soll. Nachfolgend werden daher die Schritte zur Erstellung eigener Bibliotheken vorge- stellt. Bereits im 2. Teil zu dieser Beitragsreihe wurde ein einfaches Programm zum Senden des SOS-Not- fallsignals im Morsecode entwickelt. Hier soll dieses Beispiel noch einmal aufgegriffen werden, um die Er- stellung einer Programmbibliothek zu erläutern.

Nach dem Einbinden der Bibliothek mit #include <LiquidCrystal.h> müssen also nur noch die Pin-Verbindungen zum LCD angegeben werden:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Nach der Initialisierung mit lcd.begin(16, 2);

www.elvjournal.de

So funktioniert‘s 95

So funktioniert‘s 95 Da alle erforderlichen Programmstrukturen und Befehle aus dem 3. und 4. Teil dieser

Da alle erforderlichen Programmstrukturen und Befehle aus dem 3. und 4. Teil dieser Artikelserie be- kannt sind, kann das SOS-Programm nun schon deut- lich kompakter und eleganter aufgebaut werden als noch im früheren Beitrag:

vate Teile kann nur innerhalb der Klasse zugegrif- fen werden. Jede Klasse verfügt über eine spezielle Funktion, den sogenannten Constructor. Dieser wird benutzt, um jeweils eine Instanz einer Klasse zu erzeugen. Der Constructor hat den gleichen Namen wie die zugehörige Klasse und gibt kein Argument zurück. In einen klassischen Sketch wird das Standard-File Arduino.h immer automatisch mit eingebunden. Bei einer Bibliotheksdatei dagegen muss man dies manu- ell erledigen, um sicherzustellen, dass alle erforderli- chen arduinospezifischen Definitionen zur Verfügung stehen. Um Probleme mit der Mehrfacheinbindung einer Bibliothek zu vermeiden, wird der gesamte Code in eine entsprechende if-Abfrage eingebettet. Damit muss die Datei MorseCode.h wie folgt aussehen:

 

// SOS

int pin = 13;

void setup()

{

pinMode(pin, OUTPUT);

}

void loop()

{

S();O();S(); delay(1000);}

 

void S()

{

// morse code generation

 

for(int i = 1; i <= 3; i++) { digitalWrite(pin, HIGH); delay(200); digitalWrite(pin, LOW); delay(200);

#ifndef MorseCode_h

}

delay(500);

}

#include "Arduino.h"

 

void O()

class Morse

{

for(int i = 1; i <= 3; i++)

{

public:

{

digitalWrite(pin, HIGH); delay(1000); digitalWrite(pin, LOW); delay(200);

Morse(int pin);

 

void S();

 

}

void O();

delay(500);

private:

}

int _pin;

 

};

SOS_short.ino

 

#endif

Nun sollen verschiedene Teile des Sketches in eine Library ausgegliedert werden. Hierfür bieten sich na- türlich die beiden Routinen S() und O() an. Diese beiden Programmteile übernehmen die Aufgabe, die Morsesequenzen für die Buchstaben S und O zu er- zeugen. Nachdem die Prozeduren über void S() und void O() definiert wurden, können sie über die Anweisungen S() und O() aufgerufen werden. Die Bibliothek soll aber auch noch eine einfache Möglichkeit bieten, den Port, an welchen das Signal ausgegeben werden soll, zu wählen.

MorseCode.h

Nun muss noch die zugehörige .ccp-Datei erstellt werden. Hier muss natürlich zunächst die zugehörige .h-Datei eingebunden werden. Auch die Arduino.h ist nochmals manuell zu aktivieren. Dann folgt die De- finition der einzelnen Funktionen. Um festzulegen, dass diese Teil einer Klasse sind, muss man den Namen der Klasse gefolgt von einem doppelten Doppelpunkt voranstellen (::). Damit sieht die ccp.-Datei so aus:

 

// morse code generation

Aufbau einer Bibliothek

Eine Library muss immer mindestens zwei Dateien enthalten:

#include "Arduino.h" #include "MorseCode.h"

1. das Header-File mit der Extension .h

2. das Source-File mit der Extension .cpp

Morse::Morse(int pin)

Im Header-File werden alle für die Library erforderli- chen Definitionen festgelegt. Hierfür wird zunächst eine sogenannte Class (engl. für „Klasse“) benötigt. In einer Klasse können mehrere Funktionen und Va- riablen zusammengefasst werden. Hier hat man zwei Möglichkeiten zu unterscheiden:

{

pinMode(pin, OUTPUT); _pin = pin;

}

void Morse::S()

{

for(int i = 1; i <= 3; i++) { digitalWrite(_pin, HIGH); delay(200); digitalWrite(_pin, LOW); delay(200);

}

Public Class („öffentliche Klasse“) und Private Class („private Klasse“) Die als öffentlich definierten Teile können von allen Nutzern der Bibliothek verwendet werden. Auf pri-

96 So funktioniert‘s   delay(500); } void Morse::O() { for(int i = 1; i <=

96 So funktioniert‘s

 

delay(500);

  delay(500);

}

void Morse::O()

{

for(int i = 1; i <= 3; i++)

In diesem Verzeichnis müssen sich die Dateien MorseCode.h MorseCode.cpp keywords.txt befinden.

{

digitalWrite(_pin, HIGH); delay(1000); digitalWrite(_pin, LOW); delay(200);

}

delay(500);

}

Zusätzlich sollte noch ein Unterverzeichnis „examples“ angelegt wer- den, in welches die Beispieldatei

Zusätzlich sollte noch ein Unterverzeichnis „examples“ angelegt wer- den, in welches die Beispieldatei SOS_w_lib.ino abgelegt wird. Damit ist die Bibliothek prinzipiell vollständig.

MorseCode.cpp

Mit diesen beiden Dateien ist die Bibliothek bereits fertiggestellt. Das SOS-Programm wird damit unschlagbar ein- fach:

 
 

// SOS

 

#include <MorseCode.h>

Ideal ist es natürlich, wenn dazu noch weitere Informationen geliefert werden, in welchen alle Funktionen genau dokumentiert sind. Die Er- fahrung zeigt allerdings, dass diese Dokumentation bei den meisten im Internet veröffentlichten Libraries fehlt. Trotzdem können viele dieser kleinen Helfer nach kurzer Einarbeitung und dem Studium der einzelnen Dateien, insbesondere der Beispieldatei, sehr nutzbringend angewendet werden.

Morse

morse(13);

void setup(){} void loop()

{

morse.S(); morse.O(); morse.S(); delay(1000);

}

SOS_w_lib.ino

Man muss also nur noch die Bibliothek einbinden, und die darin enthaltenen Funktionen stehen für die freie Verwendung zur Verfügung. Der Arduino hat nun sozusagen das Morsealpha- bet gelernt und sendet beispielsweise auf den Befehl morse.S(); automatisch drei kurze Lichtimpulse, also das optische Morsezeichen für „S“ aus. Natürlich kann man auch den Rest des Alphabets in die Biblio- thek integrieren und ist dann in der Lage, sehr kom- fortabel ganze Texte in Morsecode mit dem Arduino zu versenden. Abschließend sei noch auf die Datei keywords.txt hingewiesen. Diese ist für die Funktion der Biblio- thek nicht unbedingt erforderlich, bietet aber den Komfort, dass die in der Bibliothek verwendeten Schlüsselwörter in der gewohnten Farbcodierung er- scheinen. Hierzu muss man die verwendeten Funk- tionsnamen in eine keywords.txt-Datei eintragen und mit „KEYWORD1“ für die Klasse bzw. „KEYWORD2“ für die Funktionen kennzeichnen:

Morse

KEYWORD1

S

KEYWORD2

O

KEYWORD2

keywords.txt

Will man nun die erzeugte Bibliothek der Allgemein- heit zur Verfügung stellen, so muss man nur die drei Dateien (xxx.h, xxx.ccp und xxx.txt) weitergeben. Zusätzlich wird meist noch eine Beispieldatei mitge- liefert, die die Anwendung der Bibliotheksfunktionen demonstriert. Die Bibliothek besteht also aus einem Verzeichnis „Morsecode“.

www.elvjournal.de

Ausblick

Die Arbeit mit Programmbibliotheken sollte nun keine Probleme mehr bereiten. Der Einsatz dieser nützlichen Hilfsmittel ist immer dann zu empfehlen, wenn es darum geht, Standardprobleme zu lösen. Es ist in jedem Fall lohnend, vor der Implementierung eines neuen Projekts zu prüfen, ob entweder für das gesamte Vorhaben oder aber auch nur für wichtige Teile geeignete Bibliotheken existieren. Der nächste Artikel wird sich um das Thema „Sensortechnik und Messwerterfassung“ drehen. Auch dazu sind umfangreiche Bibliotheken vorhanden. Allerdings erfordert der Einsatz spezieller thermischer oder optoelektronischer Sensoren, etwa im Bereich der Hausautomatisierung oder der Robotersteuerung, doch auch entsprechende Kenntnisse im Be- reich der Erfassung und Wandlung analoger Daten.

Empfohlenes Material

· Arduino Micro, Best.-Nr. J4-10 97 74, 24,95

· Mikrocontroller-Onlinekurs, Best.-Nr. J4-10 20 44, 99,–

· Auch viele Lernpakete von Franzis wie etwa „Elektronik mit ICs“ enthalten Materialien wie ein lötfreies Steckbrett, Widerstände und LEDs etc., die für den Aufbau von Schaltungen mit dem Arduino Micro gut geeignet sind.

von Schaltungen mit dem Arduino Micro gut geeignet sind. Preisstellung Juni 2014 – aktuelle Preise im
von Schaltungen mit dem Arduino Micro gut geeignet sind. Preisstellung Juni 2014 – aktuelle Preise im
von Schaltungen mit dem Arduino Micro gut geeignet sind. Preisstellung Juni 2014 – aktuelle Preise im

Preisstellung Juni 2014 – aktuelle Preise im Web-Shop

Weitere Infos:

· G. Spanner: Arduino – Schaltungsprojekte für Profis, Elektor-Verlag, 2012, Best.-Nr. J4-10 94 45, 39,80

· AVR-Mikrocontroller in C programmieren, Franzis-Verlag, 2012, Best.-Nr. J4-09 73 52, 39,95

Alle Arduino-Produkte wie Mikrocontroller-Platinen, Shields, Fachbücher und Zubehör finden Sie unter: www.arduino.elv.de

62 So funktioniert‘s Arduino verstehen und anwenden Teil 6: Sensortechnik und Messwerterfassung www.elvjournal.de

62 So funktioniert‘s

Arduino verstehen und anwenden

Teil 6: Sensortechnik und Messwerterfassung

Arduino verstehen und anwenden Teil 6: Sensortechnik und Messwerterfassung www.elvjournal.de www.elvjournal.de

www.elvjournal.de

www.elvjournal.de

Der sechste Teil der Artikelserie „Arduino ver- stehen und anwenden“ hat das weite Gebiet der Sensortechnik und der controllerbasierten Mess- werterfassung zum Thema.

Hier ist der Mikrocontroller voll in seinem Element. Denn in diesem Anwendungsbereich unterscheiden sich Controller ganz wesentlich von ihren techni- schen Gegenspielern, den Prozessoren. Mikrocon- troller zeichnen sich insbesondere dadurch aus, dass sie über integrierte Messwandlereinheiten verfügen. So besitzen auch die Controller der Arduino-Serie mehrere Analogeingänge. Damit lassen sich die un- terschiedlichsten Messanwendungen realisieren. Zu den Themen dieses Beitrags zählen entsprechend die folgenden Aufgaben:

· Erfassung analoger Messdaten

· Auswertung von Sensorsignalen

· Ausgabe und Verarbeitung von Messwerten

Im Rahmen der Praxisbeispiele werden die folgenden Anwendungen vorgestellt:

· Erfassung einer Potentiometerposition durch Messung analoger Spannungswerte

· Elektronisches Computer-Thermometer mit Übertemperaturalarm

· Elektronisches Luxmeter

Erfassung von Messwerten

Die Erfassung von elektronischen Messdaten gehört mit zu den zentralen Aufgaben eines Mikrocontrol- lers. Das Einlesen von digitalen Signalen stellt die einfachste Möglichkeit dar. Binäre Spannungspegel (0 V oder 5 V) können von jedem I/O-Pin erfasst werden. Allerdings muss man auch bei dieser ver- gleichsweise einfachen Aufgabe häufig verschiedene Probleme beachten. So stellt etwa das sogenannte „Prellen“, also die Mehrfacherfassung eines Schalt- vorgangs aufgrund von mechanischen Effekten, ein nicht zu unterschätzendes Problem bei der Ansteue- rung von einfachen Tastern dar. Aber auch analoge Spannungswerte können von modernen Mikrocontrollern direkt gemessen werden. Die meisten gängigen Controllertypen haben dazu einen sogenannten A/D-Wandler (Analog-zu-digital- Umsetzer, auch ADC für engl. Analog to Digital Con- verter) integriert. In den entsprechenden Control-

So funktioniert‘s 63

In den entsprechenden Control- So funktioniert‘s 63 V bit t 5 1023 4 818 3 614

V

bit

t

5 1023 4 818 3 614 t n hold U n = 2,58 V =
5
1023
4
818
3
614
t n
hold
U n = 2,58 V = 527 bit
2
409
1
205
0
Bild 1: Erfassung analoger Messwerte
sample

lern sind meist noch sogenannte Analogmultiplexer vorhanden. Diese erlauben dann die nahezu simultane Erfassung von 6, 8 oder sogar mehr analogen Kanälen. ADCs sind wichtige Bestandteile vieler Geräte der modernen Kommu- nikations-, Unterhaltungs- und Haushaltselektronik. Digitale Thermo- meter oder Wetterstationen können auf ADCs ebenso wenig verzichten wie MP3-Player, Mobiltelefone oder digitale Kameras. Zudem werden die Wandler in der Messwerterfassung in industriellen Anwendungen, zur Steuerung von Maschinen und in Kraftfahrzeugen benötigt. Die Auflösung eines ADCs bestimmt die maximale Genauigkeit, mit der das analoge Eingangssignal digitalisiert werden kann. Die effektive Präzision ist durch weitere Fehlerquellen des ADCs jedoch geringer als die theoretische Auflösung. So führen etwa Nichtlinearitäten oder Ab- gleichfehler zu zusätzlichen Abweichungen. Die Wandlungsdauer für einen einzelnen Messwert hängt vom Wand- lungsverfahren ab. Neben extrem schnellen Verfahren existieren auch langsame, integrierende Methoden, die sich dafür durch hervorragende Unterdrückung von Störeinkopplungen auszeichnen. Die Auflösung, mit der die analoge Größe gemessen wird, bewegt sich zwischen 1 und 24 Bit. Die durch die Wandlung entstehende Abweichung zwischen dem tatsächlichen Messwert und dem digitalen Ausgabewert bezeichnet man als Quantisierungsfehler. Er entsteht u. a. durch un- vermeidbare Rundung, Nichtlinearitäten sowie Störeinstreuungen etc. Bild 1 zeigt, wie der rot dargestellte analoge Spannungsverlauf mit einem ADC digitalisiert wird. Der ADC führt zu bestimmten Zeitpunkten tn eine Spannungsmessung durch. Dieser Spannungswert wird dann in einen Digitalwert umgewandelt. Bei einer Auflösung von 10 Bit und einer Referenzspannung von 5 V ergibt sich so für eine Spannung von

64 So funktioniert‘s   ADC-Wandlerverfahren   Verfahren Arbeitsweise Vorteile Nachteile

64 So funktioniert‘s

 

ADC-Wandlerverfahren

 

Verfahren

Arbeitsweise

Vorteile

Nachteile

Anwendung

Flash- oder

   

teuer, hohe Leistungsaufnahme

Digitaloszilloskope, Forschung und Entwicklung

Parallelwandler

pro Ausgangswert 1 Komparator

sehr schnell

Sukzessive

stufenweise Annäherung, Wägeverfahren

   

Standardverfahren, interne A/D-Wandler von Mikrocontrollern

Tabelle 1

Approximation

schnell, genau

technisch aufwendig

Single Slope,

Spannungsmessung erfolgt über Zeitmessung von Ladevorgängen

preisgünstig,

langsam

Multimeter

Dual Slope

gute Linearitäten

Delta-Sigma

Komparator und Logik-Elemente

preisgünstig

langsam

Präzisionsmessungen bis zu 24 Bit, Audio

beispielsweise 2,58 V ein abgerundeter digitaler Er- gebniswert von Q = 527:

Q = 2,58 V / 5 V * 1023 = 527

Je nach Anwendungsfall werden unterschiedliche Anforderungen an einen ADC gestellt. Für die ver- schiedenen Aufgaben wurden daher unterschiedliche Verfahren entwickelt und implementiert. Die wich- tigsten ADC-Verfahren sind in Tabelle 1 zusammen- gefasst. Wie diese zeigt, besitzen alle Verfahren ihre spezifischen Vor- und Nachteile. Die sukzessive Approximation stellt aber einen guten Kompromiss für viele Anwendungen dar. Sie wird daher in vielen Mikrocontrollern und insbesondere auch bei den im Arduino verwendeten AVR-Typen eingesetzt. Die im Arduino verwendeten ADCs zeichnen sich durch die in Tabelle 2 aufgeführten Leistungsmerkmale aus.

Praktische Anwendung:

Erfassung einer Potentiometerposition

Nachdem nun die prinzipiellen Eigenschaften von ADCs dargelegt wurden, soll die Funktionsweise der Analog-digital-Converter anhand eines Anwendungs- beispiels verdeutlicht werden. Hierzu sollen die von einem Potentiometer erzeugten analogen Span- nungswerte vom Arduino erfasst und zum PC über- tragen werden. Als Messkanal kommt der Analog-Eingang ADC0 zum Einsatz. Die dort anliegenden Spannungswerte sollen erfasst und in digitale Messwerte gewandelt werden. Anschließend werden die Werte an einen PC übertragen und am seriellen Monitor dargestellt. Das Programm dazu kann so aussehen:

// ADC

int ADC0=0;

int value;

void setup()

{

Serial.begin(9600);

}

void loop()

{

value=analogRead(ADC0);

Serial.print("ADC0 = "); Serial.println(value);

delay(5000);

}

www.elvjournal.de

Tabelle 2

Eigenschaften des ADC-Wandlers im Arduino

Analogeingänge

6 (A0–A5)

Auflösung

10 Bit

Wandlungszeit

max. 260 μs

Die zugehörige Schaltung ist in Bild 2 zu sehen. Das Potentiometer soll- te einen Bahnwiderstand von ca. 100 k besitzen. Nach dem Laden des Programms und dem Starten des seriellen Monitors werden die Messwer- te sichtbar (Bild 3). Da direkt der ADC-Wert ausgegeben wird, liegen die angezeigten Zahlenwerte im Bereich von 0 bis 2 10 -1 = 1023.

Temperaturmessung

Temperaturfühler zählen zu den wichtigsten Sensoren in der elektroni- schen Messtechnik. Sie überwachen die Temperaturen in den Prozesso- ren moderner PCs genauso wie in Automotoren, Großrechenanlagen oder in den Prozess-Steuerungen der chemischen Industrie. Einfache Temperatursensoren bestehen meist aus mit Bindemitteln versetzten, gepressten und gesinterten Metalloxiden. Der Nominalwi- derstand eines solchen Messelements lässt sich durch das Mischverhält- nis verschiedener Materialien in weiten Bereichen einstellen. So entstehen sogenannte NTCs, also Temperatursensoren mit nega- tivem Temperaturkoeffizienten. Ein Standardtyp dieses Bauelements

tivem Temperaturkoeffizienten. Ein Standardtyp dieses Bauelements Bild 2: Aufbau für die Erfassung analoger Messwerte

Bild 2: Aufbau für die Erfassung analoger Messwerte

weist beispielsweise einen Widerstandswert von 4,7 k bei einer Tempe- ratur von 25 °C auf.

Elektronisches Thermometer mit Übertemperaturalarm Ein solcher NTC eignet sich hervorragend zum Aufbau eines elektroni- schen Computer-Thermometers. Die Temperaturmesswerte sollen dabei über den Mikrocontroller erfasst und am PC dargestellt werden. Neben der Darstellung der aktuellen Temperatur ermöglicht ein sol- ches Thermometer auch die zeitaufgelöste Messung von Temperaturen. Typische Anwendungen dafür sind die Temperaturüberwachung von Leistungstransistoren, Mikroprozessoren oder ganzen klimatisierten Serverräumen. Zusätzlich kann ein Übertemperaturalarm integriert werden, über welchen im Ernstfall ein zusätzliches Kühlaggregat aktiviert oder aber sogar die Leistung einer kompletten Serverfarm heruntergefahren wer- den könnte. Die Umrechnung des ADC-Werts in eine Temperatur erfolgt über 2 Konstanten:

cal = 6.8 offset = 296 Die beiden Werte ergeben sich aus dem Offset sowie aus der Steilheit der Kennlinie des NTCs. Falls die Temperatur nicht korrekt angezeigt wird, können die beiden Konstanten an das verwendete Sensorexemplar angepasst werden. Prinzipiell ist die Kalibrationsfunktion eines NTCs nichtlinear. Für ei- nen Temperaturbereich von ca. 0 bis etwa 50 °C können die Abweichun- gen aber weitgehend vernachlässigt werden. Für höchste Ansprüche bezüglich der Messpräzision kann selbstverständlich auch eine nichtli- neare Funktion zur Berechnung der Temperatur implementiert werden. Der nachfolgende Sketch zeigt, wie ein Programm zur Temperaturmes- sung inklusive eines Übertemperaturalarms aussehen könnte.

// Temperature sensor // for serial interface // using NTC temperature sensor // incl. overtemp indication

int ADC0=0;

int ADC_value;

// select ADC channel

void setup()

{

Serial.begin(9600);

pinMode(overtempLED,OUTPUT);

}

void loop()

{ ADC_value=analogRead(ADC0);

Serial.print("Temp = "); Serial.print(temp); Serial.println(" C ");

if(temp>overtemp)digitalWrite(overtempLED,HIGH);

if(temp<overtemp)digitalWrite(overtempLED,LOW);

delay(1000);

}

So funktioniert‘s 65

delay(1000); } So funktioniert‘s 65 Bild 3: Darstellung der Messwerte im seriellen Monitor Den
delay(1000); } So funktioniert‘s 65 Bild 3: Darstellung der Messwerte im seriellen Monitor Den

Bild 3: Darstellung der Messwerte im seriellen Monitor

Den Schaltungsaufbau dazu zeigt Bild 4. Der Tempe- ratursensor wird hier in einer einfachen Spannungs- teiler-Schaltung betrieben. Der 4,7-k -Festwiderstand sorgt dafür, dass die Eingangsspannung für den ADC bei Raumtemperatur bei ca. der halben Betriebsspannung, d. h. bei etwa 2,5 V, liegt. Damit lässt sich der Temperaturbereich von 0 bis 50 °C gut abdecken. Nach dem Starten des Programms und des seriel- len Monitors werden die jeweils aktuellen Tempera- turwerte im Abstand von ca. 1 s auf dem Bildschirm angezeigt. Berührt man den Sensor mit den Finger- spitzen, wird der damit einhergehende Temperatur- anstieg unverzüglich sichtbar. Überschreitet die Tem- peratur den in der Zeile float overtemp = 30; festgelegten Schwellwert von 30 °C, so wird die LED als Warnanzeige aktiviert.

von 30 °C, so wird die LED als Warnanzeige aktiviert. Bild 4: Aufbau für ein elektronisches

Bild 4: Aufbau für ein elektronisches Computer-Thermometer mit Übertemperaturalarm

66 So funktioniert‘s Bild 5 zeigt ein Temperaturüberwachungsgerät für eine kleine Klimakammer. Hier wurden 5

66 So funktioniert‘s

Bild 5 zeigt ein Temperaturüberwachungsgerät für eine kleine Klimakammer. Hier wurden 5 der 6 vorhandenen Analogkanäle mit Temperatursensoren ausgestattet. Der jeweils aktive Kanal wird über eine LED angezeigt. Als Display für die Temperaturwerte kam hier eine 4-stellige 7-Segment-Anzeige zum Ein- satz. Weitere Details zur Ansteuerung einer solchen Anzeige werden in einem späteren Beitrag in dieser Artikelserie erläutert.

Der Phototransistor als optischer Sensor Ein weiterer sehr interessanter Sensor ist der Photo- transistor. Dieser gestattet die Erfassung von Hel- ligkeitswerten. Typische Anwendungen dieses Bau- elements sind Lichtschranken, Belichtungsmesser für Fotokameras oder Empfänger für Infrarotfernbedie- nungen.

Elektronisches Luxmeter

Mit dem Phototransistor kann die Umgebungshellig- keit bestimmt und der aktuelle Helligkeitswert auf einem PC-Bildschirm dargestellt werden. Der Sensor- typ BPW40 eignet sich bestens für diese Aufgabe. Anstelle einer numerischen Anzeige kann man für die Helligkeiten auch eine grafische Darstellung wählen. Im Beispiel wird eine sogenannte ASCII- Grafik verwendet. Das bedeutet, dass eine Zeile aus X-Zeichen ihre Länge proportional zur aktuellen Um- gebungshelligkeit verändert. Das Prinzip dieser einfachen Grafikausgabe wurde bereits im Artikel „Programmierpraxis: Befehle, Vari- ablen und Funktionen“ erläutert, sodass das Ardui- no-Programm dazu keine Verständnisschwierigkeiten mehr bereitet.

// Luxmeter

int ADC_value;

int ADC_0=0;

void setup()

{

Serial.begin(9600);

pinMode(AlarmLED, OUTPUT);

}

void loop()

{ ADC_value=analogRead(ADC_0);

if (ADC_value>0)

{

for(int i=0; i<=(ADC_value/10); i++) Serial.print("X"); Serial.println("");

}

if(ADC_value < threshold)

{ digitalWrite(AlarmLED,HIGH);

}

else digitalWrite(AlarmLED,LOW);

}

www.elvjournal.de

} else digitalWrite(AlarmLED,LOW); } www.elvjournal.de Bild 5: Im Eigenbau erstelltes μC-basiertes

Bild 5: Im Eigenbau erstelltes μC-basiertes Computer-Thermometer mit Übertemperatur- alarm und 5 Alarmausgängen zur Überwachung von Serverräumen

Den Hardwareaufbau dazu zeigt Bild 6. Im Gegensatz zum NTC weist der Phototransistor eine Polung auf. Falls sich die Messwerte also nicht wie erwartet mit der Umgebungshelligkeit verändern, sollte man den Lichtsensor umpolen. Bild 7 zeigt, wie sich die Länge des Anzeigebalkens verändert, wenn der Sensor mit einer Lampe beleuchtet wird. Unterschreitet die Umge- bungshelligkeit einen festgelegten Schwellwert, wird die LED 13 als „Zu- satzbeleuchtung“ eingeschaltet. Natürlich könnte man auf diese Weise auch eine leuchtstarke Power-LED als echte Zusatzlichtquelle ansteuern.

Grafische Darstellung von Messwerten auf dem PC-Bildschirm

Wenn man die Messwerte von Sensoren nicht nur über den seriellen Monitor in numerischer Form oder als einfache ASCII-Grafiken darstellen will, sondern echte grafische Ausgaben erwünscht sind, so kann man das Programm „Processing“ einsetzen. Dieses äußerst nützliche und universell einsetzbare Programm kann unter [1] kostenlos aus dem Internet geladen werden. Dass das Pro- gramm der Arduino-IDE stark ähnelt, ist kein Zufall. Die Arduino-Pro- grammieroberfläche ist sehr eng an das am Massachusetts Institute for Technology (MIT) entwickelte Processing angelehnt. Dies hat den Vorteil, dass sich routinierte Arduino-Anwender schnell zurechtfinden. Zudem werden ähnlich wie bei der Arduino-IDE auch bei Processing viele interessante Beispielanwendungen mitgeliefert. Alleine das Austesten dieser Beispielprogramme ist schon eine sehr interessante und lehr- reiche Beschäftigung und erleichtert den Einstieg in dieses Programm ganz erheblich. Durch vorgefertigte Bibliotheken wird die Einbindung des Arduinos in Processing wesentlich vereinfacht. So können über die virtuelle se- rielle Schnittstelle problemlos Messdaten übertragen und dann sehr ansprechend auf einem PC-Bildschirm dargestellt werden. Bild 8 zeigt beispielsweise die simultane Darstellung aller 6 Arduino-Analogkanäle in Form einer Balkengrafik. Aber auch die zeitliche Veränderung von Messwerten kann grafisch aufbereitet werden. So zeigt Bild 9 einen sogenannten Temperatur-Log- ger. Damit können Temperaturverläufe über Stunden oder Tage hinweg aufgezeichnet und dargestellt werden. Der Überwachung und Optimie- rung der hauseigenen Heizungsanlage steht so nichts mehr im Wege.

Ausblick

In diesem Artikel wurde gezeigt, wie man verschiedene Sensorwerte über die Analogkanäle des Arduinos auslesen und verarbeiten kann. Die Anwendungen dieses weiten Teilbereichs der Mikrocontrollertechnik sind nahezu unbeschränkt. Von einfachen Temperaturüberwachungen über die Steuerung von Solarzellenanlagen bis hin zu komplexen Auf- gaben in der Mess- und Regelungstechnik – überall werden Sensoren benötigt und eingesetzt.

Bild 6: Aufbau für das elektronische Luxmeter Bild 8: Darstellung von Analogkanälen als Balkengrafik Bild

Bild 6: Aufbau für das elektronische Luxmeter

Bild 6: Aufbau für das elektronische Luxmeter Bild 8: Darstellung von Analogkanälen als Balkengrafik Bild 9:

Bild 8: Darstellung von Analogkanälen als Balkengrafik

Bild 8: Darstellung von Analogkanälen als Balkengrafik Bild 9: Temperatur-Logger mit Processing So funktioniert‘s

Bild 9: Temperatur-Logger mit Processing

So funktioniert‘s 67

9: Temperatur-Logger mit Processing So funktioniert‘s 67 Bild 7: Ausgabe von Helligkeitswerten als ASCII-Grafik In
9: Temperatur-Logger mit Processing So funktioniert‘s 67 Bild 7: Ausgabe von Helligkeitswerten als ASCII-Grafik In

Bild 7: Ausgabe von Helligkeitswerten als ASCII-Grafik

In neuerer Zeit hat sich für diese Anwendungen auch der Begriff „Phy- sical Computing“ etabliert. Hierunter versteht man die Erfassung und phy- sikalische Beeinflussung bzw. Steuerung der Umwelt mittels elektronischer Sensoren und Aktuatoren. Der erste Teil, die Sensorik, wurde bereits in diesem Artikel behandelt. Die Ansteuerung von Aktuatoren wie Schrittmo- toren oder Servos folgt in einem späteren Beitrag. Ein weiterer wichtiger Teilbereich des Physical Computing ist die Über- tragung von Daten über Schnittstellen und Interfaces wie USB, RS232 und I 2 C. Diese Themen werden im nächsten Artikel dieser Serie behandelt.

Empfohlenes Material

Franzis-Lernpakete wie etwa „Elektronik mit ICs“ enthalten Materialien wie ein lötfreies Steckbrett, Widerstände und LEDs etc., die für den Aufbau von Schaltungen mit dem Arduino gut geeignet sind.

Aufbau von Schaltungen mit dem Arduino gut geeignet sind. Weitere Infos: [1] www.processing.org G. Spanner:
Aufbau von Schaltungen mit dem Arduino gut geeignet sind. Weitere Infos: [1] www.processing.org G. Spanner:
Aufbau von Schaltungen mit dem Arduino gut geeignet sind. Weitere Infos: [1] www.processing.org G. Spanner:
Weitere Infos: [1] www.processing.org G. Spanner: Arduino – Schaltungsprojekte für Profis, Elektor-Verlag, 2012,

Weitere Infos:

[1] www.processing.org

G. Spanner: Arduino – Schaltungsprojekte für Profis,

Elektor-Verlag, 2012, Best.-Nr.: J5-10 94 45

G. Spanner: AVR-Mikrocontroller in C programmieren,

Franzis-Verlag, 2010, Best.-Nr.: J5-09 73 52

Preisstellung August 2014 – aktuelle Preise im Web-Shop

Empfohlene Produkte/Bauteile:

Best.-Nr.

Preis

Arduino-Uno-Platine R3

J5-10 29 70

27,95

Mikrocontroller-Onlinekurs

J5-10 20 44

99,–

Lernpaket Mikrocontroller programmieren

J5-10 68 46

129,–

Alle Arduino-Produkte wie Mikrocontroller-Platinen, Shields, Fachbücher und Zubehör finden Sie unter: www.arduino.elv.de

32 So funktioniert’s Arduino verstehen und anwenden Teil 7: Schnittstellenpraxis – Kommunikation mit Laptop und

32 So funktioniert’s

Arduino verstehen und anwenden

Teil 7: Schnittstellenpraxis – Kommunikation mit Laptop und PC

und anwenden Teil 7: Schnittstellenpraxis – Kommunikation mit Laptop und PC www.elvjournal.de www.elvjournal.de

www.elvjournal.de

www.elvjournal.de

Im siebten Teil der Artikelserie „Arduino ver- stehen und anwenden“ geht es um die Übertra- gung von Daten über Schnittstellen. Die zentrale Schnittstelle des Arduino ist das USB-Interface, über das jeder aktuelle Arduino verfügt.

Über die USB-Buchse wird der Arduino nicht nur mit Strom versorgt, sondern auch die gesamte Datenkom-

munikation läuft über diese Schnittstelle. Dabei sind zwei grundlegende Methoden zu unterscheiden:

· Übertragung von Sketchen zum Arduino

· Austausch von Daten zwischen PC und Arduino, während auf dem Prozessor ein Programm abläuft

In diesem Artikel werden die Funktion dieser Schnitt- stelle und ihre möglichen Anwendungen genauer be- handelt.

Serielle Datenübertragung

Wenn Daten zwischen einem Mikrocontroller und einem PC ausgetauscht werden sollen, so ist dafür die serielle Schnittstelle noch immer das Mittel der Wahl. Dies mag in Zeiten der allgegenwärtigen USB- Schnittstelle etwas überraschen, und schließlich ist der Arduino ja auch über eine USB-Schnittstelle mit dem PC verbunden. Wenn man den Aufbau des Arduino-Boards aber et- was genauer betrachtet, so stellt man fest, dass der Mikrocontroller tatsächlich nur über eine klassische serielle Verbindung kommuniziert. Erst ein weiterer Baustein sorgt für die Umsetzung der RS232-Signale auf ein USB-kompatibles Format. In den früheren Arduino-Versionen wie dem Due- millenove wurde die Umsetzung von einem Spezial- baustein übernommen, dem FT232RL der Firma Future Technologies. Da der FT323RL verhältnismäßig teuer ist, wurde dieser Baustein beim aktuellen Arduino Uno durch einen zweiten AVR-Controller, den ATmega16U2, er- setzt. Dieser Controllertyp verfügt über eine integ- rierte USB-Schnittstelle und kann mittels einer spe- ziellen Firmware USB-Signale in das RS232-Format umwandeln. Noch einen Schritt weiter ist der Arduino Leo- nardo. Hier wurde der Controllertyp ATmeg32U4 als Hauptcontroller eingesetzt. Dieser kann, wie der Mega16U4, ebenfalls direkt USB-Signale verarbeiten.

So funktioniert’s 33

direkt USB-Signale verarbeiten. So funktioniert’s 33 Auch im Arduino Micro kommt dieser Chip zum Ein- satz.

Auch im Arduino Micro kommt dieser Chip zum Ein- satz. Erst aufgrund der besonders kleinen Gehäuse- bauform des Chips konnte der Micro auf die Größe eines klassischen DIL-ICs reduziert werden. Die USB-Schnittstelle ist natürlich auch ein wei- terer Grund für die große Beliebtheit der Arduino- Boards. Durch diese Schnittstelle kann der Arduino an praktisch jeden modernen PC oder Laptop prob- lemlos angeschlossen werden. Der Anwender braucht sich um Schnittstellenwandler etc. keine Gedanken mehr zu machen. Aber auch wenn die RS232-Schnittstelle in der modernen PC-Technik praktisch ausgestorben ist, so

ist sie doch in anderen Bereichen noch weit verbrei- tet. So ist RS232-Kommunikation noch sehr häufig in folgenden Anwendungen zu finden:

· Externe GPS-Module, sogenannte „GPS-Mäuse“

· Seriell angesteuerte LC-Displays

· Messgerätetechnik

· Industrielle Steuerungen etc.

Auch bei der Verbindung von einzelnen Mikrocont- rollern untereinander spielt die serielle Schnittstelle noch eine große Rolle. Außerdem können gerade auch sehr preisgüns- tig erhältliche oder noch vorhandene ältere PCs mit RS232-Schnittstelle in Kombination mit Mikrocon- trollern nutzbringend eingesetzt werden. Da hier meist keine sehr hohen Anforderungen an die Leis- tungsfähigkeit des Rechners gestellt werden, bieten sich solche Rechner als „Terminaleinheiten“ für den Arduino an.

Grundlagen der seriellen Kommunikation

Prinzipiell kann man zwei Methoden der Datenübertra- gung unterscheiden:

· Parallele Kommunikation

· Serielle Kommunikation

Bei der parallelen Datenkommunikation werden meh- rere, meist acht Bit, gleichzeitig übertragen. Dies erfordert aber immer eine parallele Verlegung von acht Leitungen bzw. acht Adern in einem Kabel (plus eine Masseverbindung), d. h. einen vergleichsweise hohen technischen Aufwand. Insbesondere bei sehr hohen Datenraten treten erhebliche Probleme mit

34 So funktioniert’s L ogis ch 1 L ogis ch 0 1 0 1 0
34 So funktioniert’s
L
ogis ch 1
L
ogis ch 0
1
0
1
0
1
0
0
0
1
0
1
1
1
0
+15 V
+15 V
+3 V
+3 V
0 V
-3 V
-3 V
-1 5 V
-1 5 V
S
tart B it
LSB 0
B
it 1
B
it 2
B
it 3
B
it 4
B
it 5
B
it 6
MS B 7
odd P arity
S top B it
S
tart B it
it 5 B it 6 MS B 7 odd P arity S top B it S

Bild 1: RS232-Protokoll

P arity S top B it S tart B it Bild 1: RS232-Protokoll Bild 2: Ausgabe

Bild 2: Ausgabe einer ASCII-Tabelle auf die serielle Schnittstelle

Ausgabe einer ASCII-Tabelle auf die serielle Schnittstelle Bild 3: So sieht die Ausgabe mit falsch eingestellter

Bild 3: So sieht die Ausgabe mit falsch eingestellter Baudrate aus!

www.elvjournal.de

der Synchronisierung der acht Kanäle auf, so dass alle moderneren Übertragungsverfahren, wie etwa auch USB, nur noch seriell ausgeführt werden. Bei der seriellen Übertragung werden die Daten-

bits zeitlich nacheinander übertragen. Im einfachs-

ten Fall kommt man daher mit einer Signalleitung aus. Für eine bidirektionale Verbindung sind zwei Leitungen ausreichend (plus Masse). Um eine korrekte Interpretation der übertragenen Daten zu gewährleisten, müssen Datensender und -empfänger ein gemeinsames Protokoll benutzen. In diesem Protokoll müssen die wichtigsten Parameter

festgelegt sein wie:

· Übertragungsgeschwindigkeit

· Bitdefinition

· Start- und Endbedingung für die Übertragung

Auf PC-Seite werden die verfügbaren seriellen Schnittstellen mit COM bezeichnet. So verfügen die meisten PCs intern noch über diese Schnittstelle, auch wenn sie nicht mehr über eine Buchse am Ge- häuse zur Verfügung gestellt wird. Bei der Installati- on von sogenannten „virtuellen“ COM-Schnittstellen sind die internen Ports dann aber oft noch als COM1 oder COM2 vorbelegt. Die serielle Datenübertragung haben wir prinzi- piell schon bei der ersten Programmierung des Ar- duino kennengelernt. Ein Anwendungsprogramm wird nämlich ebenfalls über das serielle Protokoll zum μC übertragen. Deshalb war es auch notwendig, bei der Installa- tion der Entwicklungsumgebung eine spezielle COM- Schnittstelle auszuwählen. Bild 1 zeigt die prinzipielle Funktion der seriellen Schnittstelle. Die Übertragung beginnt mit einem sogenannten Startbit. Dann folgen die Datenbits, wobei mit dem niedrigstwertigen Bit, dem soge- nannten Least Significant Bit (LSB), begonnen wird. Den Abschluss der Daten bildet entsprechend das höchstwertige Bit (MSB: Most Significant Bit). Ab- schließend folgen das Parity- und ein oder 2 Stopp- Bits. Ursprünglich wurden für die Übertragung auf elek- trischer Ebene Spannungen zwischen ±15 V verwen- det (siehe Bild 1 unten). Bei Controller-Anwendungen kommt dagegen meist die sogenannte TTL-kompatible Version zum Einsatz. Diese verwendet Spannungen von 0 und +5 V für die Bitübertragung.

Die serielle Schnittstelle am Mikrocontroller

Beim Arduino-Board steht die serielle Schnittstelle an den Pins 0 und 1 zur Verfügung Diese Pins sind deshalb auch mit RX und TX für Receive (Empfangen) und Transmit (Senden) gekennzeichnet. Diese beiden Pins sind auf dem Board direkt mit dem RS232-zu- USB-Wandler verbunden. Damit wird die Kommunikation des Controllers mit einem PC sehr einfach. Der einzige Parameter, der noch eingestellt werden muss, ist die Übertragungs- geschwindigkeit. Diese wird auch als „Baudrate“ be- zeichnet.

So funktioniert’s 35

So funktioniert’s 35 Folgende Datenraten stehen zur Verfügung: Neben dem ASCII-Zeichen selbst werden hier noch die

Folgende Datenraten stehen zur Verfügung:

Neben dem ASCII-Zeichen selbst werden hier noch die zugehörigen Codes in dezimaler (dec), hexade-

300

1200

zimaler (hex), oktaler (oct) und binärer (bin) Form

2400

4800

dargestellt. Bild 2 zeigt die Ausgabe im Seriellen Mo-

9600

14.400

nitor der Arduino-IDE.

19.200

28.800

Einer der häufigsten Fehler bei der Arbeit mit der

38.400

54.760

seriellen Schnittstelle ist, dass die Baudraten auf

115.200

Sender- und Empfängerseite nicht übereinstimmen.

Die Standard-Einstellung ist 9600 Baud.

Bild 3 zeigt das Ergebnis, wenn die Sendebaudrate

wie im obigen Code-Beispiel auf 9600 gesetzt ist, die Empfangsbaudrate am Seriellen Monitor jedoch auf

Die Befehle zur Steuerung der seriellen Schnittstelle

Für die Steuerung der seriellen Schnittstelle können die folgenden Be- fehle eingesetzt werden:

Serial.begin(baudrate);

4800 steht. Sollten Sie also in Zukunft unverständliche Zei-

chenfolgen auf Ihrem Bildschirm haben, ist es immer eine gute Idee, zu prüfen, ob die Baudraten auf Sen- der- und Empfängerseite übereinstimmen.

Hier wird die serielle Schnittstelle initialisiert. Die Baudrate ist der einzige hierfür erforderliche Parameter. Es ist lediglich darauf zu achten, dass die hier angegebene Baudrate mit der im Empfänger auf der PC-Seite identisch ist.

Mit Serial.print(); können dann bereits Informationen an den PC übertragen werden.

Serial.println(); fügt nach der Ausgabe einen Zeilenneuanfang („Line“) ein.

Liefert die Abfrage von Serial.available() einen Wert >0, so stehen Daten an der Schnittstelle bereit.

Diese können dann mit Serial.read(); eingelesen werden.

Der Arduino an der kurzen Leine:

direkte Steuerung des Controllers mit dem PC

Eine sehr wichtige Aufgabe in der Technik ist die Steuerung von Hardware-Komponenten von einem Rechner aus. Diese Aufgabe ist gewissermaßen die Umkehrung des letzten Praxisbeispiels. Das folgende Programmbeispiel zeigt, wie man vom PC aus eine LED ein- und ausschalten kann. Nach dem Laden des Programms kann die LED 13 über den Datenmonitor geschaltet werden. Das Sen- den einer „1“ schaltet die LED ein. Wird eine „0“ ge- sendet, so erlischt die LED. Für das Senden der Werte kann wieder der Serielle Monitor eingesetzt werden (Bild 4). Die gewünschten Werte werden dort in das oberste Feld eingetragen und mit dem „Senden“-But- ton zum Arduino übertragen.

 

// receive serial data

 

Der Arduino geht auf Sendung:

Übertragung von Daten vom Arduino an den PC

int recData = 0; int LED = 13;

Als erstes Praxisbeispiel soll eine ASCII-Tabelle vom Arduino zum PC gesendet werden. Der Sketch dazu kann wie folgt aussehen:

//on-board LED

void setup()

 

{

pinMode(LED, OUTPUT); digitalWrite(LED, LOW);

// ASCII table to RS232

Serial.begin(9600);

void setup() { Serial.begin(9600); Serial.println("ASCII Tabelle");