Testbericht: Arduino Leonardo

Ende Mai 2012 wurde das neuste Arduino Board, der Arduino Leonardo, inklusive der neuen IDE Version 1.0.1 veröffentlicht. Der Arduino Leonardo unterscheidet sich vom Vorgängermodellen hauptsächlich durch den anderen Microcontroller-Typen und die unterschiedliche Bauform des USB-Anschlusses. Beim Arduino Leonardo wird ein ATmega32u4 Microcontroller verwendet, welcher auch die Kommunikation über die USB-Schnittstelle übernimmt. Dadurch konnte der bisher verwendete zusätzliche Controller für die USB-Kommunikation aus dem Design entfernt werden.

Mit dem neuen Microcontroller kann das Leonardo-Board standardmässig als USB-Device, als Maus oder Keyboard, betrieben werden.

Die Firma Boxtec, welche in der Schweiz Arduino-Produkte vertreibt, hat mir freundlicherweise ein Arduino Leonardo Board zum Test zur Verfügung gestellt.
Besten Dank dafür.

Arduino Leonardo Arduino Leonardo

Der Arduino Leonardo wird, wie die anderen Arduino-Boards, in einer formschönen Kartonschachtel geliefert, welche auch direkt als Gehäuse verwendet werden kann.

Das Leonardo-Board hat die gleichen Abmessungen wie das Standardboard Arduino Uno. Optisch fällt auf den ersten Blick auf dass der USB-Stecker kleiner ist, der Reset-Knopf an einem anderen Ort platziert ist und ein Microcontroller mit einer Gehäuseform für die Oberflächenmontage verwendet wurde. Alle technischen Änderungen des Arduino Leonardo sind im Getting-Started-Dokument auf der Arduino-Website übersichtlich aufgelistet.

Voraussetzungen
Für die erfolgreiche Inbetriebnahme und Nutzung des Arduino Leonardo sind folgende Voraussetzungen zu erfüllen:

  • USB-Kabel mit Steckertyp Micro-B
  • installierte Entwicklungsumgebung (IDE) mit Version 1.0.1.

Der USB-Stecker Micro-B ist eine kleinere Bauform als die Bauformen der bisherigen Arduino-Boards. Beim Kauf eines Leonardo sollte somit auch gleichzeitig ein entsprechende Kabel mitbestellt werden.

Die kürzlich freigebene Version 1.0.1 der Arduino-Entwicklungsumgebung unterstützt standardmässig das neue Arduino Leonardo Board. Vor der ersten Inbetriebnahme muss die neue IDE installiert werden.

Inbetriebnahme
Der erste Schritt der Inbetriebnahme ist erwähnt die Installation der IDE mit Version 1.0.1. Die Inbetriebnahme der Hardware des Arduino Leonardo erfolgt auf die gleiche Weise wie bei den früheren Arduino-Boards. USB-Kabel am Arduino Leonardo und am Rechner anschliessen und dann die Anweisungen auf dem Bildschirm befolgen. Beim ersten Anschliessen eines Arduino Leonardo meldet dass System dass ein neuer Treiber installiert werden muss. Üblicherweise versucht das System den Treiber automatisch zu installieren. Mein Windows 7-Rechner hat zwar das neue Board erkannt, konnte den Treiber nicht korrekt installieren.

leonardo-install-1

Gemäss Anleitung zum Arduino Leonardo muss der Treiber in diesem Fall manuell nachinstalliert werden. Im Device Manager (Start>Control Panel>Hardware) kann durch Rechtsklick auf das gelistete Leonardo-Board ein Update der Software (Treiber) gestartet werden. Im anschliessenden Installationsablauf wird keine automatische Treibersuche gewählt, sondern die Auswahl des Treibers von einem spezifischen Pfad durchgeführt. Der Treiber liegt im Ordner /drivers der im ersten Schritt installierten Arduino IDE 1.0.1. Nach Auswahl und Bestätigung des Treiberpfades wird der Leonardo-Treiber installiert.

Nach erfolgreicher Installation meldet die Installationsroutine

