Last Updated on 14. November 2020 by sfambach
Eine Zusatzplatine für den Arduino Uno und kompatible. Sie besitzt nicht viel mehr als einen USB Anschluss. Hieran kann diverse Peripherie wie Mäuse, Tastaturen, Gamepads und Festplatten angeschlossen werden.
Da beim Arduino kein Betriebssystem vorhanden ist, welches diverse Treiber bietet, ist die Funktionalität durch die Bibliothek begrenzt. Es können natürlich neue Treiber selbst geschrieben werden und die gefundene Bibliothek (s.u.) bietet auch schon einiges.
Ich habe ein nette Projekt im Netz gefunden, welches mit Hilfe einer Mouse einen Cursor auf einem LCD Display steuert. Um zu sehen ob ich das auch kann, habe ich dieses mal etwas abgewandelt ohne in den schon vorhandenen Code zu schauen.
Anwendungsbereiche
Generell kann die USB Platine dazu verwendet werden diverse Devices an zu schließen, hier nur ein kleiner Auszug:
- Anschluss von HID wie Mouse und Tastatur
- Betreiben von PS3/4 Controllern
- X-Box Controller
- Ansprechen von Massenspeicher*
- Anbindung von Bluetooth Adaptern
- …
*USB Sticks und Festplatten könnten Probleme machen, so ist beispielsweise der Arduino Uno zu klein.
Fakten
Die Fakten sind recht kurz, das Board beinhaltet:
- USB Anschluss
- Reset Taster
Stückliste
- USB Zusatzplatine
- Arduino Uno oder kompatibel
- USB Mouse (bei mir ne billige Logitech)
- LCD Display
- Ein paar Pinheader Kabel
Ansichten
Programmierung
Bibliotheken
USB
Es gibt eine Bibliothek die mittlerweile sehr umfangreich ist:
https://github.com/felis/USB_Host_Shield_2.0
Die verwendeten Dateien der USB Bibliothek habe ich in den Projektordner kopiert. ACHTUNG: es sind nur die benötigten Dateien im Ordner.
Graphik
Da die Adafruit Display-Bibliothek und die USB Bibliothek nicht gemeinsam auf einen Uno passen habe ich nach einer kleineren Graphikbibliothek ausschau gehalten. Im Netz bin ich auf die u8g Bibliothek gestoßen:
https://github.com/olikraus/u8glib
Diese Bibliothek habe ich über den Bibliotheksmanager eingebunden., da sie viele Dateien enthält und ich auf die Arbeit verzichten wollte nur die Benötigten heraus zu suchen.
Die Einbindung von Bibliotheken im generellen ist unter folgenden Link beschrieben, hier werde ich nicht mehr näher darauf eingehen.
https://fambach.net/arduino-ide#Bibliotheken
Testprogramm
Test 1 – Mouse auslesen
Als erstes Testprogramm habe ich das Beispiel Mousetest aus der Bibliothek verwendet. Ich habe die MouseRptParser Klasse so angepasst, dass die Mouse-Werte für die aktuelle Postion sich nur im validen Bereich des Displays verändern. (In X-Richtung von 0-127 bewegen und in Y-Richtung von 0-63). Der Faktor gibt an wie schnell sich die Werte ändern sollen und enspricht der Mausgeschwindigkeit. 0,1 ist sehr langs … 1,0 sehr schnell. Bei 0.1-0.2 liegt für mich ungefähr die Wahrheit. Sonst macht die Klasse nichts ausser die Werte auf der Console auszugeben.
Test 2 – Graphik
Um die Graphik Bibliothek zu testen, habe ich 3 Symbole auf das Display gezeichnet (Ein Kreis, ein Dreieck und ein Rechteck). Ein keinerer Kreis, welcher den Cursor darstellen soll, läuft automatisch von links nach rechts. Die großen Symbole haben einen Kollissions-Erkennung. Sollte der „Cursor“ auf sie treffen füllen sie sich mit der Vordergrundfarbe. Der Cursor selbst wird dann mit der Hintergundfarbe gezeichnet.
Ich habe für jedes der Symbole und den Cursor eine Klasse erstellt welche auch die Kollissionskontrolle übernimmt.
Hier das Beispielprogramm:
So sieht es aus:
Gemeinsames Endprodukt
Hier habe ich die beiden Testprogramme zusammengeführt und so angepasst, dass die aktuelle Position der Maus an den Cursor übergeben wird.
Hier kann der Quellcode heruntergeladen werden:
So siehts aus:
Probleme
Anbindung von Massenspeichergeräten
StrumpfEule meldet, dass die Anbindung von Massenspeichergeräten auf dem Arduino mit der o.g. Bibliothek nicht funtioniert. Ungläubig habe ich dies recherchiert und geteste und muss dies leider zumindest teilweise bestätigen. Auf dem Arduino Uno scheint es garnicht zu funktionieren, sein Speicher ist zu klein und ihm fehlt ein dritter Timer.
Für dem Arduino Mega 2560 liess sich das mitgelieferte Beipsiel compilieren und scheint laut Ausgabe auf der Console auch zu funktionieren. Weitergehende Tests habe ich nicht durchgeführt.
Fazit
Die Einbindung einer Funkmaus war sehr einfach. Die USB Bibliothek bietet fast alles was man braucht. Sie verbrauch viel Speicher, bleibt aber im Rahmen. Dies sollte man jedoch berücksichtigen wenn andere speicherintensive Bibliotheken verwendet werden. Sonst gab es aus meiner Sicht keine größeren Hürden. Ich wollte ander Bibliotheken würden so problemlos funktionieren.
Verwandte Beiträge
- Arduino Nano 33 BLE
- Arduino Nano 33 IOT
- Preview – Arduino Motor Shield mit L298P
- Preview – Arduino Mega Logger Shield
- Preview – Prototyp Schild für Arduino Mega
- Preview – Arduino Nano Zusatzplatine
- Preview – Arduino Mini ATMEGA328P 328
- Arduino Ethernet Platine W5100
- Arduino VS1053 MP3 Audio Shield mit TF Karte
- Daten Logger Shield V 1.0
Quellen
https://www.watterott.com/en/USB-Host-Shield-20-for-Arduino
https://github.com/felis/USB_Host_Shield_2.0
Dumm nur das USB Sticks so gut wie garnicht funktionieren..
nix usb stick fat oder fat32 unterstützung.. geht mit arduino einfach nicht
Hallo StrumpfEule,
Danke für deinen Beitrag. Ich wollte es erst nich wahr haben aber wer lesen kann ist aber klar im Vorteil, es steht in der Header zum Masstorage Treiber. Ich diesbezüglich etwas recherchiert weill ich es immer noch icht ganz wahr haben wolllte. Mein aktueller Stand ist mit Arduino Uno und dieser Biliothek geht es nicht. Ihm fehlt der 3. Timer, sollte man es mit zwein schaffen ist der Speicher zu klein. Es gibt zwar Erfolgsberichte aber eher durch die Brust ins Auge und nur mit Fragmenten dieser oder anderer Bibliotheken. Weiterhin ist es wohl möglich über einen speziellen USB Controller USB Speicher Sticks anzusprechen. Da übernimmt aber der Controller die Arbeit. Auf dem ATMEGA soll es jedoch funktionierten. Ich habe es noch nicht ausprobiert, werde ich aber nachholen. Ich werde in den nächsten Wochen den Beitrag anpassen.
Gruß
Stefan