Weihnachtsprojekt: Verteiltes Glockenspiel mit mehreren Calliope Mini

Ein – oder besser mehrere – Calliope mini sorgen mit Aluminiumrohren und einer ausgefeilten Programmierung für weihnachtliche Musik im Wohnzimmer.

In Pocket speichern vorlesen Druckansicht 19 Kommentare lesen
Verschiedene Ansichten der Christbaumanhänger mit Calliope
Lesezeit: 17 Min.
Von
  • Bernd Heisterkamp
Inhaltsverzeichnis

Zu Weihnachten gehört festliche Musik wie Lebkuchen, Mandarinenteller und Geschenke. Wer sich lieber nicht mit der Blockflöte vor den Tannenbaum stellen, aber gerne etwas selbst machen möchte, sollte unser Glockenspiel mit dem Mikrocontroller Calliope mini bauen.

Die Christbaumanhänger machen Musik, indem sie Klöppel gegen Aluminiumrohre schlagen. Jeder Anhänger hat dabei zwei unterschiedlich lange Rohre und kann somit zwei unterschiedliche Töne erzeugen. Durch Variation der Rohrlängen der Anhänger kann die ganze Tonleiter abgedeckt werden. Ein beliebiger Calliope versendet die Tonfolge im Takt der Musik per Bluetooth, die alle anderen empfangen. Nur die Calliopes, die den aktuellen Ton als ihren eigenen erkennen, spielen diesen dann über den Klöppelschlag ab. Je mehr Calliopes beteiligt sind, desto schöner kann die Melodie über den ganzen Weihnachtsbaum verteilt werden.

Dieses Projekt richtet sich an Lehrkräfte oder Eltern, die einer Gruppe von Kindern das Programmieren näher bringen möchten. Neben dem Programmieren von Mikrocontroller und Servo gilt es, mit der Laubsäge zu arbeiten und etwas über Musik zu lernen. Beginnend mit einem einfachen Programm werden zunehmend komplexere Funktionen verwendet, von Schleifen über Arrays bis hin zu Funktionen und Text-String-Analyse, was etwas Erfahrung mit der PXT-Blocksprache bedarf.

Mehr Infos

Kurzinfo

Material pro Anhänger

  • ein Calliope mini
  • ein Servo
  • Batteriefach mit 2× AA-Batterien
  • Aluminiumrohr (Ø 14,8 mm, 1 mm Wandstärke), Länge je nach gewünschten Tonhöhen
  • Sperrholz (3 mm dick)
  • ein Holzstab (90 mm lang)
  • eine M5-Schraube (60 mm lang, flacher Kopf)
  • zwei Schrauben mit Unterlegscheiben und Muttern
  • Schrumpfschlauch (mind. 30 mm)
  • Kabelbinder
  • etwas Schnur, möglichst transparent

Checkliste:

  • Zeitaufwand: 1 bis 2 Stunden für den Zusammenbau
  • Kosten: 50 Euro
  • Holzbearbeitung: einfache Sägearbeiten
  • Programmieren: Calliope-MakeCode-Editor

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes Video (Kaltura Inc.) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Kaltura Inc.) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

Die Anhänger werden aus 3 mm dicken Sperrholz geschnitten. Wer Zugang zu einem Lasercutter hat, kann die Sterne mit ausschneiden, bei der Arbeit mit einer Laubsäge sollten sie aufgemalt werden. Wichtig ist, die Aussparungen für den Servo und die Befestigungsschrauben des Calliope genau zu sägen, bzw. zu bohren.

Alle benötigten Teile

In die Bohrung über der langen Aussparung des Anhängers wird quer ein Holzstab von etwa 90 mm Länge eingeklebt, an diesem Holzstab werden die Klangkörbe befestigt. Einkerbungen oder kleine Bohrungen am Ende des Holzstabs dienen der Fixierung der Befestigungsschnur.

Die Aufhängung der Metallrohre

Die Klangkörper werden von einem Aluminiumrohr abgesägt, die Länge und Dicke des Rohrs beeinflusst die Tonhöhe, je kürzer das Rohr, desto höher der Ton. In der Tabelle seht ihr, welche Längen von einem 14,8 mm dicken Rohr mit 1 mm Wandstärke für die Grundtöne der Tonleiter abgeschnitten werden müssen. Wer ein anderes Metallrohr nimmt, kann die richtigen Längen ausrechnen.

