Arduino Würfel

Arduino Würfel

Dieses Projekt war mein Starter-Projekt für den Arduino. Ich wollte einen einfachen Aufbau für meinen Sohn – mit dem man aber auch etwas anfangen kann. Dazu sollte nicht bloß ein Steckbrett verwendet werden, sondern auch ein wenig Löt- und Programmierarbeit dabei sein. So ist die Würfel-Box entstanden.

wuerfel_titelbild2

Die Box besteht aus dem normalen Augenbild mit 7 LED’s und einem Taster zum Würfeln.

Bauelemente

  • Arduino UNO (oder anderes Modell)
  • 1 x Schalter
  • 1 x Taster
  • 1 x 9V Block-Batterie
  • 1 x Batterieclip
  • 7 x LED’s
  • 7 x Vorwiderstände 330 Ohm für LED’s
  • Pull-up-Widerstand 10 kOhm für Taster
  • Kabel
  • Gehäuse

Schaltung

Die erste LED (LED1) wird über den Pin 6 gesteuert, LED2 über Pin 7 usw. Der Taster ist über einen Pull-Up-Widerstand mit Pin 2 verknüpft. Es können natürlich auch andere Pins verwendet werden, wenn das im Quellcode entsprechend angepasst wird.

wuerfel_schaltung

Schritte:

  1. Positionen der LED’s ausmessen und anzeichnen
  2. Löcher bohren
  3. Position für EIN/AUS-Schalter festlegen, anzeichnen und bohren
  4. Position für Würfel-Taster festlegen, anzeichnen und bohren
  5. Elemente einbauen (die Batterie am besten mit Heißkleber befestigen)
  6. LED’s mit Heißkleber sichern
  7. Verdrahtung der LED’S möglichst intelligent ausführen
  8. Sketch aufspielen und testen

So kann die Würfel-Box aussehen

Ein passendes Gehäuse, in verschiedenen Ausführungen und Farben, bekommt man bei den bekannten Elektronikshops wie conrad.de oder pollin.de mittlerweile für kleines Geld.

wuerfelaufbau_3

Die LEDs wurden bei uns zuerst mit ein wenig Heißkleber fixiert. Danach lassen sich die Lötverbindungen viel leichter herstellen.

wuerfelaufbau_1

Damit sich die Batterie beim Würfeln nicht im Gehäuse hin und her bewegen kann, haben wir auch sie mit ein bißchen Heißkleber fixiert. Das ist vielleicht beim Wechseln nicht ganz ideal, funktioniert aber zuverlässig.

wuerfelaufbau_2

Der Arduino liegt dann ohne Befestigung auf der Batterie. Damit es hier nicht zu ungewollten Verbindungen kommt, haben wir noch eine Isolierung aus einem Stück Crepla dazwischen gepackt.

Sketch: Würfel einfach

Die Hauptarbeit des Würfels steckt aber im Quellcode. Der Start war bei uns eine sehr einfache Variante. Der Sketch kümmert sich nur um das Finden einer Zufallszahl, dem Würfeln und der Darstellung des Würfelbildes.

Was alles im Programm passiert, findet man in den Bemerkungen im Quellcode.

// PROGRAMM: LED Würfel Version 1
 
// Festlegen der Pins
// Pin der ersten LED
int PinErsteLED=6;

// Pin des Tasters
int PinTaster=2;

// Festlegen der Würfelbilder: Reihenfolge 
// 1     2 
// 3  7  4
// 5     6
int wuerfelBild[8][7]=
 {{0,0,0,0,0,0,0}, //0 = alle LED's aus
 {0,0,0,0,0,0,1}, //1
 {0,1,0,0,1,0,0}, //2
 {1,0,0,0,0,1,1}, //3
 {1,1,0,0,1,1,0}, //4
 {1,1,0,0,1,1,1}, //5
 {1,1,1,1,1,1,0}, //6
 {1,1,1,1,1,1,1}}; //7 = alle LED's an

void setup() {
 // Ausgehend von dem ersten LED Pin werden alle Pins als Output definiert
 for (int i=PinErsteLED;i<=PinErsteLED+6;++i)
 pinMode(i,OUTPUT);
 
 // Pin für den Schalter zur Steuerung des Zufallgenerators
 pinMode(PinTaster,INPUT);
}

// Funktion zum Anzeigen der Ergebnisse
void ZeigeZahl(int zahl) 
{
 // Für die vom Zufallsgenerator übergebene Nummer wird das passende Bild 
 // ausgelesen und die passenden LEDs eingeschaltet
 for (int i=0;i<=6;++i)  digitalWrite(i+PinErsteLED,wuerfelBild[zahl][i]?HIGH:LOW); } void loop() { //Variablen vereinbaren  int i,j,zufall;  do {   //Startzustand setzen  zufall=0;   i=0;  do {  zufall=zufall+1; //Zufallszahl hochzählen  i=i+1;  if (i>6) {i=0;} //Wenn i 7 ist, dann wieder auf 0 setzen, so ist i immer 0..6
 delay(50); //Pause in Millisekunden
 
 //Einzelne LED's für Würfelvorgang anzeigen
 for (j=0;j<=6;++j)
 digitalWrite(j+PinErsteLED,j==i?HIGH:LOW);
 } while (digitalRead(PinTaster)==LOW); //Wiederholen bis Taster losgelassen wird
 
 zufall=zufall%6; //Ergebnis ist Zahl von 0..5
 ZeigeZahl(zufall+1); //Würfelergebnis anzeigen 
 
 while (digitalRead(PinTaster)==HIGH) {}; //Warten bis nächste Taste gedrückt wird
 } while (1==1); //Undendlich Wiederholen, da 1 immer gleich 1 ist
}

