Zum Inhalt springen
Arduino Projekte Anfänger · 2 Std. · Aktualisiert am 21. Juli 2026

Elektronischer Arduino-Würfel

Arduino Elektronischer Würfel

Ein Würfel ist eigentlich ein simples Ding: Du wirfst ihn, er rollt, eine Zahl zwischen 1 und 6 bleibt oben liegen. Genau das baust du jetzt elektronisch nach. In diesem Projekt kombinierst du eine 7-Segment-Anzeige mit einem Tilt Switch – und würfelst, indem du gegen dein Breadboard schnipst. Wenn du lieber auf einen Knopf drückst, findest du weiter unten auch eine Variante mit Button.

Nebenbei lernst du zwei Dinge, die dir in vielen weiteren Projekten begegnen werden: wie du Zufallszahlen erzeugst und warum ein Schalter ohne Pull-up- oder Pull-down-Widerstand unbrauchbare Werte liefert.

Diese Bauteile brauchst du

Affiliate-Links: Kaufst du über diese Links, erhält Pollux Labs eine kleine Provision – für dich ohne Mehrkosten.

Wie eine 7-Segment-Anzeige funktioniert

Soll es etwas Retro sein? Dann ist die 7-Segment-Anzeige genau das Richtige. Sie erinnert unwillkürlich an einen Countdown, der bereits vor Jahrzehnten ablief.

Wie du leicht nachzählen kannst, ist die Anzeige in sieben Segmente unterteilt, mit denen sich verschiedene Zahlen und Buchstaben darstellen lassen. Hinter jedem Segment steckt eine eigene LED, die je nach Bedarf ein- oder ausgeschaltet wird. Genau genommen sind es sogar acht Segmente – das achte ist der Punkt unten rechts, der zum Beispiel eine 6 von einer 9 unterscheidet, also anzeigt, wo unten ist.

Acht LEDs bedeuten allerdings auch: acht Vorwiderstände und jede Menge Kabel. Der Aufbau ist der aufwendigste Teil dieses Projekts – danach wird es entspannt.

Die Anzeige anschließen

Für den Anschluss benötigst du insgesamt 8 Vorwiderstände à 220Ω und 9 Kabel. Orientiere dich beim Aufbau an folgender Skizze.

Ein installiertes 7-Segment-Displaz am Arduino UNO
Die 7-Segment-Anzeige am Arduino – jedes Segment bekommt seinen eigenen Vorwiderstand

Ein wichtiger Hinweis: Es gibt Anzeigen, die du (neben den Digitalpins) mit GND verbindest – so wie auf der Skizze oben. Es gibt aber auch welche, die an 5V müssen. Welche du erwischt hast, findest du heraus, sobald du gleich den ersten Sketch hochlädst. Siehst du nur Zeichensalat, steckst du die Verbindung um und änderst eine Zeile im Code. Gleich mehr dazu.

Die Bibliothek SevSeg

Die Verkabelung war schon recht aufwendig – und die Steuerung wäre es auch, gäbe es nicht eine passende Bibliothek. Öffne also deinen Bibliotheksverwalter, suche dort nach SevSeg und installiere die aktuelle Version.

Die SevSeg Bibliothek im Arduino IDE Bibliotheksmanager

___STEADY_PAYWALL___

Zu Beginn deines Sketchs bindest du die Bibliothek wie gewohnt ein und erstellst das passende Objekt:

#include "SevSeg.h"
SevSeg sevseg;

In der Setup-Funktion folgen einige Definitionen. Du stellst zum Beispiel ein, dass du eine Anzeige mit nur einer Ziffer verwendest, und legst die Pins fest, an denen du sie angeschlossen hast:

byte numDigits = 1;
byte digitPins[] = {};
byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
bool resistorsOnSegments = true;

Außerdem legst du fest, ob deine Anzeige mit GND (COMMON_CATHODE) oder mit 5V (COMMON_ANODE) verbunden wird. Je nachdem, welche du hast, kommentierst du die nicht benötigte Zeile mit einem doppelten Schrägstrich // aus. Zuletzt stellst du die Helligkeit auf 100:

//sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

sevseg.setBrightness(100);

Der erste Test: ein Countdown

Bevor du würfelst, solltest du prüfen, ob die Anzeige überhaupt richtig verkabelt ist. Dafür eignet sich ein kleiner Countdown, der jede Sekunde von 9 an eins herunterzählt – bis er die 0 erreicht hat. Lade den folgenden Sketch auf deinen Arduino:

#include "SevSeg.h"
SevSeg sevseg;

void setup() {
  byte numDigits = 1;
  byte digitPins[] = {};
  byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
  bool resistorsOnSegments = true;

  //sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

  sevseg.setBrightness(100);
}

void loop() {
  for (int i = 9; i >= 0; i--)
  {
    sevseg.setNumber(i);
    sevseg.refreshDisplay();
    delay(1000);
  }
}

Zählt die Anzeige sauber von 9 auf 0 herunter? Dann steht das Fundament und du kannst weitermachen.

