Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose17:ooochnoeoeoepublic:start

Projektdokumentation Oooch Nööö

Überblick

„Oooch Nööö“ ist ein Roboter, der veschiedene Aufgaben erledigen kann, die seine Laune heben oder senken können. Seine Hauptaufgabe ist es „4-Gewinnt!“ zu spielen. Wenn seine Laune zu tief sinkt, schaltet er sich ab.

Team: Sandor Adam, Jakob Nagl, Max Biermann, Felix Engelke, Markus Utke







Einleitung

Der Roboter „Oooch Nööö“ soll zwei verschiedene Aufgaben eledigen können: Ein zweistimmiges Lied über zwei Piezos wiedergeben und möglichst intelligent „4-Gewinnt!“ gegen einen Menschen spielen.
Welche Aufgabe gestartet werden soll, wird vom Nutzer mit Knöpfen ausgewählt. Der Roboter soll nach einem gestarteten Spiel zunächst das Spielfeld leeren. Danach soll er einen Einwurf in das Spielfeld ohne zusätzlichen Knopfdruck des Nutzers erkennen und dann dem Nutzer seinen eigenen Zug mitteilen. Das Einwerfen der Spielsteine für den Roboter muss der Nutzer übernehmen. Außerdem werden schlechte Tipps für den Nutzer gegeben, wenn dieser an der Reihe ist. Die Spielzüge des Roboters und die Tipps sollen über eine Sprachausgabe ausgegeben werden.
Außerdem soll der Roboter eine zweistimmige, möglichst nervtötende Melodie über zwei Piezos ausgeben können, wenn er den entsprechenden Befehl erhält.
Der Roboter soll eine Laune haben, die sich senkt, wenn der Nutzer gut spielt, bzw. gewinnt und hebt, wenn der Nutzer schlecht spielt, verliert oder er den Song spielen darf. Wenn der Nutzer einen der schlechten Tipps befolgt steigt die Laune ebenfalls. Die Laune wird dauerhaft über eine LED-„Ampel“ angezeigt. Wenn die Laune zu schlecht wird, beendet der Roboter das noch nicht beendete Spiel, leert das Spielfeld und schaltet sich ab. Während des Spiels sollen über die Sprachausgabe verschiedene Kommentare in Bezug auf die Laune und das Spielgeschehen abgegeben werden können.


Umsetzung

Um bei der Entwicklung der Software unabhängiger zu sein und nicht zu sehr auf Ressourcenmanagement achten zu müssen, haben wir den Roboter in drei Bestandteile zerlegt, welche jeweils auf eigenen Arduinos laufen:

  • SongBot mit zwei Arduinos und zwei Piezos für die zweistimmige Wiedergabe
  • BrainBot mit Knöpfen zur Aufgabenauswahl, LEDs zur Launenanzeige, Servo zur Spielfeldleerung und Lautsprecher für die Sprachausgabe
  • 4GewinntBot mit dem Spielfeld, den selbstgebauten Lichtschranken und der „Intelligenz“ zur Berechnung der Spielzüge

Diese sind lediglich über Kommunikationskabel verbunden und konnten dadurch unabhängig voneinander entwickelt und vor allem einzeln getestet werden .

Besonderes Augenmerk lag auf der Intelligenz des 4GewinntBots und der Erkennung eines Einwurfs über die Lichtschranken. Bewusst weggelassen wurde das eigenständige Einwerfen von Steinen, da dies sehr viel Aufwänd für nur wenig Nutzen gewesen wäre.

SongBot

Ziel war es, den SongBot über zwei Piezos eine zweistimmige Melodie spielen zu lassen. Um Redundanz im Code zu verhindern wurde eine Klasse Song geschrieben, welche bei der Initialisierung Noten erhält. Dann muss lediglich in der loop-Funktion die play-Funktion des Song-Objekts aufgerufen werden um die entsprechende Stimme zu spielen. Nach dem Testen der ersten Stimme ist das Hauptproblem aufgetreten: Ein Arduino Nano kann hardwaretechnisch nicht zwei verschiedene Töne gleichzeitig mit der tone-Funktion ausgeben.

Wir beschlossen, die zweite Stimme auf einen zweiten Arduino (BassBot) auszulagern, wofür ein wenig Kommunikation in Richtung des BassBots nötig war. Da die Song-Klasse nur für zwei Stimmen von einem Arduino einen wirklichen Vorteil bringt, wurde die zweitstimme simpler implementiert. Die Kommunikation läuft über zwei digitale Pins pro Arduino. An dem einen liegt eine 1 an, wenn der Song gespielt werden soll, sonst eine 0. Über den anderen wird zur Taktsynchronisation der Takt der abgespielten Erststimme gesendet. Dazu wird im Takt abwechselnd eine 1 und eine 0 angelegt.

Für die Kodierung der Notenabfolge orientierten wir uns an Gitarrensaiten und einer im Intenet gefundenen Gitarren-Tabulatur. Ein Array mit den Frequenzen der Noten, beginnend mit der tiefen E-Saite wurde erstellt. Danach wurden sechs Pointer E, A, D, G, B, e, entsprechend der Standartstimmung einer Gitarre auf die entsprechende Stelle des Array zeigend erstellt. Nun konnte halbwegs übersichtlich und ohne zu viele Variablen für einzelne Noten die Tabulatur in Code übertragen werden. Die Frequenz eines Zupfens der D-Saite im Bund 4 wird beispielsweise durch das Auslesen des Pointers D+4 bestimmt. In einem zweiten Array werden die zu den Noten gehörenden Längen gespeichert, welche ebenfalls aus der Tabulatur erkenntlich werden.

