Arduino USB Host Zusatzplatine

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 und ohne in den Code zu schauen nachgebaut.

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
  • Verwendung USB Festplatten
  • ..

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.
http://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 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 zeichnen lassen (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 Fordergrundfarbe. 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 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:

Fazit

Die Einbindung einer Funkmaus war sehr einfach. Die USB Bibliothek bietet fast alles was man braucht. Sie verbrauch ein wenig 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

Quellen

https://www.watterott.com/en/USB-Host-Shield-20-for-Arduino

https://github.com/felis/USB_Host_Shield_2.0

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.