Ton Frequenz Länge
e 659,255 374
d 587,33 397
c 523,251 420
h 493,883 433
a 440 458
g 391,995 486
f 349,228 514
e 329,625 529
d 293,665 561
c 261,626 594

Dazu nutze ich die Gleichung: L = √(A / f ) nach einem Instructables-Projekt. L ist die Rohrlänge und f die gewünschte Frequenz. A ist eine Konstante, die nur sehr schwierig zu berechnen ist, aber leicht gemessen werden kann. Nach Umformung kommt man auf die Gleichung A = f L2. Kennt man die Schwingungsfrequenz einer bestimmten Rohrlänge, kann man so A bestimmen. Zum Glück hat heute jeder einen Frequenzanalysator in der Hosentasche, ladet dazu eine App zur Fast Fourier Transformation (FFT) auf euer Handy (z.B. FFTWave für iOS).

Geht nun wie folgt vor:

  1. Sägt ein Rohr von 50 cm Länge ab, hängt es einer dünnen Perlonschnur auf und bringt es mit einem Stab zum Erklingen.
  2. Sobald der Klang etwas abgeklungen ist, startet die App und speichert das gemessene Spektrum (siehe Bild).
  3. Die niedrigste Frequenz sollte der Grundschwingung entsprechen, im Beispiel 495,3Hz.
  4. Berechnet A = f L², hier 495,3 Hz × (50 cm)² = 1 238 250 cm²/s
  5. Wählt den gewünschten Ton (z.B. a = 440 Hz) und berechnet die Rohrlänge gemäß L = √(A / f), also L = √(1 238 250/440) = 53 cm

Als Klöppel nehmt ihr eine M5-Schraube. Sie wird über einen Schrumpfschlauch mit dem Ruderhorn verbunden. Dazu gebt ihr einen Tropfen Alleskleber auf das Horn, stülpt ca. 30 mm Schlauch darüber und führt auf der offenen Seite die Schraube hinein. Die Schraube darf das Ruderhorn nicht berühren, sondern es müssen etwa 5 mm Abstand bleiben, dadurch kann die Schraube etwas über die Endposition des Servos hinausschwingen und das Rohr ganz kurz antippen. Den Schrumpfschlauch mit Haar- oder Heißluftfön bearbeiten, bis er das Gewinde der Schraube und das Ruderhorn so stark einquetscht, dass diese nicht mehr rausrutschen können. Der Schrumpfschlauch hat sich als optimal herausgestellt, da er genügend Stabilität bietet, die Schraube über den Servo zu bewegen, aber gleichzeitig ein Schwingen der Schraube ermöglicht.

Der fertige Klöppel

Der Servo wird mit einem Kabelbinder auf dem Holzanhänger befestigt. Wenn ihr nicht löten möchtet, kauft ihr am Besten einen Servo mit Grove-Stecker, der direkt an den Calliope gesteckt wird.

Servo und Klöppel

Ansonsten müsst ihr den Stecker separat kaufen und anlöten. Dabei müsst ihr auf die richtige Verkabelung achten. Das Servokabel hat drei Adern: braun oder schwarz, rot und gelb oder weiß. In der Grafik seht ihr, wie der Servo an die Grove -Steckerbuchse A1 (sie befindet sich über dem Button B) angeschlossen werden muss. Anschließend die Lötstellen mit Schrumpfschlauch isolieren, ansonsten gibt es einen Kurzschluss.

Servo-Anschlüsse für den Grove-Stecker

Zuerst soll der Calliope so programmiert werden, dass sich der Klöppel beim Drücken des Knopfes A kurz nach vorne und direkt wieder in die Mitte bewegt. Beim Drücken von B er nach hinten und ebenfalls wieder in die Mittelposition gefahren. So könnt ihr probieren, ob der Klöppel die Rohre sauber anschlägt.

Konzert 1

Den Befehl Wenn Knopf A gedrückt findet ihr im Menü "Eingabe". Alle Aktionen, die in der Klammer dieses Befehls stehen, werden beim Drücken des Knopfes ein Mal ausgeführt. Als Erstes soll der Servo in eine neue Position fahren, dazu braucht ihr den Befehl Schreibe Servo an Pin … auf … aus dem Menü "Fortgeschritten -> Pins". Voreingestellt ist P1, stattdessen müsst ihr C17 auswählen, da ihr an diesem Pin das gelbe oder weiße Kabel des Servos befestigt habt. Als Zielwert nehmt ihr zunächst 75, was eine Änderung von 15 Grad aus der Mittelposition 90 bedeutet. Mit dem Befehl Pausiere (ms) 100 gebt ihr dem Servo Zeit, um die Position anzufahren, bevor ihr ihn mit Schreibe Servo an Pin C17 auf 90 wieder in die Mitte bewegt. Für Wenn Knopf B gedrückt werden die Programmierbefehle wiederholt – allerdings soll der Servo in die andere Richtung fahren, daher wird als Zielwert 112 vorgegeben.

