Limbo - was heutzutage viele als beliebtes Partyspiel kennen, ist ursprünglich ein traditionell karibischer Begräbnistanz. Ab dem 2. Weltkrieg wurde er dann zu einer Touristenattraktion für amerikanische Soldaten und ist heute, wie schon gesagt, als Partyspiel bekannt. Dabei geht es darum, unter einer Stange hindurchzugehen und dabei in die Knie zu gehen, ohne dass Schultern und Knie den Boden berühren.
Und genau dieses Partyspiel soll unser Roboter mit einem Spielen können. Die Besonderheit daran ist jedoch: Die Stange ist gar keine Stange, sondern eine unsichtbare Schranke.
Das Ganze besteht aus drei Grundgerüst-Teilen: Der Kiste am Boden, Der Schiene mit dem Fahrstuhl, in dem der Sensor sitzt und und dem Motor, welcher den Fahrstuhl bewegt und ganz oben auf der Stange sitzt. Das Ganze wird mit etwa 1,50m Abstand mit dem Sensor zur Wand platziert. Das Fundament, die Kiste, hat dafür extra Räder.
Das Limbo-Spiel funktioniert dann folgendermaßen: Mit einem verschiebbaren Abstands-Sensor ermittelt der Roboter, ob die 1,50m, die er zur Wand hat, unterschritten werden, also ob die Person das Limbo-Spiel nicht geschafft hat. Mit einem Knopf lässt sich die Schwierigkeit erhöhen, also die unsichtbare „Stange“ herunterfahren. Mit einem anderen Knopf lässt sie sich wieder hochfahren, wobei der Roboter errechnet, wie viele Stufen vorher heruntergefahren wurden. Falls man die unsichtbare Schranke durchbricht, wird man mit einem lauten, unangenehmen Piepston bestraft. Je nach Knopfdruck lässt sich also die Schwierigkeit und die Dauer des Spiels selbst bestimmen, was eine abwechslungsreiche Nutzung des Roboters ermöglicht.
Dabei mussten wir einige Aufgaben lösen, die teilweise viel Zeit in Anspruch nahmen. Vor allem die Konfiguration des Motors sowie die Statik des Gerüsts machten uns zu schaffen. Dadurch waren wir gezwungen einige Ideen zu verwerfen und haben bewusst darauf verzichtet noch mehr Bestrafungen einzubauen. Auch die Dekoration der Box und die Höhenverstellung durch Schreien waren für uns sekundäre Prioritäten, die wir leider nicht mehr umsetzen konnten.
Das Gerüst besteht aus einer Kiste auf Rädern, die den Arduino sowie das Steckbrett beherbergt und einer Metallstange, an der der Fahrstuhl hoch- und herunterfährt. Die Räder sind essenziell, um den Roboter fortzubewegen, damit nicht nur an einer Stelle gespielt werden kann. Eine besondere Herausforderung war es, die Stange im 90° Winkel an der Box zu befestigen, sodass der Sensor einwandfrei funktioniert. Dies haben wir mithilfe eines Winkels und Heißkleber jedoch erreicht. Zudem haben wir sehr lange überlegt, wie wir das Ganze konstruieren. Letztendlich haben wir uns darauf geeinigt, eine 3D gedruckte Spule oben an der Stange zu befestigen und den Motor daran zu stecken. An den Faden, welcher sich um die Spule wickelt, wird der Fahrstuhl hoch und herunter bewegt. Da das Holzteil, an dem der Sensor befestigt ist, sehr leicht war, ist der Fahrstuhl deshalb nicht gut hinuntergefahren. Um dieses Problem zu lösen, haben wir mehrere Muttern als Gewicht mit einer Schnur am Fahrstuhl befestigt.
Für die Distanzmessung haben wir einen Ultraschallsensor verwendet. Dieser sendet einen Impuls, welcher reflektiert wird. Nach einer Zeit empfängt der Sensor diesen Impuls wieder und durch die Zeit lässt sich eine Distanz berechnen. Dies geschieht mithilfe der Rechnung des Wertes der Dauer geteilt durch 58, was eine Recherche ergeben hat. Damit dies einwandfrei funktioniert, muss der Roboter sich vor einen geraden Oberfläche befinden, die maximal 2,20m entfernt ist. Die Distanz wird dann auf dem Seriellen Monitor ausgegeben. Falls der Wert der Distanz nicht im Bereich des möglichen liegt, also wenn der Wert entweder 0 oder über 220 wäre, wird eine Fehlermeldung ausgegeben.
Falls die gemessene Distanz 90cm unterschreitet, wird ein unangenehmer Ton vom Buzzer ausgegeben, der anzeigt, dass die Aufgabe nicht geschafft wurde.
Die Aufgabe des Buzzers ist es, lautstark anzugeben, falls die Person das „Level“ nicht geschafft hat. Dafür haben wir uns eine besonders unangenehme Frequenz herausgesucht. Denn laut einer im Journal of Neuroscience veröffentlichten Studie empfinden Menschen Töne im Frequenzbereich von 2.000 bis 5.000 Hertz als besonders unangenehm. Dieser Bereich sei auch der Frequenzbereich, in dem die menschlichen Ohren am empfindlichsten sind. Der Buzzerton soll nämlich auch eine Art kleine Bestrafung darstellen für die Person, die es nicht geschafft hat. Um ein kleines Easteregg in unserem Projekt zu verstecken und auf das Entstehungsjahr des Roboters anzuspielen, haben wir eine Frequenz von 2025 Hertz gewählt.
Um ein fortschreitend schwierigeres aber trotzdem noch spaßiges Spiel zu haben, haben wir uns dafür entschieden, dass die Sensor-Limbostange nur dann herunterfahren soll, wenn die Spielenden die momentane Stufe geschafft haben. So nutzen wir einen einfachen Taster, um zu kommunizieren, dass nun die Schwierigkeit erhöht werden soll. Das ermöglicht den Spielenden die individuelle Kontrolle und so mehr Spielmöglichkeiten.
Vom Roboter wird ständig der Wert des Pins, an dem der Geschafft-Knopf angeschlossen ist, ausgelesen. Dieser beträgt so lange den Wert „0“, bis der Knopf gedrückt wird und so der Wert „1“ ausgelesen wird. Sobald dies passiert, ertönt ein Ton und signalisiert den Spielenden, dass jetzt der Fahrstuhl vom Motor um eine Umdrehung heruntergelassen wird. Danach kann das Spiel in der schwierigeren Stufe fortgeführt werden.
Eine recht große Herausforderung, auf die wir im ganzen Prozess gestoßen sind, war das Ingangsetzen des Motors. Dafür haben wir so gut wie alle Arten von Motoren, die uns zur Verfügung standen, einmal ausprobiert, jedoch schien nichts zu laufen. Recht nah dran an der Lösung waren wir, als wir einen Schrittmotor mit einem passenden Treiber probiert haben. Diese Treiber haben jedoch eine kleine schraube, die mit einem Potentiometer verbunden ist, welcher durch Drehen der Schraube den Stromfluss passend einstellt, denn ein Treiber kann für verschiedene Motoren verwendet werden. Um zu berechnen, wie weit man diese Schraube drehen muss, muss man zunächst den maximalen Nennstrom des Motors wissen. Dieser lag bei unserem Modell SY35ST26-0284A bei 0,28 Ampere. Durch messen des Referenzstroms kann nun der gewünschte Strom IMAX eingestellt werden. Bei unserem Treiber A4988 haben wir nun die passende Formal angewandt: VREF= 8⋅IMAX⋅RCS. RCS ist dabei der eingebaute Widerstand des Treibers, welcher bei uns bei 0,05 Ohm lag. Also ergab sich die Formel: VREF = 8⋅0,28A⋅0,05Ω = 0,112V. Um nun diesen Referenzstrom mit der Schraube passend einzustellen, muss man die Spannung zwischen Minuspol und Potentiometer messen. Gleichzeitig dreht man die Schraube, bis der passende Referenzstrom angezeigt wird.
Jedoch hat nach der ganzen Recherche und des Drehens von vielen Schrauben der Motor immer noch nicht funktioniert. Wir mussten also unsere Strategie ändern und andere mögliche Fehlerquellen ausschließen. Dafür haben wir Motoren ausprobiert, welche zwar weniger stark sind, aber auch weniger Kabel, Potentiometer und Anschlussmöglichkeiten haben, um in diesem Bereichen mögliche Fehlerquellen zu minimieren. Diese Strategie schien zu helfen, denn wir haben es endlich geschafft, einen Motor zum Laufen zu bringen, und zwar den Stepper-Motor 28BYJ-48, welcher nur wenige Kabel und kein Potentiometer aufweist und zudem keine externe Stromquelle außer den Arduino benötigt. Trotzdem reicht er für unsere Zwecke aus.
Nach dem Ende des Spiels muss vor erneutem Spielen der Fahrstuhl wieder nach oben in die Ausgangsposition gefahren werden. Um dies möglichst einfach umzusetzen, haben wir einen Reset-Knopf eingebaut. Nach dem Drücken dieses Tasters ertönt ein kurzer Ton und die Spule beginnt sich wieder aufzuwickeln. Um wieder in die Ausgangsposition zu fahren, haben wir beim Geschafft-Knopf einen Zähler einprogrammiert, der zählt, wie oft dieser Knopf gedrückt wurde, also wie viele Umdrehungen der Fahrstuhl nach unten gefahren ist. Nach betätigen des Reset-Knopfes fährt der Motor den Fahrstuhl dann exakt so viele Umdrehungen wieder nach oben. Danach wird der Wert des Zählers wieder auf „0“ zurückgesetzt.
Außerdem muss man leider manuell das Gegengewicht des Fahrstuhls anheben, da der Motor anderweitig nicht genügend Kraft hat. Als Lösung, um den Motor nicht zu belasten, ihn aber trotzdem verwenden zu können, sind wir den Kompromiss eingegangen, dass man immer darauf achten muss, erst das Gewicht manuell anzuheben und danach den Reset-Knopf zu betätigen.
In der folgenden Tabelle ist dargestellt, welches Bauteil über welchen Pin am Arduino angeschlossen ist.
Bauteil | Funktion | Pinnummer |
---|---|---|
Ultraschallsensor | Triggerpin | 6 |
Echopin | 2 | |
Steppermotor | IN1 | 8 |
IN2 | 9 | |
IN3 | 10 | |
IN4 | 11 | |
Buzzer | 3 | |
Geschafft-Knopf | 4 | |
Reset-Knopf | 5 |
Nach einem Semester Arbeit ist unser Roboter an einem Endpunkt angelangt, an dem wir stolz auf das Ergebnis sein können. Das Limbo-Spiel läuft flüssig und ist sehr anpassungsfähig an vielen verschiedenen Oberflächen einsetzbar. Zum Spielen benötigt man keine freie Wand, sondern es reicht eine möglichst gleichmäßige Fläche, wie ein Schrank oder eine verschlossene Tür. Wir konnten den Roboter möglichst platzsparend umsetzen. Dies zeigt einen großen Fortschritt im Vergleich zu unseren ersten Konzepten, mit denen wir auf viele weitere Probleme gestoßen wären. Außerdem konnten wir so den unkomplizierten Transport möglichst gut gewährleisten.
Unser Roboter besitzt weiterhin Probleme mit Verbesserungsmöglichkeiten, sowie Erweiterungsmöglichkeiten. Ein Aspekt, der leider nicht so funktioniert wie gewünscht, ist die Erreichbarkeit der Knöpfe. Da wir die Verkabelung auf dem Steckbrett gelassen haben und einfache Taster verwenden, sind sie bisher nur über das Drücken auf dem Steckbrett erreichbar. Dies ist leider etwas kompliziert und verringert den Spielspaß leicht. Eine Verbesserungsmöglichkeit wäre längere Kabel an die Knöpfe zu löten und diese so an einem benutzerfreundlicheren Ort anzubringen. Dazu hat uns leider die Zeit gefehlt.
Ein weiterer Aspekt ist, dass unser gewählter Motor nicht die Kraft hat den Fahrstuhl mit Gegengewicht hochzuziehen und wir so immer manuell das Gewicht anheben müssen, bevor sich die Spule aufwickeln kann. Um dieses Problem zu lösen, benötigt unser Projekt einen anderen Motor, so, wie wir es auch anfangs geplant hatten. Leider hatten wir viele Komplikationen mit dem Anschließen und zum Laufen Bringen der verschiedenen Motoren und konnten bis zum Ende nur mit unserem jetzigen Motor gut arbeiten.
Eine zusätzliche Verbesserungsmöglichkeit, die wir aus Zeitgründen hinten angestellt und nicht mehr geschafft haben, ist, dass unser Arduino nicht an eine externe Spannungsquelle angeschlossen und so nur über den Computer betreibbar ist.
Die nächsten Erweiterungsmöglichkeiten für unseren Roboter wären weitere Bestrafungen sowie Kombinationen dieser. Zurzeit besitzt unser Roboter nur die Bestrafung durch einen unangenehmen Ton, doch seit der Projektplanung haben wir viele weitere Ideen. Dazu zählt beispielsweise eine Bestrafung durch Wasser, die Bestrafung durch Abschießen von Papierkügelchen oder Nerf-Pfeilen oder auch eine Voraussetzung zum Weiterspielen einzubauen.
Das führt uns gleich zu den nächsten Erweiterungsmöglichkeiten, und zwar dem Einbau verschiedener Spielmodi. Mit unserer jetzigen Lösung durch den Geschafft-Knopf kann man sich gut individuelle Spielmodi ausdenken und die Schwierigkeit an die Spielenden anpassen, doch wir haben noch viele Erweiterungsvorschläge, um das Spiel noch spannender zu gestalten. Zum einen hatten wir Ideen für verschiedene Modi durch die Bestrafungen. Beispielsweise wäre ein Modus mit zufälliger Bestrafung oder ein Modus mit ansteigender Anzahl bzw. Dauer der Bestrafungen je nach Anzahl der Niederlagen denkbar. Eine andere Idee war, die Möglichkeit einzubauen die Schranke sichtbar zu machen für ein einfacheres Spiel. Sonst könnte man das Spiel auch mit einer einstellbaren Zeitbegrenzung spaßiger gestalten. Der Modus, die Höhe der Schranke durch Schreien vor dem Spiel einstellen zu müssen, war lange auch geplant und eine gute Erweiterungsmöglichkeit.
Alles in allem sind wir trotz der noch bestehenden Probleme zufrieden mit unserem Endergebnis und freuen uns auf ein spaßiges Spiel mit unserem Limbo-Roboter Lim-BOT.