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.
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.
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
Im Gerätemanager wird nun das Arduino Leonardo Board erkannt und kann über den USB-Port genutzt werden.
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.
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”
Leave a Reply
Suchen
Aktuelles
- Arduino Praxiseinstieg, 5. Auflage erschienen
- Arduino UNO R4 offiziell vorgestellt
- Review: PCB Service von WellPCB
- Review: SMD-Bestückungs-Service von JLCPCB
- Portable Power Supply – VoltBot
- Leiterplatten-Panel bei JLCPCB
- Arduino Praxiseinstieg, 4. Auflage erscheint am 29.04.2019
- Klein, kleiner, ganz klein – ATtiny10
- Review – Leiterplatten (PCB) von JLCPCB
- Arduino Day 2018
Kommentare
- Review: PCB Service von WellPCB 2
ArduinoPraxis [...] - Arduino UNO R4 offiziell vorgestellt 2
ArduinoPraxis [...] - Review - Leiterplatten (PCB) von JLCPCB 4
Werner Smidt [...] - Review: SMD-Bestückungs-Service von JLCPCB 2
ArduinoPraxis [...] - Projekt: drahtloses Display für Oregon Scientific Wetterstation 3
Oliver [...]
Kategorien
Archive
- Dezember 2023
- Juni 2023
- Juli 2020
- Dezember 2019
- Oktober 2019
- Juni 2019
- April 2019
- Juli 2018
- Mai 2018
- November 2017
- Oktober 2017
- September 2017
- Juli 2017
- April 2017
- März 2017
- Februar 2017
- Dezember 2016
- November 2016
- September 2016
- Mai 2016
- Januar 2016
- Dezember 2015
- August 2015
- Mai 2015
- März 2015
- Januar 2015
- Dezember 2014
- September 2014
- August 2014
- Juli 2014
- Juni 2014
- Mai 2014
- April 2014
- März 2014
- Februar 2014
- Januar 2014
- Dezember 2013
- Oktober 2013
- September 2013
- August 2013
- Juni 2013
- Mai 2013
- April 2013
- März 2013
- Februar 2013
- Januar 2013
- Dezember 2012
- November 2012
- Oktober 2012
- September 2012
- August 2012
- Juli 2012
- Juni 2012
- Mai 2012
- April 2012
- Februar 2012
- Januar 2012
- Dezember 2011
- November 2011
- Oktober 2011
- September 2011
- August 2011
- Juli 2011
- Juni 2011
- Mai 2011
- April 2011
- März 2011
- Januar 2011
- Dezember 2010
- November 2010
- Oktober 2010
- September 2010
- August 2010
- Juli 2010
- Juni 2010
- Mai 2010
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?
@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.
Halli, hallo.
Vielen Dank für den netten Testbericht. Deine Ausführung hat mir sehr gut gefallen. Weiter so!
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
@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.
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
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.
@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.
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.
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.