Nun könnt ihr das Programm auf den Calliope übertragen und die Batterieversorgung anschließen. Der USB-Anschluss alleine reicht nicht für Stromversorgung des Servos. Variiert zur Überprüfung die Werte, die ihr dem Servo vorgebt (im Beispiel 75 und 112) bis der Klöppel bis kurz vor die Klangrohre fährt, diese aber nicht berührt. Sonst würde der Ton nach dem Anschlagen direkt wieder gedämpft. Die Pausendauer muss so angepasst werden, dass der Servo die maximale Position auch erreicht, bevor er den Befehl zum Zurückfahren erhält.

Habt ihr alles richtig eingestellt, könnt mit dem Calliope durch Drücken der Knöpfe A und B zwei unterschiedliche Töne erzeugen. In Schulklassen eine gute Gelegenheit, um gemeinsam eine kleine Melodie auszuprobieren, denn jeder Calliope sollte zwei andere Töne erzeugen.

Es wäre allerdings unpraktisch, wenn die ganze Gruppe am Weihnachtsbaum stehen und die Knöpfe im richtigen Takt drücken müsste. Daher ist jetzt das Ziel, die Noten über die Bluetooth-Schnittstelle kabellos zu übertragen. Die Melodie wird dazu in einer Liste gespeichert, in der Programmierung ist dies ein Array. Ihr findet die Funktion im Fortgeschritten-Menü des Calliope Editors unter "Arrays".

Erstellt zunächst eine Variable mit dem Namen MeineMelodie (Menü "Variablen -> Neue Variable anlegen"). Dieser weist ihr mit den Befehlen Ändere Wert auf MeineMelodie und Erstelle Array mit … ein noch leeres Array zu. Über das blaue Setup-Symbol im Befehl Erstelle Array mit … kann die Anzahl der Listenelemente geändert werden. Zieht einfach so viele Elemente in das Array wie euer Lied Noten hat. In die Elemente schreibt ihr eure Melodie von oben nach unten. Die Ziffern neben den Noten beschreiben die Oktave. Im Beispiel sind alle aus der gleichen Oktave. Wenn ihr ein Lied über mehrere Oktaven habt, müsst ihr die Ziffern entsprechend anpassen (C1, C2 ,… usw.).

Konzert 2: Melodie senden

Mit einer Für Index von 0 bis 4 Programmierschleife (siehe Menü "Schleifen") soll nacheinander jedes Element des Arrays ausgelesen werden. Die Voreinstellung 4 wird mit der Variablen Array-Länge» (Menü "Arrays") ersetzt, die automatisch die Anzahl der Listenelemente speichert. Da der Index bei 0 und nicht bei 1 beginnt, muss für die Anzahl der Schleifendurchläufe noch 1 subtrahiert werden. Das geht mit dem 0 – 0 Befehl im Menü "Mathematik". Die erste Null wird mit der Variablen Array-Länge (MeineMelodie) und die zweite Null durch eine 1 ersetzt.

Calliope mini

Der Mikrocontroller Calliope mini wurde in Deutschland entwickelt und soll bereits in der Grundschule Programmierkenntnisse vermitteln.

Alle Befehle, die in der grünen Klammer der Schleife stehen, werden nun genauso häufig ausgeführt wie die empfangene Melodie Noten hat. Bei jedem Durchlauf wird die Variable Index um 1 erhöht und es somit möglich, ein weiteres Element aus der Liste auszulesen. Dazu braucht ihr den Befehl Liste rufe den Wert ab bei 0 aus dem Menü "Arrays". Anstelle des Wertes Liste wählt ihr die Variable MeineMelodie und statt der Null setzt ihr die Variable Index ein. Mit ändere AktuelleNote auf … wird der zuvor bezogene Listenwert der Variable AktuelleNote zugewiesen.