Bleibt ein Segment dunkel oder siehst du nur Zeichensalat? Dann prüfe zuerst den Anschluss und ob vielleicht ein Kabel oder ein Widerstand defekt ist – oft liegt hier der Fehler. Hilft das nicht, verbinde die Anzeige probeweise statt mit GND mit 5V und tausche die beiden sevseg.begin()-Zeilen im Sketch.

Der Tilt Switch als Auslöser

So ein Zähler ist ja ganz nett – jetzt wird es Zeit für den Würfel. Dafür installierst du neben der 7-Segment-Anzeige einen Tilt Switch. In diesem Bauteil befindet sich eine kleine Kugel, die einen Stromkreis unterbricht, sobald der Switch bewegt wird. Kommt sie wieder zum Stillstand, fließt der Strom weiter.

Genau diese Unterbrechung liest du aus – und lässt daraufhin einen Zufallsgenerator eine Zahl zwischen 1 und 6 wählen. Das Ergebnis zeigst du dann auf der Anzeige an.

Hoffentlich hast du die 7-Segment-Anzeige noch auf deinem Breadboard installiert. Wenn ja, baue links oder rechts daneben den Tilt Switch hinzu. Du benötigst neben den Kabeln noch einen 10kΩ Widerstand. Ein Bein des Tilt Switchs geht an GND, das andere an Digitalpin 12 – und von dort über den Widerstand an 5V. Dazu gleich mehr.

Ein Tilt Switch am Arduino UNO
Der Tilt Switch am Digitalpin 12 – die Verkabelung der Anzeige ist der Übersicht zuliebe nicht eingezeichnet

Der 10kΩ Widerstand zwischen Pin 12 und 5V ist ein sogenannter Pull-up-Widerstand. Er „zieht“ das Signal am Pin dauerhaft auf HIGH. Liegt der Tilt Switch ruhig, ist sein Kontakt geschlossen und verbindet den Pin mit GND – der Arduino liest also LOW. Bewegst du den Switch, unterbricht die Kugel den Kontakt und der Widerstand zieht den Pin auf HIGH. Genau darauf reagiert gleich dein Sketch.

Ohne diesen Widerstand hinge der Pin in der Luft, sobald der Kontakt offen ist – und die Werte würden willkürlich zwischen 0 und 1 hin- und herspringen.

Hinweis: Wenn dein Tilt Switch drei Pins besitzt, kannst du dir den Widerstand sparen. Verbinde dann den Datenausgang des Switchs einfach mit Digitalpin 12.

Der Sketch für den Würfel

Das meiste deines Sketchs aus dem letzten Abschnitt kannst du weiterverwenden. Lege zunächst zu Beginn den Pin fest, mit dem der Switch verbunden ist:

const int tiltPin = 12;

Die Loop-Funktion veränderst du jedoch. Statt des Countdowns kommt hier eine Abfrage hinein, ob der Tilt Switch bewegt wurde. Ist das der Fall, nutzt du die Funktion random(). Sie benötigt zwei Parameter: die Mindestzahl (also 1) und die Höchstzahl. Der zweite Parameter ist allerdings exklusive – du musst hier also eine 7 eintragen, damit die 6 noch mitgewürfelt wird.

Zuletzt folgt der Befehl, der die gefundene Zahl auf deine Anzeige überträgt:

void loop() {
  if (digitalRead(tiltPin) == HIGH) {
    sevseg.setNumber(random(1, 7));
    sevseg.refreshDisplay();
  }
}

Und das war es auch schon. Hier der vollständige Sketch – lade ihn auf deinen Arduino und schnipse für einen ersten Test gegen den Tilt Switch. Erhältst du Zufallszahlen zwischen 1 und 6, wie bei einem analogen Würfel?

#include "SevSeg.h"
SevSeg sevseg;

const int tiltPin = 12;

void setup() {
  byte numDigits = 1;
  byte digitPins[] = {};
  byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
  bool resistorsOnSegments = true;

  //sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

  sevseg.setBrightness(100);

  pinMode(tiltPin, INPUT);
}

void loop() {
  if (digitalRead(tiltPin) == HIGH) {
    sevseg.setNumber(random(1, 7));
    sevseg.refreshDisplay();
  }
}

Würfeln mit einem Button

Wenn du keinen Tilt Switch verwenden möchtest, sondern lieber einen Taster, ist das mit ein paar Handgriffen getan. Entferne den Tilt Switch von deinem Breadboard und ersetze ihn durch einen Button. Auch die Kabel und den Widerstand musst du etwas versetzen – orientiere dich an folgender Skizze.

Ein 7-Segment-Display und ein Button am Arduino UNO. Der fertige elektronische Würfel.
Die Variante mit Taster – hier sorgt ein Pull-down-Widerstand für saubere Werte

Wie du siehst, sitzt der Button über der Brücke des Breadboards, damit die zwei oberen Pins von den unteren getrennt sind. Die Unterseite des Buttons schließt du auf der einen Seite an 5V an, auf der anderen über den 10kΩ Widerstand an GND. Von dieser zweiten Seite geht außerdem das Kabel zum Digitalpin 12.

