Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Arduino UNO und die IDE

Die Verbindung zum Computer

Verbinde über die USB Schnittstelle das Arduino UNO Board mit dem Computer oder Laptop und starte die integrierte Entwicklungsumgebung Arduino IDE. Da es zwei Softwareanbieter für eine Arduino IDE gibt, sei hier erwähnt, dass ich die von arduino.org benutze. Beide Programme sind aber sehr ähnlich.

 

Die Oberfläche der Arduino IDE

 

Oben im Hauptmenü befinden sich einige Symbole, die, wenn man mit dem Cursor darüber fährt, einen kurzen Erläuterungstext rechts neben den Icons ausgeben. Etwas ungewohnt ist, dass die Arduino IDE Programme als sketche bezeichnet. Das merken wir uns einfach.

Abbildung 1 - Verifizieren, Hochladen, Neu, Öffnen, Speichern (von links nach rechts)
  • Verifizieren
prüft das eingegebene Programm auf Fehler und gibt ggf. eine Fehlermeldung zurück.

 

  • Hochladen
überträgt sketch auf Arduino Board.

 

  • Neu
neuen sketch erstellen

 

  • Öffnen
sketch öffnen

 

  • Speichern
sketch speichern

Platine und COM-Port einstellen

Die Kommunikation zwischen Rechner und Arduino Board funktioniert nur, wenn vorher im Hauptmenü

  • über Werkzeuge - Platine in der aufpoppenden Liste der Arduino UNO markiert und
  • über Werkzeuge - Port der COM-Port, mit dem der Arduino Uno verbunden ist, ausgewählt wurde.

2 - Die Programmiersprache Arduino C

(ein kleiner Auszug für die ersten Schritte)

Die Programmstruktur eines Arduino-Programmes ist vorgegeben und setzt sich stets aus zwei Methodenblöcken zusammen:

  • void setup()   und
    void loop()
    

Ein erstes Programm soll der Einstieg in die Welt des Arduino sein.

Übertrage den Programmcode in den Arduino Editor und starte das Programm. Oben rechts in der IDE befindet sich ein kleines Icon - ähnlich einer Lupe - über das sich ein serielles Terminal öffnen lässt. Dort erscheint der Text; alle 10s wird eine neue Zeile geschrieben, solange, bis das USB-Kabel vom Arduino getrennt wird.

Ein erstes sketch mit einer Textausgabe im Terminalfenster

Hilfreich sind auch Kommentarzeilen in einem Programm. Sie geben Auskunft über das Programm und erhöhen die Verständlichkeit des Quelltextes. Es gibt zwei Typen von Kommentaren:

Zeilenkommentar   // 

Blockkommentar   /* kann über mehrere Zeilen gehen */

3 - Das Arduino UNO Board

Auf dem Board befinden sich

  • 14 digitale (D0 ... D13) und
  • 6 analoge (A0 ... A5) Ports.

Darunter sind Anschlusspin des eingebauten Mikrocontrollers zu verstehen, die als Ein- oder Ausgang programmiert oder festgelegt werden können. Zusätzlich besitzen einzelne Ports Zusatzfunktionen.

Die Anschlüsse

  • D3, D5, D6, D9, D10, D11 sind mit einer Tilde (~) markiert. Sie können auch als analoge Ausgänge mit einem PWM-Signal genutzt werden.
  • Alle digitalen Anschlüsse des Arduino UNO sind standardmäßig als Eingang geschaltet.

Die Festlegung, ob ein Port Ein- oder Ausgang wird, erfolgt über die Befehle

  • pinMode(pin, OUTPUT);
  • pinMode(pin, INPUT);

Im Mikrocontroller befinden sich integrierte Pull-up Widerstände, die bei Bedarf aktiviert werden können. Dies erfolgt über die Kommandos:

  • pinMode(pin, INPUT);
  • digitalWrite(pin, HIGH);

Eine integrierte LED mit Vorwiderstand, kann über P13 aufgerufen werden.

  • #define LED 13;           // Deklaration am Programmanfang
    pinMode(13, OUTPUT);      // Deklaration in void setup()
    digitalWrite(LED, HIGH);  // Aufruf in void loop()

