ComputerClub 2
Sitemap 
Wolfgang Back & Wolfgang Rudolph
Suche:   Wolfgang Back & Wolfgang Rudolph
 
  Forenübersicht
  Anmelden
  Registrierung
  Mitgliederliste
  Teammitglieder
  Hilfe
  Suche
  FAQ
  Forenregeln
  Wie poste ich richtig?
  Impressum

CC²-Fan-Club » Computerclub 2 » Rund um den Arduino » Der ArduBot wird mit einem Smartphone gesteuert » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Antwort erstellen
Zum Ende der Seite springen   Der ArduBot wird mit einem Smartphone gesteuert 7 Bewertungen - Durchschnitt: 9,717 Bewertungen - Durchschnitt: 9,717 Bewertungen - Durchschnitt: 9,717 Bewertungen - Durchschnitt: 9,717 Bewertungen - Durchschnitt: 9,71
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Highli Highli ist männlich
Mitglied

images/avatars/avatar-772.jpg

Dabei seit: 23.12.2011
Beiträge: 24
Wohnort: Brühl

Highli ist offline
Der ArduBot wird mit einem Smartphone gesteuert Beitrag: beantworten | zitieren | editieren | melden       | Top

Wir steuern unseren ArduBot
Liebe Freunde, ich möchte euch in diesem Arduino-AddOn zeigen, wie Ihr den ArduBot aus meinem Arduino-Buch (Projekt 31) steuern könnt. Wenn Ihr jetzt einwendet, dass ich das doch schon gemacht habe, dann stimmt das nur zum Teil. Viele Entwickler wollen „richtig programmieren“ und haben etwas gegen den AppInventor, der eine Art Baukastensystem darstellt und bei dem keine einzige Zeile Code einzugeben ist. Ich finde das eine fantastische und innovative Lösung und werde auch weiterhin darüber berichten. Der AppInventor war in der Vergangenheit bei Google-Labs beheimatet und ist jetzt durch das MIT (Massachusetts Institute of Technology) übernommen worden. Keine Ahnung, warum Google die Entwicklung eigestellt hat.
Ich möchte die Sache also in diesem Tutorial etwas anders angehen. Wenn Ihr Codezeilen fordert, dann gebe ich sie euch. Es wird also richtig heftig ebueb
Was benötigen wir?
Hardware
Um den ArduBot angemessen zu steuern und das auch noch per Bluetooth, werden folgende Hardwarekomponenten benötigt:

Und Last but not Least unser Android-Smartphone:

Bevor Du jedoch mit dem Entwickeln einer App beginnen kannst, muss das USB-Debugging eingeschaltet sein. Das musst Du mache, bevor Du das Smartphone über das USB-Kabel mit Deinem Rechner verbindest. Das geht über: Systemeinstellungen|Anwendungen|Entwicklung

Sehen wir uns die Komponenten ein wenig genauer an…
Motor-Shield
Das Motor-Shield ist natürlich Marke Eigenbau und mit dem Treiberbaustein L293-DNE realisiert. Die gelben bzw. grünen LED’s zeigen die Drehrichtung für den jeweils angesteuerten Motor an. So könnt Ihr auch optisch kontrollieren, wie der Treiberbaustein die Motoren ansteuert.

Der entsprechende Schaltplan mutet wie folgt an:

Genauere Informationen zum Motor-Shield findet Ihr natürlich in meinem Buch, denn das würde doch ein wenig den Rahmen sprengen.
Bluetooth-Shield
Das Bluetooth-Shield [4], was ich hier verwende, ist das gleiche, wie aus meinem Buch und von der Firma Itead-Studio.

Es dient dazu, die vom Smartphone ausgesendeten Funksignale zu empfangen und entsprechend an das Arduino-Board weiterzuleiten, welches dann wieder das Motor-Shield ansteuert und das dann die Motoren mehr oder weniger in Bewegung setzt. Ist schon eine ganz schöne Ablaufkette, die da abgearbeitet wird. Aber keine Sorge! Das machen wir Schrittchen für Schrittchen. Auf dem folgenden Bild seht Ihr die elektronischen Komponenten in einer Huckepack-Formation. Also schön kuschelig.

Wie sieht aber die Kommunikation, die ich gerade in der Ablaufkette beschrieben habe, untereinander aus?
Werfen wir dazu einen Blick auf das folgende Bild.

