Erste Schritte
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
1.0 Einleitung
Die Arduino-Umgebung wurde so konzipiert, dass sie auch von Anfängern, die keine Erfahrung mit Software oder Elektronik haben, leicht zu bedienen ist. Mit Arduino kannst du Objekte bauen, die auf Licht, Ton, Berührung und Bewegung reagieren und/oder diese steuern. Mit Arduino wurden schon die unterschiedlichsten Dinge gebaut, darunter Musikinstrumente, Roboter, Lichtskulpturen, Spiele, interaktive Möbel und sogar interaktive Kleidung.
Arduino wird in vielen Bildungsprogrammen auf der ganzen Welt eingesetzt, vor allem von Designern und Künstlern, die auf einfache Weise Prototypen erstellen wollen, aber kein tiefes Verständnis für die technischen Details hinter ihren Kreationen benötigen. Da die Software so konzipiert ist, dass sie auch von technisch nicht versierten Personen genutzt werden kann, enthält sie viele Beispielcodes, die zeigen, wie die verschiedenen Funktionen des Arduino-Boards genutzt werden können.
Obwohl Arduino einfach zu bedienen ist, arbeitet die zugrundeliegende Hardware auf demselben hohen Niveau, das Ingenieure für die Entwicklung eingebetteter Geräte verwenden. Menschen, die bereits mit Mikrocontrollern arbeiten, fühlen sich von Arduino auch wegen seiner agilen Entwicklungsmöglichkeiten und der schnellen Umsetzung von Ideen angezogen.
Arduino ist vor allem für seine Hardware bekannt, aber du brauchst auch Software, um die Hardware zu programmieren. Sowohl die Hardware als auch die Software werden als "Arduino" bezeichnet. Die Hardware (Arduino und Arduino-kompatible Boards) kannst du preiswert kaufen oder selbst bauen (die Hardware-Designs sind Open Source). Die Software ist kostenlos, quelloffen und plattformübergreifend. Diese Kombination ermöglicht es dir, Projekte zu erstellen, die die physische Welt wahrnehmen und steuern.
Außerdem gibt es eine aktive und hilfsbereite Arduino-Community , die weltweit über die Arduino-Foren, Tutorials und den Project Hub erreichbar ist. Auf diesen Seiten findest du Lernressourcen, Beispiele für die Projektentwicklung und Lösungen für Probleme, die dich bei deinen eigenen Projekten inspirieren und unterstützen können.
Arduino Software und Skizzen
Softwareprogramme, sogenannte Sketches, werden auf einem Computer mit der integrierten Entwicklungsumgebung (IDE) von Arduino erstellt. Mit der IDE kannst du Code schreiben und bearbeiten und diesen Code in Anweisungen umwandeln, die die Arduino-Hardware versteht. Die IDE überträgt diese Anweisungen auch in Form von kompiliertem Code auf das Arduino-Board (ein Vorgang, der Upload genannt wird).
Tipp
Du bist es vielleicht gewohnt, Software-Quellcode als "Programm" oder einfach als "Code" zu bezeichnen. In der Arduino-Community wird der Quellcode, der Computeranweisungen zur Steuerung der Arduino-Funktionen enthält, als Sketch bezeichnet. Das Wort Sketch wird in diesem Buch durchgehend für Arduino-Programmcode verwendet.
Die Rezepte in diesem Kapitel erklären dir, wie du die Entwicklungsumgebung einrichtest und wie du einen Beispielsketch kompilierst und ausführst.
Der Blink-Sketch, der auf den meisten Arduino-Boards und kompatiblen Geräten vorinstalliert ist ( ), wird als Beispiel für die Rezepte in diesem Kapitel verwendet. Das letzte Rezept in diesem Kapitel geht jedoch noch weiter, indem es Töne hinzufügt und Eingaben über zusätzliche Hardware erfasst, anstatt nur das in das Board eingebaute Licht zu blinken. Kapitel 2 behandelt die Strukturierung eines Sketches für Arduino und gibt eine Einführung in die Programmierung.
Hinweis
Wenn du dich bereits mit den Arduino-Grundlagen auskennst, kannst du gerne zu späteren Kapiteln übergehen. Wenn du zum ersten Mal mit Arduino arbeitest, wird sich deine Geduld bei diesen ersten Rezepten später durch bessere Ergebnisse auszahlen.
Arduino Hardware
Das Arduino-Board ist der Ort, an dem der von dir geschriebene Code ausgeführt wird. Das Board kann nur Elektrizität steuern und darauf reagieren. Deshalb wirst du bestimmte Komponenten an ihm befestigen, die es ihm ermöglichen, mit der realen Welt zu interagieren. Bei diesen Komponenten kann es sich um Sensoren handeln, die einen Aspekt der realen Welt in Strom umwandeln, damit das Board ihn wahrnehmen kann, oder um Aktoren, die Strom vom Board erhalten und ihn in etwas umwandeln, das die Welt verändert. Beispiele für Sensoren sind Schalter, Beschleunigungsmesser und Ultraschall-Abstandssensoren. Aktoren sind Dinge wie Lichter und LEDs, Lautsprecher, Motoren und Displays.
Es gibt eine Vielzahl offizieller Boards, die du mit der Arduino-Software verwenden kannst, und eine große Auswahl an Arduino-kompatiblen Boards, die von Unternehmen und einzelnen Mitgliedern der Community hergestellt werden. Zusätzlich zu den auf dem Markt erhältlichen Boards findest du sogar Arduino-kompatible Controller in allen möglichen Produkten, von 3D-Druckern bis hin zu Robotern. Einige dieser Arduino-kompatiblen Boards und Produkte sind auch mit anderen Programmierumgebungen wie MicroPython oder CircuitPython kompatibel.
Die gängigsten Boards enthalten einen USB-Anschluss, der für die Stromversorgung und die Verbindung zum Hochladen deiner Software auf das Board verwendet wird. Abbildung 1-1 zeigt ein einfaches Board, mit dem die meisten Leute anfangen: das Arduino Uno. Es wird von einem 8-Bit-Prozessor angetrieben, dem ATmega328P, der über 2 Kilobyte SRAM (statischer Direktzugriffsspeicher, der zum Speichern von Programmvariablen verwendet wird) und 32 Kilobyte Flash-Speicher zum Speichern deiner Sketche verfügt und mit 16 MHz läuft. Ein zweiter Chip ist für die USB-Verbindung zuständig.
Hinweis
Trotz des Wortes "statisch" in seinem Namen ist statischer RAM eine Form von flüchtigem Speicher. Dies steht im Gegensatz zum dynamischen RAM (DRAM), der gelegentlich aufgefrischt werden muss, um die elektrische Ladung aufrechtzuerhalten. SRAM behält seinen Zustand so lange bei, wie die Stromversorgung aufrechterhalten wird, ohne dass zusätzliche Schaltkreise zur Auffrischung erforderlich sind.
Das Arduino Leonardo Board hat den gleichen Formfaktor (das Layout des Boards und seine Anschlusspins) wie das Uno, verwendet aber einen anderen Prozessor, den ATmega32U4, der deine Sketche ausführt und sich auch um die USB-Verbindung kümmert. Er ist etwas günstiger als der Uno und bietet außerdem einige interessante Funktionen, wie z. B. die Möglichkeit, verschiedene USB-Geräte wie Mäuse und Tastaturen zu emulieren. Die Arduino-kompatiblen Teensy- und Teensy++-Boards von PJRC(http://www.pjrc.com/teensy) sind ebenfalls in der Lage, USB-Geräte zu emulieren.
Ein weiteres Board mit einer ähnlichen Pinbelegung und einem noch schnelleren Prozessor ist der Arduino Zero. Im Gegensatz zum Arduino Uno und Leonardo verträgt es keine Eingangsspannungen von mehr als 3,3 Volt. Der Arduino Zero hat einen 32-Bit-Prozessor, der mit 48 MHz läuft, und verfügt über 32 Kilobyte RAM und 256 Kilobyte Flash-Speicherung. Der Metro M0 Express von Adafruit und das RedBoard Turbo von SparkFun haben den gleichen Formfaktor wie der Arduino Zero und sind ebenfalls mit mehreren Umgebungen kompatibel, darunter die Arduino IDE und CircuitPython.
Wenn du ein Board zum Lernen suchst, auf dem die meisten Sketche in diesem Buch laufen, ist der Uno eine gute Wahl. Wenn du mehr Leistung als der Uno haben willst, aber trotzdem den Uno-Formfaktor nutzen möchtest, solltest du den Zero oder ein ähnliches Board wie den Metro M0 Express oder den RedBoard Turbo in Betracht ziehen. Die MKR-Boards und Nano 33 bieten ebenfalls eine hervorragende Leistung, allerdings in einem kleineren Formfaktor als der Uno.
Vorsicht ist bei einigen 3,3-Volt-Boards geboten
Viele der neueren Boards arbeiten mit 3,3 Volt und nicht mit den 5 Volt, die ältere Boards wie der Uno verwenden. Einige dieser Boards können dauerhaft beschädigt werden, wenn ein Eingangs- oder Ausgangspin auch nur für den Bruchteil einer Sekunde 5 Volt erhält. Überprüfe daher in der Dokumentation deines Boards, ob es 5 Volt toleriert, bevor du etwas verdrahtest, wenn die Gefahr besteht, dass die Pin-Pegel höher als 3,3 Volt sind. Die meisten 3,3-Volt-Boards werden mit einem 5-Volt-Netzteil (z. B. über den USB-Anschluss) versorgt, das jedoch von einem Spannungsregler in 3,3 Volt umgewandelt wird, bevor es die 3,3-Volt-Elektronik des Boards erreicht. Das bedeutet, dass es nicht ungewöhnlich ist, einen 5-Volt-Stromversorgungspin auf einem Board zu sehen, dessen Eingangs- und Ausgangspins nicht 5-Volt-tolerant sind.
Arduino-Boards gibt es in anderen Formfaktoren,. Das bedeutet, dass die Pins auf diesen Boards ein anderes Layout haben und nicht mit Shields kompatibel sind, die für den Uno entwickelt wurden. Das MKR1010 ist ein Arduino-Board, das einen viel kleineren Formfaktor hat. Seine Pins sind für 3,3V E/A ausgelegt (es ist nicht 5V-tolerant) und wie der Zero verwendet es einen ARM-Chip. Das MKR1010 verfügt jedoch auch über WiFi und eine Schaltung zum Betreiben und Aufladen einer LIPO-Batterie. Obwohl die MKR-Familie nicht mit den für den Uno entwickelten Shields kompatibel ist, bietet Arduino eine Auswahl an Zusatzplatinen für den MKR-Formfaktor an, die sogenannten Carrier.
Es gibt Boards, die so klein wie eine Briefmarke sind, wie das Adafruit Trinket M0; größere Boards mit mehr Anschlussmöglichkeiten und leistungsfähigeren Prozessoren, wie das Arduino Mega und das Arduino Due; und Boards, die auf bestimmte Anwendungen zugeschnitten sind, wie das Arduino LilyPad für Wearable-Anwendungen, das Arduino Nano 33 IoT für drahtlose Projekte und das Arduino Nano Every für Embedded-Anwendungen (eigenständige Projekte, die oft batteriebetrieben sind).
Es sind auch andere Arduino-kompatible Boards von Drittanbietern erhältlich, darunter die folgenden:
- Bare Bones Board (BBB)
- Kostengünstige Bare Bones Boards sind mit oder ohne USB-Fähigkeit von Modern Device und von Educato in einer Shield-kompatiblen Version erhältlich.
- Adafruit Industries
- Adafruit hat eine große Sammlung von Arduino- und Arduino-kompatiblen Boards und Zubehör (Module und Komponenten).
- SparkFun
- SparkFun hat jede Menge Arduino und Arduino-kompatibles Zubehör.
- Seeed Studio
- Seeed Studio vertreibt Arduino- und Arduino-kompatible Boards sowie viel Zubehör. Außerdem bietet es ein flexibles Erweiterungssystem für Arduino und andere Embedded Boards namens Grove an, das ein modulares Steckersystem für Sensoren und Aktoren verwendet .
- Teensy und Teensy++
- Diese winzigen aber extrem vielseitigen Bretter sind bei PJRC erhältlich.
Wikipedia hat eine ausführliche Liste von Arduino-kompatiblen Boards. Eine Übersicht über die Arduino-Boards findest du auch auf der Arduino-Website.
1.1 Installieren der integrierten Entwicklungsumgebung (IDE)
Lösung
Lade die Arduino-Software für Windows, MacOS oder Linux herunter. Hier findest du Hinweise zur Installation der Software auf diesen Plattformen:
- Windows
-
Wenn du mit Windows 10 arbeitest, kannst du Arduino über den Microsoft Store installieren, ohne Administratorrechte zu benötigen. Für frühere Windows-Versionen brauchst du jedoch Admin-Rechte, um den Windows-Installer nach dem Download per Doppelklick zu starten. Alternativ kannst du die Windows-ZIP-Datei herunterladen und sie in ein beliebiges Verzeichnis entpacken, auf das du Schreibrechte hast.
Wenn du die Datei entpackst, wird ein Ordner mit dem Namen Arduino-<nn> erstellt (wobei <nn> die Versionsnummer der Arduino-Version ist, die du heruntergeladen hast). Das Verzeichnis enthält die ausführbare Datei (namens Arduino.exe) sowie weitere Dateien und Ordner.
Hinweis
Wenn du Arduino zum ersten Mal unter Windows ausführst, erscheint möglicherweise ein Dialog mit der Meldung "Die Windows Defender Firewall hat einige Funktionen dieser Anwendung blockiert" und gibt
javaw.exe
als Quelle für die Warnung an. Die Arduino IDE ist eine Java-basierte Anwendung,. Deshalb kommt die Warnung vom Java-Programm und nicht von der Arduino.exe. Diese wird von Boards verwendet, die das Hochladen von Skizzen über ein lokales Netzwerk unterstützen. Wenn du vorhast, ein solches Board zu verwenden, solltest du diesen Dialog nutzen, um javaw.exe den Zugriff auf das Netzwerk zu erlauben.Wenn du das Board einsteckst, wird der installierte Treiber automatisch mit dem Board verknüpft (das kann ein wenig dauern). Wenn dieser Vorgang fehlschlägt oder du Arduino mit der ZIP-Datei installiert hast, gehe auf die Seite Arduino Guide, klicke auf den Link für dein Board in der Liste und folge den Anweisungen.
Wenn du eine ältere Karte verwendest (jede Karte, die FTDI-Treiber verwendet) und online bist, kannst du Windows nach den Treibern suchen lassen und sie werden automatisch installiert. Wenn du keinen Internetzugang hast oder mit Windows XP arbeitest, solltest du den Speicherort der Treiber angeben. Verwende die Dateiauswahl, um zum Verzeichnis für die USB-Treiber vonFTDI zu navigieren, das sich in dem Verzeichnis befindet, in das du die Arduino-Dateien entpackt hast. Wenn dieser Treiber installiert ist, erscheint der Assistent für das Suchen neuer Hardware erneut und meldet, dass ein neuer serieller Anschluss gefunden wurde. Befolge den gleichen Prozess noch einmal.
Tipp
Möglicherweise musst du die Abfolge der Schritte zur Installation der Treiber zweimal durchlaufen, um sicherzustellen, dass die Software mit dem Board kommunizieren kann.
- macOS
-
Der Arduino-Download für den Mac ist eine ZIP-Datei. Wenn die ZIP-Datei nicht automatisch entpackt wird, nachdem du sie heruntergeladen hast, suche den Download und doppelklicke darauf, um die Anwendung zu entpacken. Verschiebe die Anwendung an einen geeigneten Ort - der Ordner " Programme" ist ein sinnvoller Ort. Doppelklicke auf die Anwendung. Es erscheint der Startbildschirm , gefolgt vom Hauptfenster des Programms.
Aktuelle Arduino-Boards wie der Uno können ohne zusätzliche Treiber verwendet werden. Wenn du das Board zum ersten Mal einsteckst, kann es sein, dass eine Meldung erscheint, dass ein neuer Netzwerkanschluss gefunden wurde; diese kannst du ignorieren. Wenn du ältere Boards verwendest, die FTDI-Treiber benötigen, kannst du diese unter von FTDI beziehen.
- Linux
-
Linux-Versionen sind zunehmend über den Paketmanager deiner Distribution erhältlich, aber diese Versionen sind oft nicht die aktuellste Version. Deshalb ist es am besten, die Version von http://arduino.cc/download herunterzuladen . Sie ist für 32 oder 64 Bit verfügbar und bietet eine ARM-Version, die auf dem Raspberry Pi und anderen Linux-ARM-Boards verwendet werden kann. Die meisten Distributionen verwenden einen Standardtreiber, der bereits installiert ist, und bieten normalerweise auch FTDI-Unterstützung. Auf dieser Arduino-Linux-Seite findest du Anweisungen zur Installation von Arduino unter Linux. Du musst diese Anweisungen befolgen, um das Installationsskript auszuführen, und du musst dies eventuell tun, damit dein Benutzerkonto auf die serielle Schnittstelle zugreifen kann.
Bei Arduino-kompatiblen Boards, die nicht von Arduino hergestellt wurden, musst du eventuell die Support-Dateien mit dem Boards Manager installieren (siehe Rezept 1.7). Du solltest auch in der Dokumentation des jeweiligen Boards nachsehen, ob zusätzliche Schritte erforderlich sind.
Nachdem du Arduino installiert hast, doppelklicke auf das Symbol und der Startbildschirm sollte erscheinen (siehe Abbildung 1-2).
Auf den Startbildschirm folgt das Hauptfenster des Programms (siehe Abbildung 1-3). Sei geduldig, denn es kann einige Zeit dauern, bis die Software geladen ist. Das Arduino-Symbol findest du im Startmenü (Windows), im Ordner " Programme" (macOS) oder möglicherweise auf dem Desktop. Unter Linux musst du das Arduino-Programm möglicherweise über die Terminal-Shell ausführen.
Diskussion
Wenn der Start der Software fehlschlägt, findest du im Abschnitt zur Fehlerbehebung auf der Arduino-Website Hilfe bei der Lösung von Installationsproblemen.
Siehe auch
Online-Anleitungen für die ersten Schritte mit Arduino gibt es für Windows, für macOS und für Linux.
Die Arduino Pro IDE ist eine Entwicklungsumgebung für Arduino, die auf die Bedürfnisse von professionellen Nutzern ausgerichtet ist. Zum Zeitpunkt der Erstellung dieses Artikels befand sie sich noch in einem frühen Stadium. Siehe das Arduino Pro IDE GitHub Repo.
Das Arduino CLI ist ein Kommandozeilen-Tool zum Kompilieren und Hochladen von Sketches. Du kannst es auch anstelle des Library and Boards Manager verwenden. Siehe das Arduino CLI GitHub Repo.
Es gibt eine Online-Bearbeitungsumgebung namens Arduino Create. Um diese zu nutzen, musst du ein Konto erstellen und ein Plug-in herunterladen, mit dem die Website mit dem Board kommunizieren kann, um Code hochzuladen. Sie verfügt über eine Speicherung in der Cloud, in der deine Skizzen gespeichert werden, und bietet Möglichkeiten zum Teilen von Code. Als dieses Buch geschrieben wurde, war Arduino Create ein relativ neuer Dienst, der sich noch in der Entwicklung befand. Wenn du Arduino-Skizzen erstellen möchtest, ohne eine Entwicklungsumgebung auf deinem Computer installieren zu müssen, dann schau dir Arduino Create an.
Wenn du ein Chromebook verwendest, musst du für die Chrome-App von Arduino Create ein monatliches Abonnement von 1 US-Dollar abschließen. Es gibt eine zeitlich begrenzte Testversion, damit du sie ausprobieren kannst. Es gibt noch eine weitere Alternative zum Kompilieren und Hochladen von Arduino-Code von einem Chromebook aus: Codebender ist eine webbasierte IDE wie Arduino Create, unterstützt aber auch eine Reihe von Arduino-kompatiblen Boards anderer Hersteller. Es gibt auch preisgünstige Angebote für Klassenräume und Schulen. Siehe diese Codebender-Seite.
1.2 Einrichten des Arduino-Boards
Lösung
Verbinde das Board mit einem USB-Anschluss deines Computers und überprüfe, ob die LED-Stromanzeige auf dem Board leuchtet. Die meisten Arduino-Boards haben eine LED-Betriebsanzeige, die immer dann aufleuchtet, wenn das Board mit Strom versorgt wird.
Die Onboard-LED (in Abbildung 1-4 beschriftet) sollte beim Einschalten des Boards blinken (auf den meisten Boards ist ab Werk die Software vorinstalliert, um die LED blinken zu lassen und so zu überprüfen, ob das Board funktioniert).
Hinweis
Die aktuellen Boards im Arduino Uno-Formfaktor haben einige Pins, die auf älteren Boards nicht vorhanden waren, und es kann sein, dass du auf einige ältere Arduino Shields triffst, die diese Pins nicht haben. Glücklicherweise hat dies in der Regel keine Auswirkungen auf die Verwendung älterer Shields; die meisten funktionieren mit den neuen Boards genauso gut wie mit früheren Boards (aber das kann sich ändern).
Die neuen Anschlüsse bieten einen Pin (IOREF) für Shields, um die analoge Referenzspannung zu erkennen (damit analoge Eingangswerte mit der Versorgungsspannung korreliert werden können), sowie SCL- und SDA-Pins, um eine einheitliche Pin-Position für I2C-Geräte zu ermöglichen. Die Position der I2C-Pins war auf einigen früheren Boards wie dem Mega aufgrund unterschiedlicher Chipkonfigurationen unterschiedlich, und in einigen Fällen mussten bestimmte Shields mit Jumper-Drähten versehen werden, um die I2C-Pins des Shields mit denen des Mega zu verbinden. Shields, die für das neue Layout entwickelt wurden, sollten auf jedem Board mit den neuen Pinpositionen funktionieren. Ein zusätzlicher Pin (neben dem IOREF-Pin) ist im Moment noch ungenutzt, ermöglicht es aber, in Zukunft neue Funktionen zu implementieren, ohne die Pinbelegung erneut ändern zu müssen.
Diskussion
Wenn die Power-LED nicht leuchtet, wenn das Board mit deinem Computer verbunden ist, wird das Board wahrscheinlich nicht mit Strom versorgt (versuche eine andere USB-Buchse oder ein anderes Kabel).
Die blinkende LED wird durch den Code auf dem Board gesteuert (neue Boards sind auf mit dem Blink-Beispielsketch vorinstalliert). Wenn die Onboard-LED blinkt, läuft der Sketch korrekt, was bedeutet, dass der Chip auf der Platine funktioniert. Wenn die Power-LED leuchtet, aber die Onboard-LED (normalerweise mit L beschriftet) nicht blinkt, könnte es sein, dass der Werkscode nicht auf dem Chip ist; folge den Anweisungen in Rezept 1.3, um den Blink-Sketch auf das Board zu laden und zu überprüfen, ob das Board funktioniert. Wenn du keine Standardplatine verwendest, hat sie möglicherweise keine Onboard-LED, also überprüfe die Dokumentation für deine Platine.
Die Boards der Leonardo und Zero-Klasse (Arduino Zero, Adafruit Metro M0, SparkFun RedBoard Turbo) haben die gleiche Grundfläche wie der Uno (die Header befinden sich an der gleichen Position, so dass Shields angebracht werden können). In anderen Punkten unterscheiden sie sich deutlich. Der Leonardo hat einen 8-Bit-Chip wie der Uno, aber da er keinen separaten Chip für die USB-Kommunikation hat, akzeptiert der Leonardo nur Programm-Uploads unmittelbar nach einem Reset des Boards. Du wirst sehen, dass die LED des Leonardo sanft pulsiert, während er auf einen Upload wartet. Der Leonardo ist 5V-tolerant. Die Zero hat einen 32-Bit-ARM-Chip mit mehr Speicher zum Speichern und Ausführen deines Programms. Außerdem gibt es einen Pin, der einen Digital-Analog-Wandler (DAC) bereitstellt, d.h. du kannst eine variable analoge Spannung abgreifen. Damit kannst du Audiosignale in viel besserer Qualität als mit einem Uno erzeugen. Das Zero ist nicht 5V-tolerant, ebenso wenig wie die ähnlichen Boards von Adafruit (Metro M0 Express) oder SparkFun (RedBoard Turbo).
Das MKR1010 verwendet denselben Chip wie das Zero (und ist wie das Zero nicht 5V-tolerant), hat aber einen kleineren Formfaktor. Außerdem verfügt er über WiFi, sodass er sich über ein WiFi-Netzwerk mit dem Internet verbinden kann. Der MKR-Formfaktor unterstützt keine Shields, die für das Uno-Pin-Layout ausgelegt sind.
Alle 32-Bit-Boards haben mehr Pins, die Interrupts unterstützen, als die meisten 8-Bit-Boards, was für Anwendungen nützlich ist, die schnell Signaländerungen erkennen müssen (siehe Rezept 18.2). Die einzige 8-Bit-Ausnahme ist das Arduino Uno WiFi Rev2,, das Interrupts an jedem seiner digitalen Pins unterstützt.
Siehe auch
Online-Anleitungen für die ersten Schritte mit Arduino gibt es für Windows, für macOS und für Linux. Im Arduino Guide findest du board-spezifische Anleitungen.
Eine Anleitung zur Fehlersuche findest du auf der Arduino-Website.
1.3 Verwendung der integrierten Entwicklungsumgebung zur Vorbereitung eines Arduino-Sketches
Lösung
Der Quellcode für Arduino wird Sketch genannt. Der Prozess, bei dem ein Sketch in eine Form umgewandelt wird, die auf dem Board funktioniert, heißt Kompilierung. Mit der Arduino-IDE kannst du Sketches erstellen, öffnen und ändern, die festlegen, was das Board tun soll. Du kannst diese Aktionen mit den Schaltflächen oben in der IDE durchführen (siehe Abbildung 1-6) oder du kannst die Menüs oder Tastenkombinationen verwenden (siehe Abbildung 1-5).
Im Skizzeneditor kannst du den Code für eine Skizze anzeigen und bearbeiten. Er unterstützt gängige Textbearbeitungskürzel wie Strg-F (⌘+F auf dem Mac) zum Suchen, Strg-Z (⌘+Z auf dem Mac) zum Rückgängigmachen, Strg-C (⌘+C auf dem Mac) zum Kopieren von markiertem Text und Strg-V (⌘+V auf dem Mac) zum Einfügen von markiertem Text.
Abbildung 1-5 zeigt, wie du den Blink-Sketch lädst (der Sketch, der auf einem neuen Arduino-Board vorinstalliert ist).
Nachdem du die IDE gestartet hast, gehst du zum Menü Datei→Beispieleund wählst 01.Basics→Blink, wie in Abbildung 1-5 gezeigt. Der Code für das Blinken der eingebauten LED wird im Sketch Editor-Fenster angezeigt (siehe Abbildung 1-6).
Bevor du den Code an das Board senden kannst, muss er in Anweisungen umgewandelt werden, die vom Arduino-Controller-Chip gelesen und ausgeführt werden können; dies wird Kompilieren genannt. Klicke dazu auf die Schaltfläche Verifizieren/Kompilieren (die Schaltfläche oben links mit einem Häkchen) oder wähle Sketch→Verifizieren/Kompilieren (Strg-R; ⌘+R auf einem Mac).
Du solltest die Meldung "Skizze kompilieren..." und einen Fortschrittsbalken im Nachrichtenbereich unter dem Textbearbeitungsfenster sehen. Nach ein oder zwei Sekunden erscheint die Meldung "Fertig kompiliert". Der schwarze Konsolenbereich enthält die folgende zusätzliche Meldung:
Sketch
uses
930
bytes
(
2
%
)
of
program
storage
space
.
Maximum
is
32256
bytes
.
Global
variables
use
9
bytes
(
0
%
)
of
dynamic
memory
,
leaving
2039
bytes
for
local
variables
.
Maximum
is
2048
bytes
.
Die genaue Meldung kann sich je nach Board und Arduino-Version unterscheiden; sie gibt die Größe des Sketches und die maximale Größe an, die dein Board akzeptieren kann.
Diskussion
Die IDE verwendet hinter den Kulissen eine Reihe von Befehlszeilen-Tools, um einen Sketch zu kompilieren. Weitere Informationen dazu findest du in Rezept 17.1.
Die abschließende Meldung, die dir die Größe des Sketches mitteilt, gibt an, wie viel Programmspeicher benötigt wird, um die Regleranweisungen auf dem Board zu speichern. Wenn die Größe des kompilierten Sketches größer ist als der verfügbare Speicher auf dem Board, wird die folgende Fehlermeldung angezeigt:
Sketch
too
big
;
see
http
:
//www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.
In diesem Fall musst du deinen Sketch verkleinern, um ihn auf dem Board unterbringen zu können, oder ein Board mit größerer Flash-Speicherkapazität kaufen. Wenn deine globalen Variablen zu viel Speicherplatz beanspruchen, wird stattdessen eine andere Fehlermeldung angezeigt:
Not
enough
memory
;
see
http
:
//www.arduino.cc/en/Guide/Troubleshooting#size
for
tips
on
reducing
your
footprint
.
In diesem Fall musst du deinen Code durchgehen und die Menge des Speichers, die du globalen Variablen zuweist, reduzieren oder ein Board mit einer höheren SRAM (dynamischer Speicher) Kapazität kaufen.
Tipp
Um zu verhindern, dass du versehentlich den Beispielcode überschreibst, erlaubt dir die Arduino IDE nicht, Änderungen an den eingebauten Beispielskizzen zu speichern. Du musst sie mit der Menüoption Datei→Speichernunter umbenennen. Sketche, die du selbst schreibst, kannst du mit der Schaltfläche Speichern speichern (siehe Rezept 1.5).
Wenn der Code Fehler enthält, gibt der Compiler eine oder mehrere Fehlermeldungen im Konsolenfenster aus. Diese Meldungen können helfen, den Fehler zu identifizieren - siehe Anhang D zu Softwarefehlern für Tipps zur Fehlerbehebung.
Der Compiler kann auch Warnungen erzeugen, wenn er feststellt, dass dein Sketch Besonderheiten aufweist, die Probleme verursachen könnten. Diese können sehr hilfreich sein, um Probleme zu vermeiden, die dich später in Schwierigkeiten bringen könnten. Du kannst deine Warnstufe konfigurieren, indem du File→Preferences(Windows oder Linux) oder Arduino→Preferences(macOS) öffnest und Compiler-Warnungen auf None, Default, More oder All setzt. Trotz des Namens ist Arduino standardmäßig auf Keine eingestellt. Wir empfehlen dir, die Einstellung auf Standard oder Mehr zu setzen.
Hinweis
Der auf das Board hochgeladene Code kann nicht auf deinen Computer zurückgeladen werden. Stelle sicher, dass du deinen Sketch-Code auf deinem Computer speicherst. Du kannst Änderungen, die du an den Beispieldateien vorgenommen hast, nicht speichern; du musst "Speichern unter" verwenden und der geänderten Datei einen anderen Namen geben.
Siehe auch
Rezept 1.5 zeigt eine Beispielskizze. In Anhang D findest du Tipps zur Behebung von Softwareproblemen.
1.4 Hochladen und Ausführen des Blink-Sketches
Lösung
Verbinde dein Arduino-Board über das USB-Kabel mit deinem Computer. Lade den Blink-Sketch in die IDE, indem du File→Examplesund 01. Grundlagen→Blink.
Wähle als Nächstes Tools→Boardaus dem Dropdown-Menü und wähle den Namen des Boards, das du angeschlossen hast (wenn es das Standard-Uno-Board ist, ist es wahrscheinlich einer der ersten Einträge in der Board-Liste).
Wähle nun Extras→SeriellerAnschluss. Du erhältst eine Dropdown-Liste mit den verfügbaren seriellen Schnittstellen deines Computers. Jeder Computer hat eine andere Kombination von seriellen Schnittstellen, je nachdem, welche anderen Geräte du mit deinem Computer verwendet hast.
Unter Windows werden sie unter als nummerierte COM-Einträge aufgeführt. Wenn es nur einen Eintrag gibt, wähle ihn aus. Wenn es mehrere Einträge gibt, ist dein Board wahrscheinlich der letzte Eintrag.
Wenn dein Board ein Uno ist, wird es auf dem Mac als aufgeführt:
/dev/cu.usbmodem-XXXXXXX
(Arduino/Genuino Uno)
Wenn du ein älteres Board hast, wird es wie folgt aufgelistet:
/dev/tty.usbserial-XXXXXXX
/dev/cu.usbserial-XXXXXXX
Jedes Board hat unterschiedliche Werte für XXXXXXX
. Wähle einen der beiden Einträge aus.
Wenn dein Board ein Uno ist, wird es unter Linux wahrscheinlich als aufgeführt:
/dev/ttyACMX
(Arduino/Genuino Uno)
Wenn du ein älteres Board hast, kann es wie folgt aufgelistet sein:
/dev/ttyUSB-X
X
ist normalerweise 0, aber du kannst auch 1, 2 usw. sehen, wenn du mehrere Boards gleichzeitig angeschlossen hast. Wähle den Eintrag aus, der zu deinem Arduino passt.
Tipp
Wenn du so viele Einträge im Port-Menü hast, dass du nicht herausfinden kannst, welcher zu deinem Arduino gehört, versuche Folgendes: Sieh dir das Menü an, wenn der Arduino nicht an deinen Computer angeschlossen ist, stecke dann den Arduino an und suche nach der Menüoption, die vorher nicht da war. Eine andere Möglichkeit ist, die Ports einzeln auszuwählen und zu versuchen, den Code hochzuladen, bis die Lichter auf dem Board flackern, um anzuzeigen, dass der Code hochgeladen wird.
Klicke auf die Schaltfläche Hochladen (in Abbildung 1-6 ist es die zweite Schaltfläche von links) oder wähle Sketch→Upload(Strg-U; ⌘+U auf einem Mac).
Die IDE kompiliert den Code, wie in Rezept 1.3 beschrieben. Nachdem die Software kompiliert wurde, wird sie auf das Board hochgeladen. Wenn es sich um einen frisch ausgelieferten Arduino handelt, auf dem der Blink-Sketch vorinstalliert ist, wird die Onboard-LED (in Abbildung 1-4 als Onboard-LED bezeichnet) aufhören zu blinken. Wenn der Upload beginnt, sollten die beiden LEDs (in Abbildung 1-4 als serielle LEDs bezeichnet) neben der Onboard-LED einige Sekunden lang flackern, während der Code hochgeladen wird. Die Onboard-LED sollte dann anfangen zu blinken, wenn der Code ausgeführt wird. Die Position der Onboard-LED ist bei einigen Arduino-Modellen unterschiedlich, z. B. beim Leonardo, den MKR-Boards und den Arduino-Klonen von Drittanbietern.
Diskussion
Damit die IDE den kompilierten Code an das Board senden kann, muss das Board an den Computer angeschlossen sein, und du musst der IDE mitteilen, welches Board und welchen seriellen Anschluss du verwendest.
Wenn ein Upload beginnt, wird der Sketch, der gerade auf dem Board läuft, angehalten (wenn du den Blink-Sketch ausgeführt hast, hört die LED auf zu blinken). Der neue Sketch wird auf das Board hochgeladen und ersetzt den vorherigen Sketch. Der neue Sketch wird ausgeführt, wenn der Upload erfolgreich abgeschlossen wurde.
Hinweis
Bei einigen älteren Arduino-Boards und kompatiblen Boards wird der laufende Sketch nicht automatisch unterbrochen, um den Upload zu starten. In diesem Fall musst du den Reset-Knopf auf dem Board drücken, kurz nachdem die Software meldet, dass sie mit dem Kompilieren fertig ist (wenn du die Meldung über die Größe des Sketches siehst). Es kann ein paar Versuche dauern, bis das Timing zwischen dem Ende der Kompilierung und dem Drücken der Reset-Taste stimmt.
Die IDE zeigt eine Fehlermeldung an, wenn der Upload nicht erfolgreich ist. Probleme sind normalerweise darauf zurückzuführen, dass das falsche Board oder der falsche serielle Anschluss ausgewählt wurde oder das Board nicht eingesteckt ist. Das aktuell ausgewählte Board und der serielle Anschluss werden in der Statusleiste am unteren Rand des Arduino-Fensters angezeigt.
Siehe auch
Weitere Informationen findest du auf der Seite zur Fehlerbehebung bei Arduino.
1.5 Erstellen und Speichern einer Skizze
Lösung
Um ein Editorfenster für einen neuen Sketch zu öffnen, starte die IDE (siehe Rezept 1.3), gehe zum Menü Datei und wähle Neu. Lösche den Boilerplate-Code im Sketch-Editor-Fenster und füge an seiner Stelle den folgenden Code ein (er ähnelt dem Blink-Sketch, aber die Blinks dauern doppelt so lang):
void
setup
()
{
pinMode
(
LED_BUILTIN
,
OUTPUT
);
}
void
loop
()
{
digitalWrite
(
LED_BUILTIN
,
HIGH
);
// set the LED on
delay
(
2000
);
// wait for two seconds
digitalWrite
(
LED_BUILTIN
,
LOW
);
// set the LED off
delay
(
2000
);
// wait for two seconds
}
Kompiliere den Code, indem du auf die Schaltfläche Verifizieren/Kompilieren klickst (die Schaltfläche oben links mit einem Häkchen) oder wähle Sketch→Verifizieren/Kompilieren(siehe Rezept 1.3).
Lade den Code hoch, indem du auf die Schaltfläche Hochladen klickst oder Sketch→Uploadwählst (siehe Rezept 1.4). Nach dem Hochladen sollte die LED blinken, wobei jedes Blinken zwei Sekunden dauert.
Du kannst diese Skizze auf deinem Computer speichern, indem du auf die Schaltfläche Speichern klickst oder Datei→Speichernwählst. Du kannst eine Skizze unter einem neuen Namen speichern, indem du die Menüoption Speichern unter auswählst. Es öffnet sich ein Dialogfeld, in das du den Dateinamen eingeben kannst.
Diskussion
Wenn du eine Datei in der IDE speicherst, öffnet sich ein Standarddialogfeld des Betriebssystems. Es schlägt vor, dass du den Sketch in einem Ordner namens Arduino in deinem Ordner Eigene Dateien (oder deinem Ordner Dokumente auf einem Mac) speicherst. Du kannst den Standardnamen des Sketches durch einen aussagekräftigen Namen ersetzen, der den Zweck deines Sketches widerspiegelt. Klicke auf Speichern, um die Datei zu speichern.
Hinweis
Der Standardname ist das Wort Skizze, gefolgt von dem aktuellen Datum. Fortlaufende Buchstaben, die mit a beginnen, werden verwendet, um Skizzen zu unterscheiden, die am selben Tag erstellt wurden. Wenn du den Standardnamen durch einen aussagekräftigen Namen ersetzt, kannst du den Zweck einer Skizze leichter erkennen, wenn du sie später wieder aufrufst.
Wenn du Zeichen verwendest, die die IDE nicht zulässt (z. B. das Leerzeichen), ersetzt die IDE diese automatisch durch gültige Zeichen.
Arduino Sketches werden als reine Textdateien mit der Endung .ino gespeichert. Ältere Versionen der IDE verwendeten die Endung .pde, die auch von Processing verwendet wird. Sie werden automatisch in einem Ordner mit demselben Namen wie der Sketch gespeichert.
Du kannst deine Skizzen in einem beliebigen Ordner speichern, aber wenn du den Standardordner verwendest (den Arduino-Ordner in deinem Dokumente-Ordner; ~/Arduino unter Linux), erscheinen deine Skizzen im Skizzenbuch-Menü der Arduino-Software und sind leichter zu finden.
Wenn du eines der eingebauten Beispiele bearbeitet hast, kannst du die geänderte Datei nicht im Beispiele-Ordner speichern. Du wirst dann aufgefordert, sie in einem anderen Ordner zu speichern.
Nachdem du Änderungen vorgenommen hast, wird ein Dialogfeld angezeigt, in dem du gefragt wirst, ob du den Sketch speichern möchtest, wenn ein Sketch geschlossen wird. Das §-Symbol nach dem Namen der Skizze in der oberen Leiste des IDE-Fensters zeigt an, dass der Skizzencode Änderungen enthält, die noch nicht auf dem Computer gespeichert wurden. Dieses Symbol wird entfernt, wenn du die Skizze speicherst.
Wenn du eine Skizze entwickelst und veränderst, brauchst du eine Möglichkeit, um die Änderungen zu verfolgen. Am einfachsten geht das mit dem Versionskontrollsystem Git (Informationen zur Installation findest du auf dieser Atlassian Git Tutorial-Seite ). Der Zugriff auf Git erfolgt in der Regel über eine Befehlszeilenschnittstelle (es gibt auch grafische Clients). Der grundlegende Arbeitsablauf, um eine Skizze unter Versionskontrolle in Git zu stellen, ist folgender:
-
Finde heraus, in welchem Ordner sich deine Skizze befindet. Du findest ihn mit Sketch→Skizzenordneranzeigen. Dadurch wird der Skizzenordner im Dateimanager deines Computers geöffnet.
-
Öffne eine Eingabeaufforderung (unter Windows: Eingabeaufforderung; unter Linux oder macOS: Terminal). Verwende den Befehl
cd
, um in das Verzeichnis zu wechseln, in dem sich dein Sketch befindet. Wenn du zum Beispiel einen Sketch namens Blink im Standard-Sketch-Ordner gespeichert hast, kannst du unter macOS, Linux und Windows mit den folgenden Befehlen in dieses Verzeichnis wechseln:$ cd ~/Documents/Arduino/Blink $ cd ~/Arduino/Blink > cd %USERPROFILE%\Documents\Arduino\Blink
-
Initialisiere das Git-Repository mit dem Befehl
git init
. -
Füge die Sketch-Datei mit
git add Blink.ino
zu Git hinzu (ersetzeBlink.ino
durch den Namen deines Sketches). Wenn du weitere Dateien zu deinem Skizzenordner hinzufügst, musst du sie mit demgit add filename
Befehl hinzufügen. -
Nachdem du wesentliche Änderungen vorgenommen hast, tippe
git commit -a -m "your comment here"
. Ersetze "dein Kommentar hier" durch etwas, das die von dir vorgenommene Änderung beschreibt.
Nachdem du eine Änderung an Git übergeben hast, kannst du unter git log
einen Überblick über deine Änderungen erhalten. Jede dieser Änderungen wird mit einem Commit-Hash versehen:
commit 87e962e54fe46d9e2a00575f7f0d1db6b900662a (HEAD -> master) Author: Brian Jepson <bjepson@gmail.com> Date: Tue Jan 14 20:58:56 2020 -0500 made massive improvements commit 0ae1a1bcb0cd245ca9427352fc3298d6ccb91cef (HEAD -> master) Author: Brian Jepson <bjepson@gmail.com> Date: Tue Jan 14 20:56:45 2020 -0500 your comment here
Mit diesen Hashes kannst du mit älteren Versionen von Dateien arbeiten (du brauchst nicht den vollständigen Hash, sondern nur genug davon, um zwischen den Versionen zu unterscheiden). Du kannst eine alte Version wiederherstellen mit git checkout hash filename
wiederherstellen, wie in git checkout 0ae1 Blink.ino
. Du kannst Versionen vergleichen mit git diff firsthash..secondhash
vergleichen, wie in git diff 0ae1..7018
. Unter https://git-scm.com/doc findest du die vollständige Dokumentation zu Git.
Häufiges Kompilieren, wenn du Code änderst oder hinzufügst, ist eine gute Methode, um nach Fehlern zu suchen. Es ist einfacher, Fehler zu finden und zu beheben, weil sie in der Regel mit dem verbunden sind, was du gerade geschrieben hast.
Hinweis
Sobald eine Skizze auf das Board hochgeladen wurde, gibt es keine Möglichkeit mehr, sie zurück auf deinen Computer zu laden. Achte darauf, dass du alle Änderungen an deinen Skizzen speicherst, die du beibehalten möchtest.
Wenn du versuchst, eine Skizzendatei zu speichern, die sich nicht in einem Ordner mit demselben Namen wie die Skizze befindet, teilt dir die IDE mit, dass diese nicht geöffnet werden kann und schlägt dir vor, auf OK zu klicken, um den Ordner für die Skizze mit demselben Namen zu erstellen.
Hinweis
Skizzen müssen in einem Ordner mit dem gleichen Namen wie die Skizze gespeichert werden. Die IDE erstellt den Ordner automatisch, wenn du eine neue Skizze speicherst.
Sketche, die mit älteren Versionen der Arduino-Software erstellt wurden, haben eine andere Dateierweiterung (.pde). Die IDE öffnet sie, und wenn du den Sketch speicherst, wird eine Datei mit der neuen Erweiterung (.ino) erstellt. Code, der für frühere Versionen der IDE geschrieben wurde, lässt sich möglicherweise nicht in Version 1.0 kompilieren. Die meisten Änderungen, um alten Code zum Laufen zu bringen, sind leicht durchzuführen.
1.6 Ein einfaches erstes Arduino-Projekt
Lösung
Dieses Rezept gibt einen Vorgeschmack auf einige der Techniken, die in späteren Kapiteln ausführlich behandelt werden.
Der Sketch basiert auf dem LED-Blinkcode aus dem vorherigen Rezept, aber anstatt eine feste Verzögerung zu verwenden, wird die Rate durch einen lichtempfindlichen Sensor, den Fotowiderstand oder kurz LDR (siehe Rezept 6.3), bestimmt. Verdrahte den Fotowiderstand wie in Abbildung 1-7 gezeigt.
Wenn du mit dem Aufbau einer Schaltung anhand eines Schaltplans nicht vertraut bist, findest du in Anhang B eine Schritt-für-Schritt-Anleitung, wie du diese Schaltung auf einem Breadboard erstellen kannst.
Hinweis
Fotowiderstände enthalten eine Verbindung (Cadmiumsulfid), die ein gefährlicher Stoff ist. Du kannst einen Fototransistor verwenden, wenn du in einem Land lebst, in dem es schwierig ist, einen Fotowiderstand zu bekommen, oder wenn du einfach keinen Fotowiderstand verwenden möchtest. Ein Fototransistor hat eine lange und eine kurze Leitung, ähnlich wie eine LED. Du kannst ihn genau wie in der Abbildung gezeigt verdrahten, musst aber die lange Leitung mit 5 V und die kurze Leitung mit dem Widerstand und Pin 0 verbinden. Achte darauf, dass du einen Fototransistor wie den von Adafruit mit der Artikelnummer 2831 kaufst, der sichtbares Licht erkennen kann, damit du ihn mit einer gewöhnlichen Lichtquelle testen kannst.
Die folgende Skizze liest den Lichtpegel eines Fotowiderstands aus, der an den analogen Pin 0 angeschlossen ist. Der Lichtpegel, der auf den Fotowiderstand trifft, verändert die Blinkverzögerung der internen Onboard-LED:
/*
* Blink with photoresistor sketch
*/
const
int
sensorPin
=
A0
;
// connect sensor to analog input 0
void
setup
()
{
pinMode
(
LED_BUILTIN
,
OUTPUT
);
// enable output on the led pin
}
void
loop
()
{
int
delayval
=
analogRead
(
sensorPin
);
// read the analog input
digitalWrite
(
LED_BUILTIN
,
HIGH
);
// set the LED on
delay
(
delayval
);
// delay is dependent on light level
digitalWrite
(
LED_BUILTIN
,
LOW
);
// set the LED off
delay
(
delayval
);
}
Der Code in diesem Rezept und im gesamten Buch verwendet den Ausdruck const int
, um sinnvolle Namen (sensorPin
) für Konstanten anstelle von Zahlen (0
) zu vergeben. Mehr über die Verwendung von Konstanten erfährst du in Rezept 17.5.
Diskussion
Der Wert des in Abbildung 1-7 gezeigten Widerstands hängt von der Reichweite deines Fotowiderstands ab: Du brauchst einen Widerstand, der in etwa dem maximalen (dunklen) Widerstand deines Fotowiderstands entspricht (du kannst ihn herausfinden, indem du den Fotowiderstand abdeckst, während du seinen Widerstand mit einem Multimeter misst). Wenn dein Fotowiderstand also im Dunkeln 10 kOhm misst, nimm einen 10 k-Widerstand. Wenn du einen Fototransistor verwendest, reicht in der Regel ein Wert zwischen 1K und 10K aus. Der Befehl analogRead
(siehe Kapitel 6) liefert einen Wert, der von etwa 200, wenn der Sensor dunkel ist, bis zu 800 oder so reicht, wenn er sehr hell ist (die Empfindlichkeit hängt von der Art des Fotowiderstands und des Widerstands ab und davon, ob du einen Fototransistor anstelle des Fotowiderstands verwendest). Der analoge Messwert bestimmt die Dauer der Ein- und Ausschaltzeiten der LED, sodass die Blinkverzögerung mit der Lichtintensität zunimmt.
Du kannst die Blinkrate mit der Arduino map
Funktion wie folgt skalieren:
/*
* Blink with photoresistor (scaled) sketch
*/
const
int
sensorPin
=
A0
;
// connect sensor to analog input 0
// low and high values for the sensor readings; you may need to adjust these
const
int
low
=
200
;
const
int
high
=
800
;
// The next two lines set the min and max delay between blinks.
const
int
minDuration
=
100
;
// minimum wait between blinks
const
int
maxDuration
=
1000
;
// maximum wait between blinks
void
setup
()
{
pinMode
(
LED_BUILTIN
,
OUTPUT
);
// enable output on the LED pin
}
void
loop
()
{
int
delayval
=
analogRead
(
sensorPin
);
// read the analog input
// the next line scales the delay value between the min and max values
delayval
=
map
(
delayval
,
low
,
high
,
minDuration
,
maxDuration
);
delayval
=
constrain
(
delayval
,
minDuration
,
maxDuration
);
digitalWrite
(
LED_BUILTIN
,
HIGH
);
// set the LED on
delay
(
delayval
);
// delay is dependent on light level
digitalWrite
(
LED_BUILTIN
,
LOW
);
// set the LED off
delay
(
delayval
);
}
Hinweis
Wenn du beim Einstellen des Lichts keine Veränderung der Werte feststellst, musst du mit den Werten für low
und high
spielen. Wenn du einen Fototransistor verwendest und keine Veränderungen in der Blinkrate feststellst, versuche es mit einem Wert von 10 für low
.
Rezept 5.7 enthält weitere Einzelheiten über die Verwendung der Funktion map
zur Skalierung von Werten. Rezept 3.5 enthält Einzelheiten zur Verwendung der Funktion constrain
, um sicherzustellen, dass die Werte einen bestimmten Bereich nicht überschreiten. Wenn dein Verzögerungswert aus irgendeinem Grund außerhalb des Bereichs zwischen low
und high
liegt, gibt map
einen Wert zurück, der außerhalb des Bereichs zwischen minDuration
und maxDuration
liegt. Wenn du constrain
nach map
aufrufst, wie in der Skizze gezeigt, vermeidest du das Problem, dass die Werte außerhalb des Bereichs liegen.
Wenn du den Wert der Variable delayval
auf deinem Computer sehen möchtest, kannst du ihn auf dem Arduino Serial Monitor ausgeben, wie im folgenden überarbeiteten Schleifencode gezeigt. Der Sketch zeigt den Wert der Verzögerung im Serial Monitor an. Du öffnest das Fenster Serial Monitor in der Arduino IDE, indem du auf das Symbol rechts in der oberen Leiste klickst (siehe Kapitel 4 für weitere Informationen zur Verwendung des Serial Monitors):
/*
* Blink sketch with photoresistor (scaled with serial output)
*/
const
int
sensorPin
=
A0
;
// connect sensor to analog input 0
// Low and high values for the sensor readings. You may need to adjust these.
const
int
low
=
200
;
const
int
high
=
800
;
// the next two lines set the min and max delay between blinks
const
int
minDuration
=
100
;
// minimum wait between blinks
const
int
maxDuration
=
1000
;
// maximum wait between blinks
void
setup
()
{
pinMode
(
LED_BUILTIN
,
OUTPUT
);
// enable output on the led pin
Serial
.
begin
(
9600
);
// initialize Serial
}
void
loop
()
{
int
delayval
=
analogRead
(
sensorPin
);
// read the analog input
// the next line scales the delay value between the min and max values
delayval
=
map
(
delayval
,
low
,
high
,
minDuration
,
maxDuration
);
delayval
=
constrain
(
delayval
,
minDuration
,
maxDuration
);
Serial
.
println
(
delayval
);
// print delay value to serial monitor
digitalWrite
(
LED_BUILTIN
,
HIGH
);
// set the LED on
delay
(
delayval
);
// delay is dependent on light level
digitalWrite
(
LED_BUILTIN
,
LOW
);
// set the LED off
delay
(
delayval
);
}
Du kannst den Sensor verwenden, um die Tonhöhe eines Geräusches zu kontrollieren, indem du einen kleinen Lautsprecher an den Pin anschließt, wie in Abbildung 1-8 gezeigt.
Du musst die An-/Ausschaltrate des Pins auf eine Frequenz im Audiospektrum erhöhen. Das kannst du, wie hier gezeigt, erreichen, indem du die Min- und Max-Dauer verringerst:
/* * Speaker sketch with photoresistor */
const
int
outputPin
=
9
;
// Speaker connected to digital pin 9
const
int
sensorPin
=
A0
;
// connect sensor to analog input 0
const
int
low
=
200
;
const
int
high
=
800
;
const
int
minDuration
=
1
;
// 1 ms on, 1 ms off (500 Hz)
const
int
maxDuration
=
10
;
// 10 ms on, 10 ms off (50 Hz)
void
setup
(
)
{
pinMode
(
outputPin
,
OUTPUT
)
;
// enable output on the led pin
}
void
loop
(
)
{
int
sensorReading
=
analogRead
(
sensorPin
)
;
// read the analog input
int
delayval
=
map
(
sensorReading
,
low
,
high
,
minDuration
,
maxDuration
)
;
delayval
=
constrain
(
delayval
,
minDuration
,
maxDuration
)
;
digitalWrite
(
outputPin
,
HIGH
)
;
// set the pin on
delay
(
delayval
)
;
// delay is dependent on light level
digitalWrite
(
outputPin
,
LOW
)
;
// set the pin off
delay
(
delayval
)
;
}
Siehe auch
Eine ausführliche Diskussion über die Audioausgabe mit Arduino findest du in Kapitel 9.
1.7 Verwendung von Arduino mit Boards, die nicht in der Standarddistribution enthalten sind
Problem
Du möchtest ein Board wie das Arduino MKR 1010 verwenden, aber es erscheint nicht im Board-Menü.
Lösung
Um das MKR 1010 mit Arduino zu verwenden, musst du seine Daten zur Arduino-Software hinzufügen, die du bereits heruntergeladen hast. Gehe dazu auf Tools→Board→BoardsManager(Abbildung 1-9).
Wenn sich dieses Fenster öffnet, wird die Liste der online verfügbaren Boarddefinitionen überprüft, um sicherzustellen, dass du die neuesten Versionen hast.
Hinzufügen anderer Boards zum Menü Boards
Das hier beschriebene Verfahren gilt auch für andere Boards, die du dem Board-Menü hinzufügen möchtest. Schau in der Dokumentation deines Boards nach, wo die Definitionsdateien zu finden sind.
Das sich öffnende Fenster(Abbildung 1-10) zeigt dir die bereits installierten und die zum Download verfügbaren Boarddefinitionen an.
Um das MKR 1010 zu finden, kannst du in der Liste nach unten scrollen oder seinen Namen in das Filterfeld eingeben. Für das MKR 1010 musst du den Eintrag Arduino SAMD Boards in der Liste auswählen. Wenn du ihn ausgewählt hast, klicke auf Installieren und er wird heruntergeladen und zur Arduino IDE hinzugefügt. Dies kann einige Zeit dauern.
Danach kannst du weitere Boards hinzufügen oder auf Schließen klicken, um die Verwendung des Boards Managers zu beenden. Wenn du Tools→Boardöffnest, solltest du jetzt die Möglichkeit haben, das MKR 1010 auszuwählen, wie in Abbildung 1-11 gezeigt.
Diskussion
In den Dateien, die du dabei herunterlädst, wird beschrieben, wie du die Programmierkonzepte in Arduino, die mit bestimmten Bits der Hardware im Mikrocontroller-Chip des Boards verbunden sind, einem bestimmten Chip oder einer Chip-Familie zuordnen kannst.
Wenn du die Beschreibung für einen bestimmten Chip hinzugefügt hast, kannst du oft mit einer ganzen Familie von Boards arbeiten, die diesen Chip verwenden. Wenn du zum Beispiel die Unterstützung für das MKR 1010 Board hinzufügst, wird auch das Arduino Zero unterstützt, da beide Boards denselben Mikrocontroller-Chip verwenden.
Um die Unterstützung für die wachsende Zahl von Arduino- und Arduino-kompatiblen Boards zu erleichtern, hat die Arduino IDE in Version 1.6 einen Boards Manager hinzugefügt. Der Boards Manager wurde entwickelt, um das Hinzufügen und Entfernen von Board-Details in der Installation zu erleichtern. Außerdem kannst du damit die Board-Unterstützungsdateien aktualisieren, wenn neuere Versionen verfügbar sind, oder die Version auswählen, die du verwendest, wenn du eine bestimmte Version verwenden musst. Die Arduino-IDE enthält nicht mehr die Beschreibungsdateien für alle Arduino-Boards. Selbst wenn du die neueste IDE herunterlädst, kann es also sein, dass du die Beschreibungen für dein Board nicht bekommst.
Der Boards Manager ermöglicht es auch Drittanbietern, die Details ihrer Boards in das System einzutragen. Wenn die Beschreibungen ihrer Tafeln im richtigen Format online verfügbar sind, kannst du den Ort als einen der Orte hinzufügen, die der Boards Manager für die Erstellung der Liste verwendet. Das bedeutet, dass diese Dateien auch überprüft werden, wenn der Boards Manager seine Details aktualisiert. So wirst du über Aktualisierungen benachrichtigt und kannst den gleichen Mechanismus nutzen, um sie zu aktualisieren, sobald sie installiert sind. Dazu gehst du zu Arduino→Einstellungen und klickst auf das Symbol rechts neben dem Feld Zusätzliche Boards Manager-URLs. Daraufhin wird das Dialogfeld Zusätzliche Boards Manager-URLs angezeigt (siehe Abbildung 1-12).
Wenn die Ersteller des Boards eine URL zur Verfügung stellen, die du zu Arduino hinzufügen kannst, füge sie in das Dialogfeld "Zusätzliche URLs" ein (in einer separaten Zeile, falls es weitere Einträge gibt). Wenn es keine explizite URL gibt, klicke auf den Text unter dem Feld, um zu der Webseite zu gelangen, die eine Liste mit inoffiziellen URLs zur Beschreibung von Arduino-Boards führt.
Wenn du ein Teensy-Board verwenden möchtest, , musst du ein separates Installationsprogramm von der Teensy-Website herunterladen. Es ist wichtig, dass du ein Teensy-Installationsprogramm verwendest, das die IDE-Version unterstützt, die du verwendest. Eine kompatible Version wird normalerweise innerhalb von ein oder zwei Wochen nach einer neuen Arduino-Version veröffentlicht.
Siehe auch
Schnellstart-Anleitungen für verschiedene Arduino-Boards
1.8 Verwendung eines 32-Bit Arduinos (oder eines kompatiblen)
Problem
Du willst 32-Bit-Leistung im Uno-Formfaktor.
Lösung
Der Arduino Zero (Abbildung 1-13) hat die gleiche Pinbelegung wie der Uno, verfügt aber über viel mehr Speicher und einen schnelleren Prozessor. Wenn du Schwierigkeiten hast, einen Zero zu bekommen, sind der Metro M0 Express von Adafruit und das RedBoard Turbo von SparkFun kompatible Alternativen.
Trotz der ähnlichen Anordnung der Pins gibt es eine Reihe von Unterschieden. Der Unterschied zwischen diesen Boards und dem Uno besteht darin, dass sie einen 32-Bit-ARM-Chip, den Microchip SAMD21, verwenden. Die folgende Skizze, die dem vorherigen Rezept ähnelt, zeigt einige wichtige Unterschiede zwischen den ARM-basierten Boards und dem Uno:
Hinweis
Wenn du keine Veränderung der Werte hörst, während du das Licht einstellst, musst du mit den Werten für low
und high
spielen. Wenn du einen Fototransistor verwendest und keine Veränderungen in der Blinzelrate wahrnimmst, versuche es mit einem Wert von 10 für low
. Wenn dein Umgebungslicht von einer Leuchtstoffröhre oder LED stammt, kann es sein, dass du ein deutliches Flackern hörst, das auf das Flimmern solcher Lichtquellen zurückzuführen ist und optisch nicht wahrnehmbar ist.
/*
* Zero wave sketch
*/
const
int
outputPin
=
A0
;
// headphones connected to analog 0
const
int
sensorPin
=
A1
;
// connect sensor to analog input 1
const
int
low
=
200
;
const
int
high
=
800
;
const
int
sampleCount
=
16
;
// number of samples used to render one cycle
const
int
minDur
=
1000000
/
(
sampleCount
*
500
);
// period in uS for 500 Hz
const
int
maxDur
=
1000000
/
(
sampleCount
*
50
);
// period for 50 Hz
// table of values for 16 samples of one sine wave cycle
static
int
sinewave
[
sampleCount
]
=
{
0x1FF
,
0x2B6
,
0x355
,
0x3C7
,
0x3FF
,
0x3C7
,
0x355
,
0x2B6
,
0x1FF
,
0x148
,
0x0A9
,
0x037
,
0x000
,
0x037
,
0x0A9
,
0x148
};
void
setup
()
{
analogWriteResolution
(
10
);
// set the Arduino DAC resolution to maximum
}
void
loop
()
{
int
sensorReading
=
analogRead
(
sensorPin
);
// read the analog input
int
duration
=
map
(
sensorReading
,
low
,
high
,
minDur
,
maxDur
);
duration
=
constrain
(
duration
,
minDur
,
maxDur
);
duration
=
constrain
(
duration
,
minDur
,
maxDur
);
for
(
int
sample
=
0
;
sample
<
sampleCount
;
sample
++
)
{
analogWrite
(
outputPin
,
sinewave
[
sample
]);
delayMicroseconds
(
duration
);
}
}
Bevor du Sketche auf das Zero, das Adafruit Metro M0 oder M4 oder das SparkFun RedBoard laden kannst, öffne den Arduino Boards Manager und installiere das entsprechende Paket (siehe Rezept 1.7). Wenn du ein Adafruit- oder SparkFun-Board verwendest, musst du zuerst die URL des Boardmanagers zur Arduino IDE hinzufügen. Siehe Adafruit oder SparkFun für weitere Informationen. Nachdem du die Unterstützung für dein SAMD-Board installiert hast, konfigurierst du die Arduino-IDE über das Menü "Extras" so, dass sie das Board verwendet, und stellst den richtigen seriellen Anschluss für die Verbindung mit dem Board ein. Schließe einen Widerstand, ein Potentiometer und einen Fotowiderstand (auch bekannt als lichtabhängiger Widerstand) an, wie in Abbildung 1-14 gezeigt. Als Nächstes lädst du den Code mit der Arduino IDE hoch.
Diskussion
Auch wenn die Verdrahtung auf den ersten Blick ähnlich aussieht wie in Abbildung 1-8, werden für den Sensoreingang und den Audioausgang unterschiedliche Pins verwendet. Diese Boards haben einen Digital-Analog-Wandler (DAC), der realistischere Audiosignale erzeugen kann als der binäre Ausgang der normalen digitalen Pins. Der DAC ist jedoch nur am analogen Pin 0 verfügbar, so dass der Sensoreingang hier an den analogen Pin 1 angeschlossen ist.
Ein weiterer Unterschied, der aus der Abbildung vielleicht nicht ersichtlich ist, ist, dass diese Boards nur bis zu 7 mA an einem Pin treiben können, im Vergleich zu 40 mA beim Uno. Und weil die Spannung an den Pins von 0 bis 3,3 Volt reicht, verglichen mit dem 0- bis 5-Volt-Bereich des Uno, ist die maximale Leistung an einem Pin fast 10 Mal geringer als beim Uno. Aus diesem Grund sollten die Ausgangspins mit Kopfhörern oder einem Verstärkereingang verbunden werden, da sie keinen Lautsprecher direkt ansteuern können.
Die Skizze verwendet eine Lookup-Tabelle mit 16 Samples pro Sinuszyklus, aber diese Boards sind schnell genug, um viel höhere Auflösungen zu verarbeiten, und du kannst die Anzahl der Samples erhöhen, um die Reinheit des Signals zu verbessern.
Get Arduino Kochbuch, 3. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.