Low-Cost-Hardware Arduino als IoT-Maschine - Teil 2

UDOO ist eine Prototyping-Plattform
UDOO ist eine Prototyping-Plattform

IoT-Prototyping mit UDOO: UDOO ist eine Prototyping-Plattform, die Arduino und einen kleinen Linux-Computer vereint. So können Programmentwicklung und Steuerung auf demselben Gerät stattfinden. Bei der Inbetriebnahme gibt es aber gegenüber alleinstehenden Arduino-Boards ein paar Besonderheiten.

Für Entwicklungen mit dem Arduino war bislang ein PC mit Windows oder Linux erforderlich, auf dem die Arduino-Entwicklungsumgebung installiert und der betreffende Arduino über USB angeschlossen wurde. UDOO enthält einen netzwerkfähigen Cortex-A9-Controller, der den Arduino um ein Linux-Device ergänzt, auf dem gleichzeitig noch die Programmentwicklung für beide Controller erfolgen kann. Um die volle Funktionalität des UDOO nutzen zu können, wird er ins Netzwerk integriert, in dem sich z.B. noch ein PC, ein Netzwerkspeicher und ggf. ein Drucker befinden können. Über einen WLAN-Router sind alle Geräte mit dem Internet verbunden. An der Front des UDOO-Boards befinden sich die Anschlüsse microUSB, HDMI, Ethernet, USB und Audio. Der Anschluss für die Spannungsversorgung ist auf der Rückseite.

Für die Inbetriebnahme werden einfach Tastatur (über USB) und Bildschirm (über HDMI) an das UDOO-Board angeschlossen. Zur Installation des gewünschten Betriebssystems kann von der Webpräsenz www.udoo.org/downloads/ ein SD-Image der folgenden Distributionen heruntergeladen werden: Udoobuntu, Linaro Ubuntu, Android 4.3 Jelly Bean, Debian Wheezy armHF, Yocto und ArchLinux. Hier wurde die Ubuntu-Distribution gewählt und eine bootfähige SD-Card erstellt. Ist die SD-Card auf dem UDOO installiert und das UDOO-Board ans Netzwerk angeschlossen, dann kann die Spannungsversorgung zugeschaltet werden und der Bootvorgang startet. Der UDOO-Desktop der Ubuntu-Distribution präsentiert sich nach dem Boot-Prozess in der in Bild 1 gezeigten Form. Hier wurden noch die zwei Anwendungen htop und shutter nachinstalliert.

Achtung bei Arduino-Libraries

Bei den Arduino-Programmen sind unter Einsatz der aktuellen Arduino-IDE 1.5.4 Neuerungen zu berücksichtigen. Seit November 2011 gibt es bereits die Arduino-IDE-Version 1.0, mit der einige Änderungen eingeführt wurden, die vor allem bei der Portierung älterer Arduino-Programme berücksichtigt werden müssen. Die bisher verwendete Dateiendung .pde wurde zur deutlichen Abgrenzung von Processing-Dateien auf .ino geändert. Alte pde-Dateien werden durch IDEs ab 1.0 geöffnet, werden dann aber als ino-Datei abgespeichert. Der umgekehrte Weg funktioniert nicht.

Viele Arduino-Libraries sind für IDE-Versionen vor 1.0 geschrieben worden. Diese Libraries nutzen wiederum andere Libraries, die bei Bedarf eingefügt werden. Ab der IDE-Version 1.0 wurden wiring.h, WProgram.h, WConstants.h und pins_arduino.h in Arduino.h zusammengefasst. Dadurch empfiehlt es sich, folgenden Code in die Libraries einzutragen:

#if ARDUINO >= 100
#include “Arduino.h“
#else
#include “WProgram.h”
#endif

Diese Hinweise sollen an dieser Stelle genügen. Mehr Details zur Portierung sind u.a. in [2] zu finden.

Steuern und Regeln mit dem Arduino

Zur Inbetriebnahme einer neuen oder neu installierten Entwicklungsumgebung bedient man sich oft eines „Hello World”-Programms. Bei einem Mikrocontroller hingegen zeigt eine blinkende LED und/oder eine Ausgabe auf einem Display, dass die Entwicklungsumgebung vollständig installiert ist, der Programm-Download funktioniert und das Programm auf dem Mikrocontroller fehlerfrei arbeitet.

Bild 2 zeigt den Quelltext des Programms blink.ino in der Arduino-IDE 1.5.4. Auf dem Linux-Device läuft das aus der Arduino-IDE heraus zu startende Monitorprogramm und zeigt alle über die Schnittstelle /dev/ttymxc3 empfangenen Daten an (Bild 3).

Für die Steuerfunktionen des Arduino werden die zwölf analogen Eingänge A0 bis A11 und die zwei analogen Ausgänge (DAC0 und DAC1) genutzt. Ihre Funktionsweise wird im Folgenden an einem Beispiel gezeigt. Die digitalen IO2 bis IO13 sind außerdem als PWM-Ausgänge nutzbar. Alternativ können diese Anschlüsse auch als GPIO (General Purpose I/O) verwendet werden.

Im Programmbeispiel da_ad_test.ino (Listing 1) wird durch PWM eine Ausgangsspannung bereitgestellt, die durch ein nachgeschaltetes RC-Glied zu einer Gleichspannung geglättet wird. Diese Gleichspannung wird wiederum dem AD-Umsetzer zugeführt und das Ergebnis der AD-Umsetzung sollte dann den Wert des DA-Umsetzers repräsentieren. Die PWM-Frequenz beträgt beim Arduino Due ca. 500 Hz. Das RC-Glied (Tiefpass) sollte in der Praxis nach der folgenden Formel dimensioniert werden:

t space equals space R space times space C space equals fraction numerator left parenthesis 10..1000 over denominator P presuperscript f W M end fraction

Wählt man die Zeitkonstante τ zu hoch, dann steigt die Einschwingzeit. Wählt man sie hingegen zu niedrig, dann ist die Filterwirkung zu gering. Im Programmbeispiel (Listing 1) wird in einer Endlosschleife mit analogWrite(PWMPin, AOUT) ein PWM-Wert an IO2 gesetzt, dieser gefiltert über den Analogeingang A11 dem internen AD-Umsetzer zugeführt und nach eine Wartezeit von einer halben Sekunde (delay(500)) über analogRead(A11) vom AD-Umsetzer gelesen. Die restlichen Instruktionen dienen nur der seriellen Ausgabe bzw. der Konfiguration.

Eine Besonderheit gilt es noch zu beachten. Für die PWM wird ein 8-bit-Timer verwendet, weshalb hier nur Werte zwischen 0 und 255 gesetzt werden können. Der interne AD-Umsetzer weist hier aber eine Auflösung von 10 bit auf (maximal 12 bit sind möglich), weshalb dessen Ergebnisse zwischen 0 und 1024 liegen. Bei der Berechnung der Abweichung ist deshalb der Faktor 4 berücksichtigt (4*AOUT – AIN). Nach dem Start des Programms da_ad_test.ino kann die Ergebnisausgabe im Monitor betrachtet werden.