4 - Die digitalen Eingänge

Für sie gibt es nur zwei Zustände: Null, (0) oder Eins (1); dabei entspricht dem Zustand 0 eine Spannung von 0 Volt und dem Zustand 1 eine Spannung von +5 Volt oder +3,3 Volt, je nach angelegtem Steckernetzteil.

Die Eingänge sind sehr hochohmig. Soll der Status eines Tasters, Schalters über einen Eingang abgefragt werden, dann muss der Eingang des Controllers dazu auf ein festes Potential (entweder zum Beispiel auf +5 V oder GND) gesetzt werden, damit Störquellen das Eingangssignal nicht verfälschen.

Abbildung 1 - Störsignale an einem Eingang des Arduino UNO.

 Dazu bedient man sich sogenannter Pull-up oder Pull-down Widerstände.

Abbildung 2 - Pull-up Widerstand und Pull-down Widerstand mit Taster

Macht man das nicht, kann es leicht passieren, dass man am Eingang Signale misst, die tatsächlich nicht von der dahinter befindlichen Schaltung kommen müssen, sondern durch die Umgebung eingefangen worden sind.

Taster mit internem Pull-Up Widerstand
Material

1x  Arduino UNO

1x  Steckernetzteil

1x  Taster, offen

2x  Steckdraht

