zurück zum Artikel

Die Riesenschachuhr

Thomas Klaube

Wie man Kinder zum Schach spielen motiviert? Mit Bewegung!

Unser Schachverein [1] gehört zu den wenigen Stuttgarter Schachvereinen, die aktive Jugendarbeit leisten. Wir bieten für Kinder ab 5 Jahren wöchentliche Trainings an. Manchmal ist es nicht leicht, insbesondere die kleinsten Kinder sprichwörtlich "im Schach" zu halten. Doch sobald wir unser Riesenschachfeld aufbauen, sind alle Kids gebannt – ganz anders als beim drögen Theorieunterricht. Aus dieser Erkenntnis entstand die Idee, Blitzschach mit den Riesenschach-Figuren zu spielen. Wenn die Uhr ein paar Meter entfernt steht, kommt sogar richtig Bewegung ins Spiel: Ziehen, laufen, drücken, laufen, ziehen, zwischendurch mal nachdenken...

Wer Blitzschach kennt, weiß, dass der Faktor Zeit dabei eine entscheidende Rolle spielt. Die Uhr muss jederzeit für beide Spieler gut sichtbar sein. Daher braucht man für Riesenschach auch eine Riesenschachuhr. Leider gibt es so etwas nicht zu kaufen, bleibt also nur: selbst bauen.

Mehr Infos

Kurzinfo

  • 7-Segment-Anzeigen konstruieren und 3D-drucken
  • Verkabelung von LED-Streifen
  • Steuerung über Raspberry Pi

Checkliste

  • Zeitaufwand: etwa 250-300 Stunden in vier Monaten
  • Kosten für Nachbau: circa 450 Euro
  • Konstruktion und 3D-Druck: keine Vorkenntnisse nötig
  • Software: Python

Eine analoge Uhr – so wie früher beim Schach üblich – schied nach kurzer Diskussion aus. Sie wäre viel zu anfällig für mechanische Beanspruchung. Dazu gäbe es keine Möglichkeit für Spiele mit Bedenkzeit [2] und zusätzlichem Inkrement. Es musste also eine digitale Riesenschachuhr her. Dazu mussten wir als erstes herausfinden, wie das Display aussehen soll.

Die wesentliche Anforderung an das Display ist eine gute Lesbarkeit bei Sonnenschein. Dazu kommt ein möglichst geringer Stromverbrauch, damit die Uhr mit einem Akku lange laufen kann. Flipdot-Anzeigen [3] sind hervorragend lesbar, selbst bei direkter Sonneinstrahlung. Leider sind sie für unser Projekt zu teuer. Gleiches gilt für elektromagnetische 7-Segment-Anzeigen [4], die oft an Tankstellen verwendet werden. Im Elektronikfachhandel gibt es ein breites Spektrum an 7-Segment-Anzeigen auf LED-Basis. Doch selbst die größeren Anzeigen haben aber nur eine Höhe von etwa 10cm und sind zu dunkel. Daher haben wir 20cm hohe 7-Segment-Anzeigen mit Sketchup [5] entworfen und bei einem 3D-Druck-Service drucken lassen. Da eine Schachuhr aus zwei Uhren besteht, (eine für den Weiß- und eine für den Schwarzspieler) benötigt man acht 7-Segment-Module. Dazu kommt noch für jede Uhr ein Trenner-Modul, das die Minuten von den Sekunden separiert. Die 3D-Druckmodelle stehen auf der GitHub-Seite zum Download [6] zur Verfügung.

Als Leuchtmittel bot sich ein NeoPixel-Streifen an. Die 7-Segment-Module sind so konstruiert, dass immer genau drei Pixel in ein Segment passen. NeoPixel haben einen Nachteil: Weißes Licht lässt sich nur durch Mischen von Rot, Grün und Blau erzeugen. Das kostet recht viel Strom. Da wir insgesamt mit 172 Pixeln arbeiten, benötigt die Uhr im Extremfall 10 Ampere Strom. Das ist zwar sehr konservativ gerechnet, aber selbst die Hälfte erscheint schon zu viel. Daher haben wir uns für die weniger verbreiteten SK6812-LED-Pixelstreifen entschieden. Diese haben zusätzlich noch eine separate, weiße LED. Die Abmessungen sind identisch und noch wichtiger: die Ansteuerung über einen Raspberry Pi erfolgt mit den gleichen Libraries.

Mehr Infos

