Archive for the ‘Umsetzung’ Category

Es ist vollbracht

Mittwoch, Juli 14th, 2010

Endlich konnte das Arduino Hopscotch Projekt fertiggestellt werden. Während der Code für das Arduino-Board schon seit längerem praktisch fertig und funktionsfähig war, bereitete Flash einige Probleme. So konnten die von Arduino gesendeten Werte zwar in Flash ausgegeben, aber nicht verarbeitet werden. Nach einigem Suchen wurde dann eine Lösung gefunden. Die ausgegebenen Werte im Arduino wurden Buchstaben zugeordnet und in Flash dann wie folgt abgefragt:

index = str.indexOf(“A”);

if (index != -1) {

}

Nachdem diese Hürde überwunden war, konnte auch die Flash Applikation recht schnell fertiggestellt werden, so dass nun ein völlig funktionsfähiges Arduino Hüpfspiel mit einer Flash-Visualisierung vorliegt.

Hier nun noch einmal eine Erläuterung zu Regeln und Funktionsweise des Arduino-Hüpfspiels.

Das Arduino-Programm ist autonom und kann auch ohne die Flash-Applikation genutzt werden. Um das Arduino Hüpfspiel zu spielen, muss der Nutzer einfach nur den aufleuchtenden grünen LED, die in den Platten eingelassen sind, folgen. Tritt der Nutzer auf eine nicht beleuchtete, falsche Platte oder betritt die mittig positionierte Platte, so leuchtetet die rote LED der mittig positionierten Platte auf und das Spiel wird neu gestartet. Auch wenn der Nutzer alle 5 Runden erfolgreich gespielt hat, wird ein Neustart durchgeführt und ein neues Spiel kann begonnen werden.

Die Flash- Applikation soll dem Nutzer helfen sich zu orientieren und nochmals visualisieren, was auf den Platten passiert. So soll es diejenigen unterstützen, die sich nicht mehr so recht an die Regeln des Kinderspiels erinnern können. Beim Spielen kann der Nutzer anhand der Flash-Visualisierung jederzeit erkennen, in welcher Runde er sich gerade befindet. Zudem wird durch blaue Fussspuren angezeigt wo, beziehungsweise auf welcher Platte, sich der Nutzer gerade befindet. Auch auf welche Platte als nächstes gesprungen werden soll, kann der Flash- Visualisierung entnommen werden: entsprechende Platten werden in einem helleren Grauton als die Übrigen dargestellt.

Hier ein Bild der Flash-Visualisierung, der Nutzer steht in diesem Beispiel in der Ausgangsposition außerhalb des Spielfeldes und soll nun auf die Platte mit der  Nummer 2 springen.

Flash Oberfläche

Insgesamt kann die Arbeit mit dem Arduino-Board als zufriedenstellend beschrieben werden. Nach einer kurzen Einarbeitungszeit kann man recht schnell und einfach Projekte mit dem Arduino umsetzen. Einzig die Limitationen durch das Board, wie beispielsweise die geringe Anzahl der Steckplätze verlangt bei größeren Projekten sicherlich das zeitaufwendige Finden individueller Lösungen. Positiv erwähnt werden kann aber die Tatsache, dass es möglich ist, Arduino mit Flash etc. zu kombinieren und so verschiedenen Medien und Proagramme in einem Projekt zu kombinieren.

Hier noch der Link zum abschließenden Screencasting:

hopscotch_screencast

Und wieder blinkt es

Donnerstag, Juni 24th, 2010

In den Hüpfplatten sind LEDs vebaut. Damit diese ihren Job auch aufnehmen können, wurde heute der Code, für die LED-Steuerung geschrieben. Es soll immer die Platte leuchten, auf die der Nutzer als nächstes treten muss. Dies ist, so hat sich in ersten Tests gezeigt, sehr hilfreich und macht zudem Spaß. Hier nun der Code, der dies ermöglicht:

if (benoetigteTaste == 2 ){
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPinx, LOW);
}

Verwendet werden die Variablen, die auch schon zum Überprüfen der richtigen Reihenfolge verwendet werden und so war der Code sehr schnell erstellt. Für jede LED ist ein solcher Code-Block angelegt.

Design von Board und Benutzungsoberfläche

Freitag, Juni 18th, 2010

Das Arduino-Hüpfspiel soll nicht nur irgendwann (hoffentlich) funktionieren, sondern auch noch gut aussehen. Und so wurde unlängst das Design der Platten besprochen und festgelegt: Um ein stimmiges Aussehen und den typischen Kinderspiel-Charakter zu erreichen, sollen die Hüpfplatten
grau oder schwarz besprüht werden. Auf jeder der behüpfbaren Platten kann dann mit Kreide die entsprechende Nummer geschrieben werden.

In einer Flash-Oberfläche soll dem Nutzer zudem die Möglichkeit gegeben werden, zu sehen, in welcher Runde er sich befindet, wo als nächstes hingesprungen werden muss und wie viele Punkte er erreicht hat.

Plattenbau

Samstag, Juni 12th, 2010

