Bibliotheken einbinden

Beschreibung

Bibliotheken, auch genannt Libraries, werden benötigt, wenn komplexe Vorgänge in möglichst einfachen Befehlen ausführbar sein sollen. Die komplexen Vorgänge bleiben dann für den Nutzer verborgen, sind aber durch einfache Befehle nutzbar. Manche Bibliotheken benötigen wir öfters als andere, z.B. die des LC-Displays. Im Folgenden lernst du mehrere Wege, wie du einfach neue Bibliotheken hinzufügen kannst.

  1. Klicke auf das Büchersymbol auf der Linken Seite.
  2. Gebe den Namen der Bibliothek ein, die du hinzufügen möchtest. In den Anleitungen, in denen eine Bibliothek benötigt wird, ist immer der Name der Bibliothek oder der Suchbegriff angegeben.
  3. So sieht ein Sucheintrag aus. Achtung! Manchmal wollen wir eine Bibliothek von einem bestimmten Autor oder eine bestimmte Version.
  4. Zum Schluss dürfen wir nicht vergessen, in der ersten Zeile unseres Codes einen Eintrag wie unten anzufertigen. Zum Beispiel #include LiquidCrystal_I2C.h>
Auf das Büchersymbol klicken

Auf das Büchersymbol klicken

Ansicht des Bibliotheksverwalter

Ansicht des Bibliotheksverwalter

Einbinden der Bibliothek in den Code

Einbinden der Bibliothek in den Code

Aufgaben

Beschreibe wie man eine Bibliothek einbindet?

Man wählt sie in der Kategorie “Bibliotheken verwalten” aus, installiert sie und bindet sie schließlich ein mit #include <BIB_HEADER.h>

Worauf muss man beim Einbinden einer Bibliothek achten?

Auf die richtige Version und sie richtig zu inkludieren mit #include <BIB_HEADER.h>

Grundlagen - Arduino IDE

Beschreibung

Die Arduino IDE (Integrated Development Environment) ist unsere Programmierumgebung für den Arduino. Mit ihrer Hilfe können wir dem Arduino beibringen, was er zu tun hat, indem wir Befehle eingeben und ihm sagen, an welchen Pins Sensoren und Aktoren anliegen. Bevor wir das tun, müssen wir allerdings ein paar Dinge sicherstellen:

  • Verbinde zuerst deinen Arduino per USB Kabel mit dem Rechner.

  • Wähle den Arduino aus der Leiste aus

  • Kopiere anschließend den Code in die Arduino IDE oder schreibe den Code selbst.

  • Um den Code auf den Arduino hochzuladen, klicke auf den Pfeil .

Du kannst den Code auch vor dem Hochladen kompilieren lassen, indem du auf klickst. Der Unterschied zum Hochladen ist der, dass hier kein Arduino angeschlossen werden muss und nur geprüft wird, ob dein Code korrekt ist. Wenn du alles richtig programmiert hast und die vorherigen Schritte befolgt hast, erscheint anschließend eine Meldung, dass das Kompilieren erfolgreich abgeschlossen wurde.

Erfolgreiches kompilieren

Erfolgreiches kompilieren

Andernfalls erscheint eine Fehlermeldung, die dich darauf hinweist, was falsch gelaufen ist und markiert für dich die betreffende Zeile rot.

