An einem kleinen Holzgerüst sind mehrere elektrische Magneten befestig. An den Magneten sind kleine Süßigkeiten oder etwas anderes befestigt. Sobald Spannung an den Magneten anliegt, halten die Bannen logischerweise an den Magneten fest. Nun wird der Startknopf gedrückt und über ein Zufallsgenerator fallen die Bannen in zufälliger Reihenfolge und mit zufälligem Abstand von oben herunter. Die Kinder müssen nun versuchen die Süßigkeiten zu fangen. was gefangen wurde, darf der Spieler behalten. 

 Das Spiel habe ich nach einer Anfrage programmiert, leider habe ich dann nichts mehr gehört, deshalb gibt es keine Bilder vom Spiel sondern nur vom Schaltplan und dem Programm. 

Das ganze Spiel wird von einem Arduino gesteuert, der die Spannung der Magnete über einen Zufallsgenerator weg nimmt. Da die Magnete 12 Volt DC und ca 3,5 Watt brauchen, sind die Magnete über eine separate Relaisplatine angesteuert. 

Kinder magnetspiel zufallsgenerator

 Das Programm für den Arduino:

Das Programm habe ich mit Ardublock geschrieben. Auf dem ersten Bild zu sehen der Start bei dem alle Relais eingeschaltet werden. Auf meiner Platine ist "low" Relais an, deshalb alle auf "low". Dann der Startknopf  am digitalen PIN 2. Wird dieser gedrückt werden alle benötigten Variablen auf 0 bzw. auf HIGH gesetzt. Im ersten Unterprogramm wird eine Zufallszahl und eine Zufallszeit generiert (dazu unten mehr). Damit man sehen kann was das Programm gerade macht habe ich ganz viele Serial Print eingebaut. Nun ist die digitale Variable "start" auf "high" und das Programm ist so lange in der "Spielschleife" bis alle Magnete, aus ((also PINS "high") sind.  

1 arduino anfaenger spiel selber bauen

Auf dem zweiten Bild ist der Spielverlauf mit den Magneten zu sehen. Mein Problem war am Anfang dass ich nur Zufallszahlen bis 5 oder 10 oder 100 generieren kann, wie mache ich es aber das die Zahlen die schon dran war nicht noch mal dran kommt. Kommt 10 mal hintereinander die 3 dann wartet das Kind ja 10 Minuten bis was runter fällt.

Die Lösung ist aber relativ einfach. Ich frage über die vier "oder" Blöcke ab welche Zahl schon dran war. Nur wenn eine Zahl noch nicht dran war, dann ist die Bedienung erfüllt und eines der Unterprogramme wird ausgeführt. Sollte die Zahl schon dran gewesen sein, wird einfach eine neue generiert. Da das im Bruchteil von Sekunden geschieht fällt es nicht auf, wenn eine Zahl öfters dran kommt. Da die Zufällig Pausenzeit nur ausgeführt wird, wenn die Zahl noch nicht dran war.  

2 spiele mit dem arduino selber bauen

Im Bild drei sieht man nun die Unterprogramm die für auslösen der Magnete verantwortlich sind. Zuerst wird die Variable auf "1" gesetzt, so kann diese Zahl in dieser Runde nicht mehr dran kommen. Danach wird eine zufällig Pausenzeit generiert und dann wird der Magnete ausgeschaltet und bleibt auch aus.  

3 Magnetspiel arduino selber bauen

 Im Bild vier ist die Generierung der Pausenzeit zu sehen. Damit die Pausenzeit nicht "0" sein kann zähle ich zur Zufallszahl immer "500" dazu. Über den Poti an analogen PIN 5 kann nun de Zeit von 1000 bis 5000 eingestellt werden.  

! Diese Zeiten sind natürlich viel zu kurz und haben mir nur zum testen des Spieles gedient. Es sollten mindestens folgende Werte eingestellt werden: 

  • Zufallszahl 2500 + 1000 
  • nach LOW 2000
  • nach HIGH 5000 

4 arduino anfanger projekt magnet spiel

  • Im Serial Monitor kann man den Verlauf des Spiels nun gut sehen. 
    • Mit dem lila Pfeil geht es los. 
    • Die roten Pfeile zeigen die gefallenen Magnete an
    • Die blauen Pfeile zeigen an wo eine Zufallszahl doppelt war und eine neue generiert werden musste. 
    • Beim grünen Pfeil ist das Spiel zu Ende 

5 einfache spiele mit dem arduino projekte

 

 

 Hier noch der Arduino Code: 

bool start= false ;
int eins = 0 ;
int zwei = 0 ;
int drei = 0 ;
int vier = 0 ;
int fuenf = 0 ;
int zufall = 0 ;
int zeit = 0 ;

void Unterprogramm();
void Unterprogramm12();
void Unterprogramm1();
void Unterprogramm2();
void Unterprogramm3();
void Unterprogramm4();
void Unterprogramm5();

void setup()
{
pinMode( 2 , INPUT);
pinMode( 9 , OUTPUT);
pinMode( 10 , OUTPUT);
pinMode( 11 , OUTPUT);
pinMode( 12 , OUTPUT);
pinMode( 13 , OUTPUT);
Serial.begin(9600);
randomSeed(analogRead(A0) + analogRead(A1) + analogRead(A2));
digitalWrite( 9 , LOW );

digitalWrite( 10 , LOW );

digitalWrite( 11 , LOW );

digitalWrite( 12 , LOW );

digitalWrite( 13 , LOW );

}

void loop()
{
if (digitalRead(2))
{
Serial.print("spiel start");
Serial.println();
start = HIGH ;
eins = 0 ;
zwei = 0 ;
drei = 0 ;
vier = 0 ;
fuenf = 0 ;
Unterprogramm();
zufall = random( 5 ) ;
Serial.print("zufall");
Serial.print(zufall);
Serial.println();
while ( ( ( start ) == ( HIGH ) ) )
{
if (( ( ( eins ) == ( 0 ) ) || ( ( ( zwei ) == ( 0 ) ) || ( ( ( drei ) == ( 0 ) ) || ( ( ( vier ) == ( 0 ) ) || ( ( fuenf ) == ( 0 ) ) ) ) ) ))
{
Unterprogramm1();
Unterprogramm2();
Unterprogramm3();
Unterprogramm4();
Unterprogramm5();
}
zufall = random( 5 ) ;
Serial.print("zufall");
Serial.print(zufall);
Serial.println();
if (( ( ( eins ) == ( 1 ) ) && ( ( ( zwei ) == ( 1 ) ) && ( ( ( drei ) == ( 1 ) ) && ( ( ( vier ) == ( 1 ) ) && ( ( fuenf ) == ( 1 ) ) ) ) ) ))
{
Serial.print("Spiel Ende");
Serial.println();
start = LOW ;
Unterprogramm12();
}
}

}
}

void Unterprogramm1()
{
if (( ( ( zufall ) == ( 0 ) ) && ( ( eins ) == ( 0 ) ) ))
{
Unterprogramm();
eins = 1 ;
delay( zeit );
digitalWrite( 9 , HIGH );
Serial.print("1 gefallen");
Serial.println();
}
}

void Unterprogramm5()
{
if (( ( ( zufall ) == ( 4 ) ) && ( ( fuenf ) == ( 0 ) ) ))
{
Unterprogramm();
fuenf = 1 ;
delay( zeit );
digitalWrite( 13 , HIGH );
Serial.print("5 gefallen");
Serial.println();
}
}

void Unterprogramm12()
{
digitalWrite( 9 , LOW );
digitalWrite( 10 , LOW );
digitalWrite( 11 , LOW );
digitalWrite( 12 , LOW );
digitalWrite( 13 , LOW );
}

void Unterprogramm4()
{
if (( ( ( zufall ) == ( 3 ) ) && ( ( vier ) == ( 0 ) ) ))
{
Unterprogramm();
vier = 1 ;
delay( zeit );
digitalWrite( 12 , HIGH );
Serial.print("4 gefallen");
Serial.println();
}
}

void Unterprogramm2()
{
if (( ( ( zufall ) == ( 1 ) ) && ( ( zwei ) == ( 0 ) ) ))
{
Unterprogramm();
zwei = 1 ;
delay( zeit );
digitalWrite( 10 , HIGH );
Serial.print("2 gefallen");
Serial.println();
}
}

void Unterprogramm()
{
zeit = ( ( random( 1500 ) + 500 ) + map ( analogRead(5) , 0 , 1023 , 1000 , 3000 ) ) ;
Serial.print("zeit");
Serial.print(zeit);
Serial.println();
}

void Unterprogramm3()
{
if (( ( ( zufall ) == ( 2 ) ) && ( ( drei ) == ( 0 ) ) ))
{
Unterprogramm();
drei = 1 ;
delay( zeit );
digitalWrite( 11 , HIGH );
Serial.print("3 gefallen");
Serial.println();
}
}


Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Weitere Informationen Ok