Arduino

Aus Jonas Notizen Webseite
Zur Navigation springen Zur Suche springen

Was ist ein Arduino

Hier sind 2 gute Videos über die Hardware und Software, welche zugleich zeigen wie es ohne die Komfortablität des Arduino-Projektes wäre und wie es im Hintergrund funktioniert.

Wikipedia bietet hier eine sehr gute Erklärung:

Arduino ist eine aus Soft- und Hardware bestehende Physical-Computing-Plattform. Beide Komponenten sind im Sinne von Open Source quelloffen. Die Hardware besteht aus einem einfachen I/O-Board mit einem Mikrocontroller sowie analogen und digitalen Ein- und Ausgängen. Die Entwicklungsumgebung basiert auf Processing und soll auch technisch weniger Versierten den Zugang zur Programmierung und zu Mikrocontrollern erleichtern. Die Programmierung selbst erfolgt in einer C bzw. C++-ähnlichen Programmiersprache, wobei technische Details wie Header-Dateien vor den Anwendern weitgehend verborgen werden und umfangreiche Bibliotheken und Beispiele die Programmierung vereinfachen.

Im Endeffekt bietet Arduino eine simple Software zum Programmieren des (im Board eingebauten) Mikrokontrollers über eine einfache USB-Schnittstelle.

Rechtsstreit

Kurz-gefasst: Nach einem Rechtsstreit mit den Herstellern des Boards (Arduino S.r.l.) hat man entschlossen den Markennamen des Projektes auf Genuino um zu benennen. Nach dieser Änderung durften auch andere Hersteller diese Boards herstellen. (Die erste offizielle Firma war Adafruit Industries). Die Marke Genuino ist für jene Microcontroller-Boards ausserhalb der USA bestimmt. Außer den neuen Namen sollten die neuen Boards nicht von den alten abweichen.

Beitrag von heise
Wikipedia-Eintrag
Eintrag vom Arduino-Blog zur Änderung der Webseite arduino.org auf arduino.cc

Hardware

Ein guter Beitrag zum Aufbau eines Arduino-Boards kann hier gefunden werden. Arduino UNO Beschriftet

Spezifikationen

Die Hardware eines typischen Arduinoboards basiert auf einem Atmel-AVR-Mikrocontroller aus der megaAVR-Serie wie dem ATmega328p ... Die meisten Boards werden entweder über USB (5 V) oder eine externe Spannungsquelle (7–12 V) versorgt und verfügen über einen 16-MHz-Schwingquarz (Zur Takt-Genauigkeit des Chips)

Die Spezifikationen jeglicher Boards werden auf der Arduino-Shop Seite beschrieben und sollten bei jedem Hersteller gleich sein.

Programmierung des Mikrokontrollers

Der Mikrocontroller ist mit einem Bootloader vorprogrammiert, wodurch die Programmierung direkt über die serielle Schnittstelle ohne externes Programmiergerät erfolgen kann. (Bei aktuellen Boards geschieht die Umsetzung von USB nach seriell über einen eigens entwickelten USB-Seriell-Konverter, basierend auf dem ATmega8u2.)

Möglichkeiten

Alle Arduinoboards, bis auf den Arduino Esplora, stellen digitale Input- und Output-Pins (kurz: I/O-Pins) des Mikrocontrollers zur Nutzung für elektronische Schaltungen zur Verfügung. Üblich ist auch, dass eine bestimmte Anzahl dieser Pins PWM-Signale ausgeben können. Zusätzlich stehen dem Benutzer eine bestimmte Anzahl an analogen Eingängen zur Verfügung. Für die Erweiterung werden vorbestückte oder teilweise unbestückte Platinen – sogenannte „Shields – angeboten, die auf das Arduino-Board aufsteckbar sind. (Es können aber auch z. B. Steckplatinen für den Aufbau von Schaltungen verwendet werden.)

Software

IDE