Gemeint ist nicht das aus Betonfertigteilen gefertigte Gebäude, sondern die Herstellung der trittsensitiven Felder für das Arduino Hüpfspiel. Insgesamt drei Wochenenden nahm diese in Anspruch.
Die ursprüngliche Idee, Taster für die Messung in den Platten zu verbauen, stellte sich schnell als unpraktikabel heraus: Die kleinen Taster halten einer Belastung, wie sie beim Hüpfen zustande kommt, nicht stand. Auch sind sie zu hoch, um wie geplant, in den Platten eingelassen zu werden. Ein weiteres Problen ist, dass die Kontakte der Taster auf der Unterseite angebracht sind, wodurch beim Hüpfen viel Druck auf die Lötstellen eingewirkt hätte. Nach dieser Feststellung wurden zunächst größere Taster auf ihre Tauglichkeit hin untersucht und was die Stabilität betrifft für geeignet befunden. Diese Taster waren aber deutlich zu groß.
Schnell wurde deutlich, dass eine eigene Lösung gefunden werden musste, um die Anforderungen, die das Spiel stellt, zu erfüllen.
Nach langem Durchsuchen der Werkstatt, dann ein Fund: Alte Telefonrelais. Diese wurden dann zerlegt und pro Hüpfplatte, die aus zwei Holzplatten besteht, wurden jeweils zwei flache und zwei federnde Kontakte aus den Relais eingelassen.

Die beiden Holzplatten werden durch eine dünne, schmale Leiste auf einer Seite der Platten von einander getrennt, sodass die Kontakte nicht aufeinander liegen. Gegenüber der Leiste, ist auf der anderen Seite der Platte ein Steifen Fensterdichtung aus Schaumstoff angebracht, um eine sanftes Federn der Hüpfplatten zu gewährleisten. Zudem wurde in jeder der insgesamt sechs Platten eine LED eingelassen. Fünf der Platten sind Hüpfplatten und haben eine grüne LED, eine Platte hat eine rote LED und soll vom Spieler nicht betreten werden.

Auch darüber, wie das Danebentreten beim Hüpfspiel gemessen werden könnte, wurden sich Gedanken gemacht. Dass eine vollkommene Umrandung der Hüpfplatten mit einer oder mehereren “Daneben-Platten” nur sehr schwer umzusetzten wäre, wurde recht schnell klar. Diese Platte/Platten würden sehr groß und schwer werden und im Vergleich zu ihrem relativ geringen Nutzen extrem viel Herstellungsaufwand bedeuten. Daher wurde über Alternativen zu Platten nachgedacht. Eine interessante Idee war es, einen Wasserzulaufschalter aus einer Waschmaschine an einen Schlauch anzuschließen und den beim Betreten des Schlauchs entstehenden Luftdruck zu verwenden, den Schalter umzulegen. Ein Schlauch als “Daneben-Platte” wäre leicht und flexibel gewesen und hätte sich mit Klebeband o.ä. leicht in jede gewünschte Form bringen lassen. Leider scheiterte die Umsetztung aber daran, dass kein Schlauch, der weich und dick genug war, zu finden war. Daher wird nun die Platte mit der roten LED, die im Zentrum des Hüpfspiels ihren Platz finden wird, als alleinige “Daneben-Platte” dienen.

Der große Schritt…

Sonntag, Juni 6th, 2010

Ziemlich lange wurde die Programmierung des Hopscotsch Spieles nun hinausgezögert. Doch an diesem Wochenende war es so weit, die Aufgabe wurde angepackt. In erstaunlich kurzer Zeit kam so ein Programm zustande, dass prüft, ob der Spieler die Platten des Spiels in der richtigen Reihenfolge betätigt. Einzig Feedback per LEDs etc. ist noch nicht programmiert, da der parallel zur Programmierung erfolgte Bau des Spielfeldes doch etwas langsamer voran ging als erwartet und erst die Fertigstellung der Platten erfolgen soll.

In einem mehrdimensionalen Array ist die richtige Reihenfolge der Tasten gespeichert . Hier ein Ausschnitt aus dem Code:

int ablauf [6][8] = {
{1,1, 0, 0, 0, 0, 0, 0}, // aktueller Status… aktuelle Runde, aktuelle Position!
{1,3, 4, 5, 6, 5, 4, 3}, // runde 1, usw….   erste zahl rundennr, dann zu betaetigende tasten in richtiger reihenfolge
{2,2, 4, 5, 6, 5, 4, 2},
{3,2, 3, 5, 6, 5, 3, 2},
{4,2, 3, 4, 6, 4, 3, 2},
{5,2, 3, 4, 5, 4, 3, 2}

};

Ob die jeweils betätigte Taste korrekt ist, wird, wie hier für Taste zwei, wie folgt geprüft:

if (val2 == LOW && val2 != oldVal2){
Serial.println(“zwei_1″);

int gedrueckteTaste = 2;

int runde = ablauf [0][0];
int aktuelleTaste = ablauf [0][1];

int benoetigteTaste = ablauf [runde][aktuelleTaste];

Serial.println(“es muss gedrueckt werden:”);
Serial.println(benoetigteTaste);

if(benoetigteTaste == gedrueckteTaste){
if(aktuelleTaste == 7 && runde == 5){

Serial.println(“Gewonnen! Gewonnen! Gewonnen!”);

ablauf[0][0] == 1;
ablauf[0][1] == 1;
}
else if(aktuelleTaste == 7){
ablauf[0][0]++;
ablauf [0][1] = 1;
Serial.println(“naechste Runde!”);
Serial.println(ablauf[0][0]);
}
else{
ablauf[0][1]++;
Serial.println(“naechste Taste”);
}
}
else{
ablauf[0][0] == 1;
ablauf[0][1] == 1;
Serial.println(“falsche Taste! – Neustart”);
}
}