leonardo-install-2

Im Gerätemanager wird nun das Arduino Leonardo Board erkannt und kann über den USB-Port genutzt werden.

leonardo-install-3

In der soeben installierten IDE 1.0.1 wird nun der Arduino Leonardo in der Liste der Boards aufgelistet und in den installierten Codebeispielen gibt es unter Punkt 09.USB(Leonardo) einen Ordner mit Beispielen für Maus-und Keyboard-Emulation.

Diese neue USB-Funktionen mit denen man ein Leonardo als Maus, Keyboard oder Joystick verwenden kann, bieten zusätzliche Einsatzmöglichkeiten. Die bereits erwähnten Beispiele liefern dazu dem Anwender einen ersten Eindruck und Beispiele, welche als Grundlage für eigene Anwendungen genutzt werden können.

Anschlussbelegung:
Die Anzahl der Anschlusspins auf den Buchsenleisten und die Position der Buchsenleisten wurde beim Arduino Leonardo nicht geändert. Aber die Anschlussbelegung der einzelnen Pins hat sich aber teilweise geändert und muss bei der Verwendung von einem bestehenden Shield oder beim Einsatz einer Lösung für Arduino Uno beachtet werden.

Nachfolgende Tabelle zeigt die Unterschiede der Pins zwischen Arduino Uno und Arduino Leonardo:

Bezeichnung Uno Leonardo
A06-A11 D4,6,8,9,10,12
PWM D3,5,6,9,10,11 D3,5,6,9,10,11,13
SPI D10,11,12,13 ICSP Stecker
TWI (I2C) A04,05 und SCL, SDA D2,3 und SCL, SDA

Durch die unterschiedliche Anschlussbelegung, speziell des I2C-Bus und der SPI-Schnittstelle, können etliche Standardshields nicht mehr genutzt werden. Zu erwähnen sind hier SD Card Shields und älterer Versionen des Ethernet Shield, welche den SPI-Bus über die Pins 10 bis 13 nutzen.
Nachtrag: das aktuelle Ethernet Shield (Version 6) nutzt den SPI-Bus welcher über den ICSP-Stecker vom Arduino-Board geliefert wird.

Testanwendung:
Meine Testanwendung ist ein kleiner Datenlogger, welche über die serielle Schnittstelle einen Temperaturwert in eine Textdatei schreibt. Das Leonardo Board arbeitet dabei als Keyboard. Auf dem angeschlossenen Rechner muss dazu keine Software installiert werden. Der Datenlogger nutze ich gerade, da ich verschiedene Tests mit Sensoren mache und auf diese Art einfach Messdaten in einer Textdatei speichern kann.

Wie im Getting-Started Guide unter „Good Coding Practice“ beschrieben ist, sollte beachtet werden, dass bei Einsatz des Leonardo als Keyboard, das Programmieren des Boards schwierig sein kann.

if the Mouse or Keyboard library is constantly running, it will be difficult to program your board. Functions such as Mouse.move() and Keyboard.print() will move your cursor…. and should only be called when you are ready to handle them. It is recommended to use a control system to turn this functionality on, like a physical switch.

Um den Logger zu deaktivieren, habe ich dazu einen Schalter an Pin 2 angeschlossen. Im Code wird dieser jeweils abgefragt und, falls der Schalter eingeschaltet ist, wird die Keyboard-Funktionalität aktiviert und Daten geschrieben.

// Schalter abfragen
int buttonState = digitalRead(buttonPin);

// Wenn Signal = HIGH
if (buttonState == HIGH)
 {
  ...
 }

Die komplette Loggerfunktion liest einen Analogsignal von einem LM35 Temperatursensor ein und sendet die Daten an die Textdatei. Nach dem Senden des Temperaturwertes wird mit einer zusätzlichen Keyboard-Anweisung (Strg-s) die Datei gespeichert. Nach einer Verzögerung von 2 Sekunden beginnt die Messung wieder von Anfang an.

const int buttonPin = 2;
float valTemp;
int TempPin = 0;

