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