Schritt 1:
Die vom Smartphone ausgesendeten Funksignale via Bluetooth werden vom Bluetooth-Shield empfangen.
Schritt 2:
Das Bluetooth-Shield leitet die empfangenen Kommandos an die serielle Schnittstelle des Arduino-Boards 1:1 weiter.
Schritt 3:
Das Arduino-Board entschlüsselt die über die serielle Schnittstelle hereinkommenden Kommandos mit Hilfe der Amarino-Bibliothek, die wir natürlich genauestens unter die Lupe nehmen werden, und wandelt sie in Steuersignale über die digitalen Ausgänge für das Motor-Shield um.
Schritt 4:
Die vom Motor-Shield über die digitalen Ausgänge des Arduino-Boards empfangenen Steuersignale werden über den Motortreiber entsprechend an die beiden Elektromotoren geschickt, die dann für die Bewegung des ArduBots verantwortlich sind.
Software
Hinsichtlich der Softwareentwicklung wird es – wie schon angekündigt – ein wenig komplexer, da wir jetzt nicht mehr den AppInventor zur Programmierung unserer App verwenden. Was benötigen wir also genau?
• Java Development Kit (JDK 6u30) oder höher
• Eclipse-Entwicklungsumgebung für Java-Developer 3.7 (Indigo)
• SDK zur Android-Entwicklung R12 oder neuer
• Amarino-Toolkit
• Treiber für das verwendete Smartphone
Sehen wir uns die Sache etwas im Detail an.
Java Development Kit
Das Java Development Kit (JDK) muss als erstes Paket installiert werden, da die Eclipse-Installation dieses voraussetzt und darauf zugreifen muss. Du findest es im Downloadbereich der Oracle-Seite [5].
Eclipse-Entwicklungsumgebung
Die Eclipse-Entwicklungsumgebung [3] ist mittlerweile zu einer eierlegenden Wollmilchsau geworden, die für viele verfügbare Programmiersprachen (Java, C/C++, JavaScript, etc.) Verwendung findet. Wir nutzen sie zur Java-Programmierung.
Android-SDK
Wenn wir eine App für ein Android-Smartphone schreiben möchten, dann ist das Android SDK [2] von Nöten. Dahinter verbergen sich eine ganze Menge an Programmen bzw. Daten, die wir benötigen. Die Installation dauert schon seine Zeit, denn es handelt sich, wie gesagt, um ein größeres Softwarepaket.
Amarino-Toolkit
Damit die Kommunikation zwischen Smartphone, also Android und Deinem Arduino-Board auch funktioniert, gibt es unterschiedliche Softwarelösungen, von denen das Amarino-Toolkit [1] wirklich gut ist. Es bietet eine Klassenbibliothek mit einer großen Anzahl von Methoden, die es Dir ermöglichen, einerseits Daten vom Smartphone an Dein Arduino-Board zu versenden und andererseits auch Daten zu empfangen, um sie auf dem Smartphone darzustellen. Das hört sich alles sehr spannend an, was es natürlich auch ist.
Smartphone-Treiber
Damit Du Deine App auch auf Dein Smartphone laden kannst, ist ein passender Treiber des Herstellers notwendig. Ich habe ein Samsung Galaxy S2 und habe die Anwendung mit dem Namen Kies installiert, das natürlich auf der Herstellerseite zum Download angeboten wird.
Installation der Software
Auf die Installation der benötigten Software möchte ich an dieser Stelle nicht weiter eingehen, denn es befinden sich zahllose Tutorials bzw. Anleitungen im Internet. Das alles hier zu erwähnen würde dem Fokus dieses Arduino-AddOns nicht gerecht. Für Fragen stehe ich natürlich gerne zur Verfügung.
Die Android ArduBot-App
Die in Eclipse erstelle ArduBot-App umfasst schon einige Dateien und die hierarchische Struktur ist ein wenig umfangreich.

Du kannst erkennen, dass ich die App für das Android 2.2 Framework entwickelt habe. Ein Blick in das Layout zeigt uns die Anordnung der Controls in der späteren App.

Wir können z.B. ein Label in der obersten Position erkennen, dass den Namen (ArduBot-Control) der App anzeigt. Darunter befinden sich die einzelnen Schaltflächen, die mit aussagekräftigen Icons versehen wurden und für die Steuerung des ArduBots zuständig sind.
Ein Fingertipp auf eine dieser Schaltflächen soll dann eine entsprechende Aktion auslösen und den ArduBot wunschgemäß steuern.
Das Amarino-Toolkit
Wie ich gerade eben schon erwähnte, ist für die Kommunikation vom Smartphone zum Arduino-Board eine zusätzliche Software erforderlich, die das Amarino-Toolkit bereitstellt. Es handelt sich dabei um einzelne Software-Komponenten, die an verschiedenen Stellen installiert werden müssen. Vereinfacht stellt sich dieses Toolkit wie folgt dar.

