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.
prüft das eingegebene Programm auf Fehler und gibt ggf. eine Fehlermeldung zurück.
überträgt sketch auf Arduino Board.
neuen sketch erstellen
sketch öffnen
sketch speichern
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 dem 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 P13 aufgerufen werden.
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 |
1x Arduino UNO 1x Steckernetzteil 1x Taster, offen 2x Steckdraht |
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 |
1x Arduino UNO 1x Spannungsversorgung, 5V 1x USB-Verbindungskabel 1x Potentiometer 10kOhm 3x Steckdraht |
|
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
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 |
|
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 |
1x Steckbrett 1x 10µF Elektrolytkondensator 1x Widerstand, 2 kOhm 2x Steckdraht |
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 englische Beschreibung der Programmiersprache finden Sie sowohl unter arduino.org als auch unter arduino.cc.