Hierbei handelt es sich um einen sogenannten Pull-down-Widerstand – das Gegenstück zum Pull-up von eben. Du „ziehst“ den Wert, den der Button ausgibt, dauerhaft auf 0, also LOW. Erst ein Druck auf den Button schaltet das Signal auf HIGH. Würdest du keinen Pull-down-Widerstand verwenden, würde dieser Wert ständig zwischen LOW und HIGH hin- und herspringen – und wäre für deinen Würfel unbrauchbar.

Im Sketch musst du nur ein paar kleine Anpassungen vornehmen. Zunächst deklarierst du zwei Variablen für den Signal-Pin des Buttons und legst dessen Wert zunächst auf 0 fest:

const int buttonPin = 12;
int buttonState = 0;

In der Setup-Funktion definierst du den pinMode des buttonPin als INPUT:

pinMode(buttonPin, INPUT);

Nun zum Loop. Hier fragst du per digitalRead() das Signal des Buttons ab und speicherst den Wert in der Variablen buttonState. Ist dieser Wert HIGH, der Button also gedrückt, startet die Ermittlung der Zufallszahl, die dann auf deiner Anzeige erscheint. Wenn du den Button gedrückt hältst, simulierst du einen rollenden Würfel, der zum Liegen kommt, sobald du deinen Finger hebst.

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
    sevseg.setNumber(random(1, 7));
    sevseg.refreshDisplay();
  }
}

Hier nun der vollständige Sketch für den elektronischen Würfel, der über einen Button in Gang gesetzt wird:

#include "SevSeg.h"
SevSeg sevseg;

const int buttonPin = 12;
int buttonState = 0;

void setup() {
  byte numDigits = 1;
  byte digitPins[] = {};
  byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
  bool resistorsOnSegments = true;

  //sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

  sevseg.setBrightness(100);

  Serial.begin(9600);
  pinMode(buttonPin, INPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
    sevseg.setNumber(random(1, 7));
    sevseg.refreshDisplay();
  }
}

Zufall ist gar nicht so zufällig

Wenn du deinen Würfel ein paar Mal per Reset-Taste neu startest und dann jeweils gleich würfelst, wird dir vielleicht etwas auffallen: Es kommen immer dieselben Zahlen in derselben Reihenfolge.

Das ist kein Fehler, sondern liegt in der Natur der Sache. Ein Mikrocontroller kann keinen echten Zufall erzeugen – er rechnet eine Zahlenfolge aus, die nur zufällig aussieht. Und diese Rechnung beginnt nach jedem Start am selben Punkt. Bei einem Würfel, den du im Betrieb dutzende Male auslöst, fällt das kaum auf. Störend wird es erst, wenn dein Projekt bei jedem Einschalten dasselbe Ergebnis liefern soll – oder eben nicht.

Der übliche Trick dagegen: Du gibst dem Zufallsgenerator einen unterschiedlichen Startwert mit, den sogenannten Seed. Ein beliebter Kandidat dafür ist das Rauschen an einem unbeschalteten Analogpin. Ergänze dafür in deiner Setup-Funktion diese Zeile:

randomSeed(analogRead(A0));

Wichtig: An A0 darf dafür nichts angeschlossen sein. Der Pin fängt dann kleine Störungen aus seiner Umgebung ein – und liefert bei jedem Start einen etwas anderen Wert.

Wenn es nicht funktioniert

  • Die Anzeige zeigt Zeichensalat. Dann hast du vermutlich den anderen Typ erwischt. Verbinde sie statt mit GND mit 5V und tausche im Sketch die beiden sevseg.begin()-Zeilen gegeneinander aus.
  • Ein Segment bleibt dunkel. Fast immer ein Verkabelungsproblem: Prüfe das zugehörige Kabel und seinen Vorwiderstand. Bei acht Widerständen ist schnell einer verrutscht.
  • Der Würfel würfelt von allein. Dann fehlt vermutlich der 10kΩ Widerstand oder er sitzt an der falschen Stelle. Ohne ihn hängt Pin 12 in der Luft und springt willkürlich zwischen HIGH und LOW.
  • Es passiert gar nichts. Sitzt der Taster wirklich über dem Graben des Breadboards? Steht er quer, sind seine Kontakte dauerhaft verbunden – und der Druck darauf ändert nichts.

Wie geht es weiter?

Dein Würfel funktioniert – und lässt sich jetzt hervorragend ausbauen. Ein paar Ideen:

  • Ein rollender Würfel. Lass nach dem Auslösen für eine Sekunde schnell wechselnde Zahlen über die Anzeige laufen, bevor das Ergebnis stehen bleibt. Das wirkt deutlich spannender als eine Zahl, die einfach erscheint.
  • Ein Geräusch dazu. Mit einem Piezo-Buzzer und der Funktion tone() kündigst du das Ergebnis akustisch an.
  • Zwei Würfel. Eine zweite Anzeige braucht allerdings acht weitere Pins – hier lohnt sich der Umstieg auf ein Display mit MAX7219-Treiber, das mit drei Pins auskommt.

Und wenn du den Tilt Switch für andere Zwecke einsetzen möchtest: Er eignet sich überall dort, wo dein Projekt merken soll, dass es bewegt wurde – zum Beispiel in einer Alarmanlage.