Material

  • 1 Raspberry Pi Model 2B mit SD-Karte
  • 3m SK6812 Streifen mit 60 Pixel/Meter
  • 4 Taster zum Einstellen der verschiedenen Modi
  • 2 "Riesen-Taster" (1× Grün, 1× Rot) zum Betätigen der Uhr für die Spieler
  • 8 RJ45 Einbau-Buchsen
  • 2 Hohlsteckerbuchsen für die Stromversorgung der Displays
  • 1 USB-A auf Micro-USB-Kabel zur Stromversorgung des Raspberry Pi
  • 2 USB-A auf Hohlstecker-Kabel zur Stromversorgung der Displays
  • 4 RJ45-Kabel
  • 1 470Ω Widerstand (Wellenwiderstand für den LED-Streifen)
  • 1 Powerbank mit 3 USB-A Ausgängen und 24000mAh
  • 3D Druck: 8× 7-Segmentanzeigen, 2 Trennpunktmodule
  • Laserzuschnitte: 56 Segmentcover, 4 Trennpunkte in 3mm starkem Acryl in Milchglasoptik
  • 2 Sperrholzplatten 600×250×6mm als Träger für LED-Streifen
  • 3 Kunststoffgehäuse für den Raspberry Pi und die beiden "Riesen-Taster"
  • 1 Koffer mit circa 68×31×32cm
  • 2 Sonnenschirmständer
  • 2 PVC-Rohre mit Fittings
  • 3 Alu-Rohre
  • Plane
  • Verbrauchsmaterial wie Schrauben, Litze und Schrumpfschlauch

Für die Halterung haben wir zwei schwarz lackierte Sperrholzplatten mit den Abmessungen 600 x 250 x 6mm verwendet. So erhält man zwei separate Uhren, die etwas kompakter und besser zu handhaben sind, als eine große Anzeige. Dann haben wir an den oberen Rand zwei große Löcher gebohrt und mit großen Unterlegscheiben vorn und hinten verstärkt. Durch diese Löcher kann man die Schachuhr mit einem Stahlseil aufhängen.

Schachuhr – Das Display im Bau (7 Bilder) [7]

[8]
Die 7-Segment-Anzeigen wurden in Sketchup modeliert und mithilfe von 3D-Druck hergestellt.

Die Datenverbindung vom Raspberry Pi zum Display erfolgt mit einem einfachen Patchkabel. Da der Raspberry Pi nur einen Pixelstreifen ansteuern kann, muss zum Schluss wieder ein einzelner, durchgängiger Pixelstreifen entstehen. Dafür haben wir beide Uhren auch untereinander mit RJ45-Kabeln verbunden. Aus diesem Grund braucht eine der Uhren nicht nur einen RJ45-Eingang, sondern auch einen RJ45-Ausgang. Strom erhalten beide Displays von einer Powerbank. Unsere Powerbank hat 24000mAh und drei USB-Ausgänge. Weniger als drei USB-Ausgänge dürfen es nicht sein, da neben den beiden Displays auch der Raspberry Pi Strom braucht. Mit der vollgeladenen Powerbank kann man die Uhr gut sechs Stunden betreiben.

Wenn die LED Pixelstreifen korrekt auf der Sperrholzplatte positioniert sind, kann das Löten beginnen. Der Schaltplan ist auf Seite 3 zu sehen. Sobald die LEDs fertig verkabelt sind, können die 3D-gedruckten 7-Segment-Module vorsichtig auf die Spanplatte geschraubt werden. In den Modulen sind bereits Aussparungen für die Kabelführung vorgesehen, eventuell muss man hier aber nochmal etwas nacharbeiten.

Damit die Zahlen ein schönes, gleichmäßiges Licht abgeben, brauchen wir noch eine Verblendung. Wir haben von einem Lasercutting-Service 3mm starke Segmentcover in milchig-weißem Acryl zuschneiden lassen. Insgesamt haben wir 56 Segmentcover und vier Punktcover verwendet. In der Werkstatt waren wir von der hervorragenden Lesbarkeit und der homogenen Ausleuchtung der Anzeige begeistert. Leider sah das bei direkter Sonneneinstrahlung ganz anders aus. Als Konsequenz haben wir die Verblendungen in den Modulen weiter nach innen gesetzt. Dadurch ist die Ausleuchtung nicht mehr ganz so gleichmäßig, aber die Lesbarkeit ist selbst bei schönstem Sonnenschein noch gut. Ein schattiges Plätzchen für die Uhr verbessert die Lesbarkeit dann nochmal deutlich. Die Verblendungen haben wir mit Heißkleber befestigt.

Riesenschachuhr bei Sonnenschein

