In den vergangenen Monaten habe ich ein Buzzersystem mit Arduino und LEGO gebaut. Coding und mehr finden sich auf Github und eine kurze Demonstration hier auf Youtube:

Youtube-Video mit einer Demo

Die Buzzer

Für die Buzzer habe ich klassische Arcade-Buttons verwendet, konkret diese von Amazon. Sie finden sich aber auch in vielen anderen Shops, einfach „Arcade Button 60mm“ suchen. Die LEDs in den Arcade-Buttons habe ich gegen 3V-LEDs ohne Widerstände ausgetauscht. So kann ich sie per Arduino betreiben.

In Kombination mit je einem selbst gebauten Gehäuse aus LEGO (hier geht’s zur Bauanleitung) sieht das wie folgt aus.

Zu jedem Buzzer führen drei Kabel – eins für die LED, eins für den Taster und einmal Ground für beides. Die Kabel habe ich direkt an die Kontakte der Arcadebuttons gelötet und zur einfacheren Handhabung geflochten. Ans andere Ende habe ich JST-XH-Stecker gecrimpt. So lassen sich die Buzzer später separat transportieren.

Die Zentraleinheit

Zum Anschluss der fünf Buzzer entstand folgende kleine Platine. Sie enthält fünf JST-XH-Buchsen sowie einen passiven Lautsprecher.

Von dieser Platine gehen alle Kabel in Richtung Arduino und sind dort an Dupont-Stecker gecrimpt. In die Kabel für die Buzzer-LEDs wurde zusätzlich ein Vorwiderstand eingelötet und mit Isolierband verklebt.

Das Herzstück ist ein Arduino UNO. Am unteren Ende sind weitere Kabel für die Fernbedienung zu sehen, die ebenfalls passend gecrimpt wurden.

Die Fernbedienung

Für die Steuerung der Buzzer habe ich eine kleine Platine mit drei Druckknöpfen zusammen gelötet. Die vier Kabel, je ein Datenkabel plus Ground, habe ich wieder geflochten zur einfachen Handhabung. Mit Isolierband habe ich meine mangelhaften Lötkünste versteckt.

Die Programmierung

Wie bereits erwähnt findet sich alles Coding auf Github. Nachfolgend nur ein paar Kniffe, auf die ich besonders stolz bin:

Finite State Machine: Das Herzstück der Ablauflogik ist eine Zustandsmaschine, welche Inkonsistenzen verhindert.

Kein Delay: Um stets auf Eingaben reagieren zu können wird kein delay genutzt. Stattdessen wird über eine Hilfsfunktion in jedem Loop errechnet, ob bereits die gewünschte Zeit verstrichen ist.

Die Bedienung

Es gibt drei Hauptzustände, in denen sich die Buzzer befinden können:

  • LOCKED: Alle Buzzer sind gegen Eingaben gesperrt und leuchten nicht.
  • ACTIVE: Alle aktiven Buzzer leuchten und warten auf Eingabe.
  • SINGLE: Genau ein Buzzer leuchtet und alle Buzzer sind gegen Eingaben gesperrt.

Passend dazu gibt es drei Knöpfe zur Bedienung:

  • Rot: Setzt Status LOCKED. Aus Status SINGLE kommend wird zusätzlich der aktuelle Buzzer als inaktiv markiert („falsche Antwort“). Dieser wird dann im nächsten Status ACTIVE nicht wieder mit eingeschaltet.
  • Gelb: Setzt Status SINGLE, indem ein zufälliger Buzzer aus den noch aktiven ausgewählt wird. Bei bereits ausgewähltem Buzzer werden stattdessen Buzzer-Sounds bzw. der laufende Countdown übersprungen.
  • Grün: Setzt Status ACTIVE. Falls nicht im Status LOCKED gedrückt werden zusätzlich alle inaktiven Buzzer wieder als aktiv markiert.

Viel mehr gibt es zu diesen Buzzern gar nicht zu sagen. Ich bin sehr stolz auf dieses kleine Projekt und hoffe, sie auch bald einzusetzen.