Arduino bringt eine eigene integrierte Entwicklungsumgebung (IDE) mit, die auf Wiring IDE basiert. (Dabei handelt es sich um eine Java-Anwendung, die für die gängigen Plattformen Windows, Linux und MacOS(X) kostenlos verfügbar ist. Sie basiert auf der IDE von Processing, einer auf die Einsatzbereiche Grafik, Simulation und Animation spezialisierten Entwicklungsumgebung.) Die Arduino-IDE bringt einen Code-Editor mit und bindet gcc als Compiler ein. Zusätzlich werden die avr-gcc-Library und weitere Arduino-Librarys eingebunden, die die Programmierung in C und C++ stark vereinfachen.

Scratch

Mit S4A (Scratch for Arduino) und mblock (basierend auf scratch) gibt es Scratch-Modifikationen, die freie visuelle Programmiersprache mit Programmierumgebung für den Arduino-Mikrocontroller zur Verfügung stellt.

Web

Weiterhin bietet Arduino mit Arduino Create eine webbasierte Lösung an, um im Browser zu programmieren. Geschriebene Sketche werden online in einer Cloud abgelegt. Die Kommunikation zwischen Browser und Arduinoboard wird über Plugins für das jeweilige Betriebssystem ermöglicht. Arduinoboards können über USB und Netzwerkverbindung angesprochen werden. Die Nutzung von Arduino Create erfordert eine kostenlose Registrierung bei diesem Dienst. Betrieben wird die Plattform durch Amazon Web Services.)

Sketches (Programme)

Bestandteile eines Sketches

Jedes Programm braucht 2 Funktionen:

  1. void setup() - Wird nach dem start des Programmes 1x ausgeführt, um zB. die Ein/Ausgänge zu definieren.
  2. void loop() - Wird durchgehend immer wieder durchlaufen (solange das Board natürlich an Strom angeschlossen und nicht abgestürtzt ist)

Beispiel-Sketch

Hier ein Beispiels-Programm (in der Arduino-Diktion: Sketch), dass eine an das Arduino-Board angeschlossene LED blinken lässt.

int ledPin = 13;               // Die LED ist an Pin 13 angeschlossen, was in der Integer-Variable ledPin gespeichert ist.
                               // Bei vielen Boards ist auf der Platine eine LED integriert, welche sich über diesen Pin 13 ansteuern lässt.

void setup() {
  pinMode(ledPin, OUTPUT);     // legt den LED-Pin als Ausgang fest
}

void loop() {
  digitalWrite(ledPin, HIGH);  // LED anschalten (5V)
  delay(1000);                 // 1000 Millisekunden warten
  digitalWrite(ledPin, LOW);   // LED ausschalten (0V)
  delay(1000);                 // weitere 1000 Millisekunden warten
}

Unterschied: Raspberry Pi

  • Ein Arduino ist "nur" ein kleiner Mikro-Prozessor, der zur Steuerung angeschlossener Sensoren/Ausgänge dient.
  • Ein Raspberry ist ein eigenständiger Computer mit Betriebssystem, welcher Input/Output-Pins (sowie andere Computer-Typische Anschlüsse (USB, HDMI, RJ-45)) bietet und deswegen natürlich jeglich anderes (Linux)Computer-Programm ausführen kann.

Aus diesem Grund kann man diese Geräte nicht vergleichen, es kommt immer auf den Anwendungsfall an. Meißt reicht der Arduino aus.

Bei (Rechen)aufwendigeren Projekten (3D-Drucker, Gesichts-Erkennung, Kamera, Smart-Mirror, Tablet) oder Sachen die zB. über das Internet/per App steuerbar sind, ist der Raspberry Pi natürlich ein muss.

Grundlagen

IDE

Sketch Ordner Aufbau