void setup() {
  // Eingang für Schalter:
  pinMode(buttonPin, INPUT);
  // Keyboard Initialisierung
  Keyboard.begin();
}

void loop()
{
  // Schalter abfragen
  int buttonState = digitalRead(buttonPin);
  // Wenn Signal = HIGH
  if (buttonState == HIGH)
  {
    // Analogwert einlesen
    valTemp = analogRead(TempPin);
    // Umwandlung 0-100 Grad
    valTemp = (5.0 * valTemp * 100.0)/1024.0;
    Keyboard.println(valTemp);
    // Speichern
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.press('s');
    delay(100);
    Keyboard.releaseAll();
  }
  delay(2000);
}

Im Texteditor auf dem Desktop wird nun alle 2 Sekunden ein Messwert gespeichert.

leonardo-datenlogger

Fazit:
Das neue Arduino Leonardo Board bietet mit den neuen Funktionen viele zusätzliche Anwendungsmöglichkeiten. Dank den vorhandenen Anleitungen ist eine Inbetriebnahme problemlos durchzuführen. Mit den mitgelieferten Beispielen für Keyboard-und Mausemulation kann man sofort mit eigenen Experimenten beginnen.

Obwohl der Arduino Leonardo die gleiche Bauform und die gleichen Buchsenleisten besitzt, ist das neue Board nicht kompatibel mit dem Standardboard. Die Anschlussbelegung hat sich bei verschiedenen Funktionen geändert und viele bisherige Shields können ohne Anpassung nicht mehr genutzt werden. Neben der elektrischen Inkompatibilität können auch etliche Bibliotheken durch die veränderte Pinbelegung nicht mehr genutzt werden

Neben dem von mir getesteten Arduino Leonardo mit Headers ist auch eine Leonardo-Version ohne Headers und Buchse für Stromversorgung verfügbar. Diese Bauform ist noch etwas kostengünstiger und eignet sich für Lowcost-Anwendungen und Anwendungsfälle mit geringer Bauhöhe oder knappem Platzbedarf.

Abschliessend kann man sagen dass das neue Arduino Leonardo Board durch die erweitere Funktionalität als USB-Device neue Möglichkeiten bietet. Für Standardanwendungen und für Einsteiger ist das Board nicht geeignet da der Leonardo nicht voll kompatibel mit den bisherigen Standardboards ist.


