Kurze Einführung zum Calliope

Der Calliope mini ist ein Mikrocontroller, der in Deutschland auf Basis des BBC micro:bit entwickelt wurde. Er bringt einige Sensoren und Aktoren mit und eröffnet damit einen einfachen Einstieg in die Welt des Physical Computing, der schon Grundschulkinder begeistert. Die Möglichkeiten des Calliope reichen aber so weit, dass man auch in der Oberstufe noch spannende Projekte mit dem Calliope durchführen kann. Dieses Skript soll dir dabei helfen, einen Einstieg in die Welt des Physical Computing mit Hilfe des Calliope zu finden und darüber hinaus grundlegende Konzepte der Informatik kennen zu lernen. Wenn du Spaß daran gefunden hast, wirst du dich vielleicht auch für den Arduino interessieren, der auf den gleichen Grundlagen beruht, aber noch weit mehr Möglichkeiten bietet.

In diesem Kapitel lernst du...

  • ... wie der Calliope aufgebaut ist und welche Sensoren und Aktoren zur Verfügung stehen,
  • ... wie man den Calliope mit dem Open Roberta Lab programmiert.

Die Entwicklungsumgebung

Der Calliope lässt sich mit verschiedenen Entwicklungsumgebungen oder Editoren programmieren. In diesem Skript werden drei Entwicklungsumgebungen vorgestellt: Makecode, Open Roberta Lab und Python Editor.

Die Entwicklungsumgebung für Python lässt sich nur mit dem Calliope v3 nutzen.

Entwicklungsumgebung öffnen und abspeichern

  1. Öffne den Link zu der von euch im Unterricht verwendeten Entwicklungsumgebung. Die Seite stellt eine Übersicht zu den verschiedenen Funktionen der Entwicklungsumgebung bereit. Speichere den Link zu dieser Seite für den späteren Zugriff.
  2. Klicke auf der Übersichtsseite ganz oben auf "Editor starten". Mache dich mit der Entwicklungsumgebung vertraut. (Sie wird dir auch im Unterricht vorgestellt.)

Deine ersten Programme

Test der Funktionsweise

calliope-erstes-programm-makecode

calliope-erstes-programm

# Imports go at the top
from calliopemini import *
import neopixel
import music
np = neopixel.NeoPixel(pin_RGB, 3)

display.show(3)  # Zahl 3 auf der LED-Marix anzeigen

np.fill((255,0,0)) # füllt alle RGB-LED mit der Farbe rot
np.show()

sleep(1000)  # 1000 ms, also 1 Sek. warten

display.show(2)  # Zahl 2 auf der LED-Marix anzeigen

np.fill((255,255,0)) # füllt alle RGB-LED mit der Farbe gelb
np.show()

sleep(1000)  # 1000 ms, also 1 Sek. warten

display.show(1)  # Zahl 1 auf der LED-Marix anzeigen

np.fill((0,255,0)) # füllt alle RGB-LED mit der Farbe grün
np.show()

sleep(1000)  # 1000 ms, also 1 Sek. warten

display.scroll('hi!')  # lässt Text über das Display laufen

music.play(['c'])  # spielt die Note C
  1. Erstelle dein erstes Programm für den Calliope. Du kannst das oben abgebildete Programm nachbauen oder selbst ein eigenes Programm entwerfen.
  2. Übertrage das Programm auf den Calliope.
  3. Schaue dir an, wie das Programm auf dem Calliope aussieht.
  4. Speichere das Programm auf dem Computer an einem sinnvollen Ort.
Zusammenfassung: Algorithmus, Anweisung und Argument

Algorithmus, Anweisung und Argument

Ein Programm besteht aus einer Folge von Anweisungen. Man spricht auch von Algorithmen: Ein Algorithmus ist eine eindeutige Handlungsvorschrift zur Lösung eines Problems, die aus endlich vielen Anweisungen besteht (s. Wikipedia).

mc-algorithmus-anweisung-argument
Anweisungen und Argumente in einem Algorithmus.
orl-algorithmus-anweisung-argument (1)
Anweisungen und Argumente in einem Algorithmus.
# das ganze folgende Programm ist der Algorithmus

# am Anfang werden weitere Programmbausteine importiert
from calliopemini import *
import neopixel
import music
np = neopixel.NeoPixel(pin_RGB, 3)

# nun folgen mehrere Anweisungen mit Argumenten, die nacheinander ausgeführt werden
display.show(1)  # Anweisung: das Display soll die Zahl 1 zeigen. Die Zahl 1 ist das Argument

np.fill((0,255,0))  # Anweisung: RGB-LEDs mit Farbe grün füllen. Die Farbe grün ist das Argument, das als RGB-Tupel angegeben wird
np.show()           # Anweisung: Füllung zeigen (ohne Argument)

sleep(1000)  # Anweisung: warte 1000ms. Das Argument sind die 1000ms

display.scroll('hi!')  # Anweisung: Text über Display laufen lassen. Das Argument ist 'hi!'

