Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose18:pianotilespublic:start

Projektdokumentation

Einführung

Unser Roboter kann das Smartphone-Spiel „Piano-Tiles“ spielen. Bei diesem Spiel bewegen sich in vier Spalten abwechselnd schwarze Felder vertikal über den Bildschirm zum unteren Rand. Die Felder müssen angetippt werden, bevor sie diesen erreicht haben. Wird ein Feld nicht angetippt oder wird ein weißes Feld angetippt, hat man das Spiel verloren. Die Geschwindigkeit der Felder erhöht sich mit der Zeit.

Abbildung 1: Spiel Piano-Tiles
Spiel Piano-Tiles

Idee & Ziele

Unsere Idee war es, einen Roboter zu entwickeln, der selbstständig in der Lage ist das Smartphone-Spiel „Piano Tiles“ zu spielen. Dazu interpretiert der Roboter den Bildschirm, erkennt die schwarzen Felder und tippt diese an. Verschiedene Modi des Spiels haben wir bewusst weggelassen, beispielsweise gibt es weitere Spalten mit schwarzen Feldern oder diese laufen rückwärts. Auch haben wir den Roboter nur für eine spezifische Gerätegröße entwickelt, damit das benötigte Material und der Aufwand in einem angemessenen Rahmen bleibt.

Übersicht der Komponenten

Grundsätzlicher Aufbau

Abbildung 2: Der Roboter
Der Roboter

Der Roboter besteht aus vier Helligkeitssensoren zum Erkennen und vier Hubmagneten zum Antippen der Felder. Jeweils ein Sensor verfügt über einen Finger mit dem eine der vier Spalten bedient werden kann. Im Laufe des Projekts hat sich herausgestellt, dass die Datenverarbeitung für alle Zeilen nicht durch einen Arduino bewältigt werden kann, da die Anzahl der Pins nicht ausreicht.

Wir haben folgende Bauteile verwendet:

  • 4x Hubmagnet je ca. 6 €
  • 4x Helligkeitssensor BH1750 je ca. 6 €
  • 4x Touchscreen Stift je 2 €
  • 2x Arduino Nano
  • Spannungsquelle

1. Helligkeitssensoren und Auswertung

Die erste Teillösung befasst sich mit den Helligkeitssensoren, die die Helligkeit auf dem Display während des Spiels messen. Befindet sich ein schwarzes Feld unter dem Sensor, sinkt der Helligkeitswert auf unter 100. So kann man klar zwischen schwarzen und weißen Feldern unterscheiden. Die Messergebnisse der Sensoren werden nicht durch sich verändernde Umgebungsbedingungen beeinträchtigt.

Abbildung 3: Messergebnisse der Helligkeitssensoren im seriellen Plotter
Messergebnisse der Helligkeitssensoren im seriellen Plotter

Die Messwerte der Sensoren werden durch die „WIRE.h“ Bibliothek ausgelesen. Somit gab es schon vorgefertigte Codeteile in der Bibliothek, die wir verwendet haben. Da bei einem ankommenden Feld manchmal der Finger schon zu früh ausgelöst wird, haben wir eine Blende vor den Sensoren angebracht, die ein vorzeitiges Erkennen des Feldes verhindert.

2. Ansteuerung der Finger

Abbildung 4: Hubmagneten des Roboters
Hubmagneten des Roboters

Des Weiteren musste eine stabile und schnelle Konstruktion entwickelt werden, um die schwarzen Felder anzutippen. Um die Befehle des Programms zeitgerecht und mit ausreichender Wiederholgenauigkeit auszuführen benötigen wir für jede Spalte ein „Finger“, der den Bildschirm antippt. Der von uns gewählte technische Ansatz verwendet Hubmagneten mit einer Kappe am Ende, auf die der Bildschirm reagiert. Da diese Kappen das elektrische Feld des Bildschirms beeinflussen sollen, müssen die Kappen noch zusätzlich geerdet werden. Um eine sehr stabile und optisch ansprechende Konstruktion für den Roboter zu entwickeln, haben wir die Halterung für die Sensoren und die Hubmagneten mit dem 3D Drucker gedruckt. Mit den Einstellschrauben über den Hubmagneten kann der Finger so nah wie möglich an den Bildschirm gebracht werden, um eine noch schnellere Reaktion zu ermöglichen. Der Hubmagnet muss so nicht mehr die gesamte Strecke zurücklegen. Als Alternative zu den Hubmagneten hätte man langsamere Servomotoren verwenden können, die die Felder antippen.