Hast du einen Codeblock (zB. setup oder loop) nicht mit geschweiften Klammern umschlossen? Erkennbar ist der Fehler an der letzten Zeile: expected &lsquo;}&rsquo;.. oder expected &lsquo;{&rsquo; ..

Hast du einen Codeblock (zB. setup oder loop) nicht mit geschweiften Klammern umschlossen? Erkennbar ist der Fehler an der letzten Zeile: expected ‘}’.. oder expected ‘{’ ..

Nutzt du Befehle einer Bibliothek ohne diese vorher einzubinden, sind diese der Arduino IDE unbekannt. Der erste unbekannte Befehl wird dann rot markiert.

Nutzt du Befehle einer Bibliothek ohne diese vorher einzubinden, sind diese der Arduino IDE unbekannt. Der erste unbekannte Befehl wird dann rot markiert.

Grundlagen - Arduino Uno

Was ist ein Arduino Uno?

Der Arduino Uno ist ein frei programmierbarer Microcontroller. Er wurde von der Firma Arduino entwickelt und wird mit der Arduino eigenen Software programmiert, welche frei verfügbar ist.

Was ist ein Microcontroller?

Ein Microcontroller ist ein kleiner Computer. Er besitzt einen oder mehrere Prozessoren, Speicher, Arbeitsspeicher und kann darüber hinaus auch noch zusätzliche Features wie z.B. ein Wi-Fi-Module oder eine LCD Anzeige besitzen. Seine Aufgabe ist es in einer elektrischen Schaltung wie ein Gehirn zu funktionieren. Das bedeutet, er soll Informationen, die er von Sensoren wie z.B. einem Ultraschallsensor bekommt verarbeiten und mit diesen einen oder mehrere Akteure wie z.B. eine LED ansteuern.

Aufbau eines Arduino

Arduino Übersicht

Arduino Übersicht

Digitale Pins

Die digitalen Pins eines Arduinos sind für die digitale Datenübertragung (Siehe Hintergrundwissen -> Grundlagen). Darüber hinaus gibt es noch Pins mit einer Tilde (~) vor der Zahl. Diese Pins besitzen, neben der standard digitalen Übertragung, noch die Pulsweitenmodulation (PWM). Bei der PWM handelt es sich um eine Übertragungsmethode, bei der ein Puls nach seiner Länge abgetastet wird und somit ein Puls-Pause-Verhältnis erstellt wird. Ausgehend von diesem Verhältnis kann die Spannungszufuhr reguliert werden. Das bedeutet, dass bei einem Verhältnis von 25%, der Puls, also der Spannungsgebende Teil des Signals, 25% der Gesamtlänge des Signals ausmacht. Die restlichen 75% sind die Pause. Damit lassen sich zum Beispiel Motoren in ihrer Geschwindigkeit drosseln, bzw. beschleunigen. Ein weiteres besonderes Pin-Paar ist der Pin 0 und 1. Diese sind TX bzw. RX Pins und dienen als serielle Schnittstelle, also zur Kommunikation mit anderen Geräten wie z.B. einem Raspberry Pi oder einem Bluetooth Modul.
!ACHTUNG! Diese Pins sind nicht für die reguläre digitale Nachrichtenübertragung geeignet.

Analoge Pins

Die analogen Pins des Arduinos sind für die analoge Datenübertragung (Siehe Hintergrundwissen -> Grundlagen). Diese sind standardmäßig als Input definiert.

Stromkreis Pins

Über den Pin kann der Arduino mit einer Spannungsquelle bis 20V verbunden werden. Der Anschluss ist jedoch nur der Spannungsversorgende Teil des Stromkreises.

  • GND
    • Die GND Pins sind für die Erdung (Ground). Bei einer Batterie ist dies der Minuspol. Er schließt den Stromkreis und ist essenziell, wenn der Arduino über den 5V oder 3,3V Pin mit einer Spannungsquelle verbunden ist.
  • 3,3V
    • Über den 3,3V Pin kann der Arduino mit Spannung versorgt werden, wenn man eine konstante Spannungsquelle hat die nicht größer ist als 3,3V. Darüber hinaus kann der Arduino mit diesem Pin angeschlossene Geräte wie z.B. einen Ultraschallsensor mit einer konstanten Spannung von 3,3V versorgen.
  • 5V
    • Bei diesem Pin verhält es sich genauso wie mit dem 3,3V Pin, nur mit 5V.
  • Reset
    • Der Reset Pin ist zum Verbinden eines externen IOREF.
  • AREF
    • AREF steht für Analog Reference und ist für eine genauere Bestimmung eines analogen Signals mit Hilfe einer externen analogen Referenz zwischen 0V und 5V gedacht. Dies kann sinnvoll sein, wenn der benutzte Sensor nur eine geringe maximale Spannung liefert. In so einem Fall kann man mit dem AREF Pin eine höhere Auflösung erzielen.
  • IOREF
    • IOREF steht für Input/Output Reference und ist ebenfalls zur genaueren Bestimmung eines analogen Signals, nutzt aber die interne Input/Output Spannung des verwendeten Chips. Bei einem Arduino Uno wären das 5V.
  • Reset Knopf
    • Der Arduino Uno besitzt einen bereits eingebauten Reset Knopf. Dieser kann dafür verwendet werden, um das Programm neu zu starten. Er löscht nicht das Programm vom Arduino.

Stromversorgung

Der Stromversorgungsanschluss des Arduino ist eine Hohlbuchse, über die der Arduino mit einer Spannung zwischen 7V und 12V versorgt werden kann. Sie ist zu benutzen, wenn der Arduino nicht mit dem USB-Anschluss verbunden ist.

USB-Typ-B Anschluss

Der USB-Anschluss ist die Schnittstelle zum PC. Mit Hilfe eines USB-A zu USB-B Kabel kann der Arduino hierüber mit einem Computer verbunden werden. Dieser versorgt den Arduino dann auch mit Strom.

Aufgaben

Was ist ein Arduino Uno?

Ein Arduino ist ein frei programmierbarer Mikrocontroller.

Welche Pins gehören zum Stromkreis?

  • Ground GND
  • Spannung (3,3V, 5V)
  • Reset
  • AREF,
  • IOREF
  • Reset Knopf

Erkläre wofür digitale Pins notwendig sind!

Diese sind für eine digitale Datenübertragung notwendig. Besondere Pins sind der TX bzw. RX Pins welche als serielle Schnittstelle dienen.

Erkläre wofür analoge Pins notwendig sind!

Analoge Pins sind als standardmäßiger Input definiert und werden für eine analoge Datenübertragung benötigt.

Serieller Monitor

Beschreibung

Der serielle Monitor kann dazu genutzt werden, um am PC zu verfolgen, welche Befehle der Arduino gerade ausführt. Das ist beispielsweise nützlich, wenn wir den exakten Wert ermitteln wollen, welchen ein angeschlossener Sensor misst. So spart man sich den Anschluss des LC-Displays, ist jedoch an den PC gebunden, weil man für den seriellen Monitor eine USB-Verbindung zum Arduino braucht.

Aufrufen können wir ihn wie im Bild zu sehen oben rechts über das Lupensymbol.

Um vom seriellen Monitor Gebrauch zu machen, müssen wir folgende Zeilen in unseren setup Codeblock einfügen: Serial.begin(9600);. Mithilfe von Serial.print("Dieser Text wird nun auf dem seriellen Monitor ausgegeben"); oder Serial.print(Co2Messwert); können wir Text oder Variablen auf dem seriellen Monitor anzeigen lassen.

So könnte ein Messung auf dem seriellen Monitor aussehen. Als Beispiel wurde der Abstand zwischen einem Hindernis und dem Arduino mit einem Ultraschallsensor gemessen (siehe AB Ultraschallsensor - Eine Einführung).

Abstandsmessung mit einem Ultraschallsensor auf dem seriellen Monitor

Abstandsmessung mit einem Ultraschallsensor auf dem seriellen Monitor

Code

int TRIG_PIN = 9;  // Trig_Pin angeschlossen an Pin 9.
int ECHO_PIN = 10; // Echo_Pin angeschlossen an Pin 10.
int LED = 13;      // Initiiere LED unter Pin 13.

void setup() {
  // Starte serielle Schnittstelle zur Kommunikation mit dem Arduino.
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  
  int zeit;     // Hier speichern wir, wie lange der Schall unterwegs ist.
  int abstand;  // Hier speichern wir den gemessenen Abstand.
  
  // Wir messen den Abstand zum nächsten Objekt.
  digitalWrite(TRIG_PIN, LOW);    // Lautsprecher aus.
  delay(2);
  digitalWrite(TRIG_PIN, HIGH);   // Lautsprecher gibt Ton aus.
  delay(10);
  digitalWrite(TRIG_PIN, LOW);    // Lautsprecher aus.
  zeit = pulseIn(ECHO_PIN, HIGH); // Hier wird gemessen, wann das Mikrofon den Ton hört.
  abstand = zeit * 0.034 / 2;     // Umrechnung des Abstands von Zeit in Zentimeter.

  if (abstand < 12) {         // Wenn der Abstand kleiner als 12 Zentimeter ist.
    digitalWrite(LED, HIGH);  // Schalte die LED an 
    // und zeige dies auf dem seriellen Monitor an.
    Serial.println("Ein Hindernis ist weniger als 12cm entfernt.");
  } else {                    // sonst
    digitalWrite(LED, LOW);   // Schalte die LED aus.
    // Zeige auch dies auf dem Monitor an.
    Serial.println("Kein Hindernis in Sicht.");
  }
}

Aufgaben

Was kann ein serieller Monitor?

Mit dem seriellen Monitor können vom Arduino ausgeführte Befehle verfolgt und Messwerte direkt ausgegeben und abgelesen werden ohne ein externes Display anschließen zu müssen.

Schnappt euch einen Sensor, schreibt euch einen simplen Code und überprüft die Messwerte anhand des seriellen Monitors. Vergleicht anschließend die Ausgaben des seriellen Monitors mit denen auf einem LCD-Display.

Häufige Fragen und Probleme

Kann ich mit dem seriellen Monitor auch Graphen abbilden?

Nein, dafür ist der serielle Plotter eher geeignet.

Meine Messwerte werden brauchen zu lange bis sie angezeigt werden, was kann ich tun?

Verkürze die delays und/oder überprüfe deine Verkabelung. Wenn gar nichts klappt resete den Arduino.

Serieller Plotter

Beschreibung

Genauso wie der serielle Monitor kann auch der serielle Plotter dazu genutzt werden, um am PC zu verfolgen, welche Messwerte der Arduino gerade verarbeitet. Die Messwerte, welcher ein angeschlossener Sensor misst, werden graphisch dargestellt. So hat man einen direkt sichtbaren Verlauf der Messung, jedoch ist der Arduino nicht portabel, weil für die Ausgabe durch den seriellen Monitor oder Plotter eine USB-Verbindung vom Arduino zum PC benötigt wird.

Aufrufen können wir ihn wie im Bild zu sehen ist mit den Schritten 1 & 2.

Schritte 1 &amp; 2

Schritte 1 & 2

Um vom seriellen Monitor Gebrauch zu machen, müssen wir folgende Zeilen in unseren setup Codeblock einfügen: Serial.begin(9600);. Mithilfe von Serial.print("1-10:"); und Serial.print(ZufallsZahlen1); können wir die Graphenbezeichnung und die Messwerte bzw. in diesem Beispiel die generierten Zufallszahlen in einem bestimmten Intervall, welche in Variablen gehalten werden, auf dem seriellen Plotter graphisch abbilden lassen.

So könnte ein Graph auf dem seriellen Plotter aussehen. Als Beispiel wurden Zufallszahlen in zwei verschiedenen Intervallen, nämlich die Zahlen 1-10 und 10-20, generiert und abgebildet. Der Plotter erstellt selbstständig eine Legende, da wir ihm die Beschriftung mit dem Befehl Serial.print("1-10:"); übergeben haben. In blau zeichnet der Plotter alle Zufallszahlen im Intervall 1-10 und in rot alle Zahlen im Bereich 10-20 ein.

Plotterbeispiel-Zufallszahlen

Plotterbeispiel-Zufallszahlen

Durch den Befehl Serial.print(","); werden alle Zahlen in die gleiche Zeile geschrieben. Für einen Zeilenumbruch nach dem ersten Intervall wird der Befehl Serial.println(","); benötigt. Um einen Vergleich zum seriellen Monitor zu bekommen, so würden die Messwerte hier aussehen. Es wird zuerst das Intervall genannt und danach die generierte Zufallszahl, wobei beide Intervalle durch ein Komma getrennt sind.

Als Vergleich zum Plotter die Darstellung auf dem seriellen Monitor

Als Vergleich zum Plotter die Darstellung auf dem seriellen Monitor

Code

void setup() {
  Serial.begin(9600);

  // Zufallsgenerator starten
  randomSeed(analogRead(0));
}

void loop() {
  // Zufallszahlen ermitteln
  int ZufallsZahlen1 = random(1, 10);
  int ZufallsZahlen2 = random(10, 20);

  // Werte schreiben
  Serial.print("1-10:");
  Serial.print(ZufallsZahlen1);
  Serial.print(",");
  Serial.print("10-20:");
  Serial.print(ZufallsZahlen2);
  Serial.println(",");
  delay(2000);
}

Aufgaben

Was kann ein serieller Plotter?

Ähnlich zum seriellen Monitor können die Messwerte, diesmal graphisch, abgebildet werden. Jedoch lassen sie sich oft nicht exakt ablesen, weil man die Achsenverteilung beachten muss oder der Text mit abgebildet wird.

Schnappt euch einen Sensor, schreibt euch einen simplen Code und bildet die Messwerte anhand des seriellen Plotters graphisch ab.

Häufige Fragen und Probleme

Kann ich mit dem seriellen Plotter auch exakte Werte wiedergeben?

Wenn die Achsen relativ klein sind kann man sie darstellen, um jedoch wirklich exakte Messwerte zu erhalten oder verarbeitete Befehle nachzuverfolgen ist der serielle Monitor besser geeignet.

Der Graph schwankt zu sehr hin und her oder braucht zu lange bis er die Messwerte ordentlich anzeigt, was kann ich tun?

  • Verkabelung überprüft?
  • Verkürze das delay, damit der Graph schneller gezeichnet wird.
  • Falls ihr wie im Beispiel mit einem Pulssensor messt, achtet darauf den Finger nicht zu fest auf den Sensor zu drücken und beim Messen ihn nicht zu bewegen.