Im Video kann man hören, wie der Song gespielt wird und sehen, dass die Laune des Roboters dadurch steigt.

Bauteile
  • 2 Arduinos
  • 2 Piezos
  • 1 Steckplatine
Pinbelegung
Pin Funktion
SongBot BassBot
2 An/Aus Signal an BassBot An/Aus Signal von SongBot
3 Taktsignal an BassBot Taktsignal von SongBot
5 Piezo Piezo
12 An/Aus Signal von BrainBot


BrainBot

Die Aufgaben des BrainBots sind die Detektion eines Knopfdrucks, die Launenanzeige über die LEDs, die Verwaltung der Laune, die Kommunikation mit den anderen Arduinos, die Steuerung des Servos zur Spielfeldleerung und das Kommentieren des Spielgeschehens und der Laune über die Sprachausgabe.

Der Aufbau der Knöpfe und der LED stellten keine größeren Hürden dar. Der Servo wurde so programmiert, dass er das Spielfeld leicht nach vorne zieht, sodass die Steine aus dem Spielbrett fallen. Um zu garantieren, dass alle Steine entfernt werden wird das Spielfeld kurz „geschüttelt“. Für die Laune wurde im Programm eine Variable erstellt, die sich je nach Ereignis hebt oder senkt. Sobald sie auf null steht wird der Servo aktiviert, danach ist ein sehr großes Delay eingebaut worden, damit der Roboter auf nichts mehr reagiert, was ein Ausschalten simulieren soll.

Im Video ist zu sehen, wie die Züge des Roboters mehrmals falsch ausgeführt werden, weswegen seine Laune sinkt und das Spiel abgebrochen wird:

Sprachausgabe

TODO: Jakob

Kommunikation

TODO: Max

Bauteile
  • 1 Arduino Nano
  • 2 Knöpfe
  • 3 große LEDs (Rot, Gelb, Grün)
  • 3 MOSFETs
  • 1 Akku
  • 1 Servo
  • 1 Lautsprecher
  • 1 Steckplatine
Pinbelegung
Pin Funktion
2 An/Aus Signal an 4GewinntBot
4 Serielle Kommunikation mit 4GewinntBot (eingehend)
11 Serielle Kommunikation mit 4GewinntBot (ausgehend)
5 An/Aus Signal an SongBot
6 Servo-Ansteuerung
7 rote Launen-LED
8 gelbe Launen-LED
9 grüne Launen-LED


VierGewinntBot

Bau des Spielfelds

TODO: Sandor, Felix

Wir zersägten ein fertiges 4-Gewinnt!-Spiel und umrahmten es mit einer Halterung. Das Spielfeld ist oben eingehangen und kann zur Seite gedrückt werden, um die Spielsteine herausfallen zu lassen.

Programmierung der Intelligenz

TODO: Max

Bauteile
  • 1 Arduino
  • 1 „4Gewinnt!“-Spielfeld und Spielsteine
  • 7 Phototransistoren
  • 7 kleine LEDs (Rot)
  • 1 Steckplatine
Pinbelegung
Pin Funktion
3 An/Aus Signal von BrainBot
5 Serielle Kommunikation mit BrainBot (ausgehend)
6 Serielle Kommunikation mit BrainBot (eingehend)
A1-A7 Phototransistoren der Lichtschranken

Ergebnis

Insgesamt kann das Projekt als gelungen betrachtet werden. Der Hauptteil, das 4-Gewinnt-Spiel, ist voll funktionstüchtig und auch der BrainBot und die Kommunikation funtionieren gut. Die „Intelligenz“ des Roboters hat unsere Erwartungen sogar übertroffen: Man schafft es nur selten ihn zu schlagen.

Die Sprachausgabe funktioniert zwar, konnte nur leider nicht mehr mit dem BrainBot verbunden werden. Das macht es nötig zur Betreibung des Roboters immer einen Computer zu benutzen, um die Ausgaben auf der Konsole sehen zu können. Geplant war eigentlich, dass der Roboter autonom mit einem Akku betrieben wird.

Verbesserungspotential besteht auch bei der Erkennung von eingeworfenen Spielsteinen. Der Grenzwert für den gemessenen Wert an den Lichtschranken wurde global für alle Schranken festgelegt. Bei Verrutschen einer LED funktioniert so das System nicht mehr. Geschickter wäre es gewesen, das System so zu schreiben, dass es sich nach jedem Neustart neu kalibriert, um sich so Umgebungshelligkeit und Ungleichheit der Positionen der LEDs anzupassen. Da jedoch nur selten Fehler auftreten, wurden andere Dinge mit höherer Priorität vorgeschoben.

Wäre mehr Zeit gewesen, hätte der Roboter mit mehr Aufgaben ausgestattet werden können, welche die Laune beeinflussen, ausgestattet werden können, um die Laune komplexer wirken zu lassen.

Code

projektesose17/ooochnoeoeoepublic/start.txt · Zuletzt geändert: 2017/10/09 14:49 von c.jaedicke