10 Responses to “Testbericht: Arduino Leonardo”  

  1. 1 tamberg

    Hallo Thomas, sind die Headers wnigstens von den Pin Abständen her kompatibel mit den bestehenden Shields, oder hat sich da auch was geändert?

  2. 2 arduino-praxis

    @tamberg

    Hallo Thomas, Headers sind mechanisch kompatibel mit den bisherigen Shields. Wie ich geschrieben habe, muss jeweils die Anschlussbelegung der einzelnen Pins überprüft werden.

  3. 3 Michael

    Halli, hallo.
    Vielen Dank für den netten Testbericht. Deine Ausführung hat mir sehr gut gefallen. Weiter so!

  4. 4 Helmut

    Hallo
    Der Testbericht hat mir gut gefallen und so habe ich mir ein Arduino Leonardo zugelegt.
    Die installation der Treiber ging und so ist das Board nun mit Com5 und 9600 baud
    verbunden. Leider geht der Upload zu den Board nicht. Beim Upload wird zwar ein reset ausgefüht, aber nach etwa 30s kommt eine Fehlermeldung.
    Found programmer: id = „Bpy“; type = 0
    Software Version = 0.0
    Meine Frage, müssen noch irgendwelche Änderungen in den INF Dateien vorgenommen werden damit der Upload geht.
    Habe leider noch nichts in WWW. gefunden.
    Danke Helmut

  5. 5 arduino-praxis

    @Helmut,

    Grundsätzlich muss bei der Verwendung der IDE keine Anpassungen an inf-Dateien gemacht werden.

    Wichtig ist dass die IDE ab Version 1.0.1 verwendet wird.

    Für den Upload muss der richtige COM-Port und das Board „Arduino Leonardo“ ausgewählt werden. Dann sollte alles problemlos funktionieren.

  6. 6 Helmut

    Hallo
    Danke für die schnelle Antwort. Jetzt habe ich das Problem erkannt und das Board geht wie beschrieben.
    Als ich das Board an einem anderen PC ausprobierte, fiel mir auf, dass der Name der Geräteinstanzkennung unterschiedlich war. Es stellte sich raus, dass es ein Zeitproblem mit der USB Schnittstelle ist. Ich hatte das Board an einer freien USB3 Schnittstelle betrieben, die demnach zu schnell ist. Nach dem Umstecken auf eine USB2 Schnittstelle ging es sofort.

    Helmut

  7. 7 Marc

    Hallo,
    ich habe eine Verständnisfrage zu folgender Zeile im Code:
    „valTemp = (5.0 * valTemp * 100) / 1024.0;“.

    Der Sensor LM35 hat einen Messbereich von -55 bis 150 *C und eine Auflösung von 10mV/*C und der Arduino einen Messbereich von 0 bis 5V. analogRead gibt bei 0V einen Wert von 0 zurück und bei 5V – 1023, 1024 wird nie erreicht.

    Müsste die Formel zur Berechnung der Temperatur nicht so lauten: t = 500.0 * r / 1023 – 55; wenn r = analogRead(Sensor)?

    So erhält man 0 *C wenn analogRead 113 zurück gibt, also ein Offset von 55K.

    Mit freundlichen Grüßen, Marc.

  8. 8 arduino-praxis

    @Marc

    Der Wert von 1024 ist nicht der maximale Temperaturwert sondern die Gesamtzahl der möglichen Messwerte (0-1023).

    Durch die Tatsache dass beim LM35 bei 0 Grad eine Ausgangsspannung von 0 Volt ausgegeben wird, kann ohne Zusatzschaltung keine negative Temperatur gemessen werden.
    Ein Beispiel für die Messung von negativen Temperaturen zeigt Bild 2 im Datenblatt von National Semiconductor. Dazu ist aber eine zusätzliche negative Hilfsspannung notwendig.

    Die von dir erwähnte Formel stammt vermutlich von einer Anwendung mit einem Temperatursensor vom Typ TMP36. Dieser Sensortyp liefert bei 0 Grad eine Ausgangsspannung von 0.5 Volt und kann somit für die Messung von negativen Temperaturen verwendet werden.

  9. 9 Marc

    Hallo und danke für die Antwort.
    Das mit der Negativen Spannung beim LM35 habe ich übersehen -.-.
    In der Tat ist die Formel vom TMP36 abgeleitet, hätte aber auch von jedem anderen linearen analogen Sensor mit Offset stammen können.

    Ich weiß nicht, vielleicht wurde ich ja als Kind zu heiß gebaded, aber das mit den 1024 will mir immer noch nicht in dem Kopf…
    Ich meine es ist klar dass 0…1023, 1024 Werte sind, aber 5V oder die höchste Temperatur am Sensor wird durch 1023 repräsentiert, müsste man dann nicht auch durch 1023 teilen? Ich mein das ist ja kein Kuchen den ich unter 1024 Leuten (0…1023) verteilen will, sondern eine lineare Anpassung an einen anderen Messbereich (Zahlenbereich). Oder doch?
    Ich meine analogRead() = 0 heißt 0V und nicht 0.1 oder 0.3, …

    Keine Ahnung wo mir da das Verständnis fehlt und richtig ausdrücken kann ich mich da jetzt auch nicht wirklich, könnte mir es vielleicht jemand nahe legen?

    Mit freundlichen Grüßen, Marc.

  10. 10 Alois B

    es sind in der Tat 1023 Stufen oder Intervalle bzw. 1024 Zustände, nämlich 0, 1, 2, … 1022, 1023. Der Fehler, bei solchen Umwandlungsrechnungen durch 2^N statt (2^N -1) zu dividieren, wird oft gemacht. Es fällt halt praktisch nicht auf bei dem rel. ungenauen Graffl.

Leave a Reply



Kategorien