Jeder Sketch hat eine Haupt-Datei, welche auf .ino endet und im einem Ordner mit gleichen Namen sein muss. In diesem "Sketch/Projekt-Ordner" können nun auch weitere .c und .h-Dateien (C/C++) eingefügt werden. (Siehe Neue Datei hinzufügen)

Kompilieren/Überprüfen

Um seinen Quellcode auf Syntaxfehler zu prüfen, kann man entweder auf das Hacken-Symbol unter der Werkzeugleiste klicken, oder auf Sketch > Überprüfen/Kompilieren (Strg+R) klicken.

Kompilieren + Hochladen

Um sein Programm jetzt automatisch kompilieren zu lassen und auf das Board zu laden, kann man entweder auf das Pfeil-Symbol unter der Werkzeugleiste klicken, oder auf Sketch > Hochladen (Strg+U) klicken.

Neue Datei hinzufügen

Um eine neue Quellcode-Datei zu seinem Projekt hinzuzufügen, kann man entweder auf das Datei-Symbol (Rechts neben den Pfeil) unter der Werkzeugleiste klicken, oder eine externe Quellcode-Datei via. Sketch > Datei hinzufügen(Strg+U) in seinen Projekt-Ordner kopieren.

Wenn man manuell eine Datei in den Projekt-Ordner eingefügt hat, sollte man die IDE neustarten.

Beispiel-Sketches

Unter Datei > Beispiele findet man eine Kollektion an mitgelieferten Beispiel-Sketches. (Gefunden im examples-Ordner oder mitgeliefert in einer eingebunden Bibliothek im libraries-Ordner)

Bibliotheken

Bibliotheken verwalten