Hier gibt es eine Möglichkeit für den Download des Arduino Sketches.

Sketch: Fertiger Würfel mit Einschaltbild

Nach den ersten Tests, hatten wir aber Lust ein wenig mehr Funktionen in den Würfel zu packen. Das findet man in dieser Version. Hier gibt es schon eine kleine Animation während des Würfelns zu bewundern.

//  PROGRAMM: LED Würfel Version 2                               
 
 // Festlegen der Pins
 // Pin der ersten LED
 int PinErsteLED=2;
 
 // Pin des Tasters
 int PinTaster=9;
 
 // Festlegen der Würfelbilder: Reihenfolge 
 //   1     2 
 //   3  7  4
 //   5     6
 int wuerfelBild[8][7]=
   {{0,0,0,0,0,0,0},  //0 = alle LED's aus
    {0,0,0,0,0,0,1},  //1
    {0,1,0,0,1,0,0},  //2
    {1,0,0,0,0,1,1},  //3
    {1,1,0,0,1,1,0},  //4
    {1,1,0,0,1,1,1},  //5
    {1,1,1,1,1,1,0},  //6
    {1,1,1,1,1,1,1}};  //7 = alle LED's an
    
 int lauflichtmax=6;
 int lauflicht[6]={1,2,4,6,5,3};
 
 
 void setup() {
   // Ausgehend von dem ersten LED Pin werden alle Pins als Output definiert
   for (int i=PinErsteLED;i<=PinErsteLED+6;++i)
     pinMode(i,OUTPUT);
  
    // Pin für den Schalter zur Steuerung des Zufallgenerators
     pinMode(PinTaster,INPUT);
 }
 
 // Funktion zum Anzeigen der Ergebnisse
 void ZeigeZahl(int zahl) 
 {
   // Für die vom Zufallsgenerator übergebene Nummer wird das passende Bild 
   // ausgelesen und die passenden LEDs eingeschaltet
   for (int i=0;i<=6;++i)      
    digitalWrite(i+PinErsteLED,wuerfelBild[zahl][i]?HIGH:LOW);  
}    

void loop() {    //Variablen vereinbaren    
int i,j,zufall;              
  ZeigeZahl(7); //Alle LED's einschalten    
  delay(1000);  // Pause in Millisekunden        
  // Zufallszahlen anzeigen bis das erste Mal eine Taste gedrückt wird    
  i=0;    
  do {      
    i=i+1;      
    if (i>6) {i=1;}
    delay(500);
    ZeigeZahl(i); //Zahl anzeigen
  } while (digitalRead(PinTaster)==HIGH); //wiederholten, bis Taste gedrückt wird
 
   
   // Ab hier wird gewürfelt, in Endlosschleife bis zum Ausschalten
   do { 
     //Startzustand setzen
     zufall=0; 
     i=0;
     do {
       zufall=zufall+1; //Zufallszahl hochzählen
       i=i+1;
       if (i>=lauflichtmax) {i=0;} //Wenn i lauflichtmax ist, dann wieder auf 0 setzen, so ist i immer 0..6
       delay(60); //Pause in Millisekunden
       
       ZeigeZahl(0);
       digitalWrite(PinErsteLED+lauflicht[i]-1,HIGH);
      
     } while (digitalRead(PinTaster)==LOW); //Wiederholen bis Taster losgelassen wird
     
     zufall=zufall%6; //Ergebnis ist Zahl von 0..5
     ZeigeZahl(zufall+1); //Würfelergebnis anzeigen 
     
     while (digitalRead(PinTaster)==HIGH) {}; //Warten bis nächste Taste gedrückt wird
   } while (1==1); //Undendlich Wiederholen, da 1 immer gleich 1 ist
 }

Dieser Sketch kann hier als Download geladen werden.

Wir wünschen viel Spaß beim Nachbauen!

Dieser Beitrag hat 7 Kommentare

  1. Your ѕtyle is really uniquе compared to other folks I have rewd stuff from.

    Тhannks ffor ⲣosting when you’ve got the opportunity,
    Gueѕѕ I will just bookmark this web site.

  2. Muchos Gracias for your blog post. bdfcadfdddbk

  3. This is such a fun game and we had an ideal birthday Daddy.?
    Larry added. ?Can we play ?What?s the best factor about God?

    tomorrow too?? he begged his Mommy.

Kommentar verfassen

Menü schließen