Gesamtkonzept & Code

Als wir nun alle Komponenten beisammen und betriebsbereit hatten, wurden Finger und Sensoren miteinander kombiniert. Um ein starkes Wackeln des Roboters zu vermeiden haben wir eine große Holzplatte als Untergrund benutzt. Für eine ausreichende Stabilität des Smartphones unter den Fingern mussten wir nachträglich ein Kabel ankleben. So hat man immer noch eine stabile Auflagenfläche, jedoch werden Vibrationen wesentlich besser abgefedert und gar nicht erst auf den Roboter übertragen. Die 12 V Stromquelle wird an zwei Kabeln im Steckbrett angeschlossen.

Abbildung 5: Anschlussplan von zwei Fingern und ihren Sensoren
Anschlussplan von zwei Fingern und ihren Sensoren
Tabelle 1: Pinbelegungstabelle
Arduino-Pin A4 A5 D2 D4 VIN GND VCC
Belegung SCL(H1 u. H2) SDA(H1 u. H2) GATE(M1)GATE(M2) 5V(A2) Addr(H1)Addr(H2)

Logischer Aufbau des Quellcodes

Abbildung 6: Skizze des Aufbaus
Skizze des Aufbaus

Der Code beginnt mit der Initialisierung der zwei Helligkeitssensoren und dem Festlegen der digitalen Ausgänge für die beiden Hubmagneten. Zuallererst wird der aktuelle Helligkeitswert des Bildschirms mit einem der Sensoren gemessen. Befindet sich dieser Wert unter dem Grenzwert wurde ein schwarzes Feld entdeckt. Gleichzeitig wird überprüft, ob seit dem letzten schwarzen Feld schon eine gewisse Zeit vergangen ist. Damit verhindert man, dass das gleiche Feld mehrfach erkannt wird. Sind alle Kriterien erfüllt, wartet der Roboter bis das Feld unter dem zugehörigen Finger ist und dieser wird ausgelöst. In einer Variablen zählt man die Anzahl der schon angetippten Felder. Von dieser Anzahl können dann alle Wartezeiten abhängig gemacht werden, um das schneller Werden der Felder zu berücksichtigen.

Quellcode Piano Tiles

Ergebnis und Diskussion

Endstand des Projektes

Bis zum Beginn des Blockkurses war der gesamte Aufbau des Roboters mit den Sensoren und Hubmagneten fertig und wir haben bereits erste Tests bezüglich der Schnelligkeit gemacht. Im Blockkurs selber konnten wir uns ganz auf die Verbesserung des Quellcodes und der Stabilität des Roboters konzentrieren und so immer höhere Ergebnisse erzielen. Auch war es vor dem Zusammenbau der Komponenten kaum möglich den Roboter zu testen, da immer alle Felder in allen vier Spalten betätigt werden müssen. So wurden alle nicht funktionsfähigen Spalten von uns bedient, was aber selten zu einem guten Ergebnis führte.

Entwicklungspotential

Der Roboter müsste in Zukunft über den Quellcode weiterentwickelt werden, da dieser das Problematischste im Projekt war. Im Laufe der Testphasen hat sich herausgestellt, dass die Komponenten mit einer enormen Geschwindigkeit reagieren. Allerdings ist der Code bei höheren Punkteständen zu langsam, um alle Möglichkeiten auszunutzen. Unsere höchsten erzielte Werte lagen im normalen Modus bei 1750, im schnelleren Modus bei „nur“ 1361. So ist es mit dem Roboter gelungen einen ziemlich hohen Punktestand zu erreichen.

Abbildung 7: Unser Roboter in Action
projektesose18/pianotilespublic/start.txt · Zuletzt geändert: 2018/11/09 11:05 von d.golovko