Da wir uns im Moment mit der Android-Entwicklung beschäftigen, wollen wir sehen, wohin die Amarino-Library installiert werden muss. Diese Library lautet zum momentanen Zeitpunkt AmarinoLibrary_v0_55.jar und bedeutet ein Java Archive-File, das in das ArduBot-Projekt mit eingebunden und dem Java Build-Path hinzugefügt werden muss.

Der Source-Code
Wenn das alles soweit konfiguriert ist, dann können wir uns der eigentlichen App-Programmierung zuwenden. Die dafür wichtige Datei lautet ArduBotActivity.java und befindet sich im src-Verzeichnis. Die Abkürzung src steht für Source und ist die Heimat des Source-Codes.

Die Hauptklasse lautet ArduBotActivity und ist von Activity abgeleitet.

Hier siehst Du auch schon einen sehr wichtigen Parameter, der die MAC-Adresse des Bluetooth-Shields verwaltet. An dieser Stelle musst Du die für Dich richtige Adresse eintragen, denn die hier gezeigte Adresse ist nur für mein Shield gültig. Vergisst Du sie anzupassen, wird es zu keinem Verbindungsaufbau bzw. zu keiner Kommunikation kommen. Das ist ein häufig gemachter Fehler! Zur Konfiguration des Bluetooth-Shields kannst Du natürlich einen Blick in mein Arduino-Buch riskieren oder Du lädst Dir von meiner Internetseite aus dem Download-Bereich das entsprechende AddOn runter.
Es trägt den Namen: Die Konfiguration des Bluetooth-Shields von ITead-Studio.
Gehen wir weiter ins Detail. Wird die App das erste Mal gestartet, kommt es zur einmaligen Ausführung des Codeblocks der onCreate-Methode.

In der roten Kartusche wird dann das Amarino-Objekt mit der MAC-Adresse des BT-Shields initialisiert, in dem die connect-Methode aufgerufen wird. Riskieren wir kurz einen Blick auf das, was passiert, wenn die App verlassen wird. Ich weiß, es ist zu früh dafür, denn Ihr wollt ja noch wissen was dazwischen passiert, doch ich zeig’s trotzdem an dieser Stelle.

Wird die App verlassen, erfolgt der implizite Aufruf der onStop-Methode, die über einen Aufruf der disconnect-Methode des Amarino-Objektes den Hintergrunddienst stoppt und die Ressourcen freigibt.
Kommen wir nun zu den Methoden, die Aufgerufen werden, wenn eine der Steuerungstasten der App angetippt wird. Sie tragen sprechende Namen, so dass die Zuordnung nicht allzu schwer fallen sollte.


Ok, Ardus! Eine gute Frage an dieser Stelle. Im res-Ordner, der die Ressourcen verwaltet, befindet sich u.a. die wichtige Layout-Datei main.xml.

Wenn wir da einmal einen Blick hinein riskieren, kommen all die Control-Elemente zum Vorschein, die die App später zur Anzeige bringen soll. Ich zeige Dir jetzt einen Ausschnitt, der den Image-Button mit dem Pfeil repräsentiert, der nach oben weist.

Anhand dieser Kette kannst Du wunderbar erkennen, wie alles zusammenhängt, wenn der Up- bzw. Forward-Button angetippt wird. Das funktioniert natürlich analog für die restlichen 3 Buttons.
Du fragst Dich jetzt bestimmt, was es mit dem Code innerhalb der gezeigten onClickButtonUp-Methode auf sich hat. Zum einen ist da die Zeile

Sie ist recht unspektakulär und gibt einfach in einem Label, das sich unterhalb der Navigationsflächen befindet, einen Text aus, der signalisiert, was zuletzt für eine Aktion angefordert wurde. Die richtig wichtige Zeile folgt darauf:

