Besonderheiten:
In den Schiffchen sind Magnete versteckt. Durch die Magnete an den Angriffsstäben kann man die Schiffe von unten zum Grund des „Meeres“ ziehen. Zwei Spieler erhalten abwechselnd die Chance, die Schiffchen des Gegners zu versenken. Wer keine Schiffe mehr hat, hat verloren. Licht und Sound zeigen an, wer am Zug ist.
Gut zu wissen:
Du kannst löten und hast bereits einige Erfahrung mit Arduino-Programmierung gesammelt.
Das lernst du kennen:
Du wirst viel über Magnetismus lernen und wie du mit Arduino Musik machst und LEDs leuchten lässt.
Schwierigkeitsgrad:
Champions
Eine Einsteiger-Version findest du hier.
Dauer:
4-5 Stunden
Für Anfänger kann man den elektronischen zweiten Teil weglassen und einfach das "Schiffe Versenken" Spiel bauen. Der zweite Teil benötigt etwas Erfahrung im Löten und Arduino programmieren.
Tipp:
Wer das Projekt "Blinkende Kleidung" gemeistert hat, sollte mit dieser Anleitung auch zurecht kommen.
Materialien & Werkzeuge
Materialien, die du brauchst:
- Ein kleiner Karton mit mindestens 10 cm Höhe
- Ein großer stabiler Karton für das Becken (oder eine wasserdichte Plastik-Box)
- Ein Müllsack
- 3 Tischtennisbälle
- Buntes Klebeband
- 2 Holzstäbe mit 1 Meter Länge
- Neodym Magnete (möglichst stark, max. 1cm Durchmesser)
- Ein Arduino Board
- 1-3 LEDs in zwei Farben
- Ein Piezo Lautsprecher
- 2 220 Ohm Widerstände (Farbcode rot-rot-braun-gold)
- Stiftleiste mit Pinsteckern für Arduino
- Schrumpfschlauch (oder Isolierband)
- Kabel (flexible Litze oder festen Draht, diese Anleitung benutzt Draht)
- Breadboard
- Steckkabel für Breadboard
- USB-Verbindungskabel für Arduino
- 9 Volt Block und Batterieclip mit Hohlstecker für Ardunio
Die Kartons: Schau dir die Bilder an und entscheide, welche Kartons passend sind. Deine Konstruktion sollte aber stabil genug sein, um das Gewicht des Wassers im Becken tragen zu können.
Tipp: Nutze einfach eine Plastik-Kiste für das Becken, wenn du eine findest.
- Lötkolben
- Lötzinn
- Halterung für Lötkolben
- Abisolierzange
- „Dritte Hand“ oder eine menschliche helfende Hand
- Kleber für Karton
- Cuttermesser
- Schere
Außerdem benötigst du natürlich einen Computer, um dein Arduino zu programmieren.
Baue das Spielfeld
Bereite das Spielfeld vor
Entscheide, welcher der Kartons das Wasserbecken, also das Spielfeld, werden soll. Schneide eventuell überstehende Deckel oder Ecken ab, damit du oben eine flache Kante für die Folie erhältst.
Tipp: Das Becken muss mindestens 6 cm tief sein, tiefer ist natürlich auch OK.
Bereite den Spieltisch vor
Schneide zuerst eventuell vorhandene Deckel an der Öffnung ab.
Damit man später mit den Holzstäben unter das Becken kommt, schneide, ähnlich wie bei uns, große Löcher in zwei gegenüberliegende Seiten. Wir mussten wacklige Teile des Kartons mit Klebeband fixieren.
Klebe die Kartons nun aufeinander, am besten mit Kleber und zusätzlich mit Klebeband.
So sieht der fertige Spieltisch aus.
Wichtig: Lass an den Ecken schräge Stützen stehen, wie in unseren Bildern, sonst knicken dir die Seitenteile ab! Der Karton muss stabil genug sein, um das Wasserbecken zu tragen.
Dichte das Becken ab
Schneide den Boden des Müllsacks ab, um ihn rechteckig ausbreiten zu können. Schneide dann ein Rechteck aus der Folie so zurecht, dass es an allen Seiten mindestens 6 cm über den Karton hinausragt. Tipp: Je höher dein Becken wird, desto größer muss die Folie im Vergleich zum Karton werden.
Gib´ etwas Kleber an alle Seiten des Kartons und klebe dann die Folie in den Karton.
Fixiere die Folie an der oberen Kante rundherum mit Klebeband. Fertig!
Baue die Spielelemente
Damit jeder Spieler weiß, welche Schiffe er versenken muss, und welche zu seiner eigenen Mannschaft gehören, kennzeichnen wir die Schiffchen mit zwei unterschiedlichen Farben.
Tipp: Verwende die gleichen Farben für das Klebeband der Schiffchen und die LEDs der Anzeigetafel. Dann sieht jeder sofort, welcher Spieler an der Reihe ist.
Bastle die Schiffe
Zerschneide drei Tischtennisbälle, damit du sechs gleiche Hälften hast. Lass dir von einem Erwachsenen helfen, wenn du Probleme hast.
Für den nächsten Schritt brauchen wir die Neodym Magnete. Ziehe einen nach dem anderen vom Stapel und lege sie immer mit der gleichen Seite (dem gleichen Pol) nach oben auf den Tisch.
Du benötigst 6 Magnete und 6 Schiffchen (Tischtennisbälle).
Nimm jeweils mit einem Stück Klebeband einen Magnet auf und klebe ihn in einen Tischtennisball.
Präpariere die Angriffsstäbe
Die Holzstäbe rüstest du an einem Ende auch mit jeweils einem Neodym Magnet aus.
So sehen die Schiffe und Angriffsstäbe der beiden Spieler aus, wenn sie fertig sind.
Teste die Spielelemente!
Tipp: Du kannst jetzt schon losspielen. Die folgende Erweiterung durch das Arduino Board ist zwar sehr interessant, aber nicht zwingend nötig.
Bereite die Spielsteuerung vor
Die Schaltung auf einem Breadboard zusammenstecken
Stecke folgende Schaltung zusammen:
- Stecke ein Kabel vom GND-Pin des Arduino zu der blauen „Minus-Leiste“ des Breadboards
- Den Piezo-Lautsprecher verbindest du durch Kabel mit dem Pin 8 des Arduino und mit der blauen „Minus-Leiste“ auf dem Breadboard
- Die „Plus-Beinchen“ der roten LEDs verbindest du mit dem Pin 10 des Arduino. Die „Minus-Beinchen“ verbindest du durch deinen 220 Ohm Widerstand mit der „Minus-Leiste“ des Breadboards.
- Die grünen LEDs nutzen den Pin 11 des Arduinos und auch einen 220 Ohm Widerstand
Tipp: Bei Parallel-Schaltungen wie hier kannst du eine beliebige Anzahl an LEDs pro Farbe benutzen. Mehr dazu erfährst du hier.
Einfacher wird es, wenn du jeweils nur eine LED nutzt. Mit jeder zusätzlichen LED steigt der Arbeitsaufwand der folgenden Schritte!
7Programmiere die Spiellogik
Schließe nun das Arduino per USB an deinen Computer an.
Starte dann die Arduino-Software.
Wichtig: Kopiere den gesamten folgenden Code aus der Anleitung und ersetze den vorhandenen Code in deinem Arduino-Fenster. Danach nutze den Hochladen-Button, um den Code auf das Arduino zu laden. Jetzt wird es spannend…
// Die folgenden Zeilen stellen die Definitionen der Tonhöhen und Tonfrequenzen zur Verfügung #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978 int RundenZeit; // Legt eine Variable für die Rundendauer an void setup() { RundenZeit=5000; // Legt die Rundendauer auf 5 Sekunden fest. Verändere diesen Wert, wie du willst pinMode(8, OUTPUT); // Definiert den Pin 8 als Ausgabe-Pin, um den Lautsprecher steuern zu können pinMode(10, OUTPUT); // Definiert den Pin 10 als Ausgabe-Pin, um die roten LEDs steuern zu können pinMode(11, OUTPUT); // Definiert den Pin 11 als Ausgabe-Pin, um die grünen LEDs steuern zu können } void loop() { // Spieler "Rot" ist an der Reihe: digitalWrite(10,HIGH); // Schickt Strom durch Pin 10 zu den roten LEDs digitalWrite(11,LOW); // Stoppt den Stromfluss durch Pin 11 zu den grünen LEDs delay(RundenZeit); // Für die Dauer einer Runde verändert sich nichts, die roten LEDs leuchten, die Grünen nicht // Melodie, die den Rundenwechsel andeutet, erklingt: tone(8, NOTE_C2, 1000/4); // Start des Rundenwechsels: Der erste Ton der Melodie ertönt. In dem Fall eine Viertelnote der Tonhöhe C (in der zweiten Oktave) delay(400); // Erzeugt eine Pause vor dem nächsten Ton tone(8, NOTE_E2, 1000/4); // Der zweite Ton der Melodie ertönt. In dem Fall eine Viertelnote der Tonhöhe E (in der zweiten Oktave) delay(400); // Erzeugt eine Pause vor dem nächsten Ton tone(8, NOTE_G2, 1000/4); // Der dritte Ton der Melodie ertönt. In dem Fall eine Viertelnote der Tonhöhe G (in der zweiten Oktave) // Spieler "Grün" ist an der Reihe: digitalWrite(10,LOW); // Stoppt den Stromfluss durch Pin 10 zu den roten LEDs digitalWrite(11,HIGH); // Schickt Strom durch Pin 11 zu den grünen LEDs delay(RundenZeit); // Für die Dauer einer Runde verändert sich nichts, nun leuchten die grünen LEDs, die Roten nicht // Melodie, die den Rundenwechsel andeutet, erklingt: tone(8, NOTE_C2, 1000/4); // Start des Rundenwechsels: Der erste Ton der Melodie ertönt. In dem Fall eine Viertelnote der Tonhöhe C (in der zweiten Oktave) delay(400); // Erzeugt eine Pause vor dem nächsten Ton tone(8, NOTE_E2, 1000/4); // Der zweite Ton der Melodie ertönt. In dem Fall eine Viertelnote der Tonhöhe E (in der zweiten Oktave) delay(400); // Erzeugt eine Pause vor dem nächsten Ton tone(8, NOTE_G2, 1000/4); // Der dritte Ton der Melodie ertönt. In dem Fall eine Viertelnote der Tonhöhe G (in der zweiten Oktave) // Ab hier wird die Loop-Funktion wieder von oben abgearbeitet: Spieler „Rot" ist an der Reihe }
- Markiere den kompletten Code und kopiere ihn. (Rechtsklick auf die Markierung und "kopieren" oder "copy" auswählen.)
- Gehe nun in dein Arduino-Fenster und lösche den dort vorhandenen Code.
- Klicke dann mit der rechten Maustaste in die weiße Fläche.
- Wähle "einfügen".
- Achte darauf, die "}"-Klammer am Ende des Codes mit zu kopieren.
- Vergiss nicht, den Code mit dem "Hochladen"-Button auf das Arduino zu laden, um die Programmierung testen zu können.
Wenn alles klappt, sollte es so aussehen
Spieler „Rot“ und Spieler „Grün“ sind abwechselnd an der Reihe. Bei Spielerwechsel ertönt eine Melodie.
Der Sound funktioniert, aber die LEDs leuchten nicht?
Falls hin und wieder eine Melodie ertönt, aber die LEDs nicht abwechselnd leuchten, hast du auf dem Breadboard einen Fehler. Überprüfe dann die jeweiligen Stromkreise der LEDs, die nicht funktionieren, und ob sie die LEDs 10 und 11 nutzen. Tipp: LEDs müssen mit dem kürzeren Beinchen zu Minus, also zu dem GND Pin zeigen.
Die LEDs leuchten, aber der Sound ist nicht zu hören?
Falls die LEDs abwechselnd leuchten, wie bei uns, aber die Melodie nicht ertönt, ist der Piezo Lautsprecher nicht korrekt angeschlossen. Überprüfe dessen Stromkreis und die Verbindung mit den korrekten Arduino-Pins (Pin 8 und GND).
Nichts funktioniert?
Wenn weder die LEDs leuchten, noch eine Melodie abgespielt wird, überprüfe, ob der Code überhaupt auf das Arduino geladen wurde. Das erkennst du an dem Balken unter dem Code. Welche Nachricht siehst du?
„Hochladen abgeschlossen“ (Balken türkis)
Der Code ist auf dem Arduino Board. Wenn trotzdem nichts funktioniert, hast du in der Schaltung auf dem Breadboard einen Fehler. Vielleicht sind die Stromkreise der LEDs und des Lautsprechers nicht mit dem GND Pin des Arduinos verbunden?
„Probleme beim Hochladen auf die Platine“ (Balken orange)
Der Upload funktioniert nicht, weil die Verbindung zum Arduino Board nicht funktioniert. Tipp: Manchmal hilft es, das USB-Kabel aus- und wieder einzustecken. Ansonsten, lese hier nach, wie du die Verbindung korrekt einrichtest.
Sonstige (unverständliche) Nachricht (Balken orange)
Wenn mehr oder weniger unverständliche Begriffe im orangenen Balken stehen, hast du einen Fehler im Code. Überprüfe, ob dein Code genau dem Code aus der Anleitung entspricht. Oft vergisst man, am Ende die „}“ Klammer mit zu kopieren
Baue die Elektronik ein
Die Elektronik vorbereiten
Bereite folgende Elemente, wie im Bild, vor
- Die LEDs, die du nutzen möchtest, in zwei Farben
- Jeweils kurze, rote und schwarze Kabel, um die LEDs zu einer Kette zu verlöten. Kabellänge etwa halb so lang wie das Spielfeld breit ist
- Jeweils lange, schwarze und rote Kabel, um die LED-Ketten mit dem Arduino zu verbinden. Kabellänge mindestens halb so lang wie das Spielfeld lang ist
- Ein Piezo-Lautsprecher
- Die beiden Widerstände (Farbcode: rot, rot, braun, gold)
Bereite die LED-Kette vor
Verknüpfe die langen Beinchen der LEDs mit roten Kabeln und die kurzen Beinchen der LEDs mit schwarzen Kabeln. Knicke dazu die Beinchen der LED und die Kabelenden so um, dass sie nicht mehr auseinanderfallen können.
Verbinde auch schon die langen Kabel mit einem Ende deiner LED-Kette.
Tipp: Wenn du flexiblen Litzendraht verwendest, kannst du die Kabelenden mit den umgeknickten Beinchen der LED verzwirbeln, also verdrehen.
Löte die Verbindungen der LED-Kette
Verlöte alle Verbindungen mit genug Lötzinn, so dass du am Ende eine stabile LED-Kette hast.
Verfahre mit den anderen LEDs genauso!
Baue die Elektronik ein
LED-Ketten ankleben
Klebe jeweils eine LED-Kette mit Klebeband an eine der beiden Seiten der Spielfläche.
Die langen Kabel der LED-Ketten müssen auf einer Seite in der Mitte des Spielfelds zusammenkommen. An diese Stelle wird das Arduino angebracht.
Widerstände anlöten
An die beiden roten Drähte der LED-Ketten löten wir nun noch einen Widerstand (220 Ohm). Schiebe vorher Schrumpfschlauch auf die Drähte, dann kannst du die Lötstellen danach professionell isolieren.
Der Piezo-Lautsprecher benötigt keinen Widerstand.
Tipp: Die Widerstände kannst du, wie in unserem Beispiel, an das rote Kabel oder, wie auf dem Breadboard, an das schwarze Kabel löten.
Löte die Pin-Stifte an
Da der Piezo-Lautsprecher mit flexiblem Litzenkabel ausgestattet ist, löten wir an diese Kabel Pin-Stifte für die Arduino-Pins.
Tipp: Wenn du weitere flexible Litzenkabel nutzt, löte auch an diese Kabel Pin-Stifte. Die Widerstände kann man einfach in die Arduino-Pins stecken, wenn man die Beinchen auf etwa 1 cm kürzt.
Das Arduino anschließen
Nun sollte alles vorbereitet sein. Das Arduino wird wie folgt angeschlossen:
· Alle drei schwarze Kabel werden in jeweils einen der drei GND Pins gesteckt
· Die beiden roten Kabel der zwei LED-Ketten (die mit den Widerständen) kommen in Pin 10 und 11
· Das rote Kabel des Piezo-Lautsprecher kommt in Pin 8
Klebe sowohl das Arduino als auch den 9-Volt-Batterie-Block an den Spielautomaten. Wir haben dafür zusammengerolltes Klebeband benutzt. Besser ist beidseitiges Klebeband.
Verbinde alle Kabel und den 9-Volt-Batterie-Block mit dem Arduino. Nun sollte sowohl der Lautsprecher als auch die LED wieder funktionieren. Zeit für den ersten Test.
Teste deinen Spielautomaten
Tipp: Gehe nach draußen für den ersten Test, es könnte etwas nass werden.
Fülle das Becken mit Wasser und prüfe, ob alles dicht ist. Der Wasserspiegel sollte nur ein wenig höher als die Höhe der Boote sein.
Lege die Boote ins Wasser. Versuche die Boote von unten mit dem Magneten an den Angriffsstäben zu versenken. Die Magnetkraft sollte die Boote unter Wasser ziehen.
Außerdem sollten natürlich die LEDs abwechselnd leuchten und bei Rundenwechseln eine Melodie ertönen.
Wenn die Magnetkraft der Angriffsstäbe nicht ausreicht, klebe einen zweiten Magneten an die Stäbe. Außerdem hilft es, die Schiffchen etwas flacher zu machen und weniger Wasser einzufüllen.
Wenn sich die Schiffe gegenseitig anziehen, dann kleben die Magnete nicht alle mit dem gleichen Pol nach oben in den Schiffen.
Wenn einzelne LEDs nicht leuchten, musst du die Lötstellen dieser LEDs prüfen.
Wenn eine ganze LED-Kette nicht funktioniert, steckt sie entweder nicht im richtigen Pin oder die Lötstelle am Widerstand oder an der ersten LED der Kette ist defekt.
Wenn die Melodie nicht ertönt, ist der Lautsprecher nicht korrekt angeschlossen.
Der Feinschliff
Wir haben unseren Automaten komplett mit schwarzem Klebeband beklebt. Du kannst ihn aber auch anmalen.
Die beiden Seiten des Spielfelds haben wir mit Klebeband in den Farben der Spieler markiert.
Deine Melodie klingt erst richtig gut, wenn du einen richtigen Lautsprecher nutzt. Das ist auch nicht schwer, du kannst theoretisch jeden Lautsprecher genauso anschließen wie den Piezo- Lautsprecher. Solche Lautsprecher kannst du aus verschiedenen alten Elektrogeräten ausbauen.
Wir haben für unser Projekt einen Lautsprecher verwendet, den wir in einem alten Computer gefunden haben!
Werde kreativ
Wie du das Spiel spielst, ist dir überlassen. Wer muss welche Schiffe versenken? Was ist, wenn man ein eigenes Schiff versenkt? Was passiert, wenn man ein Schiff versenkt, während der andere Spieler an der Reihe war? Denke dir verschiedene Regeln aus und probiere es mit deinen Freunden. Du kannst auch weitere Schiffe bauen oder sogar eine dritte Farbe einführen.
Tipp: Im Code gibt es die Zeile „RundenZeit=5000;“. Wenn du für 5000 einen anderen Wert eingibst, und den Code neu auf das Arduino lädst, veränderst du die Rundendauer. 5000 bedeutet 5000 Millisekunden, also 5 Sekunden.
Du kannst auch, so wie dieser Spielautomat, weitere Elemente erfinden. Hier ein Sichtschutz, damit man die Schiffe des Gegners nicht mehr sehen kann.