Wenn man eine Datei einbinden möchte (#include "Musterdatei.h"), welche nicht im aktuellen Projekt-Ordner vorhanden ist, sucht sich Arduino diese Bibliothek aus dem libraries-Ordner. (Gefunden am Installations-Ort, zB C:\Program Files (x86)\Arduino\libraries).
Die geladenenen Bibliotheken kann man im Reiter Sketch > Bibliothek einbinden einsehen, einbinden oder neue Bibliotheken Hinzufügen (Entweder durch eine Online Bibliothek unter > Bibliotheken Verwalten (Strg+Umschalt+I) oder einer .zip-Datei im oben genannten Ordner).

Eigene Bibliothek erstellen

TODO Eigene Bibliothek erstellen

Board einrichten

Um ein Board programmieren zu können, muss es mit einem {USB auf USB-B}-Stecker mit dem Computer verbunden sein.

Nun muss man in der Arduino-IDE noch einige Sachen einstellen:

  1. Unter Werkzeuge > Port > den Port auswählen, andem der Arduino angeschlossenen ist.
  2. Unter Werkzeuge > Board: "x" > den Board-Typen auswählen. (Wenn nicht selbstständig erkannt)
  3. Unter Werkzeuge > Programmer > sollte meistens der AVRISP (mkII) ausgewählt sein. (Falls es sich nach dem ersten Schritt verändert, aka. automatisch erkannt wurde, würde ich es so lassen)

Troubleshooting: Board wird nicht erkannt

  • Funktioniert ein anderes digitales Gerät (zB. Maus) wenn ihr es an diesen USB-Port des Computers ansteckt?
    • JA: Es liegt nicht am USB-Port.
    • NEIN: Der USB-Port ist geschrottet und liefert höchstens noch Strom aber keinen Datenfluss mehr. (Deswegen empfehle ich immer, sein Arduino-Board an einen USB-Verteiler anzuschließen, weil beim testen kann sowas durch zB. falsches Anschließen schnell einmal passieren :'D )
  • Falls es nicht am USB-Port liegt könnte der Treiber fehlen. (zB. eine portable Arduino-IDE-Version installiert diese Treiber nicht, sondern nur der Installer) Ein guter Beitrag um dies zu beheben findet man auf der Arduino Seite.
    • (Bei einem extremst billigen China-Fakes/Eigenkreation von zB. Ebay kam einmal der Fall auf, dass ein anderer Chip eingesetzt wurde und deswegen ein anderer Treiber notwendig war (Und das Betriebssystem das nicht erkannte). Dies sollte auf gar keinen Fall sein und ist das Resultat eines NoName Billig-Produzenten gewesen! Hier der Beitrag)

Tutorial/Beispiele

Arduino's API-Referenz

Wie schon oft besprochen bietet Arduino eine ganze Variation an Funktionen/Klassen/Variablen zum einfachen, plattformübergreifenden, kommunizieren mit dem Arduino-Board. Was diese machen, wie man sie benutzt und was es alles gibt wird auf der Referenz/Dokumentationswebseite erklärt. (Englisch)

Sie beschreiben dort auch Grundlagen der Programmiersprache C++ (wie Semikolons, Operatoren, Kontrollstrukturen, ...), wobei dies nur als Referenz und kein wirkliches "C++ Tutorial" angesehen werden soll.

Schaltplan erstellen

Die Fritzing-App bietet eine einfache Möglichkeit, einen "grafischen Breadboard-Schaltplan" (Sowie Schematiken oder PCBs) seines Projektes zu erstellen. Dies hat einige Vorteile:

  • Man kann anderen (/Sich selbst) seine Idee verständlich zeigen und erklären
  • Man hat seinen Aufbau/sein Projekt übersichtlich dargestellt, womit man Fehler schnell erkennen kann (Viel besser als im Kabel-Mess wo man nach einigen Wochen/gar Tagen wieder vergessen hat was für was wie war), und muss es nurnoch mehr "nachbauen"

*1 (Für das Beispiel ist ein PCB natürlich 100% unnötig, nur zu Schaustellung wie es in dem Programm aussieht)

Die App gibt es zum Download für alle gängigen Betriebssysteme (Windows, Mac OS(X), Linux) und ist Quelloffen.

Farb-"Regeln" der Kabel

Damit auch andere dein Schaltplan schneller verstehen können, gibt es kleine Regeln: (Kein Muss)

  • Ground-Kabel sind Blau/Schwarz
  • Stromversorgungs-Kabel (5V/3.3V) sind Rot/Orange
  • Alle anderen Kabel sind dir überlass!

LED

  • Jede LED hat jeweils einen [+] und [-]-Pol. Meißt erkennt man den [-]-Pol daran, dass er der kleinere ist.
    • Der [+]-Pol kann an einem beliebigen Steuerungs-Pin vom Arduino angeschlossen werden.
    • Der [-]-Pol ist an Ground angeschlossen.
  • Jede LED sollte einen Vorwiderstand (Begrenzung auf optimale Stromzufuhr = Längere Laufzeit) (Meißt ist man mit einem 240-Ohm Widerstand gut dran)

Berechnung des Vorwiderstandes

geg:
UVersorgung | Versorgungsspannung (HIGH = 5V/3.3V (je nach Board))
ULED | Durchlassspannung der LED (aus Datenblatt)
ILED | max. Strom der LED (aus Datenblatt)
ges: RVorwiderstand
 
Beispiel rote LED mit 12mA-Strom und 2.2V-Spannung an 5V Pin des Arduino: R = (5V-2,2V)/0,012A = 233 Ohm

Beispiel-Sketch: LED Blinken

int LED_PIN = 12;                // Vorteil: Wenn wir die LED umstecken wollen, müssen wir nur 1x diese Variable hier oben ändern.

void setup() {
  pinMode(LED_PIN , OUTPUT);     // Pin als Ausgang festlegen
}

void loop() {
  digitalWrite(LED_PIN , HIGH);  // LED anschalten (5V)
  delay(1000);                   // 1000 Millisekunden warten
  digitalWrite(LED_PIN , LOW);   // LED ausschalten (0V)
  delay(1000);                   // weitere 1000 Millisekunden warten
}