Es handelt sich dabei um eine Aufforderung an das Amarino-Toolkit, eine Nachricht über Bluetooth an Deinen Arduino zu versenden. Die sendDataToArduino-Methode ist sehr sprechend gewählt und verschickt eine Nachricht in Richtung Arduino-Board mit aufgestecktem Bluetooth-Shield. Um dem ganzen Zusammenspiel einen runden Charakter zu geben, wechseln wir auf die Arduino-Seite, denn da wird einiges passieren.
Die Arduino-Seite
Damit der Arduino die Signale aus Richtung Smartphone auch entschlüsseln kann, ist eine eigene Bibliothek erforderlich. Sie nennt sich MeetAndroid und sorgt dafür, dass sich Arduino und Android – wie der Name schon sagt – treffen können. Hast Du Die die Library [1] heruntergeladen, dann muss sie in das Library-Verzeichnis des Arduino-Installationsverzeichnisses entpackt werden.

Ist das geschehen, dann kannst Du über eine Include-Anweisung Dich dieser Bibliothek bedienen.

Damit Du das Amarino-Toolkit auf Arduino-Seite wirklich nutzen kannst, muss ein Objekt instanziiert werden. Das geschieht mit der Zeile

Von da ab hast Du die Möglichkeit, Dich der unterschiedlichsten Methoden der MeetAndroid-Klasse zu bedienen.
Der setup-Methode müssen folgende Einträge hinzugefügt werden, damit Dein Arduino sensibilisiert wird, auf die Ereignisse des Smartphones entsprechend zu reagieren.

Zuerst wird die Übertragungsrate für das Bluetooth-Shield auf 57600 Baud festgelegt. Dieser Wert ist ein Erfahrungswert und hat sich bewährt. Im nächsten Schritt werden dem MeetArduino-Objekt sogenannte Callback-Funktionen bekannt gemacht, die später noch definiert werden. Sie werden dann bei einem eintreffenden Ereignis aufgerufen und leiten die gewünschten Aktionen des ArduBots ein. Wir schauen uns das exemplarisch einfach einmal an einer einzelnen Callback-Funktion an. Was macht also die folgende Codezeile im Detail?

Die registerFunction-Methode teilt unserem MeetArduino-Objekt mit, dass es im Sketch an einer späteren Stelle eine Methode (Methode = Funktion in objektorientierten Umfeld) geben wird, die forward lautet und immer dann aufgerufen wird, wenn ein bestimmtes Ereignis eintritt. Welches Ereignis ist das? Das wird durch den zweiten Parameter definiert, der hier mit dem einzelnen Zeichen ‚f‘ festgelegt wurde. Ich zeige euch jetzt diese Methode, die dann aufgerufen wird.

In dieser forward-Methode befindet sich die eigentliche Ansteuerung des ArduBots, der über die move-Methode in Bewegung gesetzt wird.
Ich zeige Dir in der folgenden Grafik noch einmal das Zusammenspiel der einzelnen Software-Komponenten untereinander.


Hey Ardus, das ist kein Problem! Was wäre das für ein Toolkit, wenn das nicht machbar wäre. Ich zeige Dir noch einmal die folgende Methode:

Du kannst sehen, dass ich hier an der rot umrandeten Stelle den numerischen Wert 1 übertragen habe, der bisher noch nicht ausgewertet wurde und demnach keine Verwendung gefunden hat. Du kannst hier auch einen anderen Integerwert eintragen, der dann in Richtung Arduino übermittelt wird.
Mit der Codezeile

kannst Du ihn dann abrufen und weiter verarbeiten. Die getInt-Methode holt den übertragenen Wert ab und stellt ihn bereit. In der installierten MeetArduino-Bibliothek findest Du unter Examples einige nette Codebeispiele, die Dir das Verhalten verdeutlichen.
Den Download des Android-Projektes sowie des Arduino-Sketches findest Du auf meiner Internetseite im Download-Bereich.
Ich wünsche jetzt noch viel Spaß

Euer Erik

PS: Ich habe das Tutorial als Arduino-AddOn in meinem Download-Bereich abgelegt. Dort könnt Ihr es euch runterladen und ggf. ausdrucken.

Weblinks
[1] http://www.amarino-toolkit.net/
[2] http://developer.android.com/sdk/
[3] http://www.eclipse.org/downloads/
[4] http://www.komputer.de/
[5] http://www.oracle.com/technetwork/java/javase/downloads/index.html

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Highli: 24.03.2012 18:51.

24.03.2012 18:47 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur
Gehe zu:
 
Antwort erstellen
CC²-Fan-Club » Computerclub 2 » Rund um den Arduino » Der ArduBot wird mit einem Smartphone gesteuert

Impressum - Datenschutzerklärung

Forensoftware: Burning Board, entwickelt von WoltLab GmbH