Wählt den Befehl Sende Zeichenfolge im Menü Funk und wählt die Variable AktuelleNote um genau diesen Wert per Bluetooth in die Welt zu senden. Das Senden der nächsten Note soll um die Taktzeit verzögert werden. Hierfür nutzt ihr den Befehl pausiere (ms) Takt und setzt als Wert 500 ein. Dies sorgt für eine Unterbrechung von einer halben Sekunde bevor die nächste Note aus dem Array versendet wird. Damit später klar, ist wer zu eurer Gruppe gehört und somit die Noten empfangen soll, muss in der Beim Start Anweisung eine Gruppe mit dem Befehl Setze Gruppe 0 definiert werden (Menü "Funk" "mehr").

Die unterschiedlichen Calliopes sollen die versendeten Noten mithören, prüfen ob sie selbst die empfangenen Noten spielen können und dies gegebenenfalls auch tun. Hierzu müsst ihr zunächst definieren, welche Noten euer Calliope spielen kann. Definiert zwei Variablen MeineNote1 und MeineNote2 und weist ihnen mit der Anweisung Ändere MeineNote1 auf … (Menü "Variablen") sowohl für Note 1 als auch für Note 2 die Tonhöhen zu, die ihr mit den Klangrohren erzeugen könnt. Damit ihr später seht, auf welche Noten euer Calliope eingestellt ist, solltet ihr sie im Startmenü mit dem Befehl Zeige Zeichenfolge kurz anzeigen.

Konzert 2: Melodie empfangen

Der Befehl Wenn Datenpaket empfangen receivedString aus dem Menü "Funk" speichert die empfangene Zeichenfolge in der Variablen receivedString. Benennt diese Variable in AkutelleNote durch klicken auf receivedString um, das macht den Programmtext leichter verständlich.

Nun braucht ihr die Funktion Wenn wahr dann … Funktion (Menü "Logik") um zu überprüfen, ob es sich bei der empfangenen Note um eine handelt, die euer Calliope spielen kann. Ebenfalls im Menü "Logik" befindet sich der Operator 0 = 0. Ersetzt die erste Null mit AkutelleNote und die zweite Null mit MeineNote1. Es wird also geprüft, ob die empfangene Note der ersten Note eures Calliopes entspricht. Die Befehle in der grünen Klammer entsprechen nun denen aus Konzert Nummer 1, wenn der Knopf A gedrückt wurde. Den Wenn wahr dann … Befehl müsst ihr noch für die zweite Note wiederholen und anpassen. Jetzt könnt ihr die beiden Programmteile Senden und Empfangen in einem Programm kombinieren. Somit kann jeder Calliope sowohl als Sender als auch als Empfänger eingesetzt werden.

Noch kann der Calliope, der die Noten versendet, seine eigenen Klangröhren allerdings nicht ertönen lassen sollte. Die Erweiterung ist sehr einfach. Nachdem der Calliope eine Note versendet hat, soll er einfach prüfen, ob er selbst die Note spielen kann. Dazu wird der wenn (AktuelleNote = MeineNote1) dann … Befehl aus dem vorgehenden Beispiel wiederholt und hinter den Befehl Sende Zeichenfolge AktuelleNote gestellt und zwar einmal für MeineNote1 und nochmal für MeineNote2. Jetzt kann auch der Dirigent mit musizieren.

Konzert 3: Melodie senden und empfangen, mit Funktionen

Allerdings wiederholen Programmierer nicht gerne Programmcode. Kleine Änderungen müssen ansonsten an mehreren Programmstellen eingearbeitet werden, was mühsam und fehlerträchtig ist. Abhilfe schafft die Verwendung von Funktionen (Menü "Fortgeschritten" "Funktionen"). Der Programmteil, der sich wiederholt, wird in die blaue Klammer der Funktion verschoben und dieser ein Name gegeben. Am Besten einer, der auf die Aufgabe der Funktion schließen lässt. In diesem Beispiel bietet es sich an, die Funktionen SpieleNote1 und SpieleNote2 zu definieren. Sie enthalten die Befehle für die Servosteuerung.

Sollen nicht nur ganze Noten, sondern auch Halb-, Viertel- und Achtelnoten in der Melodie verwendet werden, muss die Notenlänge zusammen mit der Tonhöhe im Array gespeichert werden. Dazu werden vor der Tonhöhe die Werte g (ganze), h (halbe), v (viertel) oder a (achtel) ergänzt. Eine Achtelnote D der zweiten Oktave wird somit zu aD2. Der erste Buchstabe der Note bestimmt die Pausenzeit bis die nächste Note gespielt wird.

