Tutorium Embedded Systems
Das Tutorium Embedded Systems soll begleitend zur Lehrveranstaltung Mikroprozessortechnik und eingebettete Systeme (MPTeS) den Studenten des ersten Fachsemesters die Grundlagen der Programmierung eines Mikrocontrollers wie den Arduino an praktischen Beispielen beibringen. Ziel ist es, den Studenten neugierig auf das Entwickeln (einfacher) eingebetteter Systeme auf Mikrocontrollern zu machen und ihm das notwendige Wissen zu verleihen, selbständig dieser Neugierde nachzugehen.
Das Tutorium ist in mehrere Tutorials unterteilt:
1. Aufsetzen der Entwicklungsumgebung und Inbetriebnahme des Arduino
Anmerkung
Das verwenden eines Arduino Uno ist für den Einstieg in die Entwicklung eingebetteter Systeme empfehlenswert, da der Umgang und die Programmierung nicht unnötig kompliziert sind. Deshalb beschäftigt sich dieses Tutorium hauptsächlich mit diesem Mikrocontroller.
Benötigte Komponenten:
- Arduino Uno + USB Kabel
- Desktop-PC oder Laptop mit USB Eingang
- Internetverbindung
Inbetriebnahme
Die Inbetriebnahme des Arduino Uno ist sehr eingängig. Einfach den Mikrocontroller mit dem USB-Kabel an den PC anschließen und er sollte, zumindest unter Windows, sofort den Treiber installieren.
Installieren der Entwicklungsumgebung
Als Entwicklungsumgebung gibt es Software vom offiziellen Hersteller, welche die Programmierung stark vereinfacht. Das Programm erhält man unter folgendem Link: Arduino Software
Nun starten Sie bitte die Software und stellen sicher, dass Sie unter dem Reiter "Werkzeuge" als Platine das richtige Modell, in unserem Fall "Arduino/Genuino Uno", ausgewählt haben. Außerdem sollte es einen gültigen COM-Port geben, ansonsten versuchen Sie bitte, den Arduino an einen anderen USB-Eingang anzuschließen.
Damit wären die Grundvorraussetzungen zum Programmieren des Arduino schon geschaffen.
Spezifikation
Wissenswert sind noch ein paar technische Daten über den Arduino Uno:
- Eingangsspannung 6-20V (Bei Betrieb am USB-Port oder mit dem (oft mitgelieferten) Ladekabel unproblematisch)
- Arbeitsspannung: 5V (Er besitzt auch einen 3V Pin)
- Taktfrequenz: 16 MHz
- Flash-Speicher: 32 kB
- Digitale I/O /Input/Output) Pins: 14, davon 6 als PWM (Pulsweitenmodulation) nutzbar
- 6 Analoge Input-Pins
Der Arduino Uno besitzt also weit mehr Leistung und Speicherkapazität, als für unsere Zwecke notwendig ist. Auch für größere Programme lässt er sich gut nutzen.
2. Grundlagen der Arduino-Programmierung
Setup und Loop
Beim Öffnen der Entwicklungsumgebung fällt auf, dass zwei Funktionen bereits vordefiniert sind:
void setup() { } void loop() { }
Diese beiden Funktionskörper beschreiben im Grunde die Funktionsweise des Arduino. Die Funktion "setup()" beschreibt, was für Vorbereitungen getroffen werden müssen, damit das Hauptprogramm "loop" ausgeführt werden kann. Der Loop ist, wie der name schon sagt, im Grunde eine while(true)- Schleife. Das muss es auch sein, da der Arduino ansosnten nur ein einziges mal den Code ausführen würde.
Hochladen von Sketches
In der Entwicklungsumgebung Arduino werden die Programme als "Sketch" gespeichert. Man kann beliebig viele Sketches erstellen, allerdings nur einen Sketch gleichzeitig auf den Arduino laden.
Nachdem man seinen Code geschrieben hat und ihn hochladen möchte, muss man ihn zunächst "verifizieren". Dazu klickt man auf das Häkchen über dem Editor. Dieser Verifizierungsvorgang dient als Debugger. Er erkennt die gröbsten Fehler und bewahrt den Nutzer vor ungewollten Problemen. Nach erfolgreicher Verifizierung kann man den Sketch hochladen.
WICHTIG: Die beiden Pins mit der Bezeichnung TX->1 und RX<-0 müssen beim Hochladen frei sein.
Nach dem Hochladen startet sich der Arduino automatisch neu und führt sofort das Programm aus. Während des Hochladens blinkt die Status-LED des Arduino.
Als Test kann man das leere Standardprogramm hochladen. Wenn keine Fehlermeldungen generiert werden war der Setup erfolgreich.
3. LED-Programm
Nachdem alle Vorbereitungen nun getroffen sind, kann es mit dem Programmieren losgehen. Ein Programm zum ansteuern einer LED gilt dabei sozusagen als das "Hallo Welt" bei Mikrocontrollern. Das Beispiel eignet sich sehr gut um mit dem Anschließen von zusätzlicher Hardware und den Grundlagen zum ansteuern dieser vertraut gemacht zu werden.
Zusätzlich benötigte Komponenten:
- LED, am besten einfarbig, da diese nur 2 Drähte besitzen.
- Optional: Kabel
Anschließen der LED
Das Anschließen ist nicht weiter problematisch, wichtig ist nur, dass man weiß, welcher der beiden Drähte der Ground (GND) ist. Ground kommt von Erdung, das heißt, auf diesem Draht wird der Strom wieder abgeleitet. Bei den meisten LEDs besitzt ein Draht einen leichten Knick und ist damit länger. Bei diesen ist der Ground dann der kürzere Draht. Sicherheitshalber kann man seine LED im Internet recherchieren. Dort sind die Drähte beschriftet.
Also stecken wir den kurzen Draht in den mit GND beschrifteten Pin des Arduino und den längeren in einen beliebigen digitalen I/O Pin, z.B. 13, da dieser direkt neben dem GND liegt. Alternativ kann man Kabel nutzen, um von den Pins auf der Platine eine Verbindung zur LED aufzubauen. Mit Breadboards geht das ganze noch besser, dazu später mehr.
Schreiben des Quellcodes
Nachdem die LED angeschlossen wurde, dürfte noch nichts passieren, da auf dem Arduino das Standardprogramm läuft und somit kein Strom auf den Pin gegeben wird. Das ändern wir jetzt.
Verwendete Funktionen: (Datentyp der Übergabeparameter kann vom Original abweichen, dient nur als Lesehilfe)
- delay( int ms ) : Der Arduino "wartet" für die angegebene Dauer in Millisekunden
- pinMode( int pin, enum mode) : Setzt einen Pin auf der Platine in den angegebenen Modus, z.B. INPUT oder OUTPUT
- digitalWrite( int pin, int value) : Schreibt einen Wert auf den Pin. Werte bewegen sich meist von 0-255. (LOW-HIGH)
Nachdem in der Entwicklungsumgebung ein neuer Sketch geöffnet wurde, beginnen wir mit der Deklaration unseres LED-Pins:
int pinLED = 13;
Sollte eure LED nicht an Pin 13 angeschlossen sein, diesen Wert natürlich mit eurem ersetzen. Wir deklarieren diese Variable außerhalb der beiden Funktionen, also global. Objektorientiertes Programmieren ist bei den vom Umfang recht überschaubaren Programmen für Mikrocontroller nicht notwendig.
Als nächstes müssen wir diese Pin als Output-Pin konfigurieren, da wir über diese Strom auf die LED geben möchten. Das tun wir in dem Setup:
void setup() { pinMode( pinLED, OUTPUT); }
Mehr gibt es im Setup erst einmal nicht zutun. Nun müssen wir die LED nurnoch zum Blinken bringen. Da sie ständig blinken soll, tun wir das im Loop:
void loop() { digitalWrite( pinLED, HIGH); //Schaltet die LED an delay( 500); //Wartet eine halbe Sekunde digitalWrite( pinLED, LOW); //Schaltet die LED aus delay( 500); //Wartet eine halbe Sekunde }
Damit ist das erste Programm geschrieben. Jetzt muss es nurnoch verifiziert und hochgeladen werden und wenn alle Schritte korrekt befolgt wurden, blinkt die LED.
Aufgaben:
- Bringe die LED dauerhaft zum Leuchten, ohne Code in den Loop zu schreiben
- Schreibe ein Programm für eine Dimm-Leuchte (wird langsam heller und wieder dunkler)
- Nutze dafür eine weitere Variable mit Werten zwischen 0 und 255, die du anstelle von LOW und HIGH nutzt.
- Nutze die if-Bedingung. Syntax ist wie bei normalem C-Code
4. Komplexere Aufbauten mit Breadboards
5. Auslesen von Sensoren
6. Aufbauen einer Bluetooth-Verbindung