Alle wichtigen Funktionen übernimmt der Raspberry Pi: Die Ansteuerung der Displays, die Konfiguration der Betriebsmodi (zum Beispiel Zeit pro Spieler, Inkremente, Start und Reset) sowie die Überwachung der Riesentaster. Wir haben einen Raspberry Pi 2B benutzt. Geeignet sind aber auch neuere Pis, sogar ein Raspberry Pi Zero mit aufgelöteter GPIO-Pinleiste funktioniert. Lediglich ein Raspberry Pi 1 ist ungeeignet. Die Verbindung zum Display und den beiden Riesentastern erfolgt wieder via RJ45-Kabel. Zusätzlich benötigen wir noch vier weitere Taster zum Einstellen der Uhr. Aus diesem Grund haben wir den Raspberry Pi in ein recht großes Gehäuse gepackt.

Steckplatine

Für die insgesamt sechs Taster können wir die Pull-up/down Widerstände des Raspberry Pi nutzen. Lediglich ein Widerstand mit circa 470Ω wird für das Display benötigt. Der Widerstand lötet man einfach seriell zwischen den Daten-Ausgang des Raspberry Pis (GPIO 18) und den dunkelgrünen Draht der RJ45-Buchse für das Display.

Die Riesentaster sind schnell gebaut, man benötigt lediglich ein geeignetes Gehäuse. Dann schließt man die beiden Drähte der RJ45-Kabel an die beiden Pins der Taster an. Welcher Draht wohin kommt, ist nicht relevant.

Riesentaster.

Zunächst muss man auf dem Raspberry Pi die neuste Raspbian Version installieren. Damit die Ansteuerung des Pixelstreifens funktioniert, deaktiviert man das Sound-Modul. Dazu sollte man in /etc/modprobe.d/snd-blacklist.conf eine Zeile mit blacklist snd_bcm2835 hinzufügen. Außerdem muss in /boot/config.txt die Zeile dtparam=audio=on auskommentiert und der Raspberry Pi neu gebootet werden. Für die Implementation auf dem Rasberry Pi ist Python die naheliegende Wahl. Für die Ansteuerung des SK8612 Pixelstreifens wird eine library benötigt. Wir haben die PWM library von Jeremy Garff [9]genutzt. Die Python-Bindings kann man mit sudo pip install rpi_ws281x auf dem Raspberry Pi installieren. Die Ansteuerung der einzelnen Pixel und die Darstellung der Ziffern auf den beiden Displays ist schnell umgesetzt und erfreulicherweise nicht sehr komplex.

Um die Taster auszulesen, hatten wir schon Erfahrungswerte aus früheren Projekten mit der RPi.GPIO Library. Ein großes Problem bei Tastern ist das Prellverhalten. Ein Tastendruck führt in der Regel nicht nur zu genau zwei Flankenwechseln am GPIO Eingang, sondern zu deutlich mehr, was daran liegt, dass die Mechanik im Taster "nachschwingt" und so mehrfache Flankenwechsel erzeugt. RPi.GPIO bietet dafür den Parameter bouncetime beim Auslesen von Zuständsänderungen am GPIO Port. Der Parameter soll dafür sorgen, dass innerhalb der spezifizierten Bouncetime alle weiteren Flankenwechsel ignoriert werden. Bei Projekten mit nur einem Taster hat das zufriedenstellend funktioniert, doch sobald man sechs Taster präzise und fehlerfrei auslesen muß, kommt RPi.GPIO an seine Grenzen. Neben dem Nachschwingen der einzelnen Taster kommen noch Übersprech-Effekte hinzu: Beim Drücken des "Start"-Tasters wird auch ein Flankenwechsel des "Reset"-Tasters erkannt. Das Hinzufügen externer Pull-up-Widerständer und Kondensatoren zur Glättung hoher Frequenzen hat unser Problem nicht gelöst. Etwas frustriert und mit wenig Hoffnung haben wir unser Glück mit der pigpio library [10] versucht. Die Library kann selbst kompiliert oder aus dem Repository installiert werden:

sudo apt-get update
sudo apt-get install pigpio python-pigpio python3-pigpio


Zu beachten ist, dass hier der pigpiod laufen muss. Dieser Daemon erfasst alle GPIO Events und kann über eine API ausgelesen werden – sogar remote, wenn das nötig sein sollte. Das entsprechende Python Modul kommuniziert in unserem Fall mit dem lokal laufenden pigpiod.

Nach kurzem Test war klar: pigpiod ist deutlich präziser. Mit einer viel höheren Auflösung ist es in der Lage, alle möglichen Taster-Events zu erfassen. Darüber hinaus kann man Frequenz Filter definieren, (set_glitch_filter) wodurch alle Ereignisse mit zu hoher Fequenz ignoriert werden. Das löste das Übersprech-Problem auf einen Schlag. Als erwünschter Nebeneffekt werden auch alle Taster entprellt – und das ganz ohne externen Pull-up-Widerstand oder Glättungskondensator. In unseren zahlreichen Tests konnten wir keine einzige Fehlersituation provozieren. Selbst dann nicht, als wir vorsätzlich externe Störquellen neben den Raspberry Pi gestellt haben.