Definiert drei neue Variablen: Notenlaenge, Ton und Takt. Der Variablen Takt weist ihr in der Startklammer einen fixen Wert zu, beispielsweise 1000 ms. Der Variablen Notenlaenge weist ihr mit dem Befehl Extrahiere aus … beginnend mit … (Menü "Fortgeschritten" "Text") den ersten Buchstaben des in AktuelleNoteEmpfangen gespeicherten Texts zu. Dazu müsst ihr die Werte von Position 0 bis 1 auswählen. Mit Ändere Notenlaenge auf / Extrahiere aus AktuelleNoteEmpfangen von 0 bis 1 wird also die Information g,h,v oder a in Notenlaenge gespeichert. Der Ton, beispielsweise D1, wird mit dem gleichen Befehl und den Positionen 1 bis 3 gespeichert.

Für die Einhaltung der Pause definiert ihr noch die Funktion Taktpause. Nutzt die Wenn … dann … sonst wenn… Funktion (Menü "Logik") um die Variable Notenlaenge mit g,h,v und a zu vergleichen. Dazu müsst ihr im Setup der Funktion (blaues Icon) weitere else if Optionen in die Funktion ziehen. Den Wert in der Variablen Notenlaenge vergleicht ihr nach nacheinander mit den möglichen Tonlängen. Ist die richtige Tonlänge gefunden, wird der Pausenbefehl ausgeführt. Die Länge der Pause entspricht entweder dem Takt (Länge g), dem Takt ÷ 2 (h), dem Takt ÷ 4 (v) oder dem Takt geteilt durch 8 (a). Der Teilen-Befehl befindet sich im "Mathematik" Menü.

Konzert 3 mit alben, Viertel- und Achtel-Noten. Aus Gründen der Übersichtlichkeit wurde dem Calliope-Dirigenten das Instrument weggenommen. Der Calliope, der eine Melodie sendet, spielt selbst keinen Ton. Aber das kann natürlich leicht geändert werden.

Ein Weihnachtsbaumanhänger sollte auch schön leuchten. Folgende Funktionen sollen zum Schluss noch programmiert werden:

  1. Jedes Mal, wenn eine Note empfangen wird, soll die bunte LED des Calliope in einer zufällig ausgewählten Farbe leuchten.
  2. Die LED-Matrix soll einen mit zwei Bildern animierten Stern anzeigen.

Konzert 5: RGB-LED beleuchten

Erstellt für den Farbwechsel eine eigene Funktion und nennt sie ZeigeZufaelligeFarbe und erstellt eine neue Variable mit dem Namen Farbe. Dieser Variablen wird mit Befehl Wähle eine zufällige Zahl zwischen 0 und 4 (Menü "Mathematik") ein Zufallswert zugewiesen. Mit Wenn … dann … sonst wenn… Funktion wird die Variable mit den fünf möglichen Werten verglichen und die LED, je nach Zahlenwert, mit dem Befehl setze LED-Farbe auf … (Menü "Grundlagen") auf eine andere Farbe eingestellt. Die Funktion wird auch im Programmteil wenn Knopf A gedrückt vor der Taktpause aufgerufen.

Konzert 5: LED-Matrix animieren

Für die Animation auf der LED-Matrix erstellt ihr eine weitere Variable namens Animation. Dieser Variable weist ihr den Befehl erstelle großes Bild (Menü "Fortgeschritten" -> "Bilder") zu. Zeichnet in den ersten fünf Spalten den ersten Teil der Sternanimation und in den hinteren fünf Spalten den zweiten Teil. Aufgerufen wird die Animation über den Befehl scrolle Bild Animation mit Offset … und Intervall … (ms). Der Offset bestimmt, um wie viele Spalten das Bild bei der wiederholten Anzeige verschoben wird. Bei 1 würden die Bildanimationen wie ein Lauftext nach links scrollen. Stellt den Wert auf 5, so sieht man erst das eine, dann das andere Bild. Die Blinkfrequenz wird über den Intervallwert eingestellt. Da diese Animation dauerhaft laufen soll, also auch wenn keine Melodie gespielt wird, wird der Befehl in der Schleife dauerhaft eingebettet.

Das war's, euer Weihnachtsbaumanhänger ist fertig. Viel Erfolg beim Nachbauen!

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes Video (Kaltura Inc.) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Kaltura Inc.) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

  • Hier gibt es alle Dateien zum Download , inklusive der Plot-Vorlagen und Hex-Dateien für den Calliope sowie eine Version für den britischen BBC micro:bit.