Elektronischer Würfel mit Arduino Nano bauen: 7 LEDs, Zufallszahlen & Touch-Auslöser
Ein elektronischer Würfel ist eines der schönsten Einsteigerprojekte überhaupt: sieben LEDs im klassischen Augenmuster, ein Tipp auf den Touch-Sensor – und nach einer kurzen Roll-Animation leuchtet eine Zufallszahl von 1 bis 6 auf. Du brauchst kein Vorwissen: In diesem Tutorial baust du den Würfel Schritt für Schritt auf dem Breadboard, löst ihn per TTP223-Touch aus und lernst dabei ganz nebenbei, wie du LEDs über Arrays ansteuerst, echte Zufallszahlen erzeugst und mit einer kleinen Animation Leben ins Projekt bringst. Kompletter, kommentierter Code inklusive.
Warum ausgerechnet ein Würfel?
Der elektronische Würfel ist so beliebt, weil er alles vereint, was ein gutes Lernprojekt braucht: Er sieht am Ende richtig cool aus, ist an einem Nachmittag gebaut, und er zwingt dich, ein paar zentrale Programmier-Konzepte zu verstehen – aber alle in einer harmlosen, spielerischen Verpackung. Du lernst, mehrere LEDs sauber über ein Array anzusteuern, aus einer Zufallszahl ein Augenmuster abzuleiten und einen Taster (hier: einen Touch-Sensor) sauber abzufragen.
Als Gehirn nutzen wir den Arduino Nano V3. Er ist winzig, lässt sich direkt aufs Breadboard stecken und hat mehr als genug Pins für sieben LEDs und einen Sensor. Wenn du die Grundlagen des Nano noch nicht kennst, hilft dir vorab der Artikel Arduino Nano V3 Einsteiger-Tutorial.
ℹ️ Das Würfel-Muster verstehen: Ein echter Würfel zeigt seine Augen immer im gleichen Schema. Clever daran: Die sieben Positionen lassen sich in vier LED-Gruppen zusammenfassen, die je nach Zahl an- oder ausgehen. Genau diese Symmetrie machen wir uns im Code zunutze – statt sieben LEDs einzeln zu schalten, schalten wir Gruppen.
Das brauchst du
💡 Warum ein Touch-Sensor statt Taster? Der TTP223 gibt einen sauberen digitalen HIGH-Impuls aus, wenn du ihn berührst – ganz ohne Prellen, das mechanische Taster plagt. Das macht den Code einfacher und fühlt sich beim Würfeln fast magisch an. Wie der Sensor im Detail funktioniert, liest du im Artikel TTP223 Touch-Sensor mit Arduino auslesen.
1Die LED-Positionen und der Trick mit den Gruppen
Wir ordnen die sieben LEDs im typischen Würfelmuster an: vier Ecken, zwei Seitenmitten und ein Zentrum. Statt sie einzeln zu verkabeln, fassen wir sie zu vier Gruppen zusammen, die immer gemeinsam leuchten. Das spart Pins und macht den Code elegant:
| Gruppe | LEDs | Nano-Pin |
|---|---|---|
| A – Zentrum | Mitte (1 LED) | D2 |
| B – Diagonale 1 | oben-links, unten-rechts | D3 |
| C – Diagonale 2 | oben-rechts, unten-links | D4 |
| D – Seitenmitten | Mitte-links, Mitte-rechts | D5 |
Jede LED bekommt ihren eigenen 330-Ω-Vorwiderstand in Reihe. Die Kathode (kurzes Beinchen) geht auf GND, die Anode über den Widerstand an den jeweiligen Nano-Pin. Warum der Widerstand Pflicht ist und wie du seinen Wert exakt berechnest, erklärt der Artikel LED-Vorwiderstand berechnen.
ℹ️ So entstehen die Zahlen aus vier Gruppen: 1 = nur A. 2 = B. 3 = A + B. 4 = B + C. 5 = A + B + C. 6 = B + C + D. Mit nur vier Ausgangspins bildest du also alle sechs Augenzahlen ab – ein schönes Beispiel dafür, wie man mit etwas Nachdenken Hardware spart.
2Verkabelung des Touch-Sensors
Der TTP223 hat drei Pins und ist im Handumdrehen angeschlossen:
| TTP223 | Arduino Nano |
|---|---|
| VCC | 5V |
| GND | GND |
| I/O (SIG) | D7 |
Standardmäßig gibt der Sensor HIGH aus, solange du ihn berührst, und LOW, wenn nicht. Genau dieses Verhalten fragen wir im Code ab.
3Erster Test: Alle LEDs durchschalten
Bevor wir würfeln, prüfen wir, ob alle vier Gruppen richtig verkabelt sind. Dieser Sketch schaltet sie nacheinander an und aus – so siehst du sofort, ob eine LED falsch herum steckt oder ein Pin vertauscht ist.
// Pins der vier LED-Gruppen
const int A = 2; // Zentrum
const int B = 3; // Diagonale 1
const int C = 4; // Diagonale 2
const int D = 5; // Seitenmitten
int gruppen[] = {A, B, C, D};
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(gruppen[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < 4; i++) {
digitalWrite(gruppen[i], HIGH);
delay(400);
digitalWrite(gruppen[i], LOW);
}
}
Leuchten alle Gruppen der Reihe nach auf, stimmt die Verkabelung. Falls eine LED dunkel bleibt, ist sie meist verpolt (kurzes und langes Beinchen vertauscht) oder der Vorwiderstand hat keinen Kontakt.
4Eine Augenzahl anzeigen
Jetzt bringen wir dem Würfel bei, aus einer Zahl das richtige Muster zu machen. Wir schreiben eine Funktion zeigeZahl(), die je nach Wert die passenden Gruppen einschaltet – genau nach der Logik aus Schritt 1.
const int A = 2, B = 3, C = 4, D = 5;
void setup() {
pinMode(A, OUTPUT); pinMode(B, OUTPUT);
pinMode(C, OUTPUT); pinMode(D, OUTPUT);
}
void alleAus() {
digitalWrite(A, LOW); digitalWrite(B, LOW);
digitalWrite(C, LOW); digitalWrite(D, LOW);
}
void zeigeZahl(int zahl) {
alleAus();
switch (zahl) {
case 1: digitalWrite(A, HIGH); break;
case 2: digitalWrite(B, HIGH); break;
case 3: digitalWrite(A, HIGH); digitalWrite(B, HIGH); break;
case 4: digitalWrite(B, HIGH); digitalWrite(C, HIGH); break;
case 5: digitalWrite(A, HIGH); digitalWrite(B, HIGH);
digitalWrite(C, HIGH); break;
case 6: digitalWrite(B, HIGH); digitalWrite(C, HIGH);
digitalWrite(D, HIGH); break;
}
}
void loop() {
// Test: zaehlt 1..6 durch
for (int z = 1; z <= 6; z++) {
zeigeZahl(z);
delay(1000);
}
}
💡 Der Wert von switch-case: Statt sechs verschachtelte if-Abfragen macht switch den Code auf einen Blick lesbar – jede Augenzahl steht in genau einer Zeile. Sowas zahlt sich aus, sobald Projekte größer werden.
5Echte Zufallszahlen erzeugen
Ein Würfel, der immer dieselbe Reihenfolge zeigt, wäre langweilig. Arduino hat dafür die Funktion random() – aber Achtung: Ohne Vorbereitung liefert sie nach jedem Neustart dieselbe Zahlenfolge. Der Trick ist randomSeed(): Wir füttern den Zufallsgenerator mit dem Rauschen eines unbeschalteten Analogpins, das bei jedem Start anders ausfällt.
void setup() {
// A0 ist NICHT verkabelt -> liefert zufaelliges Rauschen
randomSeed(analogRead(A0));
}
void loop() {
int wurf = random(1, 7); // Zahl von 1 bis 6 (7 ist ausgeschlossen)
// ... zeigeZahl(wurf) ...
}
ℹ️ Warum random(1, 7) und nicht random(1, 6)? Bei random(min, max) ist die Obergrenze ausgeschlossen. random(1, 7) liefert also 1, 2, 3, 4, 5 oder 6 – genau die sechs Würfelseiten. Ein häufiger Anfängerfehler ist, hier 6 statt 7 zu schreiben und sich zu wundern, warum die 6 nie fällt.
6Der komplette Würfel mit Roll-Animation
Jetzt fügen wir alles zusammen: Berührst du den Touch-Sensor, flackert der Würfel kurz durch zufällige Zahlen (die "Roll-Animation"), wird langsamer und bleibt schließlich auf dem Ergebnis stehen. Das fühlt sich viel lebendiger an als eine Zahl, die einfach nur aufpoppt.
const int A = 2, B = 3, C = 4, D = 5;
const int TOUCH = 7;
void setup() {
pinMode(A, OUTPUT); pinMode(B, OUTPUT);
pinMode(C, OUTPUT); pinMode(D, OUTPUT);
pinMode(TOUCH, INPUT);
randomSeed(analogRead(A0));
zeigeZahl(6); // Startbild
}
void alleAus() {
digitalWrite(A, LOW); digitalWrite(B, LOW);
digitalWrite(C, LOW); digitalWrite(D, LOW);
}
void zeigeZahl(int zahl) {
alleAus();
switch (zahl) {
case 1: digitalWrite(A, HIGH); break;
case 2: digitalWrite(B, HIGH); break;
case 3: digitalWrite(A, HIGH); digitalWrite(B, HIGH); break;
case 4: digitalWrite(B, HIGH); digitalWrite(C, HIGH); break;
case 5: digitalWrite(A, HIGH); digitalWrite(B, HIGH);
digitalWrite(C, HIGH); break;
case 6: digitalWrite(B, HIGH); digitalWrite(C, HIGH);
digitalWrite(D, HIGH); break;
}
}
void wuerfeln() {
// Roll-Animation: schnelle Zahlen, die langsamer werden
int pause = 40;
for (int i = 0; i < 20; i++) {
zeigeZahl(random(1, 7));
delay(pause);
pause += 8; // wird von Schritt zu Schritt langsamer
}
// Endergebnis
int ergebnis = random(1, 7);
zeigeZahl(ergebnis);
}
void loop() {
if (digitalRead(TOUCH) == HIGH) { // Sensor beruehrt?
wuerfeln();
delay(300); // kurze Sperre gegen Doppelausloesung
}
}
Lade den Sketch hoch, tippe auf den Touch-Sensor – und dein Würfel rollt. Die Animation wird durch das langsam wachsende pause von Durchgang zu Durchgang träger, genau wie ein echter Würfel, der ausrollt.
🎲 Ideen zum Weiterbauen
- Zwei Würfel für Brettspiele wie Kniffel – einfach die Schaltung verdoppeln
- Sound beim Würfeln mit dem MP3-Player-Modul
- Dauerhaft löten auf einer Lochrasterplatine statt Breadboard
- Batteriebetrieb mit einem AA-Batteriehalter – dann ist der Würfel kabellos
Perfekt für: Brettspielabende, Geschenk zum Selberbauen, erstes Lötprojekt
Troubleshooting
⚠️ Eine LED bleibt dunkel: Fast immer verpolt. Das lange Beinchen (Anode) muss über den Widerstand zum Nano-Pin, das kurze (Kathode) auf GND. Dreh die LED einmal um.
⚠️ Der Würfel löst ständig von selbst aus: Der TTP223 ist empfindlich. Halte die Sensorfläche frei von losen Kabeln und prüfe, dass GND sauber verbunden ist. Ein langes, ungeschirmtes Signalkabel kann Störungen einfangen – halte es kurz.
⚠️ Immer dieselbe Zahlenfolge: Die randomSeed(analogRead(A0))-Zeile fehlt oder A0 ist doch verkabelt. A0 muss unbeschaltet bleiben, damit das Rauschen echt zufällig ist.
⚠️ Ein Tipp löst mehrere Würfe aus: Erhöhe die Sperrzeit am Ende des loop() (das delay(300)), bis ein Tipp zuverlässig genau einen Wurf ergibt.
🚀 Alles für deinen elektronischen Würfel
Diese Teile brauchst du für das Projekt:
- Arduino Nano V3 – das Gehirn des Würfels
- 3 mm LED Sortiment – sieben LEDs für die Augen
- Widerstands-Set (600 Stück) – Vorwiderstände
- TTP223 Touch-Sensor – der berührungslose Auslöser
- Breadboard 400 Kontakte – zum Aufbau
Fazit
Der elektronische Würfel beweist, dass ein Einsteigerprojekt weder langweilig noch trivial sein muss. Du hast sieben LEDs zu vier clever gruppierten Ausgängen zusammengefasst, aus einer Zahl per switch das richtige Augenmuster gemacht, mit randomSeed und random echte Zufallszahlen erzeugt und mit einer ausrollenden Animation dafür gesorgt, dass sich das Würfeln richtig gut anfühlt – alles ausgelöst durch eine simple Berührung.
Die wichtigsten Erkenntnisse zum Mitnehmen: LEDs gruppieren spart Pins, random(1, 7) schließt die Obergrenze aus, und ohne randomSeed ist der Zufall gar keiner. Von hier aus kannst du das Projekt beliebig ausbauen – ein zweiter Würfel, Soundeffekte oder eine geätzte Platine. Und wenn du den Würfel dauerhaft haben willst, lötest du ihn auf eine Lochrasterplatine und packst einen Batteriehalter dazu. Viel Spaß beim Bauen und Würfeln!