Aufgaben
  • Übertrage das Programm Taster_internerPullUp.ino in den Editor und speichere es ab.
  • Starte das Programm und überprüfe, ob es korrekt arbeitet.
  • Kommentiere anschließend die Zeile digitalWrite(Taster, HIGH); aus (beginne die Zeile mit //) und korrigiere die Zeile digitalWrite(LED, HIGH) in digitalWrite(LED, LOW)
  • speichere das Programm erneut ab.
  • Starte das Programm und beobachte die Reaktion der LED.
  • Gehe mit der Hand in die Nähe der Steckdrähte; wird dadurch die Schaltung beeinflusst?

Der Schaltungsaufbau

Das Programm Taster_internerPullUp

Abbildung 3 - Programm Taster_internerPullUp.ino mit auskommentierter Zeile und veränderter Abfragezeile in der IF - Schleife.

Einen digitalen Eingang abfragen

Da am Eingang nur die Zustände 0 oder 1 anliegen, werden beim Abfragen eines Eingangs auch nur diese beiden Zustände erscheinen. Die Abfrage erfolgt über das Kommando

  • digitalRead(pin);

5 - Die analogen Eingänge

Die sechs analogen Ports A0 bis A5 besitzen alle einen 10 Bit A/D Wandler mit einer Referenzspannung von 5 Volt, so dass sich gleichzeitig sechs analoge Signale im Bereich zwischen 0V und 5V verarbeiten lassen. Eine 10 Bit Auflösung entsprechen 1024 digitalisierte Werte und damit einer Genauigkeit von ca. 5 mV.

Die Referenzspannung generiert das Board aus der Versorgungsspannung - bei uns immer 5 Volt. Sie lässt sich über das Kommando analogReference umstellen.

Eingelesen werden analoge Werte mit Hilfe des Kommandos

  • analogRead(pin)

Der über analogRead(pin) eingelesene Wert wird einer Variablen vom Typ int übergeben und im Programm weiter verarbeitet.

Potenziometer am analogen Eingang
Material

1x  Arduino UNO

1x  Spannungsversorgung, 5V

1x  USB-Verbindungskabel

1x  Potentiometer 10kOhm

3x  Steckdraht

Aufgaben
  • Übertrage das Programm AnalogPOTI.ino in den Editor und speichere es ab.
  • Starte das Programm und öffne den seriellen Monitor.
  • Bewege den Schleifer des Potenziometers in verschiedene Positionen. Überprüfe, ob sich die Werte im Monitor verändern.

Schaltungsaufbau

Das Programm AnalogPOTI.ino

Terminalanzeige

Analoge Eingänge lasse sich auch als digitale Ports (Eingang oder Ausgang) einsetzen; sie erhalten dann die Portnummern 14 - 19.

6 - Analoge Ausgabe

Die Ausgabe analoger Spannungswerte erfolgt über das Verfahren der Puls-Weiten-Modulation (PWM) und wird im Programm durch Aufruf des Kommandos

analogWrite(pin, tastverhaeltnis);

umgesetzt. Der Parameter Pin beschreibt den Ausgabeport und tastverhaeltnis (das Verhältnis von Pulsdauer zu Pulsperiode). Der Parameter nimmt Werte zwischen 0 (Tastverhältnis: 0%) und 255 (Tastverhältnis: 100%) an. Um zu verstehen, was damit für ein Signal gemeint ist, schauen wir es uns mit dem Oszilloskop an.

Ausgabe einer pulsweitenmodulierten Pulsfolge
Material

1x  Arduino UNO

1x  Spannungsversorgung, 5V

1x  USB-Verbindungskabel

2x  Steckdraht

Aufgaben
  • Übertrage das Programm pwm_1.ino in den Editor und speichere es ab.
  • Schließe die Messspitze des Oszilloskops an P3(~) an.
  • Starte das Programm.
  • Bei korrekter Eingabe sollte das unten stehende Oszillogramm sichtbar sein.

Das Programm pwm_2.ino

Bei korrekter Eingabe des Programms ergeben sich die folgenden Oszillogramme.

Abbildung 4 - Eingestelltes Tastverhältnis: 20; Frequenz der festen Rechteckschwingung an P3: 488,5 Hz; Impulslänge: < 0,3ms
Abbildung 5 - Tastverhältnis: 20; fixe Frequenz der Rechteckschwingung an P5: 977 Hz; Impulslänge: < 0,1ms

Erhöht man das Tastverhältnis, wird die Impulslänge größer. Für ein Tastverhältnis von 200 ergibt sich die folgende Darstellung.

Abbildung 6 - Tastverhältnis: 200; Frequenz der Rechteckschwingung an P3: 488,5 Hz; Impulsbreite: ca. 1,6ms

Bleibt jetzt nur noch zu klären, wie man aus einer Impulsfolge ein analoges Ausgangssignal macht.

Die Grundidee ist einfach; dazu betrachten wir drei verschiedene Pulsfolgen mit unterschiedlichem Tastverhältnis und bestimmen die Spannung über die Zeiteinheit.

Abbildung 7 - mittlere Spannung über der Zeiteinheit aufgetragen bei drei unterschiedlichen Tastverhältnissen

Durch die Variation des Tastverhältnisses lassen sich mit einer Pulsfolge analoge Spannungswerte darstellen. Es gilt allgemein: Je höher das Tastverhältnis, desto höher der analoge Spannungswert.

Zur Bestimmung des Spannungswertes in Abhängigkeit vom Tastverhältnis gilt:

Im Kommando analogWrite wird das Tastverhaeltnis über den entsprechenden Parameter als ein Wert zwischen 0 und 255 angegeben. Dadurch verändert sich Formel (1) in

Um das PWM-Signal technisch in ein analoges Signal zu überführen, müssen die Pulse herausgefiltert und der sich ergebende mittlere Spannungswert gespeichert werden. Das erledigt eine sogenannte RC-Kombination aus einem Widerstand und einem Kondensator.

Analoge Spannungswerte von PWM-Signalen bestimmen
Material

1x  Steckbrett

1x  10µF Elektrolytkondensator

1x  Widerstand, 2 kOhm

2x  Steckdraht

Aufgaben
  • Baue die Schaltung nach Schaltskizze auf dem Steckbrett auf.
  • Verbinde die beiden Tastköpfe des Oszilloskops mit den in der Schaltskizze eingezeichneten Punkten.
  • Übertrage das Programm analogSpannung.ino in den Editor und speichere es ab.
  • Starte das Programm und bestimme die Spannungswerte für unterschiedliche Tastverhältnisse.

Schaltskizze

Abbildung 8 - RC-Schaltung mit Anschluss der Tastköpfe des Oszilloskops

Das Programm

Die folgenden Abbildungen zeigen die mittleren Spannungswerte für drei verschiedene Tastverhältnisse.

Abbildung 9 - Tasterverhältnis: 100%; rote Kurve: Eingangssignal; blaue Kurve: mittlere Spannungsgröße. Gemessen: 4,8 V
Abbildung 10 - Tasterverhältnis: 50%; rote Kurve: Eingangssignal; blaue Kurve: mittlere Spannungsgröße. Gemessen: 2,52 V
Abbildung 11 - Tasterverhältnis: 25%; rote Kurve: Eingangssignal; blaue Kurve: mittlere Spannungsgröße. Gemessen: 1,25 V

7 - Ausgesuchte Befehle aus Arduino C

Befehl Syntax Beschreibung
void setup()

void setup()

{

 statements

}

wird nur einmal ausgeführt und enthält Grundeinstellungen

Der Datentyp VOID wird nur bei Funktionen benutzt und gibt an, dass die Funktion ohne Rückgabewert arbeitet.

void loop()

void loop()

{

 statements

}

hier steht das eigentliche Programm, das ständig wiederholt wird. Der Datentyp VOID wird nur bei Funktionen benutzt und gibt an, dass die Funktion ohne Rückgabewert arbeitet.

Befehle

Befehl Syntax Parameter
pinMode() pinMode(Pin, Modus)

Pin   Portpin

Modus INPUT, OUTPUT oder INPUT_PULLUP

delay() delay(millisekunde) Millisekunde
digitalWrite() digitalWrite(Pin, Wert)

Pin   Portpin

Wert  HIGH, LOW

digital Read() digitalRead(Pin) Pin   Portpin
Serial.begin() Serial.begin(speed, config)

speed Baudrate in bits per second

config setzt data, parity und stop bit

Serial.println() Serial.println(val, format)

val   Wert der gedruckt wird - jeder Datentyp

format legt das Zahlensystem oder die Dezimalstellen bei Fließkommazahlen fest.
for-Schleife

for (Startbedingung; Abbruchbedingung; Schleifenzähler ändern)

{ Befehlsblock }

for (int i=0; i < 11; i++)

{ ... Befehlsblock

}

while-Schleife

while(Bedingung)

{ Befehlsblock }

while(i < 5)

{ ... Befehlsblock }

do-while Schleife

do

{ Befehlsblock }

while (Bedingung);

do

{ ... Befehlsblock }

while (i < 5);

Variablentypen

Variablentyp Bezeichnung Zahlbereichsumfang Beispiel
int integer, ganze Zahl

-32768 ... +32767

 

int port3 = 1;

digitalWrite(port3, HIGH);

long integer -2.147.483.648 ... +2.147.483.647 long wert1 = 50000;
float Fließkommazahl -3,4028235E-38 ... +3,4028235E+38 float wert2 = 4.8;
char Zeichen, Character jedes Zeichen oder äquivalente ASCII-Zeichen char Zeichen = 'a';

Weitere Elemente der Programmiersprache Arduino C werden in jeder Lektion im Register Arduino UNO wenn sie gebraucht werden umfassend erläutert. Eine umfassende englische Beschreibung der Programmiersprache finden Sie sowohl unter arduino.org als auch unter arduino.cc.

Kommentar schreiben

Kommentare

  • olaf (Sonntag, 10. Dezember 2017 08:35)

    wow...die mit Abstand beste Site, die ich bisher zu diesem Thema gesehen habe :-))
    Vielen Dank dafür. Hilft super beim Erklären!!

  • David Eisenblätter (Sonntag, 11. Februar 2018 13:38)

    Sehr schön erklärt, und zufällig heute, wo ich nochmal nach einer detailierten Gedankenstütze diesbezüglich gesucht habe!

    Vielen vielen Dank!

    David.

Bitte geben Sie den Code ein
* Pflichtfelder
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf