Tetopia



Bombe entschärfen

This page is under Construction

Inspiriert von dem Spiel Keep Talking and Nobody Explodes habe ich die Hardware-Version einer zu entschärfenden Bombe entwickelt.

Die Idee

Als ich hatte bisher nur von dem Spiel "Keep Talking and Nobody Explodes" gehört, als wir in unserer Jugendgruppe des DARC auf der Suche nach möglichen Spielen oder Rätseln für eine "Funk-Schnitzeljagd" waren. Da fiel mir dieses Kommunikations-Computer-Spiel ein, bei dem man gemeinschaftlich - einer am Computer, die anderen mit dem Handbuch - eine Bombe entschärfen muss. Wir haben das Spiel mit ein paar Leuten ausprobiert (mit einer VR macht es eindeutig am meisten Spaß!) und mir war sofort klar: Dieses Spiel schreit geradezu danach mit ein paar Mikrocontrollern nachgebaut zu werden. Gesagt, getan, schon bald hatte ich erste Prototypen auf einem Breadboard zusammengesteckt, bald darauf die erste Platine entwickelt.

Konzept

Die Bombe ist modular aufgebaut. Der Timer kontrolliert die einzelnen Rätsel-Module. Aktuell können das bis zu 16 Stück sein.
Die Module sind im Master-Slave-Prinzip mit dem Timer verbunden. Der Timer überprüft die Module reihum und fragt ihren Status ab. Alle Module haben die gleiche Schnittstelle. Auf dieser Basis können beliebige Module realisiert werden, die selbstständig erkennen, ob sie gelöst wurden oder ein Fehler gemacht wurde. Die Module können beliebig angeordnet werden. Manche von ihnen müssen vor jeder Runde "aufgebaut" werden, andere initialisieren sich vollständig selbst.

Hardware

Der Timer und jedes Modul haben einen eigenen Mikrocontroller, genauer gesagt einen ATMega328, der Controller, der auch in einem Arduino UNO verbaut ist. Dieser Controller mit 28 Pins hat genug Speicher, um sein jeweiliges Programm zu speichern und genug Pins für die allermeisten Module. Ein ATTiny hätte zwar für manche Module auch genügend Pins, aber der Speicher dieser Serie ist zu klein für die Größe des Programms.
Reichen bei vielen Ein- oder Ausgängen selbst die Pins eines ATMegas nicht, kann man die relativ einfach mit einem Schieberegister (74HC595) für die Ausgänge oder mit einem Multiplexer (74HC4051) für Eingänge verwenden. Der Multiplexer geht auch als Erweiterung für die Ausgänge, braucht dabei aber einen Pin mehr für die Ansteuerung als ein Schieberegister.
Ansonsten bestehen die meisten Module hauptsächlich aus LEDs und Knöpfen, einige Module verwenden auch kleine OLED-Displays. Manche haben auch "Spezialkomponenten" wie ein Poti oder Inkrementalgeber, je nach dem, wie das Modul bedient werden soll.

Das "Gehäuse" besteht im Prinzip aus einer Grundplatte, in der die einzelnen Module und der Timer montiert werden können. Jeder Steckplatz hat seinen eigenen Bus-Anschluss-Stecker. Ein Modul/der Timer muss nur an diesem Stecker angeschlossen werden, dann ist alles funktionstüchtig. Stromversorgung und Kommunikation ist alles in einer Verbindung verbaut.
Das Gehäuse kann entweder mit einem Laser-Cutter oder mit einer CNC-Fräse gefertigt werden.

Kommunikation läuft über die UART-Schnittstelle, weil alle anderen Verbindungen entweder mehr Pins brauchen (SPI braucht 3 Pins), oder dringend benötigte Pins belegen (I2C verwendet Pins, die auch als Analogeingang verwendet werden). Bei der Wahl der Adressierung fiel die Entscheidung auf einen Hardware-Slave-Select, um jedem _Steckplatz_ (nicht jedem Modul!) eine "Adresse" zuzuweisen. Damit können die Module alle gleich programmiert und bestückt werden, es muss keine Rücksicht auf irgendwelche Adressen in der Software genommen werden. Auch mehrere Module gleichen Typs sind damit kein Problem, für den Master sehen sowieso alle Module gleich aus. Noch ein Grund kein I2C zu verwenden, der braucht nämlich eine Software-Adressierung. Die kann man zwar überlisten, aber dann bleibt immer noch das Problem, dass I2C die "falschen" Pins benötigt.

Software

Das Programm ist ausschließlich modular in der Arduino-IDE geschrieben. Die vorhandene Infrastruktur macht es leichter "mal eben schnell" eine Idee umzusetzen.
Master-Slave...
Interface-Schnittstelle der Module...
Jedes Modul seine eigene Logik...

Die Module

Der Hauptbestandteil der Bombe sind die verschiedenen Rätsel-Module, die alle einzeln entschärft werden müssen, um die Bombe als ganzes am "explodieren" zu hindern.
Folgende Module habe ich realisiert:

Kabel

Hier muss anhand der Komination der Kabel und einiger externer Faktoren bestimmt werden, welches Kabel entfernt werden muss.



LED-Kreis

Ein Modul bei dem durch ein LED-Muster angezeigt wird, welche Knöpfe zu drücken sind
Entwickelt von Seval und Valsev.



Logikgatter

Eine Hand voll Eingänge, Logikgatter und zwei Ausgänge, die richtig eingestellt werden wollen.



Komplizierte Kabel

Ähnlich wie bei "Kabel" muss hier entschieden werden, welches Kabel entfernt werden muss und welches nicht.



Gedächtnis

Binärzahlen (von 0 bis 3) müssen richtig gedeutet werden und das Ergebnis muss man auch noch im Kopf behalten...



Morse

Ein Morse-Code muss entschlüsselt werden und anhand dessen muss die richtige Frequenz eingestellt werden.



Widerstand

Der richtige Widerstand muss eingesetzt werden. Welcher der richtige ist, entscheidet der Widerstands-Farbcode.



Fortsetzung

Mehr Module sind in der Entwicklung!

Handbuch

Diese Bombe hat ihr eigenes Handbuch. Zu gegebener Zeit wird man es hier vermutlich herunterladen können. Noch ist es aber schlicht nicht fertig.

Entwicklertagebuch

Begonnen hat nach der Idee alles auf einem Breadboard. Als erstes habe ich ein Kabel-Modul entworfen, dann den Timer dazu.

Hier sieht man die Entwicklungsschritte: Als erstes auf einem Breadboard aufgebaut und die Programmierung getestet, dann der Entwurf der ersten Platine, die ich dann anschließend auf einer Lochrasterplatine aufgebaut habe.


Jetzt war schon klarer, welche Dimensionen das ganze haben sollte, der nächste Platinenentwurf (vom Gedächtnis-Modul) hat schon die finale Größe, aber die genaue Pinbelegung des ATMegas wurde danach noch einmal geändert. Das lässt sich aber in der Software kompensieren, so dass dieses Modul der erste voll funktionsfähige Prototyp ist. Eine dünne Sperrholzplatte war gerade zur Hand, daraus sind die ersten Deckplatten entstanden.


Jetzt stand als nächstes das Gesamtsystem im Fokus. Der Timer bekommt jetzt die meisten seiner Funktionen. Um sie zu testen wurde ein System mit 2 Testmodulen und dem Timer auf Breadboards und dem schon fertigen Memory-Modul aufgebaut.


Nachdem klar war, dass das so in etwa ganz gut funktioniert, habe ich Platinen für den Timer und 4 weitere Module entworfen, ein sechstes Modul haben Valsev und Seval in meinem Programmier-Workshop entworfen. Aus diesen Platinen entstand der erste ernsthaft spielbare Prototyp.


Letztes Update: 18.4.18