music.play(['c'])  # Anweisung: Ton spielen. Das Argument ist das Zeichen 'c' innerhalb einer Liste [], da mehrere Noten hintereinander angegeben werden können, z. B. music.play(['c', 'd', 'e'])

Eine Anweisung kann ein oder mehrere Argumente haben, die zum Beispiel festlegen, welche Farbe oder welcher Text angezeigt werden soll oder wie lange gewartet werden soll. Je nach Anweisung ist das Argument eine Farbe, eine Zahl, ein Text oder Bild.

Ampel

  1. Programmiere eine einfache Ampel mit der RGB-LED.
  2. Verschiebe das Skript vom "Start"-Block in den "dauerhaft"-Block (oder umgekehrt) und beschreibe den Unterschied.
  1. Programmiere eine einfache Ampel mit der RGB-LED.
  2. Ergänze um das Skript für die Ampel den Block "wiederhole unendlich oft" (aus der Kategorie "Kontrolle"). Beschreibe den Unterschied zu vorher.
  1. Programmiere eine einfache Ampel mit der RGB-LED.
  2. Ergänze vor dem Skript für die Ampel eine Zeile mit while True: und rücke das Skript für die Ampel ein (alles markieren und Taste TAB drücken, vgl. Beispiel unten). Beschreibe den Unterschied zu vorher.
from calliopemini import *
import neopixel
np = neopixel.NeoPixel(pin_RGB, 3)

while True:
      # folgende eingerückten Anweisungen sind innerhalb der while-Schleife
      np.fill((255,0,0)) # füllt alle RGB-LED mit der Farbe rot
      np.show()

# folgende nicht eingerückte Anweisungen sind nicht mehr innerhalb der while-Schleife
np.fill((255,0,0)) # füllt alle RGB-LED mit der Farbe rot
np.show()
Zusammenfassung: Schleifen

Schleifen

Schleifen dienen dazu, Programmcode zu wiederholen. Es gibt unterschiedliche Arten von Schleifen, die wir im folgenden kennenlernen werden. Für den Anfang ist die Endlosschleife am wichtigsten, die den enthaltenen Code dauerhaft wiederholt. Unsere Programme werden sich zum größten Teil in einer Endlosschleife abspielen.

mc-start-dauerhaft-anmerkung

orl-start-dauerhaft-anmerkung

# die folgenden Befehle werden genau ein Mal beim Start des Programms ausgeführt
from calliopemini import *
import neopixel
np = neopixel.NeoPixel(pin_RGB, 3)

np.fill((255,0,0)) # füllt alle RGB-LED mit der Farbe rot
np.show()

while True:
      # folgende eingerückten Anweisungen werden endlos wiederholt
      np.fill((255,0,0)) # füllt alle RGB-LED mit der Farbe rot
      np.show()

# folgende nicht eingerückte Anweisungen werden nie ausgeführt, weil die obere Endlosschleife nie verlassen wird
np.fill((255,0,0)) # füllt alle RGB-LED mit der Farbe rot
np.show()

Jukebox

Programmiere ein Lied, das der Calliope abspielt. Recherchiere die Noten dazu im Internet.

Hinweise:

Zwei mögliche Beispiele von Melodien mit Link zu den Noten:

Frequenzen in Hertz zu den Noten:

\(c^1\) \(cis^1/des^1\) \(d^1\) \(dis^1/es^1\) \(e^1\) \(f^1\) \(fis^1/ges^1\) \(g^1\) \(gis^1/as^1\) \(a^1\) \(ais^1/b^1\) \(h^1\)
262 277 294 311 330 349 370 392 415 440 466 494

Aufbau des Calliope - Sensoren und Aktoren

Aufbau des Calliope

Auf der Übersichtsseite des Calliope wird dargestellt, welche Bauteile auf dem Calliope verbaut sind und wo diese zu finden sind.

Erstelle ein Foto von deinem Calliope und beschrifte dieses Foto mit den Namen der Bauteilen. Markiere die Sensoren grün und die Aktoren orange.

Zusammenfassung: Sensoren und Aktoren

Sensoren und Aktoren

Für die Eingabe von Daten werden Sensoren benötigt; für die Ausgabe hingegen Aktoren:

  • Sensoren (auch Fühler genannt) sind elektrische Bauteile, die eine physikalische Größe aus der Umwelt (Temperatur, Helligkeit, Luftdruck oder auch ein mechanischer Druck mit dem Finger) in eine elektrische Größe (Widerstand, Spannung, elektrisches Potential, Stromstärke) umwandeln. Dadurch werden die physikalischen Größen aus der Umwelt einer elektronischen Verarbeitung zugänglich.
  • Aktoren (auch Aktuatoren genannt) sind elektrische Bauteile, die eine elektrische Größe in eine mechanische (Bewegung, Schallwellen) oder andere Größe (Temperatur, Licht, …) umwandeln. Sie ermöglichen, dass die elektronische Verarbeitung zu Handlungen bzw. Konsequenzen führen kann.