Hinweis - Die Boards Arduino UNO Rx und Arduino UNO WiFi Ry werden im weiteren Text immer als Arduino UNO angesprochen, wenn beide Boards verwendet werden können. In jedem anderen Fall wird das spezielle Board direkt benannt.
Durch die unterschiedliche Pinbelegung der beiden Boards kann der Programmcode von einem UNO Rx nicht auf einen UNO WiFi Ry ohne Überprüfung übernommen werden. Die Pinbelegung des jeweils benutzten Boards sollte verfügbar sein.
1 -Einrichten eines Arduino UNO Boards
2 - Die Oberfläche der Arduino IDE
3 - Platine und COM-Port einstellen
Die Kommunikation zwischen Rechner und Arduino Board funktioniert nur, wenn vorher im Hauptmenü
(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.
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 */
Auf einem Arduino UNO Board befinden sich
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
Die Festlegung, ob ein Port Ein- oder Ausgang wird, erfolgt über die Befehle
Im Mikrocontroller befinden sich integrierte Pull-up Widerstände, die bei Bedarf aktiviert werden können. Dies erfolgt über die Kommandos:
Eine integrierte LED mit Vorwiderstand, kann über die vorkonfigurierte Konstante LED_BUILTIN bei einem Arduino Board (UNO, NANO) aufgerufen werden.
Das Arduino UNO WiFi Rev2 Board enthält zusätzlich eine integrierte IMU (Inertial Measurement Unit), LSM6DS3TR mit:
und ein Wi-Fi- und Bluetooth®-Modul NINA-W102 von u-Blox.
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.
Dazu bedient man sich sogenannter Pull-up oder Pull-down Widerstände.
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 |
|
Aufgaben |
|
Der Schaltungsaufbau
Das Programm Taster_internerPullUp
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
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
Der über analogRead(pin) eingelesene Wert wird einer Variablen vom Typ int übergeben und im Programm weiter verarbeitet.
Potenziometer am analogen Eingang | ||
Material |
|
|
Aufgaben |
|
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.
Die Ausgabe analoger Spannungswerte erfolgt über das Verfahren der Puls-Weiten-Modulation (PWM) und wird im Programm durch Aufruf des Kommandos
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 |
|
Aufgaben |
|
Das Programm pwm_2.ino
Bei korrekter Eingabe des Programms ergeben sich die folgenden Oszillogramme.
Erhöht man das Tastverhältnis, wird die Impulslänge größer. Für ein Tastverhältnis von 200 ergibt sich die folgende Darstellung.
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.
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 |
|
Aufgaben |
|
Schaltskizze
Das Programm
Die folgenden Abbildungen zeigen die mittleren Spannungswerte für drei verschiedene Tastverhältnisse.
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 deutsche Beschreibung der Programmiersprache findet man hier.