Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Der Arduino eröffnet für kleines Geld auch Programmier-Einsteigern die Welt der Robotik: Er ist ein universeller Steuerungs-Controller, an den sich unzählige Sensoren, Motoren und andere Aktoren anschließen lassen. Kombiniert mit dem Baukastensystem fischertechnik lassen sich so Modellroboter mit erstaunlicher Leistungsfähigkeit entwickeln.
Das Buch zeigt an drei Grundmodellen die schier unbegrenzten Möglichkeiten solcher Arduino-gesteuerter fischertechnik-Roboter:
- der "Plotter": ein hoch präziser und schneller 2D-Drucker, der HP-GL-Dateien einlesen und plotten kann,
- der "Delta": ein Roboter-Arm, der Objekte mit hoher Geschwindigkeit greifen, sortieren und gegen den man Tic-Tac-Toe spielen kann,
- der "Flitzer": ein Auto, das sich fernsteuern lässt oder auch selbständig einer Fahrbahn folgen, eine Parklücke finden, einparken sowie eine vorgegebene GPS-Position anfahren kann.
Das Buch möchte zum Weiterbauen und Experimentieren anregen und enthält, neben einer Einführung in die verwendeten Arduino Shields und Sensoren, zahlreiche Ideen und Vorschläge, welche weiteren Modelle und Steuerungen sich aus diesen drei Grundmodellen konstruieren lassen.
Sie lesen das E-Book in den Legimi-Apps auf:
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Dirk Fox ist Informatiker, Gründer und Geschäftsführer eines Beratungsunternehmens für IT-Sicherheit, Herausgeber einer Fachzeitschrift für Datenschutz und Datensicherheit, Vorstand eines großen IT-Netzwerks – und begeisterter »fischertechniker«. Er gibt die fischertechnik-Zeitschrift »ft:pedia« heraus und setzt sich für den Ausbau des Technikunterrichts an deutschen Schulen ein – mit fischertechnik.
Thomas Püttmann ist außerplanmäßiger Professor für Mathematik an der Ruhr-Universität Bochum. Zur Vermittlung von Themen aus den Bereichen Mathematik, Technik und Naturwissenschaften entwickelt er gezielt lehrreiche Modelle, wenn möglich aus fischertechnik. Als echter Mathematiker optimiert er seine Konstruktionen so lange, bis man keinen Stein mehr weglassen oder verschieben kann. Regelmäßig schreibt er Beiträge für die »ft:pedia«.
Dirk Fox und Thomas Püttmann sind auch die Autoren des erfolgreichen ersten fischertechnik-Buchs »Technikgeschichte mit fischertechnik«, das Ende 2015 im dpunkt.verlag erschienen ist.
Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+:
www.dpunkt.plus
Dirk FoxThomas Püttmann
Modelle, Steuerung, Programmierung
Dirk Fox
Thomas Püttmann
Lektorat: Dr. Michael Barabas
Projektkoordinierung/Lektoratsassistenz: Anja Weimer
Copy-Editing: Ursula Zimpfer, Herrenberg
Satz: Ulrich Borstelmann, www.borstelmann.de
Herstellung: Stefanie Weidner, Frank Heidt
Umschlaggestaltung: Helmut Kraus, www.exclam.de
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen National-bibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print978-3-86490-426-4
PDF978-3-96088-963-2
ePub978-3-96088-964-9
mobi978-3-96088-965-6
1. Auflage 2020
Copyright © 2020 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Hinweis:
Der Umwelt zuliebe verzichten wir auf die Einschweißfolie.
Schreiben Sie uns:
Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: [email protected].
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten.
Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Dies gilt insbesondere für »fischertechnik«, eine eingetragene Marke der fischertechnik GmbH, 72178 Waldachtal. Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.
5 4 3 2 1 0
Zur Einführung
Eine kurze Geschichte der Roboter
fischertechnik-Roboter
Arduino-Steuerung
Warum dieses Buch?
Literatur
1Der Arduino
1.1Geschichte
1.2Was ist der Arduino?
1.3Der Arduino im Vergleich
1.4Der ftDuino
1.5Anschlüsse
1.6Anbau
1.7Motor Shield
1.8Literatur und Links
2Die Programmierung des Arduino
2.1Grundsätzliches
2.2Bibliotheken
2.3Serieller Monitor
Ausgabe
Eingabe
Debugging
2.4I/O-Ports
Digitale Ports
Analoger Output
Analoge Ports
2.5Interrupts
2.6Timer
2.7Serielle Protokolle
I2C-Protokoll
SPI-Protokoll
2.8Mathematische Operationen
2.9Adafruit Motor Shield
Gleichstrommotoren
Schrittmotoren
Servomotoren
2.10Literatur und Links
3Der Buggy
3.1Die Geschichte des Buggys
3.2Das Buggy-Basismodell
Mechanischer Aufbau
Akku, Controller und Motorsteuerung
3.3Buggy-Steuerung
Tanzender Buggy
IR-Fernsteuerung
Bewegungssteuerung
Hinderniserkennung mit Bumpern
Hinderniserkennung mit Ultraschall
Spurfolger mit IR-Sensor
Objektfolger mit Kamera
Spurfolger mit Kamera
Tacho- und Hodometer
3.4Literatur und Links
4Der Flitzer
4.1Einführung
4.2Konstruktion des Flitzers
Vorderradlenkung
Karosserie und Beleuchtung – vorne
Hinterradantrieb
Karosserie und Beleuchtung – hinten
Erläuterung der Konstruktion
Controller, Akku und Verkabelung
Konstruktionsvarianten
4.3Die Steuerung
Lenkung
Beleuchtung und Hupe
Tachometer
Funkfernsteuerung mit Joystick
Funkfernsteuerung mit Nunchuk
Geschwindigkeitsbegrenzer und Abstandsregeltempomat
Spurverlasswarner und Spurhalteassistent
Parkmanöverassistent
4.4Literatur
5Der Plotter
5.1Hintergrund
5.2Mechanische Konstruktion
Grundplatte
Schlitten
Schreibkopf
Konstruktionshinweise
5.3Antrieb
5.4Anschluss an den Arduino
5.5Ansteuerung des Plotters
5.6Grafik-Beschreibungssprache
HP-GL
Befehlsumfang der Implementierung
HP-GL-Basisbefehle
Bresenham-Algorithmus
HP-GL-Vektorgrafik- und Vieleck-Befehle
HP-GL-Parser
Plotter-Steuerungsprogramm
5.7Der Plotter im Betrieb
Papier
Einige einfache HP-GL-Dateien
Komplexere HP-GL-Vektorgrafiken
5.8Literatur und Links
6Der Greifer
6.1Industrieroboter in Kinderzimmern
6.2Steuerung mit Potenziometern
Aufbau und Motorisierung
Anschluss der Elektronik
Das Auslesen des Potis
Die Motorsteuerung
6.3Der Aufbau des Greifers
Der Körper
Der Oberarm
Die Greifhand
Der Unterarm
Das Schultergelenk
Die Kette und die Parallelführung des Greifers
Der Anbau der Motoren und der Potenziometer
Die Verkabelung
6.4Die Ansteuerung der Motoren
Wie sich die Potenziometerwerte ändern
Die Anlaufwerte
Die Motorsteuerung
Die Steuerung der Greifhand
6.5Die Türme von Hanoi
Die Lösung des Problems durch Rekursion
Das Programmieren der Rekursion
Teach-in: das Anlernen von Positionen
Die Funktion zum Bewegen einer Scheibe
Der Sketch im Überblick
6.6Literatur und Links
7Der Delta
7.1Parallel ist klasse!
7.2Aufbau und Verkabelung
Schultergelenke
Oberarme
Schultern
Motorisierung
Der Rahmen
Unterarme
Hand
Verkabelung
7.3Positionserkennung und Motorsteuerung
Auslesen der Potenziometer
Motorsteuerung
Fehlerbehebung, Genauigkeit, Geschwindigkeit
7.4Elektromagnet und Nunchuk
Elektromagnet und Kugeln
Nunchuk
7.5Solitaire
Das Spiel
Teach-in
Die Programmierung
7.6Tic-Tac-Toe
Das Spiel
Die Daten
Die Logik
Die Steuerung mit dem Nunchuk
Das Holen und Ablegen der Kugeln
Der globale Programmablauf
Bedienung per Tastsinn
7.7Kinematik: Wo ist die Hand?
Winkel der Oberarme
Geometrie
Direkte Kinematik
Der Roboter als Maus
7.8Die Hand zu vorgegebenen Koordinaten bewegen
Inverse Kinematik
Koordinaten anfahren
Positionen geradlinig ansteuern
7.9Manipulator mit Vakuumsauger
Die Unterdruckeinheit
Anbau an den Delta-Roboter
Der Manipulator mit Nunchuk
7.10Werkstücke sortieren mit der Pixy-Kamera
Die Pixy-Kamera am Arduino
Anbau am Delta-Roboter
Anlernen von Werkstücken
Die Arduino-Library für die Pixy-Kamera
Werkstücke stapeln oder sortieren
7.11Literatur und Links
Glossar: Akronyme
Bildnachweise
Spätestens seit der Antike träumt der Mensch davon, etwas Künstliches zu schaffen, das Tätigkeiten automatisch ausführt und so den Eindruck erweckt, dass es lebt oder mittels »magischer Kräfte« funktioniert. So beschrieb schon Heron von Alexandria (1. Jhd. n. Chr.) in seinem Werk »Pneumatika« neben anderen einen Mechanismus, der automatisch die Türen eines Tempels öffnete, sobald ein Opferfeuer auf einem Altar angefacht wurde (Abb. E–1) [1].
Abb. E–1Die »automatischen« Tempeltüren nach Heron von Alexandria
Viele der Schau- und astronomischen Uhren an Kirchen und Rathäusern erhielten ab dem 14. Jahrhundert Schlag-, Spiel- und Automatenwerke, die zur vollen Stunde ausgelöst wurden und eine große Wirkung auf die Zuschauer ausübten. So kräht seit 1530 an der Berner Zytglogge ein Hahn vier Minuten vor dem Stundenschlag und schlägt mit den Flügeln; in der Folge dreht ein Bärenzug seine Runde und ein Narr schellt an zwei über ihm hängenden Glocken (Abb. E–2). Ein ähnlicher Hahn fand sich schon an der ersten Uhr des Straßburger Münsters aus dem Jahr 1353.
Abb. E–2Figurenspiel an der Berner Zytglogge aus dem Jahr 1530
Leonardo da Vinci (1452-1519) konstruierte im 15. Jahrhundert zahlreiche Maschinen, die in Theatern und Fürstenhöfen Volk und Adel beeindruckten, darunter bewegliche Ritterrüstungen und auch ein Fahrzeug, das sich, von zwei Federn angetrieben, selbstständig fortbewegte (Codex Atlanticus, ca. 1478-1480, Abb. E–3). Für den französischen König Franz I. entwickelte er im Jahr 1516 einen mechanischen Löwen, der auf den König zulief, sich auf die Hinterläufe setzte und aus seinem Maul oder Brustkorb Lilien vor dessen Füße fallen ließ.
Die Leistungsfähigkeit solcher Konstruktionen war allerdings begrenzt, denn es existierten nur simple Energiespeicher (wie z. B. Federn, Gewichte oder Wasserdruck). Zudem erlaubte die aus Holz realisierte grobe Mechanik nur sehr einfache Steuerungen. Mit der Entwicklung von verschleißarmen Metallgetrieben für Turmuhren und den Fortschritten in der Feinmechanik wurden komplexere Getriebe in deutlich geringerer Größe und mit weit weniger Reibungsverlusten möglich. Eine Blütezeit erreichten solche mechanischen Automaten im 18. Jahrhundert. So konstruierte z. B. Jacques de Vaucanson (1709-1782) im Jahr 1738 eine schnatternde, fressende, trinkende, verdauende und schwimmende mechanische Ente (Abb. E–4).
Weltberühmt wurde der vorgeblich humanoide Schachautomat von Wolfgang von Kempelen (1734-1804) aus dem Jahr 1769 (Abb. E–5). Über mehrere Jahrzehnte blieb seine Funktionsweise ein Geheimnis, was die öffentliche Diskussion und die Fantasie der Menschen stark anfachte. Auch wenn der Automat tatsächlich durch einen kleinwüchsigen Menschen gesteuert wurde, war dieser Apparat ein mechanisches Bravourstück, der das Gebiet stark beflügelte. Eine weit größere, aber viel weniger bekannte Leistung von Kempelens war die Konstruktion einer Sprechmaschine im Jahr 1791 – der erste funktionsfähige Sprachsyntheseapparat überhaupt.
Abb. E–3Leonardo da Vincis Konstruktion eines federgetriebenen Fahrzeugs (Codex Atlanticus) [2]
Abb. E–4Mechanische Ente mit Verdauungsapparat von Jacques de Vaucanson
Abb. E–5Versuch einer Nachbildung des Schachtürken von Wolfgang von Kempelen durch Joseph Friedrich von Racknitz (1789)
Mit der Dampfmaschine von James Watt (1736-1819) aus dem Jahr 1784 mit Planetengetriebe erhielt die Menschheit im ausgehenden 18. Jahrhundert die erste – und lange ersehnte – von Ort und Zeit unabhängige Kraftmaschine, den ersten Motor [3].
Wenig später, im Jahr 1805, stattete Joseph-Marie Jacquard (1752–1834) den 20 Jahre zuvor von Edmund Cartwright (1743-1823) erfundenen mechanischen Webstuhl mit einer Lochkartensteuerung aus – und baute damit den ersten »programmierbaren Automaten« (Abb. E–6). Mit Jacquards Webstuhl erreichte die Automation eine neue Stufe: Zum ersten Mal hatte ein Automat einen echten Zweck und Nutzen jenseits davon, Menschen zu unterhalten oder zu beeindrucken.
Abb. E–6Modell des Jacquard-Webstuhls im Musée des Arts et Métiers (Paris)
Die Vorstellung, dass technische Automaten dem Menschen unangenehme, monotone, harte oder gefährliche Arbeiten abnehmen können, war entscheidend für den modernen Begriff »Roboter«. Er wurde 1920 vom tschechischen Künstler Josef Čapek (1887-1945) für die künstlichen Menschen im Theaterstück R.U.R. seines Bruders Karel Čapek (1890-1938) geprägt: »Robota« ist das tschechische Wort für »Zwangsarbeit« oder »Frondienst«.
Der wirkliche Durchbruch für die Entwicklung nützlicher und flexibel einsetzbarer Roboter gelang jedoch erst mit der Entwicklung des Computers und dessen anschließender kontinuierlicher Miniaturisierung. Durch die Erfindung des integrierten Schaltkreises (IC) im Jahr 1958/1959 durch Jack Kilby (1923-2005) und Robert Noyce (1927-1990) und die Entwicklung des Mikroprozessors im Jahr 1970 wurden sehr flexible, leichte, schnelle und verschleißfreie, vor allem aber programmierbare Steuerungen möglich.
In den vergangenen 50 Jahren wurden Energiespeicher, Steuerungen und Antriebe so leistungsfähig, klein und bezahlbar, dass Roboter den Menschen inzwischen zahlreiche komplexe Tätigkeiten abnehmen können. Heute durchdringen Roboter immer mehr Lebensbereiche. Moderne Produktionsanlagen sind ohne Roboter schlichtweg undenkbar geworden. Sie verrichten Tätigkeiten exakter, ohne Pausen und meist wesentlich schneller als Menschen – und sind dabei auch noch günstiger. Durch Roboter bleibt die Produktion auch in einem Hochlohnland wie Deutschland wirtschaftlich und ist die Herstellung vieler Präzisionsprodukte überhaupt erst möglich. Roboter sind daher eine moderne Ausprägung des zentralen Ziels aller menschlichen Erfindungsgabe: der Verbesserung unserer Lebensumstände.
Zunehmend werden Roboter auch für Arbeiten in für Menschen tödlichen Umgebungen eingesetzt. Denn Roboter brauchen keinen Sauerstoff und können, bei geeigneter Konstruktion, weit höhere Temperaturen, Strahlungen und Drücke als Menschen ertragen. Sie arbeiten auch im Wasser, im All oder in verseuchtem Gelände zuverlässig. Daher werden sie auch als Lebensretter und Mechaniker eingesetzt – sie können Verschüttete bergen und Bomben entschärfen. Und schließlich können Roboter einige Dinge sogar deutlich besser als Menschen: Sie erkunden als fliegende Drohnen Gegenden aus jeder Höhe und Perspektive oder tauchen in sehr große Tiefen. Auch Rechenleistung und Reaktionsfähigkeit sind größer und schneller als die eines Menschen: Inzwischen spielen sie besser Schach, gewinnen im Tischtennis und sind gerade dabei zu beweisen, dass sie die besseren Autofahrer sind. Auch als Assistenten in der Medizin bewähren sie sich: Sie sind feiner steuerbar als Menschenhände, arbeiten immer konzentriert und ermüden nicht.
Neben der Verfeinerung der mechanischen Konstruktion und immer leistungsfähigeren, schnelleren und kleineren Mikroprozessoren für die Steuerung sind es vor allem hochauflösende Sensoren und ausgefeilte Algorithmen, z. B. zur Bildauswertung, die diese Leistungen möglich machen. In die Entwicklung eines Roboters fließen daher zahlreiche Spezialkenntnisse ein: Nur ein abgestimmtes Zusammenspiel von Mechanik, Programmierung, Sensorik und Elektronik führt zum gewünschten Ergebnis. Dabei helfen auch Erkenntnisse aus der Biologie (Stichwort »Bionik«): Viele Lebewesen haben optimierte Bewegungsapparate ausgebildet, die heute als Vorbild für die Konstruktion von Robotern dienen – z. B. für deren Aerodynamik oder die Bewegungssteuerung.
Roboter sind – das belegen zahlreiche MINT-Initiativen und Wettbewerbe – für viele Jugendliche und an Technik interessierte Junggebliebene ein faszinierender Einstieg in MINT-Themen. Sie eignen sich auch aus einem weiteren Grund als Thema von MINT-Projekten: Um einen Roboter »zum Leben« zu erwecken, braucht man Kenntnisse aus allen vier MINT-Bereichen: Mathematik, Informatik, Naturwissenschaften und Technik. An einem Roboter lässt sich daher auf hervorragende Weise und ganz konkret der praktische Nutzen dieser Kenntnisse vermitteln.
Dank der rasanten Entwicklung in der Informationstechnik ist die Konstruktion eines Roboters heute nicht mehr allein gut finanzierten Forschungsinstituten vorbehalten. Leistungsfähige Mikroprozessoren und hochwertige Sensoren gibt es inzwischen für wenige Euro – und hilfreiches Lernmaterial findet man zuhauf im Internet.
Für dieses Buch haben wir fünf Robotermodelle ausgewählt, an denen wir die praktische Anwendung von Grundlagen der Mechanik, der Regelungstechnik, der Mathematik und der Informatik vorstellen. Sie eignen sich nicht nur zum Selbststudium, sondern auch für den Einsatz im Unterricht – als Einführung in die Konstruktion und Steuerung komplexer technischer Systeme.
Inzwischen gibt es zahlreiche Bausätze für mobile Roboter. Sie ersparen dem Käufer den früher unvermeidlichen Gang in den Hobbykeller und erfreuen sich großer Beliebtheit – vor allem, weil gut ausgestattete Hobbykeller mit Werkbank, Bohrer, Säge und Feile inzwischen wahrscheinlich Seltenheitswert besitzen. Allerdings haben Bausätze einen großen Nachteil: Das Zusammenstecken eines Bausatzes spart nämlich nicht nur Zeit, sondern reduziert auch Einsichten. Die Auseinandersetzung mit Schwerpunkt, Reibung, Gewicht und Drehmoment, einwirkenden Kräften und statischer Stabilität hat der Hersteller vorweggenommen; sie ist daher am Bausatz nicht mehr nachvollziehbar.
Und ein zweiter wichtiger Nachteil beschränkt die Einsatzmöglichkeiten eines Bausatzes erheblich: Variationen und Ergänzungen des Robotermodells sind meist nur in geringem Umfang möglich, es gibt (wie – leider – üblicherweise in der Schule) nur genau »die eine« richtige Lösung – ganz anders übrigens als im wirklichen Leben. Da nachhaltige Lernprozesse aber nachweislich erst bei einer vertieften Auseinandersetzung mit einer nicht alternativlosen Lösung einer Problemstellung einsetzen, nämlich durch Experimentieren, Ausprobieren und das Analysieren von Fehlversuchen, sind Bausätze didaktische Sackgassen: Der Lernerfolg ist auf die vom Hersteller vorgesehenen Elemente beschränkt, wirkt nicht darüber hinaus und vermeidet Lernen durch Fehler.
Daher schlossen wir die Verwendung von Bausätzen für dieses Buch aus. Eine komplette Roboter-Eigenkreation stellt jedoch schon in Ermangelung gut ausgestatteter Hobbykeller keine geeignete Alternative dar. Deshalb haben wir uns für die Verwendung eines Konstruktionsbaukastens mit sehr geringen Herstellungstoleranzen und einem professionellen Verbindungssystem (Nuten, Zapfen, Riegel) entschieden, das die Entwicklung vielfältiger mechanischer Modelle und insbesondere Roboter-Prototypen erlaubt sowie deren spätere Modifikation, Ergänzung und Erweiterung ermöglicht. Wollen wir die Gestaltungsmöglichkeiten so offen wie möglich halten, also eine stabile Mechanik mit Statik, Getrieben und Antrieben, mit Pneumatik, Sensoren und Elektronik koppeln, ist das Konstruktionssystem fischertechnik dafür eine ideale Wahl.
Zumal mit fischertechnik bereits in den frühen 80er-Jahren des vergangenen Jahrhunderts erste Robotermodelle für Schulen entwickelt und eingesetzt wurden. 1987 widmete sich ein ganzes Buch der Programmierung von fischertechnik-Robotern [4], und im selben Jahr ließ ein CHIP-Sonderheft einen fischertechnik-Portalroboter Mühle spielen (Abb. E–7, [5]).
Abb. E–7Portalroboter spielt Mühle (CHIP Special, 1987) [5]
Die in diesem Buch vorgestellten fünf fischertechnik-Roboter sind Neuentwicklungen und eine Hommage an diese ersten, vor über 30 Jahren konstruierten fischertechnik-Roboter zugleich. Sie nutzen einerseits die statische, mechanische und konstruktive Leistungsfähigkeit des fischertechnik-Systems und zeigen andererseits, welche Möglichkeiten in der Verwendung heutiger Mikrocontroller und Sensoren stecken.
Die fünf Roboter lassen sich allesamt mit aktuellen fischertechnik-Bauteilen nachbauen und wurden von uns so gestaltet, dass sie mit relativ wenigen Bauteilen auskommen. Damit können sie auch mit kleineren fischertechnik-Bauteilsammlungen nachgebaut werden. Einzelne fehlende Teile lassen sich entweder durch kreative Konstruktionsvarianten ersetzen oder auch im Einzelteilvertrieb nachbestellen. Zu allen Modellen haben wir dafür Bauteillisten zusammengestellt, die auf der Webseite zum Buch zum Download bereitstehen.
Grundsätzlich sind auch zahlreiche Varianten unserer Konstruktionsvorschläge möglich – genau dazu wollen unsere Modellvorschläge anregen. Der Lerneffekt wird darunter nicht leiden, ganz im Gegenteil.
Die Firma fischertechnik bietet mehrere Controller zur Steuerung von fischertechnik-Modellen an: für junge Einsteiger den Smart BT Controller (als Nachfolger des ROBO LT Controllers) und für »Profis« den (sehr leistungsfähigen) ROBOTICS TXT Controller (als Nachfolger des ROBO TX Controllers). Beide können mit der beeindruckend flexiblen und leistungsfähigen grafischen Programmiersprache ROBO Pro programmiert werden, die wir vor allem Programmiereinsteigern auch sehr empfehlen.
Zur Steuerung der in diesem Buch vorgestellten fischertechnik-Roboter verwenden wir dennoch keinen der fischertechnik-Controller, sondern einen Arduino Uno (Abb. E–8). Zwar nimmt sich ein Arduino Uno mit seinem 16-MHz-8-Bit-Mikroprozessor und mickrigen 2 KB RAM geradezu wie ein Kinderspielzeug im Vergleich mit dem »Herz« des TXT Controllers aus – einem mit 600 MHz getakteten ARM Cortex A8, ausgestattet mit 256 MB RAM und 128 MB Flash-Speicher.
Abb. E–8Arduino Uno (Rev. 3)
Für die Wahl des Arduino sprechen jedoch vor allem zwei gewichtige Gründe:
Der fischertechnik-Controller ist selbst zum »Straßenpreis« von etwa 200 € kein Schnäppchen: Für einen Einsteiger, der die Leistungsfähigkeit des Controllers so bald nicht ausreizen wird, ist das eine hohe Investition. Der Smart BT Controller für rund 80 € wiederum besitzt zahlreiche Beschränkungen (wie die geringe Zahl an Ein- und Ausgängen und das Fehlen einer Möglichkeit zum Programm-Upload), die ihn für die Steuerung eines autonomen mobilen Roboters schlichtweg ungeeignet machen. Wer günstig einsteigen will, dem bleibt nur die Wahl eines anderen Mikrocontrollers.
Für Einsteiger in die (Roboter-)Programmierung, die eine gängige Programmiersprache wie C, Java oder Python verwenden möchten, ist die Verwendung des TXT Controllers eine Herausforderung: Mit Linux und einem C-Compiler sollte man umgehen können, bevor man hier die ersten Schritte wagt, auch wenn die fischertechnik-»Community« eine eigene Firmware entwickelt hat, die z. B. die Programmierung mit Python durch eine Schnittstelle unterstützt.
1
Der Preis eines Arduino Uno liegt mit 10-25 € bei einem Bruchteil des Preises eines TXT und er verfügt über eine Entwicklungsumgebung (IDE), in der Steuerungen in einem Derivat der Programmiersprache C/C++ entwickelt werden können. Entwicklungsumgebung, Hardware und Programmiersprache sind sehr ausgereift, schließlich gibt es den Arduino bereits seit dem Jahr 2005. Schon in den ersten drei Jahren wurden mehr als 50.000 Arduino-Boards verkauft; seitdem wird das Open-Source-Projekt kontinuierlich weiterentwickelt. Da das Board über einen 9-V-Anschluss verfügt, können wir den Arduino sogar mit einem fischertechnik-Netzteil betreiben.
Allerdings erkauft man sich den niedrigen Preis des Arduino mit verschiedenen Einschränkungen:
Der Arduino kommt ohne ein fischertechnik-kompatibles Gehäuse daher, das einen Einbau in fischertechnik-Modelle erleichtern würde und die Platine vor Beschädigungen und Kurzschlüssen schützt.
Er benötigt für die Ansteuerung der fischertechnik-Motoren sowie für die Kommunikation über WLAN oder Bluetooth zusätzliche aufsteckbare Boards (
Shields
), die den Preisvorteil abschmelzen.
Die Ein- und Ausgänge des Arduino sind nicht kurzschlussfest – wer sie verwendet, sollte daher wissen, was er tut, sonst ist der Controller schnell zerstört.
Zwar werden die Steuerungsprogramme in das RAM des Arduino geladen, aber der äußerst begrenzte Speicher erlaubt keine besonders umfangreichen Programme.
Dafür gibt es für fast jede denkbare Anwendung einen Beispiel-Sketch und für jeden verfügbaren Industriesensor eine kostenlose, in der Community getestete Treiberbibliothek, die man lediglich herunterladen und in die IDE des Arduino importieren muss. Der Arduino verfügt auch über deutlich mehr Ports (Input-Output-Anschlüsse) als die fischertechnik-Controller. Außerdem wartet er im Detail mit dem einen oder anderen Pluspunkt auf, den er selbst einem TXT Controller voraushat – mehr dazu im ersten Kapitel.
Mit diesem Buch wollen wir nicht nur zeigen, welche faszinierenden Möglichkeiten die Kombination eines ausgereiften technischen Baukastensystems mit einem komfortabel programmierbaren Mikrocontroller und zahlreichen Sensoren für den Roboterbau eröffnet. Wir möchten außerdem an konkreten Beispielen belegen, dass sich die Beschäftigung mit den Grundlagen der Informatik, Mathematik und Mechanik lohnt: Wer zuerst rechnet, seine Mechanik systematisch konstruiert und der Programmierung eine geeignete Modellbildung vorausschickt, kommt zu erheblich leistungsfähigeren Lösungen.
In unseren Robotermodellen verwenden wir ausgewählte, frei verfügbare Arduino-Bibliotheken und konzentrieren uns bei der Programmierung auf den Kern der jeweiligen Anwendung. Dadurch sind die Arduino-Sketche in diesem Buch überwiegend übersichtlich und kurz. Wir ersparen Ihnen außerdem die Suche nach einer passenden Bibliothek: Auf der Webseite zum Buch finden Sie nicht nur alle im Buch abgedruckten Programme (»Sketche«), sondern auch die aktuellen Bezugsquellen der von uns ausgewählten Arduino-Bibliotheken als anklickbare Links.
Außerdem haben wir dort 3D-Bauanleitungen der im Buch vorgestellten fischertechnik-Modelle zum Download bereitgestellt. Sie wurden mit dem Programm »fischertechnik Designer« entwickelt und lassen sich mit einem kostenlosen Viewer (für OS/X) bzw. einer Demoversion des Programms (für Windows) nutzen. Links auf Viewer und Demoversion finden sich ebenfalls auf der Webseite zum Buch. Zu den Schaltungen haben wir mit dem Open-Source-Programm »fritzing« eine grafische Darstellung der Anschlüsse von Motoren und Sensoren am Arduino bzw. an den verwendeten Shields erzeugt, die Sie ebenfalls auf der Webseite als editierbare Datei finden. Ergänzt haben wir Bezugsquellen für die Sensoren, Breadboards und Shields, die wir in unseren Modellen verwenden.
Die Programmierung des Arduino erfolgt in der Programmiersprache C (bzw. in C++). Das Buch enthält keine Einführung in die C-Programmierung, denn es gibt zahlreiche hervorragende Bücher und Online-Tutorials, die genau das bieten.2 Speziell für die Programmierung des Arduino existiert auch ein hervorragendes und umfangreiches Online-Referenz-Manual (in deutscher und englischer Sprache).3 Für den Nachbau der Modelle sind tiefere Kenntnisse der Programmiersprache C auch nicht erforderlich; die abgedruckten Sketche können direkt verwendet werden und vermitteln auch einem Programmiereinsteiger ein erstes Verständnis von der Programmiersprache. Wer zur Weiterentwicklung der vorgestellten Modelle und Programme tiefer in den Arduino und seine Möglichkeiten eintauchen möchte, dem empfehlen wir die Lektüre eines Grundlagenbuchs über den Arduino wie z. B. [6] und [7].
Für erfahrene C/C++-Programmierer hält der Arduino ein paar Besonderheiten bereit, denn wir haben es hier mit einem sogenannten Embedded System zu tun – einem Mikroprozessor ohne Bildschirm und Tastatur; die Ein-/Ausgabe erfolgt allein über I/O-Pins. Auf diese Besonderheiten gehen wir im zweiten Kapitel ein und stellen den Befehlsumfang des Arduino und einzelner, von uns verwendeter Bibliotheken vor. Das Kapitel erleichtert das Verständnis unserer Sketche und ermöglicht es Ihnen, diese zu modifizieren und weiterzuentwickeln. Dem fortgeschrittenen C-Programmierer wollen wir damit ersparen, ein Arduino-Buch zu erwerben und es mühsam nach eben diesen Besonderheiten zu durchforsten.
Webseite zum Buch:fischertechnik-roboter-mit-arduino.de
[1]Sigvard Strandh: Die Maschine. Geschichte, Elemente, Funktion. Weltbild Verlag, Augsburg 1992.
[2]Mark Rosheim: Leonardo’s Lost Robots. Springer-Verlag Berlin Heidelberg, Florenz 2006.
[3]Dirk Fox, Thomas Püttmann: Technikgeschichte mit fischertechnik. dpunkt.verlag, Heidelberg 2015.
[4]J. P. M. Steemann: Robotik mit dem Heimcomputer. Elektor Verlag, Aachen 1987.
[5]Gerhard Bader: fischertechnik und Computer. CHIP Special, Vogel Verlag, Würzburg 1987.
[6]Benjamin Kappel: Arduino. Elektronik, Programmierung, Basteln. Rheinwerk Verlag, Bonn 2016.
[7]Danny Schreiter: Arduino Kompendium. Elektronik, Programmierung und Projekte. BMU Verlag, Landshut 2019.
Die Steuerung der Modelle in diesem Buch erfolgt mit einem Arduino. Was genau ist der Arduino? Welche Vor- und Nachteile besitzt er im Vergleich mit den originalen fischertechnik- Controllern? Wie lässt er sich in einem fischertechnik-Modell verbauen und wie kann man fischertechnik-Sensoren daran anschließen und nutzen?
Der Arduino wurde von den Italienern Massimo Banzi und David Cuartielles entwickelt und im Jahr 2005 als Open-Source-Projekt veröffentlicht, bestehend aus einem Hardwareentwurf und einer Programmierumgebung. Seinen Namen verdankt der Arduino wahrscheinlich dem Markgrafen Arduin von Ivrea (ca. 955-1015), ab 1002 König von Italien – oder aber der gleichnamigen Bar in der Nähe des Interaction Design Institute von Ivrea, dem die beiden Entwickler angehörten.
Die Hardware besteht aus einem einfachen Mikrocontroller-Board mit analogen und digitalen Ein- und Ausgängen (Ports) auf 5-V-Basis. Für die vom Amerikaner David Mellis konzipierte, auf C++ basierende Arduino-Entwicklungssprache wurde eine auf Processing basierende und für die Betriebssysteme Windows, Linux und Mac OS X kostenlos verfügbare Entwicklungsumgebung (Integrated Development Environment, IDE) entworfen, in der Anwendungsprogramme, Sketche genannt, programmiert, getestet, übersetzt und auf den Arduino geladen werden können.
Gedacht ist der Arduino für alle Arten kleiner elektronischer Steuerungsprojekte, bei denen mit Sensoren Daten erhoben und verarbeitet oder Aktoren angesteuert werden sollen. Dank seines günstigen Preises (etwa 10-25 €), seiner vielseitigen Verwendbarkeit und der leicht zu erlernenden Programmiersprache eignet er sich besonders für Einsteiger. Er hat daher weltweit in vielen Schulen Einzug in den Unterricht gehalten.
Die von Banzi, Cuartielles und Mellis gegründete Arduino LLC pflegt die Entwicklungsumgebung, die – begleitet von zahlreichen Tutorials, einem Forum und einem Blog mit zahlreichen Projektideen – auf der Arduino-Webseite1 zum Download angeboten wird.
Für alle Boards, die unter dem Namen »Arduino« verkauft werden und auf der Platine das Arduino-Logo tragen, erhält die Arduino LLC eine Lizenzgebühr. Wer also einen solchen originalen Arduino (und keinen der meist etwas günstigeren Klone unter anderem Namen) kauft, unterstützt damit das Open-Source-Projekt und leistet einen Beitrag zur Finanzierung der Weiterentwicklung und Pflege der IDE.
Abb. 1–1Arduino Uno R3 (SMD-Version)
In den vergangenen 15 Jahren erschienen viele Varianten und Weiterentwicklungen des ursprünglichen Arduino-Boards, darunter die Modelle Due, Ethernet, Industrial 101, Leonardo, Lilipad, Mega, Micro, Nano, Pro, Yún und Zero. Sie sind wie der Lilipad für spezielle Anwendungen wie beispielsweise den Einsatz als Wearables vorgesehen, besonders klein wie der Nano, verwenden leistungsstärkere Prozessoren wie der Arduino Industrial 101 oder bieten mehr Speicher und zusätzliche I/O-Ports wie der Arduino Mega oder der Arduino Due.
In diesem Buch verwenden wir aufgrund der weiten Verbreitung und zugunsten einer möglichst großen Einsetzbarkeit unserer Steuerungen und Modelle das ursprüngliche Board, den Arduino Uno, in der aktuellen Revision 3 (R3). Die in diesem Buch vorgestellten Modelle funktionieren auch mit den meisten anderen Arduino-Varianten, allerdings sind dafür in der Regel bauliche Anpassungen am Modell erforderlich, da die Boards unterschiedliche Maße besitzen, und ggf. müssen kleine Korrekturen an der Software vorgenommen werden.
Anders als für die meisten Arduino-Varianten sind für den Arduino Uno geschlossene Gehäuse (Cases) erhältlich, die das Board vor Kurzschlüssen schützen und den Anbau an ein fischertechnik-Modell erleichtern – ein weiteres Argument für die Wahl des Arduino Uno.
Man kann den Arduino2 vereinfacht beschreiben als ein Mikroprozessor-Board mit 14 digitalen Ein- und Ausgängen und sechs analogen Eingängen, über die es Werte von Sensoren einlesen und Aktoren ansteuern kann. Sechs der digitalen Ein-/Ausgänge lassen sich via Hardware als PWM-Ausgang (Pulse Width Modulation, Pulsweitenmodulation) nutzen.
Der Mikroprozessor des Arduino ist ein mit 16 MHz getakteter ATmega328P der Firma Microchip Technology Inc. (bis Anfang 2016 Atmel Corp.): ein 8-Bit-Prozessor mit 32 kByte Flash-Speicher für Programme, 2 kByte Random Access Memory (RAM) für Daten und 1 kByte Electrically Erasable Programmable Read-Only Memory (EEPROM), das mit einer eigenen Library beschrieben werden kann. 0,5 kByte des Flash-Speichers sind von einem Bootloader vorbelegt, der das Hochladen und Starten von selbst entwickelten Programmen im Flash-Speicher übernimmt [1].
Der Arduino benötigt eine Gleichstrom-Spannungsversorgung von 7-12 V und 1 A. Dafür können z. B. die fischertechnik-Steckernetzteile, eine 9-V-Blockbatterie oder ein fischertechnik-Akku genutzt werden. Der Stromanschluss (5,5/2,1-mm-Buchse) ist gegen falsche Verpolung geschützt.
Für den »Online«-Betrieb am PC genügt zumindest für die meisten Sensoranwendungen auch die 5-V-Stromversorgung durch den USB-Anschluss (Typ B). Aber Vorsicht: Die maximale Belastbarkeit des USB-Anschlusses am PC (je nach Typ zwischen 100 und 900 mA) darf von Board und Sensoren nicht überschritten werden, sonst nimmt der PC-Anschluss Schaden. Viele Aktoren (insbesondere Motoren) benötigen allerdings eine höhere Spannung (fischertechnik: 9 V) und haben meist auch eine deutlich höhere Stromaufnahme. Da die Belastbarkeit der Ausgänge des Arduino sehr begrenzt ist – maximal 20 mA Dauerlast, in der Spitze bis 40 mA an den digitalen Ausgängen und höchstens 50 mA am 3,3-V-Anschluss –, müssen Aktoren mit größerem Strombedarf direkt am Vin- und GND-Pin angeschlossen werden. An diese Pins wird die externe Stromversorgung durchgeschleift; sie dürfen mit bis zu 200 mA belastet werden. Die Steuerung muss jedoch vom Arduino entkoppelt werden, da deren Strombedarf die PWM-Ausgänge überlasten würde. Daher verwendet man zur Ansteuerung von Motoren üblicherweise ein Motor Shield (siehe Abschnitt 1.7).
Die 14 digitalen Ports D0-D13 können jeweils als Eingang oder als Ausgang genutzt werden. Als Eingang liefern sie einen binären Wert (0 oder 1); dabei kann auch die Länge des anliegenden Signals bestimmt werden (zwischen 0,01 ms und 3 min.). Auch die Ausgänge des Arduino sind digital – sie liefern eine Spannung von entweder 0 oder 5 V. Über Pin D13 lässt sich der einzige Aktor, der auf dem Arduino-Board direkt montiert ist, ansteuern: eine LED (siehe Abb. 1–2: Pin 13 LED).
Damit darüber auch Gleichstrommotoren mit wechselnden Geschwindigkeiten oder LED mit unterschiedlicher Helligkeit angesteuert werden können, verwendet der Arduino (genau wie die fischertechnik-Controller) die Pulsweitenmodulation (Pulse Width Modulation, PWM): Abhängig von einem sogenannten PWM-Wert zwischen 0 und 255 erzeugt der Controller an dem gewählten Ausgang ein periodisches Signal mit einer festen, aber konfigurierbaren Frequenz/Periode. Der PWM-Wert gibt die Länge eines 5-V-Rechteckimpulses an, der in jeder Periode erzeugt wird. Beträgt der PWM-Wert 0, so gibt es keine Rechteckimpulse und am Ausgang liegt konstant 0 V an. Beträgt der PWM-Wert 255, so füllt der Rechteckimpuls die gesamte Periode aus und am Ausgang liegen konstant 5 V an.
Wie sich der am Digitalausgang angeschlossene Aktor bei den dazwischen liegenden PWM-Werten verhält, ist vom jeweiligen Aktor abhängig. Eine LED mit Vorwiderstand wird einfach ein- und ausgeschaltet. Bei PWM-Frequenzen oberhalb von ca. 20 Hz ist das Auge zu träge, um die einzelnen Blinkvorgänge wahrzunehmen und sieht nur noch ein durchgehendes Leuchten. Bei einem PWM-Wert von 128 ist der Impuls halb so lang wie die Periode. Die Leistung, die von LED und Vorwiderstand umgesetzt wird, ist daher nur halb so groß, als wenn eine konstante Spannung von 5 V anliegen würde.
Das Verhalten eines am Ausgang angeschlossenen Motors ist schwieriger zu verstehen. Im Ergebnis dreht er sich umso schneller, je höher der PWM-Wert ist. Die Induktivität des Motors glättet den Strom, der durch den Motor fließt. Dieser Glättungseffekt ist umso größer, je höher die eingestellte PWM-Frequenz ist. Bei hohen PWM-Frequenzen ist der Strom nahezu konstant. Der Motor verhält sich dann ungefähr so, als ob eine Gleichspannung angelegt wäre. Die Größe dieser Ersatzspannung lässt sich näherungsweise aus dem Verhältnis der Impulsdauer zur Periodendauer berechnen. Bei einer Ausgangsspannung von 5 V, einer Frequenz von 50 Hz (ein Impuls alle 20 ms) und einer Impulsdauer von 4 ms beträgt sie ungefähr
Eine hohe Frequenz hat allerdings nicht nur Vorteile. Durch die häufigeren Schaltvorgänge steigt die Verlustleistung (Schaltverluste in den Transistoren, Ankerwicklungen im Motor). Einige Motoren können daher nur mit Frequenzen von 30-200 Hz betrieben werden; verbreitet sind PWM-Frequenzen von 50 Hz (die auch für die Ansteuerung von Servos verwendet werden, s. u.). Für andere Motoren liegt die ideale Frequenz liegt deutlich höher (1-2 kHz); ab etwa 200 Hz erzeugen viele PWM-angetriebene Motoren hörbare Pfeifgeräusche. In [2] werden für die fischertechnik-Motoren Frequenzen von 70 Hz bis 1,7 kHz empfohlen; der ROBO TX Controller arbeitet mit 200 Hz [3].
Abb. 1–2Die Anschlüsse des Arduino Uno
Über die digitalen Ausgänge D3, D5, D6, D9, D10 und D11 des Arduino (auf dem Board mit einer »Tilde« ~ gekennzeichnet, Abb. 1–2) kann ein Analogwert von 0 bis 255 als 5-V-PWM-Signal ausgegeben werden. Die Ausgänge D5 und D6 verwenden dabei eine voreingestellte Frequenz von knapp 980 Hz, die Ausgänge D3, D9, D10 und D11 arbeiten mit einer PWM-Frequenz von 490 Hz. Diese Frequenzen können durch Änderung der Frequenzteiler auf einen Wert zwischen 31 Hz und 62 kHz geändert werden. Per Software können auch alle anderen digitalen Ausgänge mit einem PWM-Signal belegt werden.
Mit PWM-Signalen kann der Arduino auch auf direktem Wege bis zu zwei Servomotoren aus dem Modellbau ansteuern, die mit den fischertechnik-Controllern nur mit einem separaten I2C-Servo-Adapter genutzt werden können. Servos sind spezielle 5-V-Gleichstrommotoren mit einer Steuer- und Regelungselektronik, die es erlaubt, die Winkelposition der Motorwelle meist zwischen 0° und 180° über ein PWM-Signal einzustellen. Üblich ist ein 50-Hz-Signal, das zwischen 0,5 ms (linker Anschlag des Servos, 0°) und 2,5 ms (rechter Anschlag, ca. 180°) einen High-Pegel und den Rest der Periodenlänge von 20 ms einen Low-Pegel einnimmt (Abb. 1–3).
Abb. 1–3:PWM-Signal zur Ansteuerung von Servomotoren
Für die Servo-PWM-Signale werden beim Arduino die Pins D9 und D10 ge-nutzt.
Die analogen Eingänge A0 bis A5 bilden eine 5-V-Eingangsspannung auf einen 10-Bit-Wert (0-1023) ab. Ist der Maximalwert kleiner, kann man den Pin AREF mit dieser Spannung belegen; der A/D-Wandler wird dann bezüglich dieser Referenzspannung auflösen. Die A/D-Wandlung des Analogwertes benötigt etwa 0,1 ms; die maximale Abfragerate liegt damit bei rund 10.000 pro Sekunde.
Der Arduino unterstützt das Protokoll Inter-Integrated Circuit (I2C, beim Arduino auch als Two Wire Interface, TWI, bezeichnet) im Standard Mode (100 kbit/s) und Fast Mode (400 kbit/s). Der Anschluss von I2C-Sensoren (oder auch Aktoren) erfolgt am Arduino Uno R3 über die Pins SDA (Daten) und SCL (Taktsignal), die direkt oberhalb des Pins AREF liegen. Bei älteren Arduino-Uno-Boards sind beide Anschlüsse nur über die Analogeingänge A4 (SDA) und A5 (SCL) zugänglich. Wie der Arduino müssen die verwendeten I2C-Sensoren für 5-V-Logik ausgelegt sein – anderenfalls muss ein Level Shifter dazwischengeschaltet werden. GND und Vcc (5 V) können an den entsprechenden Anschlüssen des Arduino-Boards abgegriffen werden.
Die schnellste Datenverbindung zu einem Sensor oder einem anderen Mikrocontroller kann mit dem Serial Peripheral Interface Protocol (SPI) erreicht werden: Damit lässt sich eine Übertragungsbandbreite von 4 Mbit/s realisieren – die zehnfache Geschwindigkeit des I2C-Busses. Die SPI-Anschlüsse (SS, MOSI, MISO, SCK) stehen an den Pins D10-D13 bereit. Über den sechspoligen, separat ausgeführten ICSP-Anschluss (In-Circuit Serial Programming; in Abb. 1–2 unten in der Mitte des Arduino-Boards) kann die ICSP-Variante des SPI-Protokolls mit einem sechspoligen Pfostenstecker genutzt werden.
Stellt man die Leistungsdaten des Arduino und die der fischertechnik-Controller ROBO TX und ROBOTICS TXT gegenüber, ist auf den ersten Blick klar, dass der Arduino weit hinter der Rechenleistung der fischertechnik-Controller zurückbleibt (Tab. 1–1). Das darf auch nicht verwundern, denn einen Arduino erhält man für einen Bruchteil des Preises eines ROBOTICS TXT Controllers. Vor allem der Prozessortakt und die Speicherkapazität des Arduino liegen im Vergleich deutlich niedriger.
Tab. 1–1Leistungsdaten des Arduino im Vergleich mit ROBO TX und ROBOTICS TXT
Dennoch lassen sich mit dem Arduino zahlreiche Anwendungen mindestens so gut wie mit den fischertechnik-Controllern realisieren. Das liegt zum einen daran, dass die Prozessorgeschwindigkeit und die Speicherkapazität des TX/TXT von den meisten Anwendungen bei Weitem nicht ausgereizt werden. Zum anderen hat der Arduino – neben dem günstigeren Preis – ein paar Vorteile gegenüber den originalen fischertechnik-Controllern:
Eine sehr große Anzahl von Industriesensoren, ohne Gehäuse, aber deutlich günstiger als fischertechnik-Sensoren, lässt sich direkt an die Ports des Arduino anschließen oder über die Protokolle I
2
C (TWI) oder SPI ansteuern.
Für nahezu alle erhältlichen Sensoren und sehr viele Aktoren gibt es kostenlose Programmbibliotheken für die Arduino-IDE, die sich mit wenigen Mausklicks in die IDE integrieren lassen und eine komfortable Programmierung ohne vorherige aufwendige Treiberentwicklung ermöglichen.
Mit dem SPI-Protokoll erreicht der Arduino eine Übertragungsgeschwindigkeit von 4 Mbit/s – das Zehnfache der 400 kBit/s des I
2
C-Protokolls, das der TX und der TXT Controller beherrschen.
Während die Firmware von TX und TXT lediglich 100 Sensorabfragen pro Sekunde garantieren, erreicht der Arduino mit einer Abfragerate von 10.000 das Hundertfache und ermöglicht damit auch sehr zeitkritische Steuerungen.
Der Arduino verfügt über drei sehr genaue Timer (Mikrosekunden), die die exakte Auslösung von zeitabhängigen Interrupts erlauben.
Über die Pins D2 und D3 können Hardware-Interrupts ausgelöst werden.
Schließlich entspricht die in der Entwicklungsumgebung des Arduino verwendete, C/C++-ähnliche Programmiersprache eher einer kommandozeilenorientierten Hochsprache als die grafische Programmierumgebung ROBO Pro.
Zudem lässt sich der Arduino durch Shields erweitern – das sind Hardware-Ergänzungsboards, die auf die Pins des Arduino »huckepack« aufgesteckt werden und mit denen sich zahlreiche Einschränkungen des Arduino kompensieren lassen. So bieten beispielsweise Servo- und Motor Shields komfortable Anschlussmöglichkeiten für Servos, Gleichstrom- und Schrittmotoren mit Spannungen von 4,5-13,5 V und erlauben eine deutlich höhere Ausgangslast von bis zu 1,2 A je Motor (Abschnitt 1.7). Ein Prototype Shield erlaubt, eigene Schaltungen über ein Steckbrett zu integrieren oder direkt auf die Platine zu löten. Mit weiteren Shields kann der Arduino um einen microSD-Kartenleser, einen WLAN- oder Ethernetzugang, einen MP3-Player, ein Touchdisplay, einen Sprachprozessor oder einen GPS-Empfänger erweitert werden und ist damit deutlich flexibler ausbaubar als die originalen fischertechnik-Controller TX und TXT. Dabei werden von vielen Shields die Pins des Arduino einfach »durchgeschleift« und können auf dem aufgesteckten Board genauso genutzt werden wie direkt auf dem Arduino.3
Die Vorteile des Arduino erkauft man sich allerdings mit ein paar Einschränkungen – there is no free lunch: Den Arduino erhält man als offene Platine und nicht in einem direkt verbaubaren, in die Maße des fischertechnik-Systems passenden Gehäuse. Fällt ein stromführendes Kabel auf die Platine, kann das den Arduino beschädigen; auch vor Feuchtigkeit ist er nicht geschützt. Die Platinen (Shields oder Breadboards) mit den Sensoren erhält man ebenfalls ohne Gehäuse; für deren stabilen Anbau in einem fischertechnik-Modell muss man sich etwas einfallen lassen. Schließlich fehlen dem Arduino einige Schutzschaltungen, die die fischertechnik-Controller bei Kurzschlüssen vor Schäden bewahren. Für die Verbindung von Sensoren und Aktoren benötigt man spezielle Drahtbrücken (Jumper), die sich nicht so einfach wie die fischertechnik-Kabel auf die benötigte Länge kürzen lassen.
Für Kinder eignet sich die Arduino-IDE als Einstieg in die Roboter-Programmierung weniger. Fortgeschrittenen, die bereits über erste Erfahrungen mit der Programmierung oder mit elektronischen Schaltungen verfügen, eröffnet der Arduino hingegen eine Vielzahl an spannenden Möglichkeiten – und erweitert durch seine offene Architektur das Verständnis für die Mikroprozessortechnik deutlich.
Einige der Nachteile des Arduino lassen sich mit dem ftDuino4 umgehen, einem im Jahr 2018 von Dr. Till Harbaum entwickelten, auf dem Layout des Arduino Leonardo basierenden Mikrocontroller-Board in einem fischertechnik-kompatiblen Gehäuse, kurzschlussfest und mit integrierten Motortreibern (Abb. 1–4) [4]. Die Anschlüsse sind über Bundhülsen zugänglich, sodass die Standard-fischertechnik-Stecker und -Kabel direkt verwendet werden können. Eine Erweiterung des ftDuino mit Arduino-Shields ist allerdings nicht möglich. Dafür sind die Ein- und Ausgänge genauso wie bei den fischertechnik-Controllern angeordnet: Acht Eingänge links, vier PWM-Ausgänge rechts und darunter vier schnelle Zählereingänge.
Abb. 1–4Der ftDuino (v1.1, Foto: Till Harbaum)
Die Gehäusegröße entspricht mit 90 × 90 mm exakt den Maßen der fischertechnik-Controller. Die Dicke liegt mit 13 mm knapp unter einer fischertechnik-Bauhöhe (15 mm) und damit deutlich unter der eines TXT (25 mm). Durch die seitlichen Nuten kann der ftDuino direkt in einem fischertechnik-Modell verbaut werden.
Das Mikrocontroller-Herz des ftDuino ist ein mit 16 MHz getakteter ATmega-32U4, der sich auch im Arduino Leonardo befindet [5]. Wie der Arduino Uno verfügt der ftDuino über 32 kB Flash- und 2,5 kB internen RAM-Speicher. Als Motortreiber kommen zwei MC33879 zum Einsatz. Die Anschlüsse sind gegen Kurzschluss und Verpolung gesichert – daher ist ein Einsatz in der Schule oder mit jüngeren Schülern risikofrei möglich. Die Ausgänge können bis maximal 600 mA Dauerlast und in der Spitze bis 1,2 A belastet werden, daher kann man die fischertechnik-Motoren mit dem ftDuino direkt über die PWM-Ausgänge ansteuern [6].
Statt der USB-2-Typ-B-Buchse des Arduino wird der ftDuino über die von den fischertechnik-Controllern gewohnte Mini-USB-Buchse via USB-Kabel verbunden. Die 9-V-Spannungsversorgung erfolgt wie beim TXT Controller entweder über den 3,45/1,3-mm-Hohlstecker der (neueren) fischertechnik-Netzteile (505287) oder über ein fischertechnik-Kabel (Bundhülsen oben rechts, gelber Kreis in Abb. 1–4).
Für den ftDuino gibt es eine sehr umfangreiche und kontinuierlich weiterentwickelte Benutzeranleitung, die zahlreiche Programmierbeispiele und kleine Entwicklungsprojekte enthält [7].
Der Ultraschall-Abstandssensor von fischertechnik wird automatisch ausgewertet und liefert wie bei ROBO Pro den Abstand in cm. Anders als der I2C-Anschluss des TXT Controllers, der auf 3,3-V-Logik umgestellt wurde, arbeitet der I2C-Ausgang des ftDuino mit der vom TX Controller und Arduino gewohnten 5-V-Logik.
Wegen der wachsenden Verbreitung des ftDuino und der zahlreichen Vorteile beim Einsatz dieses Mikrocontroller-Boards in fischertechnik-Modellen (Anbau, Verkabelung, Motortreiber etc.) haben wir von einigen der in diesem Buch vorgestellten Modelle auch eine ftDuino-Version konstruiert und programmiert. Die abweichenden Konstruktionsdetails und die ftDuino-Sketche finden sich auf der Webseite zum Buch.
Für die Stromversorgung des Arduino genügt meist ein USB-Kabel: Die Spannung am USB-Port eines Laptops oder PCs liegt zwischen 4,75 und 5,25 V. Je nach Anschlusstyp ist er mit bis zu 100 mA (low powered), 500 mA (high powered) oder 900 mA (USB 3.0) belastbar – das ist völlig ausreichend für viele Anwendungen eines Arduino, solange keine Motoren oder andere stromintensive Aktoren versorgt werden müssen.
Für den USB-Anschluss an den PC wird ein USB-Kabel mit USB-2-Typ-B-Stecker benötigt (Abb. 1–5); fischertechnik lieferte ein solches USB-Kabel z. B. für die ROBO-I/O-Extension.
Für einige der in diesem Buch vorgestellten Modelle ist ein um 90° angewinkelter USB-Stecker (B-Winkelstecker, Abb. 1–6) hilfreich. Ein passendes Kabel findet man im Internet für wenig Geld.
Abb. 1–5USB-Kabel mit Typ-B-Stecker
Abb. 1–690° angewinkelter USB-Typ-B-Stecker
Da wir den Arduino auch in mobilen Robotern ohne Verbindungskabel zum PC und zur Steuerung von fischertechnik-Motoren einsetzen möchten, benötigen wir eine von der USB-Schnittstelle unabhängige externe Stromversorgung. Die einfachste, günstigste und am leichtesten zu verbauende Variante ist eine 9-V-Blockbatterie oder ein 9-V-Blockakku, den wir in einem fischertechnik-Batteriegehäuse (32263) oder einem -Batteriehalter (135719) unterbringen (Abb. 1–7).
Vorteil des Batteriehalters ist der kleine Schiebeschalter, mit dem die Stromzufuhr aus- und eingeschaltet werden kann. Aber Vorsicht: Der Schalter ist ein Polwender; die für den Arduino richtige Polung sollte daher durch eine Markierung gekennzeichnet werden.
Abb. 1–7:fischertechnik-Batteriegehäuse bzw. -Batteriefach oben, Batteriehalter bzw. 9-V-Batteriestab unten
Damit können wir die Stromquelle ohne Hilfsmittel in unserem fischertechnik-Modell verbauen. Natürlich können wir auch den fischertechnik-Akku verwenden; mit einer Kapazität von 1,5 Ah hält er deutlich länger durch als ein 9-V-Blockakku. Dafür ist er nicht nur deutlich größer als ein Batteriegehäuse oder der Batteriehalter, sondern bringt auch mit 208 g das Vierfache eines Batteriegehäuses mit Blockakku (52 g) auf die Waage. Auch die Anbaumöglichkeiten sind begrenzt.
Für den Anschluss der Batterie bzw. des Akkus an die Buchse des Arduino benötigen wir ein Kabel mit Hohlstecker (5,5/2,1 mm). Am einfachsten lassen sich Hohlstecker mit Schraubklemmen an die Kabel der Batteriekontakte anschließen (Abb. 1–8). Da wir den Arduino in unseren Modellen mit einem Motor Shield (Abschnitt 1.7) nutzen werden, können wir die Kabel der Stromversorgung noch einfacher direkt an dessen Lüsterklemmen anschließen; der Arduino wird (bei Verwendung des Vin-Jumpers) über das Motor Shield mitversorgt.
Abb. 1–8Hohlstecker mit Schraubklemmen
Um fischertechnik-Sensoren (z. B. Taster, Reed-Kontakte) und -Aktoren (wie Motoren, elektromagnetische Pneumatik-Ventile etc.) an die Pins des Arduino anzuschließen, gibt es verschiedene Möglichkeiten. So können wir z. B. an jeweils einem Ende von F/F-Drahtbrücken (Jumper) in unterschiedlichen Längen und Farben fischertechnik-Stecker anschrauben. Damit erhalten wir »Adapter« für das Steckersystem von fischertechnik, deren anderes Ende wir direkt mit den Anschlüssen des Arduino verbinden können.
Sensoren mit festem Ausgangskabel wie die IR-Spursensoren oder den Farbsensor müssen wir über Stecker koppeln. Damit keine unschönen und durch Kurzschluss gefährdete Stecker-Bäume entstehen, verwenden wir einfache Buchsen aus dem Modellbau, die auf die fischertechnik-Stecker passen, und montieren sie an einem Ende der Drahtbrücken (Abb. 1–9).
Abb. 1–9Drahtbrücken mit fischertechnik-Steckern und passenden Modellbau-Buchsen
Die Arduino-Platine hat die Maße 68,6 × 53,4 mm und passt damit nicht ins 15-mm-fischertechnik-Rastermaß. Um den Arduino dennoch in fischertechnik-Modellen verbauen zu können, bieten sich zwei Lösungen an:
Konstruktion eines Rahmens aus fischertechnik, z. B. aus Grundbausteinen, oder
Verwendung eines Gehäuses, das mit fischertechnik-Bauteilen (Statikelemente, Baustein 15 oder Baustein 30 mit Bohrung) verschraubt oder z. B. durch angeklebte fischertechnik-Bauplatten »fischertechnik-verbaubar« gemacht wird.
Die erste Lösung hat den Nachteil, dass das Gebilde relativ schwer und unhandlich wird. Daher verwenden wir in den Modellen im Buch Plexiglasgehäuse. Der Original-Arduino wird mit einer Grundplatte aus Plexiglas geliefert, die über Bohrungen an den Ecken verschraubt werden kann (Abb. 1–10).
Abb. 1–10Arduino mit Plexiglas-Grundplatte
Sehr elegant ist das Arduino-Plexiglasgehäuse von Sunfounder (Abb. 1–11), das den Blick auf die »Innereien« des Arduino frei lässt und das Aufstecken von Shields erlaubt, den Arduino dabei zugleich aber einigermaßen vor Schäden durch Stürze oder Feuchtigkeit schützt. Mit zwei auf der Unterseite aufgeklebten Bauplatten 30 × 45 (38248) kann das Gehäuse stabil an unseren fischertechnik-Modellen befestigt werden (Abb. 1–12), oder man verschraubt es über die beiden Ösen an den Schmalseiten mit einem Baustein (BS) 15 oder BS 30 mit Bohrung (Abb. 1–13).
Abb. 1–11Plexiglasgehäuse von Sunfounder
Abb. 1–12Bauplatten 30 x 45 zur Befestigung des Gehäuses an fischertechnik-Modellen
Abb. 1–13Verschraubung des Gehäuses in zwei BS 15 mit Bohrung
Wie in Abschnitt 1.2 erläutert darf man fischertechnik-Motoren nicht direkt an den Ports des Arduino betreiben, da diese mit maximal 40 mA belastet werden dürfen, der Strombedarf der fischertechnik-Motoren unter Last aber schnell auf 1 A oder sogar etwas höher steigen kann. Dabei würde das Arduino-Board Schaden nehmen. Für den Anschluss und die Ansteuerung der fischertechnik-Motoren verwenden wir daher ein Motor Shield, über das wir die Motoren mit vollen 9 V versorgen können und deren Ausgänge eine deutlich höhere Last vertragen. Zwar könnten wir die Motoren auch über einen Transistor (MOSFET) oder eine sogenannte H-Bridge steuern. Das käme etwas günstiger – allerdings erfordert die Schaltung ein Steckbrett und belegt für jeden Motor drei unserer 14 digitalen I/O-Pins. Diese benötigen wir aber für den Anschluss und die Ansteuerung unserer zahlreichen anderen Sensoren und Aktoren. Ein Shield hingegen lässt sich »huckepack« direkt auf den Arduino aufstecken. Die analogen und digitalen Pins werden dabei »durchgeschleift« und können wie auf dem Arduino beschaltet werden.
Abb. 1–14Arduino Motor Shield
Das »originale« Arduino Motor Shield (Abb. 1–14) verfügt über Anschlüsse für zwei Gleichstrommotoren (5-12 V) oder alternativ einen bipolaren Schrittmotor und kann je Motorausgang mit bis zu 2 A (insgesamt also 4 A) belastet werden. Allerdings belegt die Motorsteuerung des Shields insgesamt sechs Pins (D3, D8, D9, D11, D12 und D13), von denen wir D11-D13 für die Signale des SPI-Protokolls benötigen. Eine Ansteuerung der Motoren bei gleichzeitiger Nutzung eines über das SPI-Protokoll angeschlossenen Sensors ist mit diesem Shield leider nicht möglich.
Für die Modelle in diesem Buch verwenden wir daher das hochwertige Adafruit Motor Shield v2.3 (Abb. 1–15), dessen Motoranschlüsse über den seriellen I2C-Bus angesteuert werden. Damit reduzieren wir die benötigten Arduino-Pins auf zwei: Nur die analogen Pins A4 und A5, die auch als I2C-Busleitungen SDA und SCL dienen, werden von diesem Shield belegt – sogar nicht exklusiv, denn an den I2C-Bus können wir zahlreiche weitere Sensoren anschließen. Daher stehen uns alle 14 digitalen und vier analoge Pins des Arduino weiterhin uneingeschränkt zur Verfügung. Damit die Arduino-Pins auf dem aufgesteckten Motor Shield direkt zugänglich sind, muss man die extra langen Stacking Header mitbestellen; das Shield wird lediglich mit kurzen Standard-Headern geliefert.
Abb. 1–15Adafruit Motor Shield (v2.3)
Das Adafruit Motor Shield erlaubt den Anschluss von vier Gleichstrommotoren oder zwei bipolaren Schrittmotoren mit jeweils 4,5-13,5 V. Außerdem verfügt es über zwei separate Anschlüsse für 5-V-Servomotoren; diese belegen allerdings – bei Nutzung – die Digitalpins D9 respektive D10. Die Motoranschlüsse sind für eine Last von je 1,2 A ausgelegt (insgesamt 3 A) – völlig ausreichend für unsere fischertechnik-Motoren. Die PWM-Frequenz liegt (voreingestellt) bei 1,6 kHz (Maximum); sie kann bei der Initialisierung auf bis zu 24 Hz abgesenkt werden – die Treiberbibliothek des Shields wählt automatisch den der gewünschten Frequenz am nächsten liegenden Frequenzteiler.
Die I2C-Adresse des Boards ist 0x60. Sie kann über fünf gelötete Jumper auf eine andere Adresse (0x61 bis 0x80) umgestellt werden. Unter der Adresse 0x70 werden alle Motor Shields auf dem Bus gleichzeitig angesprochen; sie kann nicht geändert werden [8]. Durch die Unabhängigkeit der PWM-Ansteuerung der Motoren von den Arduino-Pins und die Möglichkeit, die I2C-Adresse zu ändern, können sogar mehrere Adafruit Motor Shields übereinander gesteckt und damit die Zahl der verfügbaren Motoranschlüsse vervielfältigt werden.
Wie oben erwähnt können wir unsere Stromquelle nun direkt an die mit »+« (Vcc, rotes Kabel) und »-« (GND, grünes Kabel) gekennzeichneten Schraubklemmen der Stromzufuhr (in Abb. 1–15, gelber Kreis) anschließen. Damit können wir uns auch den aus dem Arduino herausragenden Hohlstecker sparen: Wenn wir auf dem Motor Shield den »Vin-Jumper« (Abb. 1–15, roter Kreis) aufstecken, wird der Arduino über dieselbe Stromzufuhr mitversorgt. Auch der Anschluss der fischertechnik-Gleichstrommotoren ist einfach: Die abisolierten Enden der fischertechnik-Kabel werden jeweils an die mit »M1«, »M2«, »M3« und »M4« bezeichneten blauen Schraubklemmen angeschlossen (links und rechts in Abb. 1–15).
Jetzt ist unser Arduino für die in den nachfolgenden Kapiteln vorgestellten Modelle vorbereitet.
[1]Microchip (Atmel): ATmega328/P. Datasheet, Rev. B, 11/2016 (12.10.2016).
[2]Christian Bergschneider, Stefan Fuss: Alternative Controller (3): Der ftPi – ein Motor Shield für den TX(T). ft:pedia 2/2016, S. 68-72.
[3]Stefan Brunner: Die Ein- und Ausgänge des TX Controllers. ft:pedia 4/2012, S. 24-31.
[4]Till Harbaum: ftDuino – Open Source trifft Konstruktionsbaukasten. ft:pedia 1/2018, S. 85-91.
[5]Microchip (Atmel): ATmega16U4/32U4, Datasheet, Rev. 7766J, 04/2016.
[6]Till Harbaum: Schwarze, graue und sonstige Motoren am ft:Duino. ft:pedia 2/2018, S. 50-54.
[7]Till Harbaum: ftDuino – ein fischertechnik-kompatibler Arduino. Bedienungsanleitung. Stand: 29.07.2019.
[8]Lady Ada: Adafruit Motor Shield V2. Adafruit Industries, 01.06.2019.
Die als »Sketche« bezeichneten Programme für den Arduino werden in der Arduino-Entwicklungsumgebung (IDE) in einer C/C++-ähnlichen, auf Wiring basierenden Programmiersprache entwickelt. Wir führen kurz in die Besonderheiten dieser Programmierung ein, bevor wir mit der Konstruktion und der Steuerung der ersten Modelle beginnen.
Die in Java programmierte und aus der am MIT entwickelten Programmierumgebung Processing hervorgegangene Entwicklungsumgebung (IDE) des Arduino wird als Teil des Open-Source-Projekts kontinuierlich weiterentwickelt und auf der Arduino-Webseite1 für die Betriebssysteme Windows, Linux, Linux ARM und Mac OS X zum kostenlosen Download angeboten. Sie umfasst einen Programmeditor und einen auf dem Gnu-C-Compiler basierenden C/C++-Compiler.2 In dieser IDE wird der Arduino in einer der Programmiersprache C/C++ sehr ähnlichen, aus Wiring abgeleiteten Sprache programmiert.3
Alle in diesem Buch vorgestellten Modelle können mit den abgedruckten und von der Webseite zum Buch herunterladbaren Sketchen gesteuert werden. Daher ist ein tieferes Verständnis der Programmiersprache für den Nachbau der Modelle nicht erforderlich.
Wer aber die Sketche erweitern oder variieren möchte, sollte einige grundlegende Dinge über die Programmierung des Arduino wissen. Daher möchten wir in diesem Kapitel auf einige Besonderheiten des Arduino etwas näher eingehen, die auf die Tatsache zurückzuführen sind, dass wir es beim Arduino mit einem Embedded System mit zahlreichen I/O-Schnittstellen, aber ohne Monitor und Tastatur zu tun haben.
Daraus ergeben sich ein paar spezielle Rahmenbedingungen, die bei der Programmierung des Arduino zu beachten sind. Dazu zählen insbesondere die folgenden fünf Punkte:
Die Programme (
Sketche
) werden in der Arduino-Entwicklungsumgebung (IDE,
Abb. 2–1
) auf einem PC oder Laptop entwickelt. Mit einem Mausklick auf »Hochladen« werden sie in einem Schritt kompiliert und, wenn das fehlerfrei gelingt, über eine USB-Verbindung direkt in den Flash-Speicher des Arduino geladen und dort ausgeführt. Dabei werden zuvor auf den Arduino geladene Programme überschrieben. Im Arduino-Speicher ist daher immer genau ein Programm aktiv, das auch nach dem Ausschalten des Arduino erhalten bleibt.
Abb. 2–1Arduino-IDE mit Default-Sketch
Ein etwa 0,5 kB großer
Bootloader
im Flash-Speicher des Arduino sorgt dafür, dass das in den Speicher geladene Programm unmittelbar nach der Aktivierung (Anschluss der Stromversorgung oder des USB-Kabels bzw. Abschluss des Uploads) oder nach dem Drücken des Reset-Tasters automatisch auf dem Arduino-Board ausgeführt wird. Will man ein sofortiges Starten (z. B. bei einem autonomen Roboter) verhindern, muss man Roboter und Programm um einen Starttaster erweitern.
Ein Arduino-Programm kann jederzeit durch das Drücken des Reset-Tasters (rechts oben in
Abb. 1–2
) auf dem Arduino-Board zum Neustart veranlasst, aber nur durch Unterbrechung der Stromversorgung beendet werden.
Der sehr begrenzte Hauptspeicher (beim Arduino Uno lediglich 31,5 kByte Flash-Speicher für das Programm und 2 kByte RAM Variablenspeicher) zwingt dazu, mit dem Speicherplatz zu »haushalten«. Dabei hilft der Compiler, der die Speicherbelegung minimiert. Die IDE zeigt nach dem Kompilieren eines Sketches den von Programm und Variablen belegten Speicherplatz an.
Jedes Arduino-Programm besteht mindestens aus einer
setup
()
-Routine, die einmalig zu Programmbeginn ausgeführt wird, und dem Hauptprogramm
loop
()
, das anschließend so lange wiederholt wird, bis die Stromversorgung unterbrochen wird (
Listing 2–1
).
voidsetup() {
// Initialisierungen (wird zu Programmbeginn einmal durchlaufen)
}
voidloop() {
// Hauptprogramm (wird ad infinitum wiederholt)
}
Listing 2–1Genereller Aufbau eines Arduino-Sketches
Ein Arduino-Programm entspricht in Syntax, Programmstruktur, verwendeten Variablentypen und Operatoren im Wesentlichen der C/C++-Spezifikation, die wir hier als bekannt voraussetzen. Einige wichtige, Arduino-spezifische Eigenschaften und häufig genutzte Befehlsgruppen stellen wir in den folgenden Abschnitten vor.
Für den Arduino gibt es unzählige Codebibliotheken, die (wie in C-Compilern üblich) mit dem Compiler-Kommando #include eingebunden werden können und dann nach dem Kompilieren hinzugelinkt werden. Die IDE wird bereits mit einigen Standardbibliotheken ausgeliefert; andere müssen aus dem Internet heruntergeladen und über die Bibliotheksverwaltung als Zip-File in die IDE importiert werden.
#include <*.h> // Einbinden einer Bibliothek
Bei jedem Start prüft die IDE, ob neue Versionen der installierten Bibliotheken verfügbar sind; das Update kann dann per Mausklick aktiviert werden.
Rund 40 Funktionsbibliotheken finden sich auf Github im »offiziellen« Arduino-Bereich4. Die Suche nach »arduino« liefert allein auf Github insgesamt weitere etwa 22.000 Arduino-Code-Repositories. Zu praktisch jedem Sensor oder Aktor, der am Arduino genutzt werden kann, wird inzwischen vom Hersteller eine Arduino-Treiberbibliothek bereitgestellt, oft auf Github, manchmal auch zum Download auf der Webseite des jeweiligen Herstellers. An hilfreichem Programmcode herrscht also kein Mangel. Allein die Auswahl der richtigen – aktuellen, gepflegten und ausgetesteten – Bibliothek oder eines passenden Beispielprogramms für eine bestimmte Anwendung ist manchmal herausfordernd.
Mit der Auswahl unserer Modelle und ihrer Funktionen haben wir uns auf einige zentrale Bibliotheken festgelegt und dabei versucht, deren Anzahl und Komplexität zu begrenzen. Die folgenden für die Anwendungen und Sketche in diesem Buch wichtigen grundlegenden Arduino-Bibliotheken erläutern wir in den nachfolgenden Abschnitten:
SPI
.h
: Kommunikation über den SPI-Bus (
Serial Peripheral Interface
)
Wire
.h
: Kommunikation über das
Two Wire Interface
(TWI, I
2
C)
Servo
.h
: Steuerung eines Servomotors
Adafruit_MotorShield
.h
: Ansteuerung von Gleichstrom- und Schrittmotoren
Außerdem verwenden wir für einzelne Modellvarianten vier weitere externe Bibliotheken, in deren Nutzung wir in den jeweiligen Kapiteln einführen:
ArduinoNunchuk
.h
: (Fern-)Steuerung über einen Wii-Nunchuk
Pixy
.h
: Live-Bildauswertung mit der Pixy-Kamera
SD
.h
: Lesezugriff auf eine SD-Karte (via SD-Leser)
Mouse
.h
: Maussteuerung des PCs über die USB-Schnittstelle
Die IDE des Arduino kennt keine Breakpoints oder andere hilfreiche Funktionen zur komfortablen Fehlersuche (Debugging). Da der Arduino ohne ergänzende Hardware auch über keine Ausgabeeinheit wie einen Bildschirm verfügt, lassen sich Inputwerte oder Inhalte von Variablen nicht vom Arduino anzeigen.
Um dennoch eine Überwachung und sogar eine manuelle Steuerung des Programmablaufs zu ermöglichen, haben die Entwickler der Arduino-IDE ein Monitorfenster spendiert, an das der Arduino mit einem einfachen seriellen Protokoll über die USB-Verbindung und eine UART-Schnittstelle Daten übertragen kann (Abb. 2–2). Die Übertragungsgeschwindigkeit kann dabei von 300 bis 2.000.000 Baud gewählt werden. In diesem Buch verwenden wir einheitlich eine Baudrate von 115.200 Bit/s; so muss beim Laden eines anderen Sketches die Rate nicht jedes Mal am seriellen Monitor der IDE angepasst werden.
Abb. 2–2Serieller Monitor der Arduino-IDE
Die empfangenen Daten werden im Monitorfenster der IDE angezeigt (öffnen über das Icon rechts oben in der IDE, Abb. 2–1). Auf demselben Weg können auch Tastatureingaben über das Eingabefenster des Monitors an den Arduino übermittelt werden.
Die Befehle zur Ansteuerung des seriellen Monitors sind integriert und müssen nicht über eine zusätzliche Bibliothek eingebunden werden. Der serielle Monitor muss lediglich mit Angabe der Übertragungsgeschwindigkeit der Daten (Baudrate in Bit/s) aktiviert werden:
voidSerial.begin(long baud);
Dabei kann als Baudrate baud einer der folgenden Werte gewählt werden: 300, 1.200, 2.400, 4.800, 9.600, 19.200, 38.400, 57.600, 74.880, 115.200, 230.400, 250.000, 500.000, 1.000.000 oder 2.000.000.5 Sie muss mit der im Fenster des seriellen Monitors unten rechts ausgewählten Baudrate übereinstimmen, damit die Zeichen korrekt empfangen und dargestellt werden. In den Sketchen in diesem Buch verwenden wir, wie erwähnt, einheitlich die Baudrate 115.200.
Das serielle Protokoll des Monitors arbeitet mit acht Datenbits, keinem Paritäts- und einem Stoppbit. Mit dem erweiterten Kommando
voidSerial.begin(long baud,intconfig);
können auch andere Protokollvarianten gewählt werden, wie z. B. sechs Datenbits, ein Bit für gerade Parität und zwei Stoppbits. Der serielle Monitor der IDE erwartet jedoch die Standardeinstellung.
Die Aktivierung des seriellen Monitors, durch die die Anschlüsse an den Pins D0 und D1 als Empfangs- (RX) und Sendeleitung (TX) belegt werden und daher im Sketch nicht für andere Zwecke genutzt werden dürfen, erfolgt üblicherweise in der setup()-Routine. Datenübertragungen werden von den LEDs RX und TX auf dem Arduino-Board angezeigt.
Will man den seriellen Monitor nur temporär aktivieren, lässt er sich mit der folgenden Funktion auch wieder deaktivieren; damit werden zugleich die Pins D0 und D1 für die Nutzung als digitale I/O-Pins freigegeben:
voidSerial.end();
Die Ausgabe von Daten (eines numerischen Wertes oder eines Textstrings) auf dem seriellen Monitor erfolgt mit folgenden Kommandos:
longSerial.print(string text);
longSerial.print(int var,byte type);
longSerial.print(float var,int len);
Dabei gibt type die Darstellung der Zahl an: DEC, HEX, OCT oder BIN. Bei Fließkommazahlen wird mit dem zweiten Parameter len die Anzahl der anzuzeigenden Nachkommastellen festgelegt; fehlt die Angabe, werden als voreingestellter Defaultwert zwei Nachkommastellen angezeigt. Die Funktion liefert die Anzahl der geschriebenen Zeichen zurück.
Der folgende Befehl schließt die Ausgabe außerdem mit einem Zeilenumbruch ab:
longSerial.println(string text);
Auch die Übergabe von Zeichen oder Daten an ein Arduino-Programm ist mit dem seriellen Monitor möglich. Dazu werden Zahlen oder eine Zeichenfolge in das Eingabefeld des Monitorfensters eingetragen und abschließend der »Senden«-Knopf (rechts oben) gedrückt.
Der Arduino kann eine Eingabe mit der folgenden Funktion feststellen:
intSerial.available();
Die Funktion gibt die Zahl der im 64 Byte großen Eingangspuffer vorliegenden Zeichen (char) zurück. Aus diesem Puffer können die Daten mit
intSerial.read();