Erklärung zum Blootooth Shield
Transcription
Erklärung zum Blootooth Shield
SEMINAR PROJEKT Team Christimantumon, ehemals „Thunder“ Das Gesamtprojekt zu unserer Aufgabe im S1 Informatik, Thema: Arduino Inhalt Spezialartikel Vorwort 1 Artikelübersicht Die Idee T. Asik, I. Bashir, C. Galazka, S. Hashimi 19.12.2013 1-2 Materialien 3 Anfänge 3 Die Handy Applikation 4 Die Verkabelung 5 Der Code – Probleme 6 Der Code – Struktur 7-8 Fazit 9 19.12.2013 SEMINAR PROJEKT Team Christimantumon VORWORT Das wichtigste bei einem so freien Projekt wie diesem liegt auf der Hand – die Frage nach einer Idee. Aus gegebenen Erfahrungen durch Herrn Dörnte im NWP Unterricht wissen wir, das hierbei das Wichtigste ist, eben jenen Grundgedanken nie zu verlieren – und immer darauf aufzupassen, das Projekt an der Idee zu orientieren, und nicht die Idee immer wieder an das Projekt anzupassen. DIE IDEE Nun müssen wir uns also eine Idee überlegen, und natürlich ist es naheliegend, einen praxisorientierten Gedanken zu verfolgen, der aber auch ein gewisses Maß an Komplexizität hinsichtlich der Informatik birgt, denn ein klassisches „wenn es dunkel wird, soll Licht angehen“ ist nun nicht mehr das, was man einen komplizierten Code nennt – das Schwierigste hierbei wäre die Syntax. Im Gegensatz zu anderen Gruppen (ich möchte keine Namen nennen, tue es aber: Pauls Gruppe) wollten wir uns also intensiv mit neuen Befehlen, Mainboards und Codes auseinandersetzen – eine Sache die noch für viel Frust sorgen sollte – aber dazu unten mehr. 1 19.12.2013 Nun mussten wir uns überlegen, was genau unser Projekt sein sollte. Nach zahlreichen Ideen filterten wir diese auf die folgenden: • Je nach der allgemeinen Dunkelheit gehen Lichter nach analogen „Stärken“ an. Sprich: Je dunkler es ist, desto heller die LED’s • Je nach Temperatur in Piep-Tönen läuft über die Lautsprecher Musik Die erste Idee wäre hinsichtlich analoger Helligkeit – im Gegensatz zu der bisher immer digitalen – eine neue Erfahrung. Bei der zweiten Idee würden wir aber den Temperatursensor benutzen, den wir vorher nie benutzt haben. Alles in allem kamen wir jedoch zu dem Ergebnis, dass diese Ideen zwar aufwändig, nicht aber kompliziert wären. Sie nähmen nur viel Zeit in Anspruch. YouTube Videos legten es nahe, dass man Bluetooth oder WLAN integriert. Kostenmäßig wäre die Wahl hier irrelevant, jedoch wird in der Praxis ein WLAN Netzwerk teuer und umständlich – Bluetooth hingegen unterstützt jedes Mobiltelefon (im Volksmund auch „Handy“). Also machten wir aus dem eben genannten „wenn es dunkel wird, soll Licht angehen“ kurzerhand „wenn mir danach ist, soll Licht angehen“. Diese Aufgabenstellung forderte sowohl Lust und Motivation im Umgang mit einem neuen Mainboard, Frustrationsbewältigungen bei der- nicht einmal Frau Kück (in Insiderkreisen „alkuinfo“) bekannten – Syntax, und das Nutzen unserer schlechten Englisch-Kenntnisse beim „ergooglen“ der Lösungen (alle im grundlegenden Englischkurs…). „Ich glaube daran, dass noch vieles möglich ist. Darauf vertraue ich, dafür arbeite ich, dafür lebe ich.“ – unbekannter Verfasser, bashimon.de.tl Dieses Zitat war leitend für das gesamte Projekt und zog sich in unserer Arbeitsweise durch ein halbes Jahr. Es war sehr wichtig, um das zu schaffen, was wir letztlich auch schafften. Sogar noch mehr – wie gesagt, unten gibt es mehr. 2 19.12.2013 MATERIALIEN Was benötigten wir? Nicht wirklich viel. 1. 2. 3. 4. 5. 6. 7. 8. Arduino Mainboard Arduino Bluetooth Board Bluetooth fähiges Endgerät, hier: Mobiltelefon Computer inkl. Bluetooth Treiber Diverse Kabel LEDs RGB – LEDs Applikation, die Arduino Bluetooth unterstützt Ein Handy, in diesem Fall ein Android Endgerät, brachten wir selbst mit. Eine passende Applikation wurde ebenso gefunden (siehe unten). Lediglich die Treiber mussten in jeder Doppelstunde neu installiert werden. ANFÄNGE Zu allererst mussten wir, die wir bereits am E-Truck Projekt teilgenommen haben Soliaman, Turan und Imon – Christian Arduino und seine eigenwillige Programmoberfläche erklären. Dies gestaltete sich relativ einfach, da man mit grundlegenden Programmierkenntnissen die imperative Sprache sehr schnell erlernen kann. Natürlich waren wir ehemaligen E-Trucker auch keine Meister unseres Handwerks, und mussten mit kleinen Einstiegsprojekten (z.B. wenn es dunkel wird, soll eine LED angehen) unsere Kenntnisse auffrischen. Dies gestaltete sich ebenso entspannt. Viel Zeit investierten wir in Hilfeleistungen für die anderen Gruppen, da z.B. die Mädchengruppe keinerlei Wissen über das Thema hatte. Dies taten wir gerne, da wir davon ausgingen, dass wir unser Projekt „eh“ schaffen würden. Dies stellte sich später als schlicht naiv heraus, trotzdem erreichten wir unsere Ziele. Man hilft ja gerne. - 3 I. Bashir, S1 19.12.2013 DIE HANDY APPLIKATION Damit uns Bluetooth Modul und Bluetooth Endgerät überhaupt erst einmal nutzen, brauchten wir eine App, die über entsprechende Möglichkeiten verfügt. Wie rechts zu sehen, war dies schon eine Schwierigkeit. Erst die sechste angezeigte App hatte die Funktionen die wir brauchten. Die anderen wurden aber in den YouTube Videos benutzt, sodass wir uns wegen ihrer Popularität stundenlang daran setzten, sie zum Laufen zu bringen. Wie gesagt, die Apps waren alle nichtssagend und vollständig benutzerunfreundlich – letztlich funktionierte aber die App „Bluetooth SPP“. BLUETOOTH SPP Die App Bluetooth SPP hatte grundlegende Funktionen, die aber völlig ausreichend waren. Sie erstellte eine Verbindung zwischen Bluetooth Board und Handy, was relativ einfach ging. Als Bluetooth-Kopplung Passwort voreingestellt war die 1234. Wie links zu sehen ist das Menü eine reine „ClickMe“ Angelegenheit: Man hat die Möglichkeit, bis zu 12 Buttons zu definieren. Man kann einen Namen für die Buttons einstellen und einen Wert der übergeben wird – diese müssen nicht identisch sein! (siehe Foto) Sprich: Der Button kann statt ClickMe (wie zu sehen) als Inhalt „cyan“ haben, aber, wie bei uns, den char c übergeben, welcher in einer if/else Bedingung das Anschalten der grünen und blauen Lampe auslöst – dies ergibt türkis/cyan. Dementsprechend kann man sagen: Die Suche nach einer passenden Applikation war zwar schwer, aber verlief schließlich erfreulich. 4 19.12.2013 DIE VERKABELUNG Das aller erste, was zu tun ist, ist das Zusammenbauen des Mainboards mit dem Bluetooth Board. Dies erfolgt auf die einfachste Art und Weise, die es bei der Hardware gibt: Das eine Board wird schlicht Das aufgesetzte Bluetooth Board auf das andere aufgesetzt. (siehe rechts) [Zitieren Sie hier Ihre Quelle.] Die Verkabelung als solche insgesamt ist aber sehr einfach, da die Schwierigkeit – im Gegensatz zu den meisten Gruppen – gar nicht hardwaregeschuldet, sondern softwarebedingt ist. Daher ist das rechts zu sehende Anbauen der LED eine Verkabelung, die selbst ein Erstklässler hinbekommt. Die Schwierigkeit Verbindung mit einer LED ergibt sich daraus, diese mit per Bluetooth zu steuern. Selbst mit einer RGB-LED ergibt sich [Zitieren Sie hier Ihre Quelle.] noch keine informationstechnische Meisterleistung, es ist (fast) genauso einfach. Eine Besonderheit war, dass wir nicht Plus mit Pin verbundet haben, sondern Minus mit dem Pin. Daraus ergibt sich das Problem, dass die Befehle „high“ und „low“ umgekehrt agieren: Bei „low“ geht die Lampe nun an, bei „high“ Verbindung mit einer RGB-LED aus. In der Prodezur umgingen wir diese Problematik. (siehe rechts) 5 [Zitieren Sie hier Ihre Quelle.] 19.12.2013 DER CODE Bluetooth? Vor allem – wie funktioniert das? Beim Code gab es erst einmal eine grundlegende Schwierigkeit, die da war: Wie verbindet man eine Handy-Applikation mit einem Mainboard? Letztlich schafften wir es vor allem durch Google, diverse Videos zu durchstöbern, in denen die Funktionalität an sich schon einmal bewiesen wurde. Jedoch gab es wenige Videos, denen ein Code beilag; und keines, dem ein bei uns funktionierender Code beilag. Wir vergeudeten so Stunden um zu dem Ergebnis zu gelangen: So wird das nichts. Letztlich kamen wir zu dem Schluss, dass ein Beispiel-Sketch herhalten mussten, wobei es erst einmal einen zu finden galt. Doch dies war einfacher als gedacht: In den Arduino Foren fanden wir einen funktionsfähigen Code, den wir größtenteils so übernehmen konnten. Nach einigem Probieren und kleineren Änderungen funktionierte die Kommunikation, die Eingabe beim PC erzeugte eine Ausgabe auf dem Handy und anders herum. Die Aussage „wir konnten ihn größtenteils übernehmen“ zielt auf eine gewisse Sache ab: Wir mussten die Kommunikationsrate des Serial.begin herausfinden, die nun nicht mehr 9600 war. Es gab ca. 11 verschiedene Möglichkeiten (siehe Serieller Monitor). Durch Herumprobieren wurde es dann die „38400“. Dies hängt vom BlueTooth Board ab, bei Jagmits Gruppe waren es „115200“. Ein anderes Problem: Mit Arduino Mega klappt es nicht – zumindest nicht mit dem Board was wir benutzten. Der Hardware Schuld zu geben ist immer heikel in der Informatik – und deswegen versuchten wir vergeblich stundenlang, den Fehler im Code zu suchen – wo er ausnahmsweise mal nicht lag. Dies kostete uns viel Zeit, letztlich klappte aber der Versuch mit dem Uno Board. Das letzte Hindernis war das Verständnis vom Code. Ich hoffe, wir haben ihn vollständig verstanden und erklären im Folgenden nun, wie wir ihn verstanden haben – alles durch reines Probieren und Experimentieren. 6 19.12.2013 DER CODE : DIE STRUKTUR Der Beginn des Codes ist wie immer das Implementieren von Bibliotheken und die darauffolgende void setup(). Wir haben die Variablen RxD bzw. TxD mit den Zahlen 6 und 7 definiert, da dies die Pin-Nummern sind. Bei SoftwareSerial blueToothSerial wird ein BluetoothObjekt erstellt, das für die weitere Verbindung benötigt wird. In der void setup gibt es eine Besonderheit, hier wird die Prozedur, die unten definiert wird, “setupBlueToothConnection();“ kurzgefasst. Desweiteren beläuft sich der Serial.begin nun nicht mehr auf die altbekannten 9600, sondern auf 38400. Zu der Bedeutung dieser Zahlen finden wir nichts Verständliches im Internet, lediglich bekannt ist, dass diese Zahl abhängig von der Art und Weise der Kommunikation zwischen zwei Geräten ist. Code ist geschnitten Die Kommunikation erfolgt über die digitalen Pins 6 (RxD) und 7 (TxD). Außerdem deklarieren wir die Pins 9, 10 und 11, an die wir die RGB LED angeschlossen haben. In der loop definieren wir den char (ein Datentyp) recvChar. Der könnte jeden Namen haben. In einer endlos-Schleife wird eine Möglichkeit genutzt, die zum Üben und Lernen der Kommunikation wichtig war. Denn wenn man auf dem Handy im Programm etwas schreibt, wird es im seriellen Monitor des Computer-Programmes angezeigt. Andersrum funktioniert es genauso – dies hinzubekommen war der wichtigste und schwierigste Teil des ganzen Codes! Denn ab hier mussten wir die Ausgabe eines Wortes einfach nur zu einer Ausgabe eines „char Wort“ umdeklarieren. Ein kleiner Randkommentar dient dazu, die Pins den jeweiligen Farben zuzuordnen (siehe Code). Hier kommen wir nun zum eigentlich interessantesten Teil: Die Bedingung „if recvChar==‘a‘“ ist nämlich die Brücke zum Handy. Der char recvChar beschreibt nämlich die value, also den Wert, der vom Handy geschickt wird. Bei unseren Programmeinstellung steht a für das Ausschalten aller drei Lichter. Unterhalb hiervon, hier geschnitten, sind solche Bedingungen für jede mögliche Farbe zu finden. Wie oben bereits gesagt, sind durch das Programm 12 verschiedene Befehle möglich, von denen wir 8 nutzen: die Grundfarben, die Komplementärfarben, sowie die Befehle „aus“ und „Party“ (buntes Mischen durch einen Zufallsgenerator). 7 19.12.2013 CODE STRUKTUR: TEIL 2 In der benötigten, von uns setupBlueToothConnection genannten, Prozedur definieren wir zu allererst als Kommunikationsrate, so wie oben auch, 38400. Würde, und das ist wichtig, keine Verbindung bestehen, so wird hier nichts passieren. Falls jedoch eine Verbindung besteht, werden auf dem Handy die blueToothSerial.print’s ausgegeben, und auf dem PC dann die übliche Serial.println. Dann gibt es noch den sogenannten Flush Befehl, der eine essenzielle Bedeutung für den Code hat. Man braucht ihn immer dann, wenn: 1. Daten verschickt werden und man sich absolut sicher sein will, dass alle Daten vollständig am anderen Ende ankommen. 2. So viele Daten verschickt werden, dass eventuell zu wenig Speicher reserviert ist. Dann sorgt dieser Befehl dafür, dass die Kapazität des Outputs nie überschritten werden kann, und ggf. den reservierten Speicher erweitert. Eine Übersetzung aus dem Englischen von Bashimon.de.tl ohne Gewähr auf Richtigkeit aus sehr schwierigem Englisch Hier ist noch eine sogenannte Prozedur zu sehen, die unserem (aber nicht ihrem…) Verständnis nach eine Art Variable beschreibt, in die man verschiedene Befehle tun kann, um sich diese langen Codes zu ersparen. Dadurch haben wir in der loop, bei diesem Beispiel, statt dem Code „digitalWrite(9, HIGH);“ dieselbe Funktion durch ein „aus(x);“. Dies dient zum einen (in diesem Fall aber nicht großer) Code-Ersparnis, vor allem aber der Lesbarkeit für Dritte. Auch dies ist wieder geschnitten. Auch hier haben wir erst einen Anfängerfehler gemacht, und für alle 6 Möglichkeiten (die Pins 9, 10 und 11 in HIGH und LOW) Prozeduren erstellt. Variablen vereinfachen dies aber ungemein; so haben wir nur 2 Prozeduren. Wie oben bereits erklärt, ist durch die Verkabelung „low“ anschalten, und „high“ ausschalten. Durch diese Nutzungsweise sorgt aus(9); für das Ausschalten des Lichtes auf dem neunten Pin. Dies ist die vollständige Erklärung unseres Codes in seinen Bestandteilen, bei der wir Duplikationen vermieden haben. 8 19.12.2013 FAZIT ZU EINEM PROJEKT, DAS EIGENTLICH ZUM SCHEITERN VERURTEILT WAR Der Untertitel dieses Fazits mag banal klingen, doch eigentlich war es so: Allen voran Imon ging davon aus, dass dieses Projekt nie funktionieren wird. Ein halbes Jahr lang im Vorjahr scheiterten Turan und Imon bereits an der Umsetzung dieses Projekts. Aber wie eingangs erwähnt: „Ich glaube daran, dass noch vieles möglich ist. Darauf vertraue ich, dafür arbeite ich, dafür lebe ich.“ – unbekannter Verfasser, bashimon.de.tl Dieses Zitat ist nicht einfach irgendeine x-beliebige Aussage. Es wurde in diesem Projekt wahr und hat sich für allen voran mich, aber eigentlich uns alle bestätigt. Eine Sache die zum Scheitern verurteilt war, funktionierte, und so haben wir gemerkt, was es heißt, an die eigenen Frustrationsgrenzen zu gehen und das vermeintlich „Unmögliche“ zu schaffen. Frau Kück schafft es, uns angemessen zu motivieren und wir haben ein Ergebnis, bei dem wir im Nachhinein alle stolz sind, es präsentieren zu können. Wir haben Erkenntnisse gesammelt, die noch vielen anderen Gruppen, die mit BlueTooth arbeiten wollen, eine große Unterstützung sein können. Durch diese Informationen können andere Gruppen Schwerpunkte bei einer Aufgabe setzen und nicht bei dem „Wie geht das überhaupt?“. Viel Arbeit wurde anderen nun abgenommen. Als Letztes möchte ich ein Bild anfügen, das die Funktionalität des Programmes zwar nicht beweist, aber sie zumindest zeigt - für weiteres stehen wir gerne im Jahr 2014 zur Verfügung. Ein Video ist der Datei angefügt. Wir hoffen auf ein erfreuliches Seminar im S3, um unsere erlangten Kenntnisse in der Arbeitsweise mit der Informatik einbringen zu können. - Turan Asik, Imon Bashir, Christian Galazka, Soliaman Hashimi Ein funktionierendes Programm [Zitieren Sie hier Ihre Quelle.] 9