Der Unterschied zwischen dem Frequenzfilter bei pigpiod und dem Bouncetime-Parameter in RPi.GPIO mag marginal erscheinen, er ist aber entscheidend. RPi.GPIO reagiert immer auf den ersten Flankenwechsel (sofern dieser mit der eingeschränkten Fequenzauflösung überhaupt erkannt werden kann) und ignoriert dann alle nachfolgenden Ereignisse. Der erste Flankenwechsel beim Übersprechen wird erkannt und als Tastendruck interpretiert. Pigpiod dagegen ignoriert alles, was in einem bestimmten Fequenzspektrum passiert, wie das Übersprechen. Insgesamt hat uns die Problematik um das korrekte Auslesen der Taster enorm viel Zeit gekostet – und das für wenige Zeilen Code.

Neben Standard-Libraries wie time, os und datetime haben wir noch die twisted-Library [11] genutzt. Damit kann man zeitgesteuerte Ereignisse umsetzen. Zum Beispiel kann man Trennpunkte regelmäßig blinken lassen, die Uhr der Spieler alle 100ms prüfen und gegebenenfalls dekrementieren. Insgesamt ist der Python Code mit kaum 500 Zeilen sehr überschaubar.

Das Programm steht auf der GitHub-Seite zum Download [12] bereit.

Für das Gestell haben wir zwei Sonnenschirmständer verwendet. In diese haben wir PVC-Rohre mit 40mm Durchmesser eingesteckt. Ein entsprechendes Fitting am oberen Ende der PVC-Rohre nimmt eine 3-teilige Alustange auf, an der die beiden Display Elemente aufgehängt werden können. Die beiden Riesentaster können hier ebenfalls aufgeschraubt werden. Als Sichtblende für die Kabel benutzen wir eine Plane, bei der wir zwei Kabeldurchführungen eingearbeitet haben. Die Plane kann mit Kabelbindern schnell am Gestell befestigt werden. Die Abmessungen aller Komponenten sind so gewählt, dass alle Teile in einen größeren Koffer passen, der mit Schaumstoff ausgekleidet ist.

Gestell und Installation der Riesenschachuhr (5 Bilder) [13]

[14]
Die Riesenschachuhr wird mit einem Raspberry Pi gesteuert und kann mit einer einfachen Powerbank betrieben werden.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung [15].


Bei einem Stadtteilfest konnten wir die Uhr zusammen mit unserem Riesenschachfeld ausprobieren. Der Erfolg war überwältigend! Wir hatten trotz brütender Hitze immer eine Warteschlange von Kindern die "unbedingt auch mal" spielen wollten.

Wir verleihen die Uhr gern an Vereine rund um Stuttgart. Auf unserer Webseite [16] gibt es ein Kontaktformular. Wir sind auch per Mail [17] erreichbar. Für einen Nachbau der Uhr gibt es auf unserer Vereinswebseite noch weitere Infos. Ausserdem haben wir noch diverse Verbesserungsoptionen für die Version 2.0 zusammengetragen. (rehu [18])


URL dieses Artikels:
https://www.heise.de/-4550190

Links in diesem Artikel:
[1] https://sg-vaihingenrohr.de
[2] https://de.wikipedia.org/wiki/Bedenkzeit
[3] https://www.heise.de/ratgeber/Der-Flipdot-Hack-3527908.html
[4] https://www.heise.de/ratgeber/Fliptube-Ziffernanzeige-im-Eigenbau-4265985.html
[5] https://www.sketchup.com/
[6] https://github.com/MakeMagazinDE/Schachuhr
[7] https://www.heise.de/bilderstrecke/bilderstrecke_4565340.html?back=4550190
[8] https://www.heise.de/bilderstrecke/bilderstrecke_4565340.html?back=4550190
[9] https://github.com/jgarff/rpi_ws281x
[10] http://abyz.me.uk/rpi/pigpio/
[11] https://twistedmatrix.com/trac/
[12] https://github.com/MakeMagazinDE/Schachuhr
[13] https://www.heise.de/bilderstrecke/bilderstrecke_4566175.html?back=4550190
[14] https://www.heise.de/bilderstrecke/bilderstrecke_4566175.html?back=4550190
[15] https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html
[16] https://sg-vaihingenrohr.de
[17] mailto:info@sg-vaihingenrohr.de
[18] mailto:rehu@heise.de